{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "table",
  "title": "جدول البيانات",
  "type": "registry:component",
  "description": "بحث وترتيب وترقيم، مع حالة للنتائج الفارغة.",
  "author": "Tirazkit contributors",
  "dependencies": [
    "class-variance-authority@0.7.1",
    "clsx@2.1.1",
    "lucide-react@^1.31.0",
    "radix-ui@^1.6.7",
    "tailwind-merge@3.6.0"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/tirazkit/table.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/table.tsx",
      "content": "\"use client\";\nimport { useState } from \"react\";\nimport { ArrowUpDown, Search } from \"lucide-react\";\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"./primitives/table\";\nimport { Input } from \"./input\";\nimport { Pagination } from \"./pagination\";\nimport { useKit } from \"./theme\";\nexport function DataTable({\n  columns,\n  rows,\n  pageSize = 5,\n}: {\n  columns: { key: string; label: string }[];\n  rows: Record<string, string>[];\n  pageSize?: number;\n}) {\n  const [query, setQuery] = useState(\"\");\n  const [sort, setSort] = useState<{ key: string; ascending: boolean } | null>(\n    null,\n  );\n  const [page, setPage] = useState(1);\n  const { locale } = useKit();\n  const ar = locale === \"ar\";\n  const filtered = rows.filter((row) =>\n    columns.some((c) =>\n      String(row[c.key] || \"\")\n        .toLocaleLowerCase(locale)\n        .includes(query.trim().toLocaleLowerCase(locale)),\n    ),\n  );\n  if (sort)\n    filtered.sort(\n      (a, b) =>\n        new Intl.Collator(locale, { numeric: true }).compare(\n          a[sort.key] || \"\",\n          b[sort.key] || \"\",\n        ) * (sort.ascending ? 1 : -1),\n    );\n  const size = Math.max(1, pageSize);\n  const totalPages = Math.max(1, Math.ceil(filtered.length / size));\n  const current = Math.min(page, totalPages);\n  const shown = filtered.slice((current - 1) * size, current * size);\n  return (\n    <div className=\"tk-data-table\">\n      <div className=\"tk-table-search\">\n        <Search size={17} aria-hidden=\"true\" />\n        <Input\n          label={ar ? \"بحث في الجدول\" : \"Search table\"}\n          placeholder={ar ? \"ابحث عن طلب…\" : \"Search a request…\"}\n          value={query}\n          onChange={(e) => {\n            setQuery(e.target.value);\n            setPage(1);\n          }}\n          name=\"table-search\"\n          autoComplete=\"off\"\n        />\n      </div>\n      <Table>\n        <TableHeader>\n          <TableRow>\n            {columns.map((c) => (\n              <TableHead\n                key={c.key}\n                aria-sort={\n                  sort?.key === c.key\n                    ? sort.ascending\n                      ? \"ascending\"\n                      : \"descending\"\n                    : \"none\"\n                }\n              >\n                <button\n                  type=\"button\"\n                  className=\"tk-sort-button\"\n                  onClick={() =>\n                    setSort({\n                      key: c.key,\n                      ascending: sort?.key === c.key ? !sort.ascending : true,\n                    })\n                  }\n                >\n                  {c.label}\n                  <ArrowUpDown size={13} aria-hidden=\"true\" />\n                </button>\n              </TableHead>\n            ))}\n          </TableRow>\n        </TableHeader>\n        <TableBody>\n          {shown.map((row, i) => (\n            <TableRow key={row.id || i}>\n              {columns.map((c) => (\n                <TableCell key={c.key}>{row[c.key]}</TableCell>\n              ))}\n            </TableRow>\n          ))}\n        </TableBody>\n      </Table>\n      {!shown.length ? (\n        <p className=\"tk-empty\" role=\"status\">\n          {ar\n            ? \"لا توجد نتائج. جرّب كلمة أخرى.\"\n            : \"No results. Try another search.\"}\n        </p>\n      ) : null}\n      <div className=\"tk-table-footer\">\n        <span className=\"tk-muted\" role=\"status\">\n          {new Intl.NumberFormat(locale).format(filtered.length)}{\" \"}\n          {ar ? \"نتيجة\" : \"results\"}\n        </span>\n        <Pagination\n          page={current}\n          totalPages={totalPages}\n          onPageChange={setPage}\n        />\n      </div>\n    </div>\n  );\n}\n"
    },
    {
      "path": "components/ui/table.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/primitives/table.tsx",
      "content": "// MIT License. Copyright (c) 2023 shadcn. See LICENSE.txt.\n\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n  return (\n    <div\n      data-slot=\"table-container\"\n      className=\"relative w-full overflow-x-auto\"\n    >\n      <table\n        data-slot=\"table\"\n        className={cn(\"w-full caption-bottom text-sm\", className)}\n        {...props}\n      />\n    </div>\n  )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n  return (\n    <thead\n      data-slot=\"table-header\"\n      className={cn(\"[&_tr]:border-b\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n  return (\n    <tbody\n      data-slot=\"table-body\"\n      className={cn(\"[&_tr:last-child]:border-0\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n  return (\n    <tfoot\n      data-slot=\"table-footer\"\n      className={cn(\n        \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n  return (\n    <tr\n      data-slot=\"table-row\"\n      className={cn(\n        \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n  return (\n    <th\n      data-slot=\"table-head\"\n      className={cn(\n        \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n  return (\n    <td\n      data-slot=\"table-cell\"\n      className={cn(\n        \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableCaption({\n  className,\n  ...props\n}: React.ComponentProps<\"caption\">) {\n  return (\n    <caption\n      data-slot=\"table-caption\"\n      className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Table,\n  TableHeader,\n  TableBody,\n  TableFooter,\n  TableHead,\n  TableRow,\n  TableCell,\n  TableCaption,\n}\n"
    },
    {
      "path": "lib/utils.ts",
      "type": "registry:component",
      "target": "@components/tirazkit/utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n  return twMerge(clsx(inputs));\n}\n"
    },
    {
      "path": "registry/tirazkit/input.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/input.tsx",
      "content": "\"use client\";\nimport { useId, type ComponentProps } from \"react\";\nimport { Input as BaseInput } from \"./primitives/input\";\nimport \"./tirazkit.css\";\nexport function Input({\n  label,\n  hint,\n  error,\n  id,\n  className = \"\",\n  ...props\n}: ComponentProps<typeof BaseInput> & {\n  label: string;\n  hint?: string;\n  error?: string;\n}) {\n  const generated = useId();\n  const fieldId = id || generated;\n  return (\n    <div className={`tk-field ${className}`}>\n      <label htmlFor={fieldId} className=\"tk-label\">\n        {label}\n        {props.required ? <span aria-hidden=\"true\"> *</span> : null}\n      </label>\n      <BaseInput\n        {...props}\n        id={fieldId}\n        className=\"tk-input\"\n        aria-invalid={Boolean(error)}\n        aria-describedby={error || hint ? `${fieldId}-help` : undefined}\n      />\n      <span\n        id={`${fieldId}-help`}\n        className={error ? \"tk-field-error\" : \"tk-field-hint\"}\n        aria-live=\"polite\"\n      >\n        {error || hint}\n      </span>\n    </div>\n  );\n}\n"
    },
    {
      "path": "components/ui/input.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/primitives/input.tsx",
      "content": "// MIT License. Copyright (c) 2023 shadcn. See LICENSE.txt.\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n  return (\n    <input\n      type={type}\n      data-slot=\"input\"\n      className={cn(\n        \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n        \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n        \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Input }\n"
    },
    {
      "path": "registry/tirazkit/tirazkit.css",
      "type": "registry:file",
      "target": "@components/tirazkit/tirazkit.css",
      "content": ":root {\n  --tk-primary: #1b8354;\n  --tk-hover: #166a45;\n  --tk-pressed: #104631;\n  --tk-on-primary: #fff;\n  --tk-soft: #f3fcf6;\n  --tk-radius: 4px;\n  --tk-bg: #fff;\n  --tk-fg: #161616;\n  --tk-muted: #596472;\n  --tk-surface: #f8f9fb;\n  --tk-border: #d2d6db;\n  --tk-success: #067647;\n  --tk-success-bg: #ecfdf3;\n  --tk-warning: #935c08;\n  --tk-warning-bg: #fffaeb;\n  --tk-danger: #b42318;\n  --tk-danger-bg: #fef3f2;\n  --tk-info: #175cd3;\n  --tk-info-bg: #eff8ff;\n}\n.tk-scope {\n  --background: var(--tk-bg);\n  --foreground: var(--tk-fg);\n  --card: var(--tk-bg);\n  --card-foreground: var(--tk-fg);\n  --popover: var(--tk-bg);\n  --popover-foreground: var(--tk-fg);\n  --primary: var(--tk-primary);\n  --primary-foreground: var(--tk-on-primary);\n  --secondary: var(--tk-soft);\n  --secondary-foreground: var(--tk-fg);\n  --muted: var(--tk-surface);\n  --muted-foreground: var(--tk-muted);\n  --accent: var(--tk-soft);\n  --accent-foreground: var(--tk-fg);\n  --border: var(--tk-border);\n  --input: var(--tk-border);\n  --ring: var(--tk-primary);\n  --radius: var(--tk-radius);\n  --destructive: var(--tk-danger);\n  color: var(--tk-fg);\n  background: var(--tk-bg);\n  font-family: inherit;\n  line-height: 1.65;\n  text-align: start;\n  color-scheme: light;\n}\n.tk-scope[data-kit-mode=\"dark\"] {\n  color-scheme: dark;\n}\n.tk-scope * {\n  box-sizing: border-box;\n}\n.tk-scope :focus-visible {\n  outline: 2px solid var(--tk-primary);\n  outline-offset: 3px;\n}\n.tk-stack {\n  display: grid;\n  gap: 20px;\n}\n.tk-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n.tk-between {\n  justify-content: space-between;\n}\n.tk-muted {\n  color: var(--tk-muted);\n  font-size: 13px;\n}\n.tk-heading {\n  font-size: 24px;\n  font-weight: 600;\n  line-height: 1.5;\n}\n.tk-small {\n  font-size: 12px;\n}\n.tk-button {\n  font-family: inherit;\n  border-radius: var(--tk-radius);\n  border: 1px solid transparent;\n  font-weight: 500;\n  gap: 8px;\n  transition:\n    background-color 0.15s,\n    color 0.15s,\n    border-color 0.15s;\n  box-shadow: none;\n  cursor: pointer;\n  line-height: 1.5;\n}\n.tk-button-md {\n  min-height: 40px;\n  padding: 8px 16px;\n}\n.tk-button-sm {\n  min-height: 32px;\n  padding: 5px 12px;\n  font-size: 12px;\n}\n.tk-button-lg {\n  min-height: 48px;\n  padding: 12px 22px;\n}\n.tk-button-primary {\n  background: var(--tk-primary);\n  color: var(--tk-on-primary);\n}\n.tk-button-primary:hover {\n  background: var(--tk-hover);\n}\n.tk-button-primary:active {\n  background: var(--tk-pressed);\n}\n.tk-button-secondary {\n  background: var(--tk-soft);\n  color: var(--tk-primary);\n}\n.tk-button-secondary:hover {\n  background: color-mix(in srgb, var(--tk-soft), var(--tk-primary) 12%);\n}\n.tk-button-outline {\n  background: var(--tk-bg);\n  border-color: var(--tk-border);\n  color: var(--tk-fg);\n}\n.tk-button-outline:hover,\n.tk-button-ghost:hover {\n  background: var(--tk-surface);\n  border-color: var(--tk-border);\n}\n.tk-button-ghost {\n  background: transparent;\n  color: var(--tk-fg);\n}\n.tk-button-danger {\n  background: var(--tk-danger);\n  color: var(--tk-bg);\n}\n.tk-button-danger:hover {\n  filter: brightness(0.9);\n}\n.tk-button:disabled {\n  opacity: 0.45;\n  cursor: not-allowed;\n  pointer-events: auto;\n}\n.tk-field {\n  display: grid;\n  gap: 7px;\n  min-width: 0;\n  font-size: 13px;\n}\n.tk-label {\n  font-weight: 500;\n  display: block;\n}\n.tk-label em {\n  color: var(--tk-danger);\n  font-style: normal;\n}\n.tk-input {\n  width: 100%;\n  background: var(--tk-bg);\n  color: var(--tk-fg);\n  border: 1px solid var(--tk-border);\n  border-radius: var(--tk-radius);\n  min-height: 42px;\n  box-shadow: none;\n  padding: 10px 12px;\n  line-height: 1.5;\n  font-family: inherit;\n  font-size: 14px;\n  transition:\n    border-color 0.15s,\n    box-shadow 0.15s;\n}\n.tk-input::placeholder {\n  color: var(--tk-muted);\n}\n.tk-input:hover:not(:disabled) {\n  border-color: var(--tk-muted);\n}\n.tk-input:focus-visible {\n  border-color: var(--tk-primary);\n  outline: none;\n  box-shadow: 0 0 0 3px color-mix(in srgb, var(--tk-primary), transparent 85%);\n}\n.tk-input[aria-invalid=\"true\"] {\n  border-color: var(--tk-danger);\n}\n.tk-field-hint,\n.tk-field-error {\n  font-size: 12px;\n  line-height: 1.6;\n}\n.tk-field-hint {\n  color: var(--tk-muted);\n}\n.tk-field-error {\n  color: var(--tk-danger);\n}\n.tk-textarea {\n  resize: vertical;\n  min-height: 110px;\n}\n.tk-field-counter {\n  text-align: end;\n  color: var(--tk-muted);\n  font-size: 12px;\n}\n.tk-select-menu {\n  border-color: var(--tk-border);\n  border-radius: var(--tk-radius);\n  padding: 4px;\n}\n.tk-select-menu [data-slot=\"select-item\"] {\n  padding-inline-start: 30px;\n  padding-inline-end: 12px;\n  min-height: 38px;\n  border-radius: var(--tk-radius);\n  font-family: inherit;\n}\n.tk-select-menu [data-slot=\"select-item-indicator\"] {\n  inset-inline-start: 8px;\n  inset-inline-end: auto;\n}\n.tk-choice {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  cursor: pointer;\n  font-size: 13px;\n  color: var(--tk-fg);\n}\n.tk-choice > span {\n  display: grid;\n  gap: 2px;\n}\n.tk-choice:has(:disabled) {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n.tk-checkbox {\n  width: 19px;\n  height: 19px;\n  min-width: 19px;\n  border-color: var(--tk-border);\n  border-radius: 4px;\n  box-shadow: none;\n  background: var(--tk-bg);\n}\n.tk-checkbox[data-state=\"checked\"],\n.tk-checkbox[data-state=\"indeterminate\"] {\n  background: var(--tk-primary);\n  color: var(--tk-on-primary);\n  border-color: var(--tk-primary);\n}\n.tk-switch {\n  height: 23px;\n  width: 41px;\n  background: var(--tk-border);\n  border: 2px solid transparent;\n  box-shadow: none;\n}\n.tk-switch[data-state=\"checked\"] {\n  background: var(--tk-primary);\n}\n.tk-switch [data-slot=\"switch-thumb\"] {\n  height: 17px;\n  width: 17px;\n  background: white;\n  transform: translateX(0);\n  transition: transform 0.15s;\n}\n.tk-switch [data-slot=\"switch-thumb\"][data-state=\"checked\"] {\n  transform: translateX(17px);\n}\n.tk-badge {\n  border-radius: 4px;\n  border: 1px solid color-mix(in srgb, currentColor, transparent 82%);\n  padding: 3px 8px;\n  font-family: inherit;\n  font-size: 11px;\n  font-weight: 500;\n  line-height: 1.5;\n  white-space: nowrap;\n}\n.tk-tone-primary {\n  color: var(--tk-primary);\n  background: var(--tk-soft);\n}\n.tk-tone-success {\n  color: var(--tk-success);\n  background: var(--tk-success-bg);\n}\n.tk-tone-warning {\n  color: var(--tk-warning);\n  background: var(--tk-warning-bg);\n}\n.tk-tone-danger {\n  color: var(--tk-danger);\n  background: var(--tk-danger-bg);\n}\n.tk-tone-info {\n  color: var(--tk-info);\n  background: var(--tk-info-bg);\n}\n.tk-tone-neutral {\n  color: var(--tk-muted);\n  background: var(--tk-surface);\n}\n.tk-alert {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  border: 1px solid color-mix(in srgb, currentColor, transparent 78%);\n  border-radius: var(--tk-radius);\n  padding: 16px;\n  text-align: start;\n}\n.tk-alert > svg {\n  position: static;\n  width: 20px;\n  height: 20px;\n  flex-shrink: 0;\n  margin-top: 2px;\n  transform: none;\n  color: inherit;\n}\n.tk-alert > div {\n  min-width: 0;\n}\n.tk-alert-title {\n  color: inherit;\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 1.6;\n}\n.tk-alert-description {\n  display: block;\n  color: inherit;\n  opacity: 0.9;\n  font-size: 12px;\n  line-height: 1.8;\n  margin-top: 4px;\n}\n.tk-card {\n  background: var(--tk-bg);\n  color: var(--tk-fg);\n  border: 1px solid var(--tk-border);\n  border-radius: var(--tk-radius);\n  box-shadow: none;\n  gap: 18px;\n  padding: 22px;\n}\n.tk-card [data-slot=\"card-header\"],\n.tk-card [data-slot=\"card-content\"],\n.tk-card [data-slot=\"card-footer\"] {\n  padding: 0;\n}\n.tk-card-title {\n  font-size: 17px;\n  font-weight: 600;\n  line-height: 1.6;\n}\n.tk-card [data-slot=\"card-description\"] {\n  color: var(--tk-muted);\n  font-size: 13px;\n  line-height: 1.8;\n}\n.tk-card-footer {\n  padding-top: 16px !important;\n  border-top: 1px solid var(--tk-border);\n}\n.tk-tabs {\n  gap: 20px;\n}\n.tk-tabs-list {\n  background: transparent;\n  border-bottom: 1px solid var(--tk-border);\n  border-radius: 0;\n  width: 100%;\n  height: auto;\n  justify-content: flex-start;\n  padding: 0;\n  gap: 24px;\n}\n.tk-tab {\n  height: auto;\n  min-height: 42px;\n  flex: 0 0 auto;\n  background: transparent;\n  border: 0;\n  border-bottom: 3px solid transparent;\n  border-radius: 0;\n  padding: 8px 0;\n  color: var(--tk-muted);\n  font-family: inherit;\n  box-shadow: none !important;\n  font-size: 13px;\n}\n.tk-tab[data-state=\"active\"] {\n  background: transparent;\n  color: var(--tk-primary);\n  border-color: var(--tk-primary);\n}\n.tk-tab-content {\n  font-size: 14px;\n  line-height: 1.8;\n}\n.tk-accordion [data-slot=\"accordion-item\"] {\n  border-color: var(--tk-border);\n}\n.tk-accordion-trigger {\n  padding: 17px 0;\n  gap: 12px;\n  font-size: 14px;\n  text-align: start;\n  font-weight: 500;\n}\n.tk-accordion-content {\n  color: var(--tk-muted);\n  font-size: 13px;\n  line-height: 1.9;\n}\n.tk-dialog {\n  border: 1px solid var(--tk-border);\n  border-radius: var(--tk-radius);\n  padding: 28px;\n  gap: 14px;\n}\n.tk-dialog-close {\n  position: absolute;\n  inset-inline-end: 16px;\n  top: 14px;\n  padding: 6px;\n  cursor: pointer;\n  border-radius: 4px;\n}\n.tk-progress {\n  height: 7px;\n  background: var(--tk-border);\n  border-radius: 100px;\n}\n.tk-progress [data-slot=\"progress-indicator\"] {\n  background: var(--tk-primary);\n  transition: transform 0.25s;\n}\n.tk-progress-label {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 9px;\n  font-size: 13px;\n}\n.tk-breadcrumb {\n  font-size: 12px;\n  color: var(--tk-muted);\n}\n.tk-breadcrumb a:hover {\n  color: var(--tk-primary);\n}\n.tk-breadcrumb [aria-current] {\n  color: var(--tk-fg);\n  font-weight: 500;\n}\n.tk-pagination {\n  margin: 0;\n  width: auto;\n}\n.tk-pagination ul {\n  gap: 4px;\n}\n.tk-pagination .tk-button {\n  padding: 4px 9px;\n  min-width: 32px;\n}\n.tk-page-gap {\n  padding: 0 5px;\n  color: var(--tk-muted);\n}\n.tk-data-table {\n  width: 100%;\n  font-size: 13px;\n}\n.tk-data-table table {\n  width: 100%;\n  font-size: 13px;\n}\n.tk-data-table th,\n.tk-data-table td {\n  text-align: start;\n  padding: 13px 15px;\n  border-color: var(--tk-border);\n  white-space: nowrap;\n}\n.tk-data-table tr {\n  border-color: var(--tk-border);\n}\n.tk-data-table thead {\n  background: var(--tk-surface);\n  color: var(--tk-muted);\n}\n.tk-data-table tbody tr:hover {\n  background: var(--tk-surface);\n}\n.tk-sort-button {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  width: 100%;\n  font-weight: 500;\n}\n.tk-table-search {\n  position: relative;\n  margin-bottom: 18px;\n  max-width: 320px;\n}\n.tk-table-search > svg {\n  position: absolute;\n  inset-inline-start: 12px;\n  top: 41px;\n  color: var(--tk-muted);\n}\n.tk-table-search .tk-input {\n  padding-inline-start: 38px;\n}\n.tk-table-footer {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 12px;\n  margin-top: 18px;\n  flex-wrap: wrap;\n}\n.tk-empty {\n  padding: 40px 16px;\n  text-align: center;\n  color: var(--tk-muted);\n}\n.tk-service-card {\n  height: 100%;\n  gap: 20px;\n}\n.tk-service-icon {\n  display: grid;\n  place-items: center;\n  width: 42px;\n  height: 42px;\n  color: var(--tk-primary);\n  background: var(--tk-soft);\n  border-radius: 50%;\n  margin-bottom: 14px;\n}\n.tk-service-card [data-slot=\"card-content\"] {\n  display: grid;\n  gap: 15px;\n}\n.tk-service-duration {\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  color: var(--tk-muted);\n  font-size: 12px;\n}\n.tk-service-action {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  color: var(--tk-primary);\n  font-size: 13px;\n  font-weight: 600;\n  padding: 8px 0;\n}\n.tk-service-action:hover {\n  text-decoration: underline;\n  text-underline-offset: 4px;\n}\n.tk-upload {\n  border: 1px dashed var(--tk-border);\n  border-radius: var(--tk-radius);\n  background: var(--tk-surface);\n  padding: 22px;\n  text-align: center;\n  display: grid;\n  gap: 10px;\n  justify-items: center;\n}\n.tk-upload.is-dragging {\n  border-color: var(--tk-primary);\n  background: var(--tk-soft);\n}\n.tk-upload > svg {\n  color: var(--tk-primary);\n}\n.tk-upload-button {\n  font-size: 13px;\n  cursor: pointer;\n  color: var(--tk-primary);\n  font-weight: 600;\n  text-decoration: underline;\n  text-underline-offset: 4px;\n}\n.tk-file {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  border: 1px solid var(--tk-border);\n  padding: 10px;\n  border-radius: var(--tk-radius);\n  font-size: 12px;\n  min-width: 0;\n}\n.tk-file > span {\n  flex: 1;\n  overflow-wrap: anywhere;\n}\n.tk-file button {\n  padding: 5px;\n  color: var(--tk-danger);\n  cursor: pointer;\n}\n.tk-file-list {\n  display: grid;\n  gap: 8px;\n}\n.tk-upload input:focus-visible + label {\n  outline: 2px solid var(--tk-primary);\n}\n.tk-block {\n  padding: 28px;\n  display: grid;\n  gap: 26px;\n}\n.tk-block-header {\n  display: grid;\n  gap: 12px;\n}\n.tk-block-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 18px;\n}\n.tk-block-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1.6fr) minmax(230px, 1fr);\n  gap: 24px;\n}\n.tk-block-stats {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 14px;\n}\n.tk-stat-value {\n  display: block;\n  font-size: 28px;\n  font-weight: 600;\n  margin-top: 8px;\n}\n.tk-stepper {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  justify-content: space-between;\n}\n.tk-stepper li {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  color: var(--tk-muted);\n  font-size: 12px;\n}\n.tk-stepper li[aria-current=\"step\"] {\n  color: var(--tk-primary);\n  font-weight: 600;\n}\n.tk-stepper span {\n  width: 28px;\n  height: 28px;\n  display: grid;\n  place-items: center;\n  border: 1px solid var(--tk-border);\n  border-radius: 50%;\n}\n.tk-stepper li[aria-current=\"step\"] span {\n  background: var(--tk-primary);\n  color: var(--tk-on-primary);\n  border-color: var(--tk-primary);\n}\n.tk-review {\n  display: grid;\n  gap: 12px;\n}\n.tk-review > div {\n  display: flex;\n  justify-content: space-between;\n  border-bottom: 1px solid var(--tk-border);\n  gap: 20px;\n  padding-bottom: 10px;\n}\n.tk-review dt {\n  color: var(--tk-muted);\n  font-size: 13px;\n}\n.tk-review dd {\n  font-size: 13px;\n  overflow-wrap: anywhere;\n  text-align: end;\n}\n.tk-block-note {\n  font-size: 12px;\n  color: var(--tk-muted);\n  line-height: 1.8;\n}\n.tk-services-filter {\n  display: flex;\n  align-items: end;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n.tk-services-filter > .tk-field {\n  flex: 1;\n  min-width: 180px;\n}\n@container kit-preview (max-width:620px) {\n  .tk-block-grid,\n  .tk-block-split {\n    grid-template-columns: 1fr;\n  }\n  .tk-block {\n    padding: 20px;\n  }\n  .tk-block-stats {\n    gap: 8px;\n  }\n  .tk-block-stats .tk-card {\n    padding: 14px;\n  }\n  .tk-stat-value {\n    font-size: 23px;\n  }\n  .tk-stepper li {\n    gap: 5px;\n    font-size: 11px;\n  }\n}\n@media (max-width: 600px) {\n  .tk-block-grid,\n  .tk-block-split {\n    grid-template-columns: 1fr;\n  }\n  .tk-block {\n    padding: 18px;\n  }\n  .tk-card {\n    padding: 18px;\n  }\n  .tk-block-stats {\n    gap: 8px;\n  }\n  .tk-block-stats .tk-card {\n    padding: 12px;\n  }\n  .tk-stat-value {\n    font-size: 23px;\n  }\n  .tk-stepper li {\n    gap: 4px;\n    font-size: 11px;\n  }\n  .tk-stepper {\n    gap: 6px;\n  }\n}\n@media (prefers-reduced-motion: reduce) {\n  .tk-scope *,\n  .tk-scope *::before,\n  .tk-scope *::after {\n    animation-duration: 0.01ms !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}\n.tk-between {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n.tk-progress-wrap {\n  gap: 9px;\n}\n.tk-card header .tk-muted {\n  margin-top: 6px;\n}\n.tk-card > .tk-muted {\n  font-size: 13px;\n  line-height: 1.9;\n}\n.tk-choice .tk-field-hint {\n  display: block;\n}\n.tk-card-footer .tk-button {\n  width: 100%;\n}\n"
    },
    {
      "path": "registry/tirazkit/pagination.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/pagination.tsx",
      "content": "\"use client\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport {\n  Pagination as BasePagination,\n  PaginationContent,\n  PaginationItem,\n} from \"./primitives/pagination\";\nimport { useKit } from \"./theme\";\nexport function Pagination({\n  page,\n  totalPages,\n  onPageChange,\n}: {\n  page: number;\n  totalPages: number;\n  onPageChange: (page: number) => void;\n}) {\n  const { locale } = useKit();\n  const ar = locale === \"ar\";\n  const Prev = ar ? ChevronRight : ChevronLeft;\n  const Next = ar ? ChevronLeft : ChevronRight;\n  const total = Math.max(1, totalPages);\n  const current = Math.max(1, Math.min(total, page));\n  const numbers = [\n    ...new Set([\n      1,\n      ...[current - 1, current, current + 1].filter((p) => p > 1 && p < total),\n      total,\n    ]),\n  ].sort((a, b) => a - b);\n  return (\n    <BasePagination\n      aria-label={ar ? \"صفحات النتائج\" : \"Result pages\"}\n      className=\"tk-pagination\"\n    >\n      <PaginationContent>\n        <PaginationItem>\n          <button\n            type=\"button\"\n            aria-label={ar ? \"الصفحة السابقة\" : \"Previous page\"}\n            disabled={current === 1}\n            onClick={() => onPageChange(current - 1)}\n          >\n            <Prev size={16} aria-hidden=\"true\" />\n          </button>\n        </PaginationItem>\n        {numbers.map((n, i) => (\n          <PaginationItem key={n}>\n            {i > 0 && n - numbers[i - 1] > 1 ? (\n              <span className=\"tk-page-gap\" aria-hidden=\"true\">\n                …\n              </span>\n            ) : null}\n            <button\n              type=\"button\"\n              aria-label={`${ar ? \"الصفحة\" : \"Page\"} ${n}`}\n              aria-current={current === n ? \"page\" : undefined}\n              onClick={() => onPageChange(n)}\n            >\n              {n}\n            </button>\n          </PaginationItem>\n        ))}\n        <PaginationItem>\n          <button\n            type=\"button\"\n            aria-label={ar ? \"الصفحة التالية\" : \"Next page\"}\n            disabled={current === total}\n            onClick={() => onPageChange(current + 1)}\n          >\n            <Next size={16} aria-hidden=\"true\" />\n          </button>\n        </PaginationItem>\n      </PaginationContent>\n    </BasePagination>\n  );\n}\n"
    },
    {
      "path": "components/ui/pagination.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/primitives/pagination.tsx",
      "content": "// MIT License. Copyright (c) 2023 shadcn. See LICENSE.txt.\nimport * as React from \"react\"\nimport {\n  ChevronLeftIcon,\n  ChevronRightIcon,\n  MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { buttonVariants, type Button } from \"./button\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n  return (\n    <nav\n      role=\"navigation\"\n      aria-label=\"pagination\"\n      data-slot=\"pagination\"\n      className={cn(\"mx-auto flex w-full justify-center\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction PaginationContent({\n  className,\n  ...props\n}: React.ComponentProps<\"ul\">) {\n  return (\n    <ul\n      data-slot=\"pagination-content\"\n      className={cn(\"flex flex-row items-center gap-1\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n  return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n  isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n  React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n  className,\n  isActive,\n  size = \"icon\",\n  ...props\n}: PaginationLinkProps) {\n  return (\n    <a\n      aria-current={isActive ? \"page\" : undefined}\n      data-slot=\"pagination-link\"\n      data-active={isActive}\n      className={cn(\n        buttonVariants({\n          variant: isActive ? \"outline\" : \"ghost\",\n          size,\n        }),\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction PaginationPrevious({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n  return (\n    <PaginationLink\n      aria-label=\"Go to previous page\"\n      size=\"default\"\n      className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n      {...props}\n    >\n      <ChevronLeftIcon />\n      <span className=\"hidden sm:block\">Previous</span>\n    </PaginationLink>\n  )\n}\n\nfunction PaginationNext({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n  return (\n    <PaginationLink\n      aria-label=\"Go to next page\"\n      size=\"default\"\n      className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n      {...props}\n    >\n      <span className=\"hidden sm:block\">Next</span>\n      <ChevronRightIcon />\n    </PaginationLink>\n  )\n}\n\nfunction PaginationEllipsis({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      aria-hidden\n      data-slot=\"pagination-ellipsis\"\n      className={cn(\"flex size-9 items-center justify-center\", className)}\n      {...props}\n    >\n      <MoreHorizontalIcon className=\"size-4\" />\n      <span className=\"sr-only\">More pages</span>\n    </span>\n  )\n}\n\nexport {\n  Pagination,\n  PaginationContent,\n  PaginationLink,\n  PaginationItem,\n  PaginationPrevious,\n  PaginationNext,\n  PaginationEllipsis,\n}\n"
    },
    {
      "path": "components/ui/button.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/primitives/button.tsx",
      "content": "// MIT License. Copyright (c) 2023 shadcn. See LICENSE.txt.\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n        outline:\n          \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost:\n          \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n        xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n        sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n        lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n        icon: \"size-9\",\n        \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n        \"icon-sm\": \"size-8\",\n        \"icon-lg\": \"size-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot.Root : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n"
    },
    {
      "path": "registry/tirazkit/theme.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/theme.tsx",
      "content": "\"use client\";\nimport {\n  createContext,\n  useContext,\n  type CSSProperties,\n  type ReactNode,\n} from \"react\";\nimport { DirectionProvider } from \"./primitives/direction\";\nimport {\n  themeVariables,\n  type ThemeId,\n  type KitMode,\n  type KitLocale,\n} from \"./themes\";\nimport \"./tirazkit.css\";\nconst KitContext = createContext({\n  theme: \"dga\" as ThemeId,\n  mode: \"light\" as KitMode,\n  locale: \"ar\" as KitLocale,\n  overrides: {} as CSSProperties,\n});\nexport function useKit() {\n  const kit = useContext(KitContext);\n  return {\n    ...kit,\n    dir: kit.locale === \"ar\" ? (\"rtl\" as const) : (\"ltr\" as const),\n    style: {\n      ...themeVariables(kit.theme, kit.mode),\n      ...kit.overrides,\n    } as CSSProperties,\n  };\n}\nexport function Theme({\n  theme = \"dga\",\n  mode = \"light\",\n  locale = \"ar\",\n  children,\n  className = \"\",\n  overrides = {},\n}: {\n  theme?: ThemeId;\n  mode?: KitMode;\n  locale?: KitLocale;\n  children: ReactNode;\n  className?: string;\n  overrides?: CSSProperties;\n}) {\n  const dir = locale === \"ar\" ? \"rtl\" : \"ltr\";\n  return (\n    <KitContext.Provider value={{ theme, mode, locale, overrides }}>\n      <DirectionProvider dir={dir}>\n        <div\n          className={`tk-scope ${className}`}\n          data-kit-theme={theme}\n          data-kit-mode={mode}\n          lang={locale}\n          dir={dir}\n          style={\n            { ...themeVariables(theme, mode), ...overrides } as CSSProperties\n          }\n        >\n          {children}\n        </div>\n      </DirectionProvider>\n    </KitContext.Provider>\n  );\n}\n"
    },
    {
      "path": "components/ui/direction.tsx",
      "type": "registry:component",
      "target": "@components/tirazkit/primitives/direction.tsx",
      "content": "// MIT License. Copyright (c) 2023 shadcn. See LICENSE.txt.\n\"use client\"\n\nimport * as React from \"react\"\nimport { Direction } from \"radix-ui\"\n\nfunction DirectionProvider({\n  dir,\n  direction,\n  children,\n}: React.ComponentProps<typeof Direction.DirectionProvider> & {\n  direction?: React.ComponentProps<typeof Direction.DirectionProvider>[\"dir\"]\n}) {\n  return (\n    <Direction.DirectionProvider dir={direction ?? dir}>\n      {children}\n    </Direction.DirectionProvider>\n  )\n}\n\nconst useDirection = Direction.useDirection\n\nexport { DirectionProvider, useDirection }\n"
    },
    {
      "path": "registry/tirazkit/themes.ts",
      "type": "registry:component",
      "target": "@components/tirazkit/themes.ts",
      "content": "export const themes = {\n  dga: {\n    id: \"dga\",\n    name: \"كود المنصات\",\n    english: \"Platforms Code\",\n    description: \"أخضر واضح، تباين متوازن وهوية مستندة إلى مرجع كود المنصات.\",\n    primary: \"#1b8354\",\n    hover: \"#166a45\",\n    pressed: \"#104631\",\n    soft: \"#f3fcf6\",\n    radius: \"4px\",\n    palette: [\"#1b8354\", \"#166a45\", \"#dff6e7\", \"#161616\", \"#f3f4f6\"],\n  },\n  tiraz: {\n    id: \"tiraz\",\n    name: \"طراز\",\n    english: \"Tiraz\",\n    description: \"بنفسجي صريح ومساحات مريحة لمنتجاتك الرقمية.\",\n    primary: \"#5945e6\",\n    hover: \"#4935c9\",\n    pressed: \"#38249f\",\n    soft: \"#f1effe\",\n    radius: \"10px\",\n    palette: [\"#5945e6\", \"#9c8ff2\", \"#e5e0fc\", \"#27223d\", \"#f7f6fc\"],\n  },\n  ocean: {\n    id: \"ocean\",\n    name: \"محيط\",\n    english: \"Ocean\",\n    description: \"أزرق عميق وحواف ناعمة لواجهات هادئة وواضحة.\",\n    primary: \"#1262c5\",\n    hover: \"#0c4da0\",\n    pressed: \"#0b3975\",\n    soft: \"#eff6ff\",\n    radius: \"14px\",\n    palette: [\"#1262c5\", \"#38a3d1\", \"#d9effc\", \"#18324b\", \"#f2f8fc\"],\n  },\n  ink: {\n    id: \"ink\",\n    name: \"حبر\",\n    english: \"Ink\",\n    description: \"طابع محايد وحواف دقيقة تجعل المحتوى في المقدمة.\",\n    primary: \"#27272a\",\n    hover: \"#18181b\",\n    pressed: \"#09090b\",\n    soft: \"#f4f4f5\",\n    radius: \"2px\",\n    palette: [\"#27272a\", \"#71717a\", \"#d4d4d8\", \"#18181b\", \"#fafafa\"],\n  },\n} as const;\nexport type ThemeId = keyof typeof themes;\nexport type KitMode = \"light\" | \"dark\";\nexport type KitLocale = \"ar\" | \"en\";\nexport function themeVariables(id: ThemeId = \"dga\", mode: KitMode = \"light\") {\n  const theme = themes[id];\n  const dark = mode === \"dark\";\n  const primary =\n    dark && id === \"ink\"\n      ? \"#e4e4e7\"\n      : dark\n        ? {\n            dga: \"#4ad195\",\n            tiraz: \"#b2a5ff\",\n            ocean: \"#7cc4ff\",\n            ink: \"#e4e4e7\",\n          }[id]\n        : theme.primary;\n  return {\n    \"--tk-primary\": primary,\n    \"--tk-hover\": dark ? primary : theme.hover,\n    \"--tk-pressed\": dark ? primary : theme.pressed,\n    \"--tk-on-primary\": dark ? \"#101820\" : \"#ffffff\",\n    \"--tk-soft\": dark ? \"#252936\" : theme.soft,\n    \"--tk-radius\": theme.radius,\n    \"--tk-bg\": dark ? \"#151923\" : \"#ffffff\",\n    \"--tk-fg\": dark ? \"#f1f3f6\" : \"#161616\",\n    \"--tk-muted\": dark ? \"#b6bdc9\" : \"#596472\",\n    \"--tk-surface\": dark ? \"#1e2430\" : \"#f8f9fb\",\n    \"--tk-border\": dark ? \"#414957\" : \"#d2d6db\",\n    \"--tk-success\": dark ? \"#67d9a2\" : \"#067647\",\n    \"--tk-success-bg\": dark ? \"#142e26\" : \"#ecfdf3\",\n    \"--tk-warning\": dark ? \"#f7c86b\" : \"#935c08\",\n    \"--tk-warning-bg\": dark ? \"#322817\" : \"#fffaeb\",\n    \"--tk-danger\": dark ? \"#ff9b97\" : \"#b42318\",\n    \"--tk-danger-bg\": dark ? \"#3c2026\" : \"#fef3f2\",\n    \"--tk-info\": dark ? \"#8ac8ff\" : \"#175cd3\",\n    \"--tk-info-bg\": dark ? \"#1a2c43\" : \"#eff8ff\",\n  };\n}\n"
    },
    {
      "path": "registry/tirazkit/LICENSE.txt",
      "type": "registry:file",
      "target": "@components/tirazkit/LICENSE.txt",
      "content": "MIT License\n\nCopyright (c) 2026 Tirazkit contributors\nCopyright (c) 2023 shadcn (included shadcn/ui primitives)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFonts are licensed separately under the SIL Open Font License in\npublic/fonts/OFL.txt. Lucide icons retain their package's ISC license.\nDGA names and marks are not licensed by this software license.\n"
    }
  ],
  "categories": [
    "عرض البيانات"
  ],
  "docs": "Wrap components with <Theme theme=\"dga\" locale=\"ar\">. Includes four themes. Requires React 19, Tailwind CSS 4, and a shadcn-initialized project. Font inherits from your app. See /docs/installation. DGA-inspired independent implementation; not certified."
}
