tembro 3.1.5 → 3.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +241 -91
  3. package/dist/components/ui/dialog/index.d.ts +3 -1
  4. package/dist/components/ui/select/index.d.ts +6 -3
  5. package/dist/showcase/package-meta.d.ts +3 -3
  6. package/dist/showcase/premium/wizard/index.cjs +1 -0
  7. package/dist/showcase/premium/wizard/index.d.ts +2 -0
  8. package/dist/showcase/premium/wizard/index.js +1 -0
  9. package/dist/showcase/premium/wizard/mock.cjs +1 -0
  10. package/dist/showcase/premium/wizard/mock.d.ts +2 -0
  11. package/dist/showcase/premium/wizard/mock.js +1 -0
  12. package/dist/showcase/premium/wizard/showcase.cjs +1 -0
  13. package/dist/showcase/premium/wizard/showcase.d.ts +2 -0
  14. package/dist/showcase/premium/wizard/showcase.js +1 -0
  15. package/dist/showcase/search-utils.d.ts +1 -1
  16. package/dist/showcase/site-data.d.ts +6 -6
  17. package/dist/src/components/layout/app-sidebar.cjs +1 -1
  18. package/dist/src/components/layout/app-sidebar.js +49 -36
  19. package/dist/src/components/theme-provider.cjs +1 -1
  20. package/dist/src/components/theme-provider.js +1 -1
  21. package/dist/src/components/ui/dialog/index.cjs +1 -1
  22. package/dist/src/components/ui/dialog/index.js +14 -7
  23. package/dist/src/components/ui/select/index.cjs +1 -1
  24. package/dist/src/components/ui/select/index.js +44 -43
  25. package/dist/src/index.cjs +1 -1
  26. package/dist/src/index.js +101 -101
  27. package/dist/src/showcase/component-api-schema.cjs +1 -1
  28. package/dist/src/showcase/component-api-schema.js +868 -9
  29. package/dist/src/showcase/demo-snippets/forms/index.cjs +1 -1
  30. package/dist/src/showcase/demo-snippets/forms/index.js +1 -1
  31. package/dist/src/showcase/fallback.cjs +4 -4
  32. package/dist/src/showcase/fallback.js +354 -181
  33. package/dist/src/showcase/index.cjs +1 -1
  34. package/dist/src/showcase/index.js +2 -2
  35. package/dist/src/showcase/package-meta.cjs +1 -1
  36. package/dist/src/showcase/package-meta.js +1 -1
  37. package/dist/src/showcase/premium/app-sidebar/mock.cjs +3 -2
  38. package/dist/src/showcase/premium/app-sidebar/mock.js +1 -1
  39. package/dist/src/showcase/premium/app-sidebar/showcase.cjs +1 -1
  40. package/dist/src/showcase/premium/app-sidebar/showcase.js +1 -1
  41. package/dist/src/showcase/premium/async-select/showcase.cjs +1 -1
  42. package/dist/src/showcase/premium/async-select/showcase.js +118 -74
  43. package/dist/src/showcase/premium/avatar/showcase.cjs +1 -1
  44. package/dist/src/showcase/premium/avatar/showcase.js +5 -5
  45. package/dist/src/showcase/premium/dialog/mock.cjs +6 -1
  46. package/dist/src/showcase/premium/dialog/mock.js +1 -1
  47. package/dist/src/showcase/premium/dialog/showcase.cjs +1 -1
  48. package/dist/src/showcase/premium/dialog/showcase.js +101 -39
  49. package/dist/src/showcase/premium/form-wrapper/mock.cjs +2 -2
  50. package/dist/src/showcase/premium/form-wrapper/mock.js +2 -2
  51. package/dist/src/showcase/premium/form-wrapper/showcase.cjs +1 -1
  52. package/dist/src/showcase/premium/form-wrapper/showcase.js +1 -1
  53. package/dist/src/showcase/premium/index.cjs +1 -1
  54. package/dist/src/showcase/premium/index.js +9 -3
  55. package/dist/src/showcase/premium/input/showcase.cjs +1 -1
  56. package/dist/src/showcase/premium/input/showcase.js +1 -1
  57. package/dist/src/showcase/premium/json-input/showcase.cjs +1 -1
  58. package/dist/src/showcase/premium/json-input/showcase.js +1 -1
  59. package/dist/src/showcase/premium/select/showcase.cjs +1 -1
  60. package/dist/src/showcase/premium/select/showcase.js +53 -0
  61. package/dist/src/showcase/premium/table/mock.cjs +1 -1
  62. package/dist/src/showcase/premium/table/mock.js +1 -1
  63. package/dist/src/showcase/premium/types.cjs +1 -1
  64. package/dist/src/showcase/premium/types.js +1 -1
  65. package/dist/src/showcase/premium/wizard/index.cjs +1 -0
  66. package/dist/src/showcase/premium/wizard/index.js +3 -0
  67. package/dist/src/showcase/premium/wizard/mock.cjs +25 -0
  68. package/dist/src/showcase/premium/wizard/mock.js +32 -0
  69. package/dist/src/showcase/premium/wizard/showcase.cjs +1 -0
  70. package/dist/src/showcase/premium/wizard/showcase.js +130 -0
  71. package/dist/src/showcase/preview-registry.cjs +1 -1
  72. package/dist/src/showcase/preview-registry.js +6 -6
  73. package/dist/src/showcase/registry-quality.cjs +1 -1
  74. package/dist/src/showcase/registry-quality.js +5 -0
  75. package/dist/src/showcase/registry-specific.cjs +1 -1
  76. package/dist/src/showcase/registry-specific.js +2 -2
  77. package/dist/src/showcase/render-registry-preview.cjs +1 -1
  78. package/dist/src/showcase/render-registry-preview.js +2 -2
  79. package/dist/src/showcase/site-data.cjs +1 -1
  80. package/dist/src/showcase/site-data.js +198 -44
  81. package/dist/src/showcase/tembro-registry.json.cjs +1 -1
  82. package/dist/src/showcase/tembro-registry.json.js +1 -1
  83. package/dist/src/showcase/types.cjs +1 -1
  84. package/dist/src/showcase/types.js +1 -1
  85. package/package.json +13 -9
  86. package/packages/cli/dist/index.cjs +127 -127
  87. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +31 -6
  88. package/packages/cli/vendor/src/components/theme-provider.tsx +1 -1
  89. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +15 -3
  90. package/packages/cli/vendor/src/components/ui/select/index.tsx +17 -10
  91. package/packages/cli/vendor/src/showcase/component-api-schema.ts +269 -39
  92. package/packages/cli/vendor/src/showcase/demo-snippets/forms/index.ts +1 -1
  93. package/packages/cli/vendor/src/showcase/fallback.tsx +202 -39
  94. package/packages/cli/vendor/src/showcase/index.ts +6 -6
  95. package/packages/cli/vendor/src/showcase/package-meta.ts +3 -3
  96. package/packages/cli/vendor/src/showcase/premium/app-sidebar/mock.ts +3 -2
  97. package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -1
  98. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +50 -4
  99. package/packages/cli/vendor/src/showcase/premium/avatar/showcase.tsx +5 -5
  100. package/packages/cli/vendor/src/showcase/premium/dialog/mock.ts +6 -1
  101. package/packages/cli/vendor/src/showcase/premium/dialog/showcase.tsx +53 -1
  102. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +2 -2
  103. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +1 -1
  104. package/packages/cli/vendor/src/showcase/premium/index.ts +5 -3
  105. package/packages/cli/vendor/src/showcase/premium/input/showcase.tsx +1 -1
  106. package/packages/cli/vendor/src/showcase/premium/json-input/showcase.tsx +1 -1
  107. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +38 -0
  108. package/packages/cli/vendor/src/showcase/premium/table/mock.ts +1 -1
  109. package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
  110. package/packages/cli/vendor/src/showcase/premium/wizard/index.ts +2 -0
  111. package/packages/cli/vendor/src/showcase/premium/wizard/mock.ts +41 -0
  112. package/packages/cli/vendor/src/showcase/premium/wizard/showcase.tsx +88 -0
  113. package/packages/cli/vendor/src/showcase/preview-registry.tsx +6 -6
  114. package/packages/cli/vendor/src/showcase/registry-quality.ts +5 -0
  115. package/packages/cli/vendor/src/showcase/registry-specific.tsx +2 -2
  116. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +2 -2
  117. package/packages/cli/vendor/src/showcase/site-data.tsx +89 -32
  118. package/packages/cli/vendor/src/showcase/tembro-registry.json +1 -1
  119. package/packages/cli/vendor/src/showcase/types.ts +1 -1
  120. package/registry.json +1 -1
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../components/ui/button/index.cjs"),n=require("../components/actions/action-menu.cjs"),r=require("../components/actions/button-group.cjs"),i=require("../components/ui/input/index.cjs"),a=require("../components/ui/badge/index.cjs"),o=require("../components/ui/tabs/index.cjs"),s=require("../components/actions/quick-action-grid.cjs"),c=require("../components/navigation/pagination.cjs"),l=require("../components/filters/filter-bar.cjs"),u=require("../components/overlay/alert-dialog.cjs"),d=require("../components/overlay/drawer.cjs"),f=require("../components/inputs/otp-input.cjs"),p=require("../components/inputs/rating.cjs"),m=require("../components/inputs/slider.cjs"),h=require("../components/inputs/tag-input.cjs"),g=require("../components/calendar/calendar.cjs"),_=require("../components/feedback/alert.cjs"),v=require("../components/feedback/page-state.cjs"),y=require("../components/display/description-list.cjs"),b=require("../components/display/avatar.cjs"),x=require("../components/display/list.cjs"),S=require("../components/display/progress.cjs"),C=require("../components/display/status-dot.cjs"),w=require("../components/display/status-legend.cjs"),T=require("../components/display/timeline.cjs"),E=require("../components/display/info-card.cjs"),D=require("../components/command/command-palette.cjs"),O=require("../components/upload/file-upload.cjs"),k=require("../components/patterns/resource-page.cjs"),A=require("../components/patterns/resource-detail-page.cjs"),j=require("../components/wizard/stepper.cjs"),M=require("../components/wizard/wizard.cjs"),N=require("./preview-compositions.cjs");let P=require("react");P=e.__toESM(P,1);let F=require("lucide-react"),I=require("react/jsx-runtime");function L(e,t,n){return e.kind===`inputs`?(0,I.jsx)(z,{slug:e.slug,state:t,setState:n}):e.kind===`form`?(0,I.jsx)(B,{state:t,setState:n}):e.kind===`overlay`?(0,I.jsx)(V,{slug:e.slug}):e.kind===`navigation`?(0,I.jsx)(H,{slug:e.slug}):e.kind===`feedback`?(0,I.jsx)(U,{slug:e.slug}):e.kind===`display`?(0,I.jsx)(W,{slug:e.slug}):e.kind===`actions`?(0,I.jsx)(G,{slug:e.slug,state:t,setState:n}):e.kind===`layout`?(0,I.jsx)(K,{slug:e.slug}):e.kind===`data-table`?(0,I.jsx)(q,{slug:e.slug}):e.kind===`calendar`?(0,I.jsx)(J,{}):e.kind===`upload`?(0,I.jsx)(Y,{slug:e.slug}):e.kind===`wizard`?(0,I.jsx)(X,{slug:e.slug}):e.kind===`patterns`?(0,I.jsx)(Z,{slug:e.slug}):null}function R({tone:e,children:t}){return(0,I.jsx)(a.Badge,{variant:e===`danger`?`destructive`:e===`warning`?`outline`:`secondary`,children:t})}function z({slug:e,state:t,setState:n}){let r=t.textValue;return e===`slider`?(0,I.jsx)(m.Slider,{label:`Density`,description:`Tune content density.`,defaultValue:64,showValue:!0}):e===`range-slider`?(0,I.jsx)(m.RangeSlider,{label:`Revenue range`,description:`Filter between two values.`,defaultValue:[20,80],showValue:!0}):e===`rating`?(0,I.jsx)(p.Rating,{defaultValue:4,labels:{clear:`Reset`}}):e===`otp-input`?(0,I.jsx)(f.OtpInput,{value:r.replace(/\D/g,``).slice(0,6),onValueChange:e=>n({textValue:e})}):e===`color-input`?(0,I.jsx)(i.Input,{type:`color`,defaultValue:`#22c55e`,"aria-label":`Accent color`}):e===`tag-input`?(0,I.jsx)(h.TagInput,{defaultValue:[`dashboard`,`beta`,`ops`],placeholder:`Add label`}):(0,I.jsx)(i.Input,{value:r,onChange:e=>n({textValue:e.currentTarget.value}),placeholder:`Unified input`})}function B({state:e,setState:t}){return(0,I.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,I.jsxs)(`label`,{className:`grid gap-2`,children:[(0,I.jsx)(`span`,{className:`text-sm font-medium text-[color:var(--aui-page-foreground)]`,children:`Email address`}),(0,I.jsx)(i.Input,{value:e.textValue,onChange:e=>t({textValue:e.currentTarget.value})}),(0,I.jsx)(`span`,{className:`text-xs text-[color:var(--aui-page-muted)]`,children:`Form wrappers keep label, hint and error spacing consistent.`})]}),(0,I.jsxs)(`label`,{className:`grid gap-2`,children:[(0,I.jsx)(`span`,{className:`text-sm font-medium text-[color:var(--aui-page-foreground)]`,children:`Status`}),(0,I.jsx)(i.Input,{type:`search`,value:`Active customers`,resultCount:7,readOnly:!0}),(0,I.jsx)(`span`,{className:`text-xs text-emerald-500`,children:`Ready to submit`})]})]})}function V({slug:e}){return e===`dialog-actions`?(0,I.jsx)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:(0,I.jsxs)(r.ButtonGroup,{attached:!1,children:[(0,I.jsx)(t.Button,{variant:`ghost`,children:`Cancel`}),(0,I.jsx)(t.Button,{variant:`outline`,children:`Save draft`}),(0,I.jsx)(t.Button,{children:`Publish`})]})}):e===`alert-dialog`?(0,I.jsx)(u.AlertDialog,{open:!1,title:`Archive invoice?`,description:`This keeps the invoice readable but removes it from active queues.`,children:(0,I.jsx)(t.Button,{variant:`destructive`,children:`Open alert`})}):e===`drawer`?(0,I.jsx)(d.Drawer,{open:!1,trigger:(0,I.jsx)(t.Button,{variant:`outline`,children:`Open drawer`}),title:`Customer details`,description:`Side panel for fast inspection.`,children:(0,I.jsx)(y.DescriptionList,{items:[{key:`plan`,label:`Plan`,value:`Scale`},{key:`owner`,label:`Owner`,value:`Azamat UI`}]})}):(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsx)(t.Button,{variant:`ghost`,children:`Cancel`}),(0,I.jsx)(t.Button,{variant:`outline`,children:`Save draft`}),(0,I.jsx)(t.Button,{children:`Publish`})]})}function H({slug:e}){return e===`pagination`?(0,I.jsx)(c.Pagination,{page:3,pageCount:9,onPageChange:()=>void 0}):(0,I.jsx)(o.Tabs,{defaultValue:`overview`,children:(0,I.jsxs)(o.TabsList,{variant:`pills`,overflow:`wrap`,children:[(0,I.jsx)(o.TabsTrigger,{value:`overview`,variant:`pills`,children:`Overview`}),(0,I.jsx)(o.TabsTrigger,{value:`usage`,variant:`pills`,children:`Usage`}),(0,I.jsx)(o.TabsTrigger,{value:`api`,variant:`pills`,children:`API`})]})})}function U({slug:e}){return e===`alert`?(0,I.jsx)(_.Alert,{tone:`warning`,title:`Review needed`,description:`Billing rules changed and one approval is pending.`,action:(0,I.jsx)(t.Button,{size:`sm`,children:`Open`})}):e===`page-state`?(0,I.jsx)(v.PageState,{title:`Workspace connected`,description:`The route is ready to accept live data and team actions.`,tone:`success`,action:(0,I.jsx)(t.Button,{size:`sm`,children:`Continue`})}):(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,I.jsx)(R,{tone:`success`,children:`Live`}),(0,I.jsx)(R,{tone:`warning`,children:`Needs review`}),(0,I.jsx)(R,{tone:`danger`,children:`Blocked`}),(0,I.jsx)(R,{tone:`info`,children:`Queued`})]})}function W({slug:e}){return e===`description-list`?(0,I.jsx)(y.DescriptionList,{title:`Invoice details`,description:`Structured facts with responsive columns.`,items:[{key:`id`,label:`Invoice`,value:`#4821`},{key:`amount`,label:`Amount`,value:`$12,420`},{key:`status`,label:`Status`,value:(0,I.jsx)(R,{tone:`success`,children:`Paid`})},{key:`owner`,label:`Owner`,value:`Finance team`}]}):e===`progress`?(0,I.jsx)(S.Progress,{label:`Migration progress`,description:`Production rollout`,value:68,tone:`success`,showValue:!0}):e===`timeline`?(0,I.jsx)(T.Timeline,{items:[{key:`created`,title:`Created`,description:`Invoice generated`,time:`09:20`,tone:`success`},{key:`review`,title:`Review`,description:`Finance team assigned`,time:`10:05`,tone:`info`},{key:`approve`,title:`Approval`,description:`Waiting for manager`,time:`Now`,tone:`warning`}],pending:!0,pendingLabel:`Paid`}):e===`metric-card`||e===`stat-card`?(0,I.jsx)(N.PreviewStatCard,{title:`Revenue`,value:`$84.2k`,description:`Compared with last month`,trend:{value:`+12.4%`,tone:`success`},icon:(0,I.jsx)(F.LayoutDashboardIcon,{})}):e===`status-dot`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsx)(C.StatusDot,{tone:`success`,pulse:!0,label:`API healthy`}),(0,I.jsx)(C.StatusDot,{tone:`warning`,label:`Sync delayed`}),(0,I.jsx)(C.StatusDot,{tone:`danger`,label:`Webhook failed`})]}):e===`notification-center`?(0,I.jsx)(x.List,{items:[{key:`1`,title:`Build completed`,description:`Dashboard docs deployment is live.`,extra:`Now`},{key:`2`,title:`New comment`,description:`Review requested on DataTable API.`,extra:`8m`},{key:`3`,title:`Publish reminder`,description:`Package version is ready for release.`,extra:`1h`}]}):e===`status-legend`?(0,I.jsx)(w.StatusLegend,{title:`Delivery states`,description:`Explain what each state means and how often it appears.`,orientation:`grid`,items:[{key:`live`,label:`Live`,description:`Healthy production routes`,tone:`success`,count:18},{key:`review`,label:`Review`,description:`Waiting for QA approval`,tone:`warning`,count:4},{key:`blocked`,label:`Blocked`,description:`Needs engineering action`,tone:`danger`,count:1}]}):(0,I.jsx)(E.InfoCard,{title:`Azamat Jurayev`,description:`Product designer and maintainer`,media:(0,I.jsx)(b.Avatar,{name:`Azamat Jurayev`}),actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Invite`})})}function G({slug:e,state:a,setState:o}){return e===`filter-bar`?(0,I.jsx)(l.FilterBar,{search:(0,I.jsx)(i.Input,{type:`search`,value:a.textValue,onValueChange:e=>o({textValue:e}),placeholder:`Search invoices...`}),onReset:()=>o({textValue:``}),chips:[{key:`status`,label:`Status`,value:`Active`,tone:`success`},{key:`owner`,label:`Owner`,value:`Azamat`,tone:`default`}],onRemoveChip:()=>void 0,filters:(0,I.jsxs)(t.Button,{variant:`outline`,size:`sm`,children:[(0,I.jsx)(F.FilterIcon,{"data-icon":`inline-start`}),`Status`]}),actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Export`})}):e===`command-palette`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] px-3 py-2`,children:[(0,I.jsx)(F.SearchIcon,{className:`size-4 text-[color:var(--aui-page-muted)]`}),(0,I.jsx)(`span`,{className:`text-sm text-[color:var(--aui-page-muted)]`,children:`Command palette preview: search routes, components and actions.`})]}),(0,I.jsx)(D.CommandPalette,{open:!1,onOpenChange:()=>void 0,groups:[{id:`navigation`,label:`Navigation`,items:[{id:`docs`,label:`Open docs`,icon:(0,I.jsx)(F.SearchIcon,{className:`size-4`})},{id:`components`,label:`Browse components`,icon:(0,I.jsx)(F.LayoutDashboardIcon,{className:`size-4`})}]}]})]}):e===`button-group`?(0,I.jsx)(r.ButtonGroup,{items:[{key:`day`,label:`Day`},{key:`week`,label:`Week`},{key:`month`,label:`Month`}]}):e===`quick-action-grid`?(0,I.jsx)(s.QuickActionGrid,{columns:3,items:[{key:`new`,label:`New invoice`,description:`Create a fresh billing row.`,badge:`N`},{key:`import`,label:`Import CSV`,description:`Bring finance data into the table.`,badge:`I`},{key:`share`,label:`Share workspace`,description:`Invite team members to the route.`,badge:`S`}]}):e===`data-table-saved-filters`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsx)(l.FilterBar,{chips:[{key:`status`,label:`Status`,value:`Active`,tone:`success`},{key:`owner`,label:`Owner`,value:`Azamat`,tone:`default`},{key:`region`,label:`Region`,value:`APAC`,tone:`info`}],onRemoveChip:()=>void 0,onReset:()=>void 0}),(0,I.jsx)(r.ButtonGroup,{attached:!1,items:[{key:`default`,label:`Default`,variant:`secondary`},{key:`billing`,label:`Billing`},{key:`ops`,label:`Operations`}]})]}):(0,I.jsxs)(`div`,{className:`flex items-center justify-between rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`p`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:`Invoice #4821`}),(0,I.jsx)(`p`,{className:`text-sm text-[color:var(--aui-page-muted)]`,children:`Pending approval`})]}),(0,I.jsx)(n.ActionMenu,{label:`Actions`,actions:[{key:`open`,label:`Open`,icon:(0,I.jsx)(F.ChevronRightIcon,{className:`size-4`})},{key:`download`,label:`Download`,icon:(0,I.jsx)(F.DownloadIcon,{className:`size-4`})},{key:`archive`,label:`Archive`,icon:(0,I.jsx)(F.ArchiveIcon,{className:`size-4`}),destructive:!0}],trigger:(0,I.jsx)(t.Button,{variant:`outline`,size:`icon-sm`,"aria-label":`Open actions`,children:(0,I.jsx)(F.MoreHorizontalIcon,{})})})]})}function K({slug:e}){return e===`app-header`?(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(F.LayoutDashboardIcon,{className:`size-4`}),(0,I.jsx)(`span`,{className:`font-medium`,children:`Dashboard`})]}),(0,I.jsx)(a.Badge,{variant:`secondary`,children:`Preview`}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(t.Button,{variant:`ghost`,size:`icon-sm`,"aria-label":`Notifications`,children:(0,I.jsx)(F.BellIcon,{})}),(0,I.jsx)(t.Button,{size:`sm`,children:`Deploy`})]})]}):(0,I.jsx)(N.PreviewStatCard,{title:`Revenue`,value:`$84.2k`,description:`Compared with last month`,trend:{value:`+12.4%`,tone:`success`},helperText:`StatCard keeps KPI, helper text and trend in one compact tile.`})}function q({slug:e}){return(0,I.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)]`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-b border-[color:var(--aui-divider)] p-3`,children:[(0,I.jsx)(i.Input,{type:`search`,value:``,placeholder:`Search rows...`,className:`max-w-xs`,readOnly:!0}),(0,I.jsxs)(`div`,{className:`flex gap-2`,children:[(0,I.jsxs)(t.Button,{variant:`outline`,size:`sm`,children:[(0,I.jsx)(F.FilterIcon,{"data-icon":`inline-start`}),`Filters`]}),(0,I.jsx)(t.Button,{size:`sm`,children:`Create`})]})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-[40px_1fr_120px_72px] border-b border-[color:var(--aui-divider)] px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-[color:var(--aui-page-muted)]`,children:[(0,I.jsx)(`span`,{children:(0,I.jsx)(`input`,{type:`checkbox`,"aria-label":`Select rows`})}),(0,I.jsx)(`span`,{children:`Name`}),(0,I.jsx)(`span`,{children:`Status`}),(0,I.jsx)(`span`,{children:`Actions`})]}),[`Azamat UI`,`Registry`,`Dashboard`].map((e,n)=>(0,I.jsxs)(`div`,{className:`grid grid-cols-[40px_1fr_120px_72px] items-center border-b border-[color:var(--aui-divider)] px-3 py-3 last:border-b-0`,children:[(0,I.jsx)(`span`,{children:(0,I.jsx)(`input`,{type:`checkbox`,"aria-label":`Select ${e}`,defaultChecked:n===0})}),(0,I.jsx)(`span`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:e}),(0,I.jsx)(`span`,{children:(0,I.jsx)(R,{tone:n===2?`warning`:`success`,children:n===2?`Review`:`Live`})}),(0,I.jsx)(`span`,{children:(0,I.jsx)(t.Button,{variant:`ghost`,size:`icon-sm`,"aria-label":`Row actions`,children:(0,I.jsx)(F.MoreHorizontalIcon,{})})})]},e)),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-t border-[color:var(--aui-divider)] p-3 text-sm text-[color:var(--aui-page-muted)]`,children:[(0,I.jsxs)(`span`,{children:[{"data-table-pagination":`Pagination footer`,"data-table-toolbar":`Search and filter toolbar`,"data-table-column-visibility-menu":`Column visibility`,"data-table-select-column":`Row selection`,"data-table-sortable-header":`Sortable header`,"data-table-row-actions":`Row actions`,"data-table-actions-column":`Actions column`,"data-table-bulk-actions":`Bulk action bar`,"data-table-view-presets":`Saved view presets`}[e]??`DataTable part`,` preview`]}),(0,I.jsx)(c.Pagination,{page:1,pageCount:4,onPageChange:()=>void 0,showEdges:!1})]})]})}function J(){return(0,I.jsx)(g.Calendar,{value:`2026-06-18`,defaultMonth:`2026-06-01`,onValueChange:()=>void 0})}function Y({slug:e}){return e===`file-upload`?(0,I.jsx)(O.FileUpload,{dropzoneLabel:`Upload documents`,dropzoneDescription:`Drag files here or choose from your device.`,buttonLabel:`Choose files`,helperText:`Supports PDF, CSV and images.`}):(0,I.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-[160px_1fr] md:items-center`,children:[(0,I.jsx)(`div`,{className:`flex aspect-square items-center justify-center rounded-2xl border border-dashed border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)]`,children:(0,I.jsx)(F.UploadCloudIcon,{className:`size-8 text-[color:var(--aui-page-muted)]`})}),(0,I.jsx)(N.PreviewFileDropzone,{label:`Upload product image`,description:`Shows the image-upload flow without custom CSS.`,accept:`image/*`})]})}function X({slug:e}){let t=[{id:`profile`,title:`Profile`,description:`Account details`,completed:!0},{id:`billing`,title:`Billing`,description:`Payment setup`},{id:`review`,title:`Review`,description:`Confirm data`}];return e===`stepper`?(0,I.jsx)(j.Stepper,{steps:t,currentStep:`billing`,onStepChange:()=>void 0}):(0,I.jsx)(M.Wizard,{steps:t,currentStep:`billing`,onNext:()=>void 0,onPrevious:()=>void 0,onFinish:()=>void 0,children:(0,I.jsxs)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsx)(`p`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:`Billing setup`}),(0,I.jsx)(`p`,{className:`mt-1 text-sm text-[color:var(--aui-page-muted)]`,children:`Wizard combines steps, content and footer controls.`})]})})}function Z({slug:e}){return e===`resource-detail-page`?(0,I.jsx)(A.ResourceDetailPage,{title:`Customer profile`,description:`ResourceDetailPage organizes detail screens.`,actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Edit`}),children:(0,I.jsx)(k.ResourcePageSection,{title:`Account`,children:(0,I.jsx)(y.DescriptionList,{items:[{key:`plan`,label:`Plan`,value:`Scale`},{key:`owner`,label:`Owner`,value:`Design team`}]})})}):(0,I.jsx)(k.ResourcePage,{title:`Customers`,description:`ResourcePage combines header, stats, filters and sections.`,actions:(0,I.jsx)(t.Button,{size:`sm`,children:`New customer`}),stats:(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,I.jsx)(N.PreviewStatCard,{title:`Active`,value:`2,418`,trend:{value:`+8%`,tone:`success`}}),(0,I.jsx)(N.PreviewStatCard,{title:`Health`,value:`94%`,trend:{value:`Stable`,tone:`default`}})]}),filters:(0,I.jsx)(l.FilterBar,{search:(0,I.jsx)(i.Input,{type:`search`,value:``,placeholder:`Search...`,readOnly:!0}),activeCount:1}),children:(0,I.jsx)(k.ResourcePageSection,{title:`Recent activity`,children:(0,I.jsx)(T.Timeline,{items:[{key:`a`,title:`Customer added`,description:`Acme workspace`,tone:`success`},{key:`b`,title:`Plan updated`,description:`Scale plan enabled`,tone:`info`}]})})})}exports.renderShowcasePreview=L;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../components/ui/button/index.cjs"),n=require("../components/actions/action-menu.cjs"),r=require("../components/actions/button-group.cjs"),i=require("../components/ui/input/index.cjs"),a=require("../components/ui/badge/index.cjs"),o=require("../components/ui/tabs/index.cjs"),s=require("../components/actions/quick-action-grid.cjs"),c=require("../components/navigation/pagination.cjs"),l=require("../components/filters/filter-bar.cjs"),u=require("../components/overlay/alert-dialog.cjs"),d=require("../components/overlay/drawer.cjs"),f=require("../components/inputs/otp-input.cjs"),p=require("../components/inputs/rating.cjs"),m=require("../components/inputs/slider.cjs"),h=require("../components/inputs/tag-input.cjs"),g=require("../components/calendar/calendar.cjs"),_=require("../components/feedback/alert.cjs"),v=require("../components/feedback/page-state.cjs"),y=require("../components/display/description-list.cjs"),b=require("../components/display/avatar.cjs"),x=require("../components/display/list.cjs"),S=require("../components/display/progress.cjs"),C=require("../components/display/status-dot.cjs"),w=require("../components/display/status-legend.cjs"),T=require("../components/display/timeline.cjs"),E=require("../components/display/info-card.cjs"),D=require("../components/command/command-palette.cjs"),O=require("../components/upload/file-upload.cjs"),k=require("../components/patterns/resource-page.cjs"),A=require("../components/patterns/resource-detail-page.cjs"),j=require("../components/wizard/stepper.cjs"),M=require("../components/wizard/wizard.cjs"),N=require("./preview-compositions.cjs");let P=require("react");P=e.__toESM(P,1);let F=require("lucide-react"),I=require("react/jsx-runtime");function L(e,t,n){return e.kind===`inputs`?(0,I.jsx)(z,{slug:e.slug,state:t,setState:n}):e.kind===`form`?(0,I.jsx)(B,{state:t,setState:n}):e.kind===`overlay`?(0,I.jsx)(V,{slug:e.slug}):e.kind===`navigation`?(0,I.jsx)(H,{slug:e.slug}):e.kind===`feedback`?(0,I.jsx)(U,{slug:e.slug}):e.kind===`display`?(0,I.jsx)(W,{slug:e.slug}):e.kind===`actions`?(0,I.jsx)(G,{slug:e.slug,state:t,setState:n}):e.kind===`layout`?(0,I.jsx)(K,{slug:e.slug}):e.kind===`data-table`?(0,I.jsx)(q,{slug:e.slug}):e.kind===`calendar`?(0,I.jsx)(J,{}):e.kind===`upload`?(0,I.jsx)(Y,{slug:e.slug}):e.kind===`wizard`?(0,I.jsx)(X,{slug:e.slug}):e.kind===`patterns`?(0,I.jsx)(Z,{slug:e.slug}):null}function R({tone:e,children:t}){return(0,I.jsx)(a.Badge,{variant:e===`danger`?`destructive`:e===`warning`?`outline`:`secondary`,children:t})}function z({slug:e,state:t,setState:n}){let r=t.textValue;return e===`slider`?(0,I.jsx)(m.Slider,{label:`Density`,description:`Tune content density.`,defaultValue:64,showValue:!0}):e===`range-slider`?(0,I.jsx)(m.RangeSlider,{label:`Revenue range`,description:`Filter between two values.`,defaultValue:[20,80],showValue:!0}):e===`rating`?(0,I.jsx)(p.Rating,{defaultValue:4,labels:{clear:`Reset`}}):e===`otp-input`?(0,I.jsx)(f.OtpInput,{value:r.replace(/\D/g,``).slice(0,6),onValueChange:e=>n({textValue:e})}):e===`color-input`?(0,I.jsx)(i.Input,{type:`color`,defaultValue:`#22c55e`,"aria-label":`Accent color`}):e===`tag-input`?(0,I.jsx)(h.TagInput,{defaultValue:[`dashboard`,`beta`,`ops`],placeholder:`Add label`}):(0,I.jsx)(i.Input,{value:r,onChange:e=>n({textValue:e.currentTarget.value}),placeholder:`Unified input`})}function B({state:e,setState:t}){return(0,I.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,I.jsxs)(`label`,{className:`grid gap-2`,children:[(0,I.jsx)(`span`,{className:`text-sm font-medium text-[color:var(--aui-page-foreground)]`,children:`Email address`}),(0,I.jsx)(i.Input,{value:e.textValue,onChange:e=>t({textValue:e.currentTarget.value})}),(0,I.jsx)(`span`,{className:`text-xs text-[color:var(--aui-page-muted)]`,children:`Form wrappers keep label, hint and error spacing consistent.`})]}),(0,I.jsxs)(`label`,{className:`grid gap-2`,children:[(0,I.jsx)(`span`,{className:`text-sm font-medium text-[color:var(--aui-page-foreground)]`,children:`Status`}),(0,I.jsx)(i.Input,{type:`search`,value:`Active customers`,resultCount:7,readOnly:!0}),(0,I.jsx)(`span`,{className:`text-xs text-emerald-500`,children:`Ready to submit`})]})]})}function V({slug:e}){return e===`dialog-actions`?(0,I.jsx)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:(0,I.jsxs)(r.ButtonGroup,{attached:!1,children:[(0,I.jsx)(t.Button,{variant:`ghost`,children:`Cancel`}),(0,I.jsx)(t.Button,{variant:`outline`,children:`Save draft`}),(0,I.jsx)(t.Button,{children:`Publish`})]})}):e===`alert-dialog`?(0,I.jsx)(u.AlertDialog,{open:!1,title:`Archive invoice?`,description:`This keeps the invoice readable but removes it from active queues.`,children:(0,I.jsx)(t.Button,{variant:`destructive`,children:`Open alert`})}):e===`drawer`?(0,I.jsx)(d.Drawer,{open:!1,trigger:(0,I.jsx)(t.Button,{variant:`outline`,children:`Open drawer`}),title:`Customer details`,description:`Side panel for fast inspection.`,children:(0,I.jsx)(y.DescriptionList,{items:[{key:`plan`,label:`Plan`,value:`Scale`},{key:`owner`,label:`Owner`,value:`Tembro`}]})}):(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsx)(t.Button,{variant:`ghost`,children:`Cancel`}),(0,I.jsx)(t.Button,{variant:`outline`,children:`Save draft`}),(0,I.jsx)(t.Button,{children:`Publish`})]})}function H({slug:e}){return e===`pagination`?(0,I.jsx)(c.Pagination,{page:3,pageCount:9,onPageChange:()=>void 0}):(0,I.jsx)(o.Tabs,{defaultValue:`overview`,children:(0,I.jsxs)(o.TabsList,{variant:`pills`,overflow:`wrap`,children:[(0,I.jsx)(o.TabsTrigger,{value:`overview`,variant:`pills`,children:`Overview`}),(0,I.jsx)(o.TabsTrigger,{value:`usage`,variant:`pills`,children:`Usage`}),(0,I.jsx)(o.TabsTrigger,{value:`api`,variant:`pills`,children:`API`})]})})}function U({slug:e}){return e===`alert`?(0,I.jsx)(_.Alert,{tone:`warning`,title:`Review needed`,description:`Billing rules changed and one approval is pending.`,action:(0,I.jsx)(t.Button,{size:`sm`,children:`Open`})}):e===`page-state`?(0,I.jsx)(v.PageState,{title:`Workspace connected`,description:`The route is ready to accept live data and team actions.`,tone:`success`,action:(0,I.jsx)(t.Button,{size:`sm`,children:`Continue`})}):(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,I.jsx)(R,{tone:`success`,children:`Live`}),(0,I.jsx)(R,{tone:`warning`,children:`Needs review`}),(0,I.jsx)(R,{tone:`danger`,children:`Blocked`}),(0,I.jsx)(R,{tone:`info`,children:`Queued`})]})}function W({slug:e}){return e===`description-list`?(0,I.jsx)(y.DescriptionList,{title:`Invoice details`,description:`Structured facts with responsive columns.`,items:[{key:`id`,label:`Invoice`,value:`#4821`},{key:`amount`,label:`Amount`,value:`$12,420`},{key:`status`,label:`Status`,value:(0,I.jsx)(R,{tone:`success`,children:`Paid`})},{key:`owner`,label:`Owner`,value:`Finance team`}]}):e===`progress`?(0,I.jsx)(S.Progress,{label:`Migration progress`,description:`Production rollout`,value:68,tone:`success`,showValue:!0}):e===`timeline`?(0,I.jsx)(T.Timeline,{items:[{key:`created`,title:`Created`,description:`Invoice generated`,time:`09:20`,tone:`success`},{key:`review`,title:`Review`,description:`Finance team assigned`,time:`10:05`,tone:`info`},{key:`approve`,title:`Approval`,description:`Waiting for manager`,time:`Now`,tone:`warning`}],pending:!0,pendingLabel:`Paid`}):e===`metric-card`||e===`stat-card`?(0,I.jsx)(N.PreviewStatCard,{title:`Revenue`,value:`$84.2k`,description:`Compared with last month`,trend:{value:`+12.4%`,tone:`success`},icon:(0,I.jsx)(F.LayoutDashboardIcon,{})}):e===`status-dot`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsx)(C.StatusDot,{tone:`success`,pulse:!0,label:`API healthy`}),(0,I.jsx)(C.StatusDot,{tone:`warning`,label:`Sync delayed`}),(0,I.jsx)(C.StatusDot,{tone:`danger`,label:`Webhook failed`})]}):e===`notification-center`?(0,I.jsx)(x.List,{items:[{key:`1`,title:`Build completed`,description:`Dashboard docs deployment is live.`,extra:`Now`},{key:`2`,title:`New comment`,description:`Review requested on DataTable API.`,extra:`8m`},{key:`3`,title:`Publish reminder`,description:`Package version is ready for release.`,extra:`1h`}]}):e===`status-legend`?(0,I.jsx)(w.StatusLegend,{title:`Delivery states`,description:`Explain what each state means and how often it appears.`,orientation:`grid`,items:[{key:`live`,label:`Live`,description:`Healthy production routes`,tone:`success`,count:18},{key:`review`,label:`Review`,description:`Waiting for QA approval`,tone:`warning`,count:4},{key:`blocked`,label:`Blocked`,description:`Needs engineering action`,tone:`danger`,count:1}]}):(0,I.jsx)(E.InfoCard,{title:`Azamat Jurayev`,description:`Product designer and maintainer`,media:(0,I.jsx)(b.Avatar,{name:`Azamat Jurayev`}),actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Invite`})})}function G({slug:e,state:a,setState:o}){return e===`filter-bar`?(0,I.jsx)(l.FilterBar,{search:(0,I.jsx)(i.Input,{type:`search`,value:a.textValue,onValueChange:e=>o({textValue:e}),placeholder:`Search invoices...`}),onReset:()=>o({textValue:``}),chips:[{key:`status`,label:`Status`,value:`Active`,tone:`success`},{key:`owner`,label:`Owner`,value:`Azamat`,tone:`default`}],onRemoveChip:()=>void 0,filters:(0,I.jsxs)(t.Button,{variant:`outline`,size:`sm`,children:[(0,I.jsx)(F.FilterIcon,{"data-icon":`inline-start`}),`Status`]}),actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Export`})}):e===`command-palette`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] px-3 py-2`,children:[(0,I.jsx)(F.SearchIcon,{className:`size-4 text-[color:var(--aui-page-muted)]`}),(0,I.jsx)(`span`,{className:`text-sm text-[color:var(--aui-page-muted)]`,children:`Command palette preview: search routes, components and actions.`})]}),(0,I.jsx)(D.CommandPalette,{open:!1,onOpenChange:()=>void 0,groups:[{id:`navigation`,label:`Navigation`,items:[{id:`docs`,label:`Open docs`,icon:(0,I.jsx)(F.SearchIcon,{className:`size-4`})},{id:`components`,label:`Browse components`,icon:(0,I.jsx)(F.LayoutDashboardIcon,{className:`size-4`})}]}]})]}):e===`button-group`?(0,I.jsx)(r.ButtonGroup,{items:[{key:`day`,label:`Day`},{key:`week`,label:`Week`},{key:`month`,label:`Month`}]}):e===`quick-action-grid`?(0,I.jsx)(s.QuickActionGrid,{columns:3,items:[{key:`new`,label:`New invoice`,description:`Create a fresh billing row.`,badge:`N`},{key:`import`,label:`Import CSV`,description:`Bring finance data into the table.`,badge:`I`},{key:`share`,label:`Share workspace`,description:`Invite team members to the route.`,badge:`S`}]}):e===`data-table-saved-filters`?(0,I.jsxs)(`div`,{className:`grid gap-3`,children:[(0,I.jsx)(l.FilterBar,{chips:[{key:`status`,label:`Status`,value:`Active`,tone:`success`},{key:`owner`,label:`Owner`,value:`Azamat`,tone:`default`},{key:`region`,label:`Region`,value:`APAC`,tone:`info`}],onRemoveChip:()=>void 0,onReset:()=>void 0}),(0,I.jsx)(r.ButtonGroup,{attached:!1,items:[{key:`default`,label:`Default`,variant:`secondary`},{key:`billing`,label:`Billing`},{key:`ops`,label:`Operations`}]})]}):(0,I.jsxs)(`div`,{className:`flex items-center justify-between rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`p`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:`Invoice #4821`}),(0,I.jsx)(`p`,{className:`text-sm text-[color:var(--aui-page-muted)]`,children:`Pending approval`})]}),(0,I.jsx)(n.ActionMenu,{label:`Actions`,actions:[{key:`open`,label:`Open`,icon:(0,I.jsx)(F.ChevronRightIcon,{className:`size-4`})},{key:`download`,label:`Download`,icon:(0,I.jsx)(F.DownloadIcon,{className:`size-4`})},{key:`archive`,label:`Archive`,icon:(0,I.jsx)(F.ArchiveIcon,{className:`size-4`}),destructive:!0}],trigger:(0,I.jsx)(t.Button,{variant:`outline`,size:`icon-sm`,"aria-label":`Open actions`,children:(0,I.jsx)(F.MoreHorizontalIcon,{})})})]})}function K({slug:e}){return e===`app-header`?(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(F.LayoutDashboardIcon,{className:`size-4`}),(0,I.jsx)(`span`,{className:`font-medium`,children:`Dashboard`})]}),(0,I.jsx)(a.Badge,{variant:`secondary`,children:`Preview`}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(t.Button,{variant:`ghost`,size:`icon-sm`,"aria-label":`Notifications`,children:(0,I.jsx)(F.BellIcon,{})}),(0,I.jsx)(t.Button,{size:`sm`,children:`Deploy`})]})]}):(0,I.jsx)(N.PreviewStatCard,{title:`Revenue`,value:`$84.2k`,description:`Compared with last month`,trend:{value:`+12.4%`,tone:`success`},helperText:`StatCard keeps KPI, helper text and trend in one compact tile.`})}function q({slug:e}){return(0,I.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)]`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-b border-[color:var(--aui-divider)] p-3`,children:[(0,I.jsx)(i.Input,{type:`search`,value:``,placeholder:`Search rows...`,className:`max-w-xs`,readOnly:!0}),(0,I.jsxs)(`div`,{className:`flex gap-2`,children:[(0,I.jsxs)(t.Button,{variant:`outline`,size:`sm`,children:[(0,I.jsx)(F.FilterIcon,{"data-icon":`inline-start`}),`Filters`]}),(0,I.jsx)(t.Button,{size:`sm`,children:`Create`})]})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-[40px_1fr_120px_72px] border-b border-[color:var(--aui-divider)] px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-[color:var(--aui-page-muted)]`,children:[(0,I.jsx)(`span`,{children:(0,I.jsx)(`input`,{type:`checkbox`,"aria-label":`Select rows`})}),(0,I.jsx)(`span`,{children:`Name`}),(0,I.jsx)(`span`,{children:`Status`}),(0,I.jsx)(`span`,{children:`Actions`})]}),[`Tembro`,`Registry`,`Dashboard`].map((e,n)=>(0,I.jsxs)(`div`,{className:`grid grid-cols-[40px_1fr_120px_72px] items-center border-b border-[color:var(--aui-divider)] px-3 py-3 last:border-b-0`,children:[(0,I.jsx)(`span`,{children:(0,I.jsx)(`input`,{type:`checkbox`,"aria-label":`Select ${e}`,defaultChecked:n===0})}),(0,I.jsx)(`span`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:e}),(0,I.jsx)(`span`,{children:(0,I.jsx)(R,{tone:n===2?`warning`:`success`,children:n===2?`Review`:`Live`})}),(0,I.jsx)(`span`,{children:(0,I.jsx)(t.Button,{variant:`ghost`,size:`icon-sm`,"aria-label":`Row actions`,children:(0,I.jsx)(F.MoreHorizontalIcon,{})})})]},e)),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-t border-[color:var(--aui-divider)] p-3 text-sm text-[color:var(--aui-page-muted)]`,children:[(0,I.jsxs)(`span`,{children:[{"data-table-pagination":`Pagination footer`,"data-table-toolbar":`Search and filter toolbar`,"data-table-column-visibility-menu":`Column visibility`,"data-table-select-column":`Row selection`,"data-table-sortable-header":`Sortable header`,"data-table-row-actions":`Row actions`,"data-table-actions-column":`Actions column`,"data-table-bulk-actions":`Bulk action bar`,"data-table-view-presets":`Saved view presets`}[e]??`DataTable part`,` preview`]}),(0,I.jsx)(c.Pagination,{page:1,pageCount:4,onPageChange:()=>void 0,showEdges:!1})]})]})}function J(){return(0,I.jsx)(g.Calendar,{value:`2026-06-18`,defaultMonth:`2026-06-01`,onValueChange:()=>void 0})}function Y({slug:e}){return e===`file-upload`?(0,I.jsx)(O.FileUpload,{dropzoneLabel:`Upload documents`,dropzoneDescription:`Drag files here or choose from your device.`,buttonLabel:`Choose files`,helperText:`Supports PDF, CSV and images.`}):(0,I.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-[160px_1fr] md:items-center`,children:[(0,I.jsx)(`div`,{className:`flex aspect-square items-center justify-center rounded-2xl border border-dashed border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)]`,children:(0,I.jsx)(F.UploadCloudIcon,{className:`size-8 text-[color:var(--aui-page-muted)]`})}),(0,I.jsx)(N.PreviewFileDropzone,{label:`Upload product image`,description:`Shows the image-upload flow without custom CSS.`,accept:`image/*`})]})}function X({slug:e}){let t=[{id:`profile`,title:`Profile`,description:`Account details`,completed:!0},{id:`billing`,title:`Billing`,description:`Payment setup`},{id:`review`,title:`Review`,description:`Confirm data`}];return e===`stepper`?(0,I.jsx)(j.Stepper,{steps:t,currentStep:`billing`,onStepChange:()=>void 0}):(0,I.jsx)(M.Wizard,{steps:t,currentStep:`billing`,onNext:()=>void 0,onPrevious:()=>void 0,onFinish:()=>void 0,children:(0,I.jsxs)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4`,children:[(0,I.jsx)(`p`,{className:`font-medium text-[color:var(--aui-page-foreground)]`,children:`Billing setup`}),(0,I.jsx)(`p`,{className:`mt-1 text-sm text-[color:var(--aui-page-muted)]`,children:`Wizard combines steps, content and footer controls.`})]})})}function Z({slug:e}){return e===`resource-detail-page`?(0,I.jsx)(A.ResourceDetailPage,{title:`Customer profile`,description:`ResourceDetailPage organizes detail screens.`,actions:(0,I.jsx)(t.Button,{size:`sm`,children:`Edit`}),children:(0,I.jsx)(k.ResourcePageSection,{title:`Account`,children:(0,I.jsx)(y.DescriptionList,{items:[{key:`plan`,label:`Plan`,value:`Scale`},{key:`owner`,label:`Owner`,value:`Design team`}]})})}):(0,I.jsx)(k.ResourcePage,{title:`Customers`,description:`ResourcePage combines header, stats, filters and sections.`,actions:(0,I.jsx)(t.Button,{size:`sm`,children:`New customer`}),stats:(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,I.jsx)(N.PreviewStatCard,{title:`Active`,value:`2,418`,trend:{value:`+8%`,tone:`success`}}),(0,I.jsx)(N.PreviewStatCard,{title:`Health`,value:`94%`,trend:{value:`Stable`,tone:`default`}})]}),filters:(0,I.jsx)(l.FilterBar,{search:(0,I.jsx)(i.Input,{type:`search`,value:``,placeholder:`Search...`,readOnly:!0}),activeCount:1}),children:(0,I.jsx)(k.ResourcePageSection,{title:`Recent activity`,children:(0,I.jsx)(T.Timeline,{items:[{key:`a`,title:`Customer added`,description:`Acme workspace`,tone:`success`},{key:`b`,title:`Plan updated`,description:`Scale plan enabled`,tone:`info`}]})})})}exports.renderShowcasePreview=L;
@@ -170,7 +170,7 @@ function Z({ slug: t }) {
170
170
  }, {
171
171
  key: "owner",
172
172
  label: "Owner",
173
- value: "Azamat UI"
173
+ value: "Tembro"
174
174
  }] })
175
175
  }) : /* @__PURE__ */ K("div", {
176
176
  className: "flex flex-wrap items-center justify-end gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-4",
@@ -645,7 +645,7 @@ function oe({ slug: t }) {
645
645
  ]
646
646
  }),
647
647
  [
648
- "Azamat UI",
648
+ "Tembro",
649
649
  "Registry",
650
650
  "Dashboard"
651
651
  ].map((t, n) => /* @__PURE__ */ K("div", {
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../public-component-surface.cjs"),t=require("./tembro-registry.json.cjs"),n=require("./package-meta.cjs");let r=require("lucide-react");var i=[[`control`,`Control<TFieldValues>`,`-`,"RHF control instance from `useForm()`."],[`name`,`FieldPath<TFieldValues>`,`-`,`Field path used for registration and value lookup.`],[`rules`,`Omit<UseControllerProps['rules'], 'value' | 'name'>`,`-`,`Validation rules and constraints for the field.`],[`required`,`boolean | "*" | FieldError`,`false`,`Marks field required in shell and optional validation path.`],[`disabled`,`boolean`,`false`,`Disables input and blocks interaction.`],[`readOnly`,`boolean`,`false`,`Allows viewing without edit; value remains controlled.`],[`success`,`ReactNode`,`-`,`Optional success message rendered by the shared field shell.`],[`loading`,`boolean`,`false`,`Shows a consistent loading message inside the shared field shell.`],[`error`,`string | FieldError | null`,`-`,`Optional error override instead of default form state message.`]],a=[`RHF control wiring`,`name-based field registration`,`error and required visual states`,`validation contract`,`label/description consistency`,`disabled/readOnly handling`],o=`tembro`,s=`tembro`,ee=`tembro`,te=`azamat-ui`,c=`npx ${s} init --template next --defaults`,ne=`npx ${s} init --template vite --defaults`,l=`npx ${s} add button input`,u=`${c}\n${l}`,re=`npx ${s} --help`,ie=`npx ${s} theme`,ae=`https://www.npmjs.com/package/tembro`,d=`https://github.com/AzamatJurayev-dev/tembro`,f=`${d}/releases`,p=`https://github.com/AzamatJurayev-dev/azamat-ui`,oe=f,se=`${p}/releases`,m=`/docs`,h=[{version:n.PACKAGE_LATEST_VERSION,date:n.PACKAGE_LATEST_RELEASE_DATE,status:`Published`,summary:`Expanded the registry with newer dashboard, input, badge, sidebar, and notification primitives.`,notes:["Registry truth now includes `collapse`, `sidebar`, `statistic`, `badge`, `notification-center`, and `command-palette`.",`Component metadata was refreshed so docs can keep canonical surfaces and related helpers accurate.`,`CLI-first local component setup remains the default path for Next.js and Vite users.`]},{version:`0.3.18`,date:`June 30, 2026`,status:`Published`,summary:`Refined grouped docs and related-surface mapping.`,notes:[`Input, Select, Card, Badge, Overlay, Form, and Data Table components were aligned with the latest public exports.`,`Deprecated route-level names stayed aliased for compatibility while primary docs move toward simpler canonical surfaces.`,`Docs app metadata now prefers current package registry vocabulary over older showcase-only names.`]}],ce=h[0]?.version??`3.1.5`,le=h[0]?.date??`July 13, 2026`,g=e=>`/components/${e}`,_=e=>`/playground/${e}`,v=e=>`/components/${e}`,y=e=>e.replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/\s+/g,`-`).toLowerCase(),b=(e,t)=>`/components/${e}/${y(t)}`,x=e=>`/templates/${e}`,S=e=>`/blocks/${e}`,C=[`Primitives`,`Form Controls`,`Overlay`,`Data Display`,`Layout`,`Feedback`,`Patterns`],w={Primitives:{title:`Primitives`,description:`Foundation components for actions, text entry, compact layout and small state changes.`,whenToUse:`Use when you need a small reusable UI unit with minimal product opinion.`,whenNotToUse:`Do not start here when the page needs full form orchestration, route structure, or async flows.`},"Form Controls":{title:`Form Controls`,description:`Fields, wrappers and input flows for validation, selection, formatting and data entry.`,whenToUse:`Use for user input, validation, RHF wiring and constrained value contracts.`,whenNotToUse:`Do not use for read-only summaries or large page layout composition.`},Overlay:{title:`Overlay`,description:`Dialog, popover, menu and confirmation surfaces that appear above the current screen.`,whenToUse:`Use for contextual actions, confirmations and short focused tasks.`,whenNotToUse:`Do not hide long multi-step flows inside overlays when a full page works better.`},"Data Display":{title:`Data Display`,description:`Metrics, tables, empty states and read-oriented surfaces for operational screens.`,whenToUse:`Use when the main job is reading, comparing or scanning product data.`,whenNotToUse:`Do not use these as the first layer for input-heavy forms or route-level navigation.`},Layout:{title:`Layout`,description:`Shell, breadcrumbs, side navigation and page framing for structured application routes.`,whenToUse:`Use when the route needs hierarchy, section framing and navigation continuity.`,whenNotToUse:`Do not pull layout components into tiny isolated widgets or inline forms.`},Feedback:{title:`Feedback`,description:`Loading, result and toast patterns for status communication and short response loops.`,whenToUse:`Use when the UI needs clear success, error, pending or completion feedback.`,whenNotToUse:`Do not use feedback components as a substitute for missing page structure or field validation.`},Patterns:{title:`Patterns`,description:`Composed flows and builders that connect multiple primitives.`,whenToUse:`Use when the screen needs a repeatable workflow instead of one atomic control.`,whenNotToUse:`Do not start here when a primitive or one wrapper solves the need cleanly.`}},ue=new Set([`button`,`input`,`textarea`,`checkbox`,`switch`,`badge`,`card`,`tabs`,`collapse`,`kbd`]),de=new Set([`select`,`async-select`,`async-multi-select`,`radio-group`,`date-picker`,`date-range-picker`,`form-field-shell`,`form-input`,`form-select`,`form-textarea`,`form-switch`,`form-date-range-input`,`form-date-picker`,`form-date-range-picker`]),fe=new Set([`dialog`,`popover`,`dropdown-menu`,`tooltip`,`right-click-menu`,`confirm-dialog`,`alert-dialog`,`drawer`]),pe=new Set([`sidebar`,`breadcrumbs`,`section`]),me=new Set([`toast`,`loading-state`,`empty-state`]),he=new Set([`form-builder`,`resource-page`,`resource-detail-page`,`page-toolbar`,`bulk-action-bar`,`detail-layout`,`settings-page`,`data-view`]),T=new Map([[`app-sidebar`,`sidebar`],[`form-async-select`,`form-select`],[`form-search-input`,`form-input`],[`form-password-input`,`form-input`],[`form-number-input`,`form-input`],[`form-phone-input`,`form-input`],[`form-date-input`,`form-input`],[`confirm-action`,`confirm-dialog`],[`file-dropzone`,`file-upload`],[`hover-card`,`popover`],[`metric-card`,`statistic`],[`nav-tabs`,`tabs`],[`section-header`,`section`],[`side-panel`,`sidebar`],[`status-dot`,`status-legend`]]);function E(e){return T.get(e)??e}function D(e){return ue.has(e)?`Primitives`:de.has(e)?`Form Controls`:fe.has(e)?`Overlay`:pe.has(e)?`Layout`:me.has(e)?`Feedback`:he.has(e)?`Patterns`:`Data Display`}function ge(e){return w[D(e)]}function O(e,t){return B.filter(t=>D(t.slug)===e).map(e=>({label:e.title,href:t(e.slug),icon:e.icon,badge:e.status}))}var k=[{slug:`button`,title:`Button`,description:`Trigger actions with multiple variants, sizes, icon positions and loading states.`,icon:r.MousePointerClickIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`variant`,`'default' | 'secondary' | ...`,`'default'`,`The visual style of the button.`],[`size`,`'xs' | 'sm' | 'md' | 'lg' | 'xl'`,`'md'`,`The size of the button.`],[`asChild`,`boolean`,`false`,`Render as a child element using Slot.`],[`disabled`,`boolean`,`false`,`Disables the button.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`onClick`,`(e: MouseEvent) => void`,`-`,`Click event handler.`]],features:[`Variants`,`Sizes`,`Icon support`,`Loading state`]},{slug:`input`,title:`Input`,description:`Primary text-entry surface for forms, filters, and compact editor layouts before moving into presets.`,icon:r.FormInputIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled value.`],[`onValueChange`,`(value) => void`,`-`,`Direct text callback for controlled string flows.`],[`type`,`'text' | 'email' | 'password' | ...`,`'text'`,`Input HTML type before moving to a preset.`],[`clearable`,`boolean`,`false`,`Adds a built-in clear action when value exists.`],[`trailingAction`,`ReactNode`,`-`,`Interactive trailing slot for counters, shortcuts, or actions.`],[`replaceTrailingWhenClear`,`boolean`,`true`,`Keep or replace trailing content when clear is visible.`],[`disabled`,`boolean`,`false`,`Disables the field.`]],features:[`Primary text field`,`Built-in clear action`,`Trailing action slot`,`Preset-friendly API`]},{slug:`textarea`,title:`Textarea`,description:`Multi-line input with autosizing-friendly layout for notes, messages and long-form data.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`placeholder`,`string`,`-`,`Placeholder text.`],[`disabled`,`boolean`,`false`,`Disables the textarea.`],[`rows`,`number`,`-`,`Preferred visible rows.`],[`value`,`string`,`-`,`Controlled value.`],[`onChange`,`(event) => void`,`-`,`Change handler.`]],features:[`Long-form input`,`Disabled state`,`Resizable content`,`Controlled value`]},{slug:`select`,title:`Select`,description:`Primary selection surface for lists, status filters, and compact forms before moving into members.`,icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled selected value.`],[`defaultValue`,`string`,`-`,`Initial selected value.`],[`onValueChange`,`(value) => void`,`-`,`Selection change callback.`],[`searchable`,`boolean`,`false`,`Enables local filtering on the main surface.`],[`multiple`,`boolean`,`false`,`Allows multiple values when the active member supports it.`],[`size`,`'sm' | 'default'`,`'default'`,`Trigger size.`],[`disabled`,`boolean`,`false`,`Disables the trigger.`]],features:[`Primary choice input`,`Local filtering`,`Compact trigger`,`Preset-friendly API`]},{slug:`async-select`,title:`Async Select`,description:`Remote-aware select for search-driven datasets, edit hydration, and production loading or empty states.`,icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled selected value.`],[`selectedOption`,`AsyncSelectOption`,`-`,`Hydrated selected option for controlled edit modes.`],[`onValueChange`,`(value, option?) => void`,`-`,`Selection callback with optional option payload.`],[`loadOptions`,`(search) => Promise<AsyncSelectOption[]>`,`-`,`Async option fetcher.`],[`loadSelectedOption`,`(value) => Promise<AsyncSelectOption | null>`,`-`,`Fetch selected option for controlled edit.`],[`defaultOptions`,`AsyncSelectOption[]`,`-`,`Initial static options.`],[`clearable`,`boolean`,`true`,`Allows clearing the selected value.`],[`cacheOptions`,`boolean`,`false`,`Reuse options cache across repeated queries.`],[`minSearchLength`,`number`,`1`,`Minimum query length for request.`],[`debounceMs`,`number`,`250`,`Delay before calling remote search.`],[`labels`,`AsyncSelectLabels`,`-`,`Copy and state copy labels.`],[`renderLoading`,`AsyncSelectStateRenderer`,`-`,`Custom loading content renderer.`]],features:[`Remote option loading`,`Debounced search`,`Hydrated edit state`,`Clearable controlled output`]},{slug:`async-multi-select`,title:`Async Select`,description:"Legacy alias for Async Select multi mode. Use `isMulti` on AsyncSelect instead of installing a separate component.",icon:r.ComponentIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`isMulti`,`boolean`,`true`,`Turns AsyncSelect into multi mode with tag selection.`],[`value`,`string[]`,`-`,`Controlled selected values in multi mode.`],[`onValueChange`,`(values, options) => void`,`-`,`Bulk selection callback in multi mode.`],[`maxSelected`,`number`,`-`,`Upper cap for total selected items.`],[`showSelectAll`,`boolean`,`false`,`Allow select-all shortcut.`]],features:[`Legacy alias`,`Multi selection`,`Select-all helpers`,`Use AsyncSelect as the canonical API`]},{slug:`number-input`,title:`Number Input`,description:`Numeric entry with parsing, constraints, and precise change semantics.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`number | string`,`-`,`Controlled value.`],[`defaultValue`,`number | string`,`-`,`Initial uncontrolled value.`],[`onChange`,`React.ChangeEventHandler<HTMLInputElement>`,`-`,`Native change event.`],[`onNumberChange`,`(value) => void`,`-`,`Parsed numeric callback.`],[`onValueChange`,`(value) => void`,`-`,`String-based callback for raw typed value.`],[`min`,`number`,`-`,`Lower bound.`],[`max`,`number`,`-`,`Upper bound.`],[`step`,`number`,`1`,`Step size for changes.`],[`allowEmpty`,`boolean`,`false`,`Allows clearing the input without forcing zero.`]],features:[`Parsing`,`min/max`,`Step semantics`,`Invalid number handling`]},{slug:`date-picker`,title:`Date Picker`,description:`Popover-based date picker optimized for form fields and action buttons.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled picker value.`],[`defaultValue`,`string`,`-`,`Initial uncontrolled value.`],[`onValueChange`,`(value) => void`,`-`,`Picker change callback.`],[`disabled`,`boolean`,`false`,`Disables the popover trigger.`],[`min`,`string`,`-`,`Minimum selectable date string.`],[`max`,`string`,`-`,`Maximum selectable date string.`],[`disabledDates`,`string[]`,`-`,`Date literals that are blocked.`],[`className`,`string`,`-`,`Wrapper style class.`]],features:[`Popover selection`,`Date formatting`,`min/max`,`disabledDates`]},{slug:`date-range-picker`,title:`Date Range Picker`,description:`Popover date-range picker for period selection with constrained windows.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`value`,`{ from: string; to: string }`,`-`,`Controlled range value.`],[`defaultValue`,`{ from: string; to: string }`,`-`,`Initial uncontrolled range value.`],[`onValueChange`,`(value) => void`,`-`,`Range callback with from/to.`],[`disabled`,`boolean`,`false`,`Disables all picker interactions.`],[`min`,`string`,`-`,`Earliest allowed date.`],[`max`,`string`,`-`,`Latest allowed date.`],[`disabledDates`,`string[]`,`-`,`Date literals blocked from selection.`],[`className`,`string`,`-`,`Wrapper style class.`]],features:[`Range picker`,`Range windows`,`disabledDates`,`Boundary guards`]},{slug:`form-field-shell`,title:`Form Field Shell`,description:`Composable field shell that standardizes label, description, layout, errors and required markers.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`label`,`string`,`-`,`Field shell label text.`],[`description`,`string`,`-`,`Supporting helper text.`],[`descriptionPosition`,`'top' | 'bottom'`,`'bottom'`,`Description location relative to control.`],[`layout`,`'vertical' | 'horizontal' | 'inline'`,`'vertical'`,`Visual layout mode of label and field.`],[`required`,`boolean`,`false`,`Renders required marker and forwards required metadata.`],[`error`,`string | FieldError`,`-`,`Explicit error message shown in helper area.`],[`labelAction`,`ReactNode`,`-`,`Optional action in label area.`],[`readOnly`,`boolean`,`false`,`Read-only shell state.`],[`disabled`,`boolean`,`false`,`Disables shell state visuals.`],[`className`,`string`,`-`,`Custom wrapper class.`]],features:[`Label contract`,`Inline description`,`Horizontal/inline layout`,`ReadOnly + disabled states`,`Required indicator`]},{slug:`form-input`,title:`Form Input`,description:"Primary RHF field wrapper for text-like inputs. Use `kind` to cover search, password, number, phone, and date flows from one surface.",icon:r.FormInputIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`kind`,`'text' | 'search' | 'password' | 'number' | 'phone' | 'date'`,`'text'`,`Selects the field variant without changing wrapper-level API.`],[`type`,`'text' | 'email' | 'search' | ...`,`'text'`,`Rendered input type for base behavior when using the text variant.`],[`placeholder`,`string`,`-`,`Input placeholder.`],[`onValueChange`,`(value: string) => void`,`-`,`Change callback with parsed display value.`],[`defaultValue`,`string`,`-`,`Uncontrolled initial value in hybrid modes.`]],features:[...a,"Universal `kind` variants",`Error text and message flow`,`Single wrapper migration path`]},{slug:`form-select`,title:`Form Select`,description:'Primary RHF select wrapper. Start with the default simple mode and switch to `kind="async"` when option loading or hydration is remote.',icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`kind`,`'simple' | 'async'`,`'simple'`,`Chooses the select surface while keeping the same form wrapper contract.`],[`options`,`SimpleSelectOption[]`,`-`,`Flat option set for select rendering.`],[`placeholder`,`string`,`-`,`Default label when empty.`],[`onValueChange`,`(value: string) => void`,`-`,`Selection change callback.`]],features:[...a,`Simple + async under one API`,`Form-driven value control`,`Clear/empty handling`]},{slug:`form-textarea`,title:`Form Textarea`,description:`RHF textarea wrapper with shell-level validation messages and descriptions.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`rows`,`number`,`-`,`Visible row count.`],[`minHeight`,`number`,`-`,`Optional minimum height in rem/px.`],[`maxLength`,`number`,`-`,`Input length safety guard.`],[`onValueChange`,`(value: string) => void`,`-`,`Raw text callback from field.`]],features:[...a,`Long text support`,`Error placement`,`Description + helper states`]},{slug:`form-switch`,title:`Form Switch`,description:`RHF switch wrapper with binary payload and shell-level feedback.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`checked`,`boolean`,`-`,`Controlled checked value when controlled by wrapper.`],[`defaultChecked`,`boolean`,`false`,`Uncontrolled initial value in mixed modes.`],[`onCheckedChange`,`(value: boolean) => void`,`-`,`Boolean callback from switch state change.`]],features:[...a,`Boolean value contract`,`Readable shell errors`,`Disabled states`]},{slug:`form-date-range-input`,title:`Form Date Range Input`,description:`RHF range input wrapper supporting from/to bounds and required range validation.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`{ from: string; to: string }`,`-`,`RHF controlled date range value.`],[`min`,`string`,`-`,`Earliest valid date for start boundary.`],[`max`,`string`,`-`,`Latest valid date for end boundary.`],[`required`,`boolean | { from: boolean; to: boolean }`,`false`,`Require one or both bounds.`],[`onValueChange`,`(value: { from: string; to: string }) => void`,`-`,`Range update callback.`]],features:[...a,`Range required validation`,`from/to coordination`,`Filter-ready contract`]},{slug:`form-date-picker`,title:`Form Date Picker`,description:`RHF popover date picker wrapper with shared validation and controlled submit flow.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`string`,`-`,`Controlled popover date value.`],[`disabledDates`,`string[]`,`-`,`Calendar date blacklist.`],[`min`,`string`,`-`,`Earliest selectable date string.`],[`max`,`string`,`-`,`Latest selectable date string.`],[`onValueChange`,`(value: string | null) => void`,`-`,`Normalized picker value callback.`]],features:[...a,`Popover interaction`,`Range of disabled dates`,`Controlled popover state`]},{slug:`form-date-range-picker`,title:`Form Date Range Picker`,description:`RHF wrapper over popover date-range picker with required range and block-out support.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`{ from: string; to: string }`,`-`,`Controlled range value object.`],[`fromLabel`,`string`,`"From"`,`Label text for start field.`],[`toLabel`,`string`,`"To"`,`Label text for end field.`],[`disabledDates`,`string[]`,`-`,`Date literals blocked from selection.`],[`onValueChange`,`(value: { from: string; to: string }) => void`,`-`,`Range callback for form state updates.`]],features:[...a,`Range-specific validation`,`Date range constraints`,`Accessible error mapping`]},{slug:`form-builder`,title:`Form Builder`,description:`RHF section builder for schema-driven forms with submit/reset and disabled/read-only modes.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`control`,`Control<TFieldValues>`,`-`,`RHF control passed to all generated sections.`],[`fields`,`FormBuilderField<TFieldValues, string>[]`,`-`,`Explicit field descriptors for full control.`],[`sections`,`FormBuilderSection<TFieldValues>[]`,`-`,`Form section descriptors with grouped presets.`],[`submitLabel`,`string`,`"Save"`,`Submit button text.`],[`resetLabel`,`string`,`"Reset"`,`Reset button text.`],[`disabled`,`boolean`,`false`,`Disables all controls and actions in builder.`],[`readOnly`,`boolean`,`false`,`Read-only state for generated field controls.`],[`columns`,`1 | 2 | 3`,`1`,`Grid column count for generated sections.`],[`onSubmit`,`(values) => Promise<void> | void`,`-`,"Submit handler for generated `<form>` events."]],features:[`Field schema`,`Section composition`,`Custom render hooks`,`Submit and reset control`,`Disabled/readOnly pass-through`,`Preset factories (inputField, phoneField, ...)`]},{slug:`radio-group`,title:`Radio Group`,description:`Single-choice grouped control for plans, density modes, and mutually exclusive settings.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`options`,`RadioGroupOption[]`,`-`,`Options with label, value and optional description.`],[`value`,`string`,`-`,`Controlled selected value.`],[`defaultValue`,`string`,`-`,`Initial uncontrolled value.`],[`onValueChange`,`(value) => void`,`-`,`Selection callback.`],[`orientation`,`'vertical' | 'horizontal'`,`'vertical'`,`Layout direction.`],[`size`,`'sm' | 'default' | 'lg'`,`'default'`,`Control density.`]],features:[`Single selection`,`Descriptions`,`Horizontal or vertical layout`,`Controlled plans`]},{slug:`checkbox`,title:`Checkbox`,description:`Binary selection control for permissions, tasks and grouped form actions.`,icon:r.BoxIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`checked`,`boolean | 'indeterminate'`,`false`,`Controlled checked state.`],[`defaultChecked`,`boolean | 'indeterminate'`,`false`,`Initial state.`],[`disabled`,`boolean`,`false`,`Disables the control.`],[`onCheckedChange`,`(checked) => void`,`-`,`Checked state callback.`]],features:[`Checked state`,`Indeterminate state`,`Disabled state`,`Task lists`]},{slug:`switch`,title:`Switch`,description:`On/off control for preferences, settings and lightweight toggles.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`checked`,`boolean`,`false`,`Controlled on/off state.`],[`defaultChecked`,`boolean`,`false`,`Initial state.`],[`disabled`,`boolean`,`false`,`Disables the switch.`],[`onCheckedChange`,`(checked) => void`,`-`,`State change callback.`]],features:[`Checked state`,`Settings toggles`,`Disabled state`,`Compact interaction`]},{slug:`badge`,title:`Badge`,description:`Small status surface for counts, labels, intents and inline metadata.`,icon:r.BadgeIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`variant`,`'default' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link'`,`'default'`,`Visual style.`],[`render`,`ReactNode`,`-`,`Optional custom render target.`],[`className`,`string`,`-`,`Additional CSS classes.`]],features:[`Status labels`,`Variants`,`Inline metadata`,`Compact counters`]},{slug:`card`,title:`Card`,description:`Structured content container with header, content and footer slots.`,icon:r.LayoutDashboardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`size`,`'default' | 'sm'`,`'default'`,`Card density.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`children`,`ReactNode`,`-`,`Composed card content.`]],features:[`Header/footer slots`,`Compact size`,`Dashboard modules`,`Composed content`]},{slug:`tabs`,title:`Tabs`,description:`Segmented navigation for switching views without leaving the current route.`,icon:r.Layers3Icon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled active tab.`],[`defaultValue`,`string`,`-`,`Initial tab.`],[`orientation`,`'horizontal' | 'vertical'`,`'horizontal'`,`Tab list direction.`],[`disabled`,`boolean`,`false`,`Disables a trigger.`]],features:[`Segmented nav`,`Panel switching`,`Controlled state`,`Settings sections`]},{slug:`collapse`,title:`Collapse`,description:`Expandable disclosure surface for FAQs, dense settings, and progressive detail blocks.`,icon:r.WorkflowIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state for a single collapse item.`],[`defaultOpen`,`boolean`,`false`,`Initial uncontrolled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`items`,`CollapseItem[]`,`-`,"Grouped disclosure items for `CollapseGroup`."],[`type`,`'single' | 'multiple'`,`'multiple'`,`Whether one or many group items can stay open.`]],features:[`Disclosure sections`,`Controlled state`,`Grouped items`,`Dense content reveal`]},{slug:`dialog`,title:`Dialog`,description:`Focused modal surface for confirmation flows, forms and destructive actions.`,icon:r.AlertCircleIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`defaultOpen`,`boolean`,`false`,`Initial open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`showCloseButton`,`boolean`,`true`,`Toggles the close affordance.`]],features:[`Modal trigger`,`Overlay`,`Header/footer slots`,`Close actions`]},{slug:`popover`,title:`Popover`,description:`Lightweight anchored overlay for context actions and compact helper content.`,icon:r.SparklesIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`side`,`'top' | 'right' | 'bottom' | 'left'`,`'bottom'`,`Popup side.`],[`align`,`'start' | 'center' | 'end'`,`'center'`,`Popup alignment.`],[`sideOffset`,`number`,`4`,`Distance from trigger.`],[`children`,`ReactNode`,`-`,`Trigger and content composition.`]],features:[`Anchored overlay`,`Title/description`,`Action menus`,`Compact help content`]},{slug:`dropdown-menu`,title:`Dropdown Menu`,description:`Menu overlays with action, checkbox and radio items for dense navigation.`,icon:r.ComponentIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`children`,`ReactNode`,`-`,`Trigger and content composition.`],[`side`,`'top' | 'right' | 'bottom' | 'left'`,`'bottom'`,`Popup side.`],[`align`,`'start' | 'center' | 'end'`,`'start'`,`Popup alignment.`],[`sideOffset`,`number`,`4`,`Distance from trigger.`],[`disabled`,`boolean`,`false`,`Disable menu interaction.`]],features:[`Dropdown patterns`,`Checkbox items`,`Radio groups`,`Shortcut labels`]},{slug:`tooltip`,title:`Tooltip`,description:`Compact hover and focus hint for controls that need one short piece of guidance.`,icon:r.SparklesIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`content`,`ReactNode`,`-`,`Tooltip label or helper content.`],[`side`,`'top' | 'bottom' | 'left' | 'right'`,`'top'`,`Placement around the trigger.`],[`disabled`,`boolean`,`false`,`Disables tooltip rendering.`],[`children`,`ReactNode`,`-`,`Trigger content wrapped by the tooltip.`]],features:[`Short helper copy`,`Hover + focus`,`Side placement`,`Low-noise guidance`]},{slug:`right-click-menu`,title:`Right Click Menu`,description:`Context menu surface for dense workspaces that need pointer-driven secondary actions.`,icon:r.MousePointerClickIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`items`,`RightClickMenuItem[]`,`-`,`Context actions shown after right click.`],[`children`,`ReactNode`,`-`,`Target area that owns the right-click interaction.`],[`className`,`string`,`-`,`Wrapper classes for the interaction zone.`]],features:[`Context actions`,`Pointer workflow`,`Compact menus`,`Workspace interactions`]},{slug:`confirm-dialog`,title:`Confirm Dialog`,description:`Clear confirm overlays for safe destructive and irreversible actions.`,icon:r.AlertCircleIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback for parent-driven flow.`],[`title`,`string`,`-`,`Dialog title text.`],[`description`,`string`,`-`,`Secondary context and scope text.`],[`confirmText`,`string`,`'Confirm'`,`Primary action label.`],[`confirmVariant`,`'default' | 'destructive'`,`'default'`,`Primary button emphasis.`],[`isLoading`,`boolean`,`false`,`Disables actions while async action runs.`],[`onConfirm`,`() => void | Promise<void>`,`-`,`Required confirm handler.`]],features:[`Destructive confirmations`,`Controlled usage`,`Async confirm`,`Clear copy guidance`]},{slug:`sidebar`,title:`Sidebar`,description:`Reusable application sidebar with header, footer, active states, collapsed mode and custom link rendering.`,icon:r.LayoutDashboardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`items`,`AppSidebarNavItem[]`,`[]`,`Sidebar entries with active, disabled, badge and callback state.`],[`header`,`ReactNode`,`-`,`Optional content rendered above navigation items.`],[`footer`,`ReactNode`,`-`,`Optional footer actions or account area.`],[`collapsed`,`boolean`,`false`,`Compact sidebar mode for dense layouts.`],[`onItemSelect`,`(item) => void`,`-`,`Called when a sidebar item is selected.`],[`renderItem`,`(item, state) => ReactNode`,`-`,`Override full item rendering.`],[`renderLink`,`(props) => ReactNode`,`-`,`Override anchor rendering for router integration.`]],features:[`Navigation sidebar`,`Collapsed state`,`Header and footer slots`,`Router-friendly rendering`]},{slug:`breadcrumbs`,title:`Breadcrumbs`,description:`Navigation breadcrumbs with current context, overflow collapse, and custom link rendering.`,icon:r.ChevronRightIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`items`,`BreadcrumbItem[]`,`-`,`Breadcrumb sequence for navigation context.`],[`separator`,`ReactNode`,`-`,`Custom separator between items.`],[`maxItems`,`number`,`-`,`Collapses middle items when the path gets too long.`],[`renderLink`,`(props) => ReactNode`,`-`,`Custom link renderer for each item.`],[`currentItemLabel`,`string`,`-`,`Accessible label for the current page item.`]],features:[`Navigation context`,`Custom separators`,`Custom links`,`Current state support`]},{slug:`page-header`,title:`Page Header`,description:`Top-level page heading block with breadcrumbs, actions and optional meta area.`,icon:r.CreditCardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`title`,`ReactNode`,`-`,`Primary heading text.`],[`description`,`ReactNode`,`-`,`Subtext explanation for current page.`],[`eyebrow`,`ReactNode`,`-`,`Small uppercase lead text.`],[`breadcrumbs`,`ReactNode`,`-`,`Optional breadcrumb trail.`],[`actions`,`ReactNode`,`-`,`Actions rendered on the right side.`],[`meta`,`ReactNode`,`-`,`Secondary metadata block.`],[`sticky`,`boolean`,`false`,`Enable sticky positioning in scroll containers.`]],features:[`Page context`,`Action areas`,`Breadcrumb composition`,`Sticky header option`]},{slug:`info-card`,title:`Info Card`,description:`Flexible context card for summaries, metadata, quick actions, and supporting media inside real product surfaces.`,icon:r.FileTextIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`eyebrow`,`ReactNode`,`-`,`Small label above card title.`],[`title`,`ReactNode`,`-`,`Main card title.`],[`description`,`ReactNode`,`-`,`Supporting description text.`],[`icon`,`ReactNode`,`-`,`Optional leading icon.`],[`actions`,`ReactNode`,`-`,`Card action area.`],[`media`,`ReactNode`,`-`,`Optional media block.`],[`compact`,`boolean`,`false`,`Compact card density.`],[`orientation`,`'vertical' | 'horizontal'`,`'vertical'`,`Content layout direction.`]],features:[`Metadata summaries`,`Action regions`,`Media slots`,`Vertical or horizontal layout`]},{slug:`activity-feed`,title:`Activity Feed`,description:`Timeline-like feed list for events, audits and recent activity surfaces.`,icon:r.BadgeIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`items`,`ActivityFeedItem[]`,`-`,`List of timeline-like activity rows.`],[`title`,`ReactNode`,`-`,`Feed title.`],[`description`,`ReactNode`,`-`,`Supporting card description.`],[`actions`,`ReactNode`,`-`,`Optional header actions.`],[`empty`,`ReactNode`,`-`,`Fallback when there are no items.`],[`compact`,`boolean`,`false`,`Compact feed density.`],[`itemClassName`,`string`,`-`,`Class for each feed item.`]],features:[`Audit timeline`,`Empty state handling`,`Compact mode`,`Action rows`]},{slug:`data-state`,title:`Data State`,description:`Unified data state block for empty, search-empty, loading, error and success surfaces.`,icon:r.AlertCircleIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`status`,`"idle" | "loading" | "empty" | "error" | "success"`,`-`,`State preset that controls default copy and icon.`],[`title`,`ReactNode`,`-`,`Primary state title.`],[`description`,`ReactNode`,`-`,`Short explanation for the current state.`],[`variant`,`"card" | "plain" | "inline"`,`"card"`,`Container style for page, table and inline usage.`],[`query`,`ReactNode`,`-`,`Optional searched value for empty search results.`],[`actions`,`ReactNode`,`-`,`Custom action elements.`],[`onRetry`,`() => void`,`-`,`Retry callback for error/loading recovery.`],[`onClear`,`() => void`,`-`,`Clear callback for search-empty states.`]],features:[`Empty/search-empty states`,`Error retry`,`Plain table fallback`,`Inline state rows`]},{slug:`loading-state`,title:`Loading State`,description:`Scoped loading block with spinner, skeleton, or progress variants for real route and panel states.`,icon:r.SparklesIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`label`,`ReactNode`,`-`,`Loading heading.`],[`description`,`ReactNode`,`-`,`Loading explanation text.`],[`icon`,`ReactNode`,`-`,`Optional loading icon.`],[`variant`,`'spinner' | 'skeleton' | 'progress'`,`'spinner'`,`Visual loading style.`],[`progress`,`number`,`-`,"Progress amount when `variant` is `progress`."],[`className`,`string`,`-`,`Container class override.`]],features:[`Spinner, skeleton and progress`,`Section loading labels`,`Scoped placeholders`,`Custom icon`]},{slug:`scroll-box`,title:`Scroll Box`,description:`Scoped scrolling surface for dense lists, side panels, and bounded data regions.`,icon:r.PanelTopIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`maxHeight`,`string | number`,`-`,`Maximum rendered height before scroll starts.`],[`axis`,`'y' | 'x' | 'both'`,`'y'`,`Allowed scroll direction.`],[`children`,`ReactNode`,`-`,`Scrollable content.`],[`className`,`string`,`-`,`Container classes.`]],features:[`Bounded scroll`,`Axis control`,`Dense lists`,`Panel content`]},{slug:`toast`,title:`Toast`,description:`Global transient messaging system with provider, stacking, promise states, placement and dismiss behavior.`,icon:r.ShieldCheckIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`children`,`ReactNode`,`-`,`Application children wrapped by provider.`],[`position`,`'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'`,`'top-right'`,`Toast container placement.`],[`defaultDuration`,`number`,`3000`,`Default auto-dismiss duration in ms.`],[`maxToasts`,`number`,`5`,`Maximum number of visible toasts.`],[`pauseOnHover`,`boolean`,`true`,`Pause dismiss timer when hovered.`],[`addToast`,`(input) => string`,`-`,`API to push a toast from context.`],[`success/info/warning/error/loading`,`(input) => string`,`-`,`Tone helpers for common outcomes.`],[`promise`,`(promise, messages) => Promise<T>`,`-`,`Tracks loading/success/error from async work.`]],features:[`Provider setup`,`Stacking and duration`,`Promise states`,`Placement options`]},{slug:`table`,title:`Table primitive`,description:`Low-level semantic table pieces for internal composition, not the primary public data-grid showcase.`,icon:r.Table2Icon,category:`Data Display`,status:`Preview`,installCommand:u,propsRows:[[`className`,`string`,`-`,`Additional table styling.`],[`children`,`ReactNode`,`-`,`Header, body and row markup.`],[`caption`,`ReactNode`,`-`,`Optional table caption.`]],features:[`Semantic rows`,`Header/body slots`,`Internal composition`,`Primitive markup`]},{slug:`kbd`,title:`Kbd`,description:`Keyboard hint token for shortcuts, command palettes, and focused action labels.`,icon:r.TerminalSquareIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`size`,`'sm' | 'default' | 'lg'`,`'default'`,`Visual size for the key token.`],[`variant`,`'default' | 'outline' | 'ghost'`,`'default'`,`Surface treatment.`],[`children`,`ReactNode`,`-`,`Rendered key label.`],[`className`,`string`,`-`,`Extra classes for the token.`]],features:[`Shortcut tokens`,`Size variants`,`Outline or ghost style`,`Command labels`]},{slug:`data-table`,title:`Data Table`,description:`Primary reusable admin data grid with sorting, row selection, bulk actions, saved views, mobile cards, and server-aware pagination.`,icon:r.Table2Icon,category:`Data Display`,status:`Preview`,installCommand:u,propsRows:[[`columns`,`ColumnDef<RowData>[]`,`-`,`Table column definitions.`],[`data`,`Array<RowData>`,`-`,`Row data at current page in server mode.`],[`getRowId`,`(row) => string`,`-`,`Stable row identifier function.`],[`sorting`,`SortingState`,`[]`,`Controlled sort state.`],[`rowSelection`,`RowSelectionState`,`{}`,`Controlled row selection state.`],[`enableRowSelection`,`boolean`,`false`,`Turns row selection on.`],[`pagination`,`PaginationStateProps`,`-`,`Page controls, counts and page size.`],[`toolbarProps`,`ToolbarProps`,`-`,`Header actions, search and contextual controls.`],[`onRowClick`,`(row) => void`,`-`,`Row click callback.`],[`isLoading`,`boolean`,`false`,`Loading indicator state.`],[`isError`,`boolean`,`false`,`Error state flag for fallback.`],[`loadingState`,`LoadingState`,`-`,"Loading UI when `isLoading` is true."],[`emptyState`,`Omit<DataStateProps, "status">`,`-`,`State shown when no rows are present.`],[`errorState`,`ErrorState`,`-`,"State shown when `isError` is true."]],features:[`Column-based API`,`Sorting and pagination`,`Row selection and bulk actions`,`Toolbar, visibility and saved views`,`Mobile cards and server mode`,`Empty/loading/error states`]}],_e={button:{groupSlugs:[`actions`,`navigation`,`layout`],componentSlugs:[`badge`,`card`,`tabs`]},input:{groupSlugs:[`form`,`filters`],componentSlugs:[`textarea`,`select`,`switch`]},textarea:{groupSlugs:[`form`,`layout`],componentSlugs:[`input`,`card`,`badge`]},select:{groupSlugs:[`filters`,`overlay`],componentSlugs:[`select`,`async-select`,`form-select`]},"radio-group":{groupSlugs:[`form`],componentSlugs:[`checkbox`,`switch`,`select`]},"async-select":{groupSlugs:[`form`,`filters`],componentSlugs:[`select`,`async-select`,`form-select`]},"async-multi-select":{groupSlugs:[`form`],componentSlugs:[`select`,`async-select`,`form-select`]},"date-picker":{groupSlugs:[`form`,`display`],componentSlugs:[`calendar`,`date-range-picker`]},"date-range-picker":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-picker`,`calendar`,`data-table`]},"form-field-shell":{groupSlugs:[`form`],componentSlugs:[`form-input`,`form-select`,`form-textarea`,`form-switch`,`input`,`textarea`,`switch`]},"form-input":{groupSlugs:[`form`],componentSlugs:[`form-field-shell`,`form-textarea`,`input`]},"form-select":{groupSlugs:[`form`],componentSlugs:[`async-select`,`select`,`form-field-shell`]},"form-textarea":{groupSlugs:[`form`],componentSlugs:[`form-input`,`textarea`,`form-field-shell`]},"form-switch":{groupSlugs:[`form`],componentSlugs:[`form-field-shell`,`switch`,`checkbox`,`form-builder`]},"form-date-range-input":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-range-picker`,`form-date-range-picker`,`form-field-shell`]},"form-date-picker":{groupSlugs:[`form`],componentSlugs:[`date-picker`,`calendar`,`form-field-shell`]},"form-date-range-picker":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-range-picker`,`form-date-range-input`,`calendar`,`form-field-shell`]},"form-builder":{groupSlugs:[`patterns`,`form`],componentSlugs:[`form-field-shell`,`form-input`,`form-switch`,`form-textarea`,`form-select`]},checkbox:{groupSlugs:[`form`],componentSlugs:[`switch`,`button`,`card`]},switch:{groupSlugs:[`layout`],componentSlugs:[`checkbox`,`tabs`,`badge`]},badge:{groupSlugs:[`actions`,`display`],componentSlugs:[`button`,`card`,`tabs`]},card:{groupSlugs:[`layout`,`display`,`actions`],componentSlugs:[`tabs`,`badge`,`button`]},tabs:{groupSlugs:[`navigation`,`layout`],componentSlugs:[`dialog`,`card`,`button`]},collapse:{groupSlugs:[`layout`,`display`,`form`],componentSlugs:[`tabs`,`card`]},dialog:{groupSlugs:[`overlay`,`notifications`],componentSlugs:[`popover`,`confirm-dialog`]},popover:{groupSlugs:[`overlay`,`navigation`],componentSlugs:[`dropdown-menu`,`dialog`,`confirm-dialog`]},"dropdown-menu":{groupSlugs:[`overlay`,`navigation`,`actions`],componentSlugs:[`popover`,`dialog`,`confirm-dialog`]},tooltip:{groupSlugs:[`overlay`,`actions`,`form`],componentSlugs:[`popover`,`button`,`input`]},"right-click-menu":{groupSlugs:[`overlay`,`actions`,`navigation`],componentSlugs:[`dropdown-menu`,`popover`,`data-table`]},"confirm-dialog":{groupSlugs:[`overlay`,`notifications`],componentSlugs:[`dialog`,`alert-dialog`]},table:{groupSlugs:[`data-table`,`display`,`filters`],componentSlugs:[`card`,`tabs`,`badge`]},"data-table":{groupSlugs:[`data-table`,`layout`,`filters`],componentSlugs:[`table`,`card`,`tabs`]},sidebar:{groupSlugs:[`layout`,`navigation`],componentSlugs:[`breadcrumbs`]},breadcrumbs:{groupSlugs:[`layout`,`navigation`],componentSlugs:[`section`,`sidebar`]},"info-card":{groupSlugs:[`display`,`layout`],componentSlugs:[`activity-feed`,`card`]},"activity-feed":{groupSlugs:[`display`],componentSlugs:[`info-card`]},"data-state":{groupSlugs:[`display`],componentSlugs:[`loading-state`,`data-table`]},"loading-state":{groupSlugs:[`display`],componentSlugs:[`data-state`,`data-table`]},"scroll-box":{groupSlugs:[`display`,`layout`],componentSlugs:[`table`,`data-table`]},toast:{groupSlugs:[`notifications`,`overlay`],componentSlugs:[`confirm-dialog`,`dialog`]},kbd:{groupSlugs:[`command`,`actions`],componentSlugs:[`button`,`tooltip`,`input`]}},ve=new Set([`button`,`input`,`select`,`date-picker`,`checkbox`,`switch`,`badge`,`card`,`tabs`,`dialog`,`popover`,`dropdown-menu`,`sidebar`,`breadcrumbs`,`data-table`,`info-card`,`activity-feed`,`loading-state`,`toast`,`notification-center`,`progress`]),ye={textarea:`input`,"tag-input":`input`,"otp-input":`input`,"form-input":`input`,"form-textarea":`input`,"async-select":`select`,"async-multi-select":`select`,"form-select":`select`,calendar:`date-picker`,"date-range-picker":`date-picker`,"form-date-range-input":`date-picker`,"form-date-picker":`date-picker`,"form-date-range-picker":`date-picker`,"confirm-dialog":`dialog`,"app-header":`sidebar`,section:`sidebar`,toolbar:`sidebar`,"split-layout":`sidebar`,"page-header":`breadcrumbs`,table:`data-table`},A={input:[{key:`core`,title:`Core input surfaces`,description:`Start with the default text field and move outward only when the workflow demands specialization.`,slugs:[`input`,`textarea`]},{key:`related`,title:`Related input patterns`,description:`Specialized input types for search, masking, numeric entry, and compact structured values.`,slugs:[`tag-input`,`otp-input`]},{key:`integrations`,title:`Form integrations`,description:`Use these wrappers when the field needs to plug directly into shared form shells or React Hook Form.`,slugs:[`form-input`,`form-textarea`]}],select:[{key:`core`,title:`Core select surfaces`,description:`Use the base selection control first, then expand only when the interaction model truly changes.`,slugs:[`select`]},{key:`related`,title:`Related select members`,description:`These members add real behavior such as remote loading or keyboard-first local filtering.`,slugs:[`async-select`]},{key:`integrations`,title:`Form integrations`,description:`Use wrapped selects when you need consistent form-level validation, labels, and shell behavior.`,slugs:[`form-select`]}],"date-picker":[{key:`core`,title:`Core date surfaces`,description:`Choose the popover picker or range picker when visual selection matters more than raw text entry.`,slugs:[`date-picker`,`date-range-picker`,`calendar`]},{key:`integrations`,title:`Form integrations`,description:`Use wrapped date fields when validation, labels, and form shell behavior should stay standardized.`,slugs:[`form-input`,`form-date-range-input`,`form-date-picker`,`form-date-range-picker`]}],dialog:[{key:`core`,title:`Core overlay surfaces`,description:`Use the lightest overlay that still matches the interaction. Do not default every action to a full modal.`,slugs:[`dialog`,`popover`,`dropdown-menu`]},{key:`advanced`,title:`Confirmation and shell patterns`,description:`These composed overlays handle destructive confirmation and side-drawer editing flows.`,slugs:[`confirm-dialog`,`drawer`]}],sidebar:[{key:`core`,title:`Sidebar surfaces`,description:`These pieces define the reusable sidebar surface first, then layer shell framing around it only when the route really needs it.`,slugs:[`sidebar`,`breadcrumbs`]},{key:`related`,title:`Route-level patterns`,description:`Use these patterns only after the sidebar and navigation contract are already clear.`,slugs:[`section`,`toolbar`,`split-layout`]}],"data-table":[{key:`core`,title:`Primary data table surface`,description:`Start with the full DataTable route first. It demonstrates the reusable grid the way product teams actually consume it.`,slugs:[`data-table`]},{key:`related`,title:`Supporting primitive`,description:`Drop down to the semantic table primitive only when you do not need the full DataTable workflow.`,slugs:[`table`]}],toast:[{key:`core`,title:`Global feedback surface`,description:`Use toast messaging for transient global feedback, not for critical form validation or persistent page states.`,slugs:[`toast`]}]},j=t.default,M=j?.groups??{},N=new Set((j?.recommended??[]).map(e=>e)),P=j?.migrationAliases??{},F=new Set(Object.values(P)),I=new Set([`app-header`,`async-multi-select`,`form`,`form-field`,`form-field-shell`,`form-input`,`form-select`,`form-switch`,`form-textarea`,`page-header`]),be=new Set([`kits`]),L=new Set([`all`,`dashboard`,`calendar-kit`,`wizard-kit`,...I]),xe=new Set([`hooks`]),Se={ui:`Components`,actions:`Components`,layout:`Components`,feedback:`Data Display`,display:`Data Display`,overlay:`Overlay`,form:`Forms`,dataTable:`Data Display`,data_table:`Data Display`,navigation:`Data Display`,filters:`Data Display`,calendar:`Data Display`,upload:`Data Display`,wizard:`Data Display`,notifications:`Data Display`,command:`Data Display`,patterns:`Patterns`},Ce={ui:r.ComponentIcon,actions:r.SparklesIcon,feedback:r.WalletIcon,display:r.DatabaseIcon,overlay:r.PanelTopIcon,inputs:r.FormInputIcon,form:r.FormInputIcon,dataTable:r.Table2Icon,data_table:r.Table2Icon,layout:r.LayoutDashboardIcon,navigation:r.BoxIcon,filters:r.SlidersHorizontalIcon,calendar:r.CalendarClockIcon,upload:r.FileTextIcon,wizard:r.WorkflowIcon,notifications:r.BellIcon,command:r.TerminalSquareIcon,patterns:r.BlocksIcon,hooks:r.SmartphoneIcon};function R(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}var we=new Set(k.map(e=>e.slug)),z=new Map;for(let[t,n]of Object.entries(M))if(!(be.has(t)||xe.has(t)))for(let i of n){let n=P[i],a=n??i;if(!i||L.has(i)||L.has(a)||F.has(a)&&!e.isPublicComponentSurfaceSlug(a)||F.has(i)&&!e.isPublicComponentSurfaceSlug(i)||we.has(a)||z.has(a))continue;let o=Se[t]??`Data Display`,s=Ce[t]??r.SparklesIcon;z.set(a,{slug:a,title:R(n||a),description:`${R(a)} surfaced from package registry group "${t}".`,icon:s,category:o,status:N.has(a)?`Stable`:`Preview`,installCommand:u,propsRows:[[`className`,`string`,`-`,`Additional classes for wrapper element.`]],features:[t]})}var Te=[...z.values()],B=[...k,...Te].filter(e=>!I.has(e.slug)),V=[],H=new Map(V.map(e=>[e.slug,e])),U=new Set([...I,`app-header`,`page-header`,`resource-page`,`resource-detail-page`]),Ee=new Set([...U,...T.keys()]);function W(e){if(!e)return;let t=E(e),n=K(t);return t===n?H.get(t)??B.find(e=>e.slug===t):H.get(n)??B.find(e=>e.slug===n)}function G(e){return H.has(E(e))||ve.has(E(e))}function K(e){let t=E(e);return G(t)?t:ye[t]??t}function q(e){return W(K(e))?.title??e}function J(){let t=B.filter(e=>K(e.slug)===e.slug),n=new Map;for(let e of t)n.set(e.slug,e);for(let e of V)n.set(e.slug,e);return Array.from(n.values()).filter(e=>!U.has(e.slug)).filter(t=>e.isPublicComponentSurfaceSlug(t.slug)).sort((t,n)=>{let r=e.comparePublicComponentSurfaceOrder(t.slug,n.slug);return r===0?t.title.localeCompare(n.title):r})}function De(){let e=new Map;for(let t of B)e.set(t.slug,t);for(let t of V)e.set(t.slug,t);return Array.from(e.values()).filter(e=>!Ee.has(e.slug)).sort((e,t)=>e.title.localeCompare(t.title))}function Y(e){let t=e?K(e):void 0;return J().map(e=>({slug:e.slug,title:e.title,href:g(e.slug),status:e.status,group:D(e.slug),active:t?K(e.slug)===t:!1})).sort((e,t)=>e.title.localeCompare(t.title))}function Oe(e){let t=new Map;for(let n of Y(e)){let e=n.title[0]?.toUpperCase()??`#`,r=`${e} - ${n.group}`;t.has(r)||t.set(r,{key:r,label:`${e} • ${n.group}`,items:[]}),t.get(r)?.items.push(n)}return Array.from(t.values())}function X(e){return(A[K(e)]??[]).map(e=>({...e,slugs:e.slugs.filter(e=>!I.has(e))})).filter(e=>e.slugs.length>0)}function Z(e){return(e?[K(e)]:Object.keys(A)).flatMap(e=>{let t=W(e);return X(e).flatMap(n=>{let r=[];for(let i of n.slugs){let a=B.find(e=>e.slug===i);a&&r.push({component:a.title,slug:a.slug,title:a.title,surfaceSlug:e,surfaceTitle:t?.title??e,sectionId:n.key,sectionLabel:n.title,sectionKey:n.key,summary:a.description,useWhen:n.description,maturity:n.key===`core`?`core`:n.key===`compatibility`?`compatibility`:`helper`,status:a.status,href:g(a.slug)})}return r})})}function ke(e){return Z().find(t=>t.component===e)}function Ae(e){let t=new Set(e);return Z().filter(e=>t.has(e.component))}var Q=[{slug:`actions`,title:`Actions`,description:`Context actions, copy controls and quick grids for dense product surfaces.`,icon:r.MousePointerClickIcon,category:`Actions`,exports:[`ActionMenu`,`CopyButton`,`QuickActionGrid`],href:v(`actions`),status:`Stable`,features:[`Quick actions`,`Copy affordances`,`Dense command blocks`]},{slug:`layout`,title:`Application layout`,description:`Route-level sidebars, breadcrumbs and page framing helpers that support real reusable components instead of replacing them.`,icon:r.LayoutDashboardIcon,category:`Layout`,exports:[`Sidebar`,`Breadcrumbs`,`Section`],href:v(`layout`),status:`Stable`,features:[`Sidebar navigation`,`Page framing`,`Section structure`,`Sticky actions`]},{slug:`filters`,title:`Filters`,description:`Filter bars and chip patterns for narrowing data without leaving the current view.`,icon:r.SlidersHorizontalIcon,category:`Data`,exports:[`FilterBar`,`SavedFilterSelect`],href:v(`filters`),status:`Stable`,features:[`Filter bars`,`Chips`,`Search + filter pairing`]},{slug:`overlay`,title:`Overlay patterns`,description:`Confirm flows, modal shells, sheet layouts and dialog actions.`,icon:r.AlertCircleIcon,category:`Overlay`,exports:[`AlertDialog`,`ConfirmDialog`,`Drawer`,`Tooltip`,`Popover`,`RightClickMenu`],href:v(`overlay`),status:`Stable`,features:[`Confirm flows`,`Sheet layouts`,`Modal actions`,`Lightweight helper hints`]},{slug:`navigation`,title:`Navigation`,description:`Pagination and tabbed navigation patterns for sectioned or paginated interfaces.`,icon:r.ChevronRightIcon,category:`Layout`,exports:[`Pagination`],href:v(`navigation`),status:`Stable`,features:[`Pagination`,`Page tabs`,`Stepper tabs`]},{slug:`form`,title:`Form`,description:`Form shell and wrapper layer for labels, validation, and repeatable field composition.`,icon:r.FileTextIcon,category:`Forms`,exports:[`FormFieldShell`,`FormInput`,`FormSelect`,`FormTextarea`,`FormSwitch`,`FormDatePicker`],href:v(`form`),status:`Stable`,features:[`Field shell`,`Wrapped controls`,`Date helpers`,`Consistent validation`]},{slug:`display`,title:`Display`,description:`Metrics, activity, avatars, timelines and descriptive content surfaces.`,icon:r.DatabaseIcon,category:`Data`,exports:[`DescriptionList`,`Progress`,`PageState`,`Timeline`,`Statistic`,`InfoCard`,`ActivityFeed`,`StatusLegend`,`Avatar`,`DataState`,`ScrollBox`],href:v(`display`),status:`Stable`,features:[`Metric grids`,`Timelines`,`Activity feeds`,`Status legends`]},{slug:`data-table`,title:`DataTable`,description:`Primary reusable data-grid system. Helper pieces stay secondary to the main table route.`,icon:r.Table2Icon,category:`Data`,exports:[`DataTable`],href:v(`data-table`),status:`Stable`,features:[`Toolbar`,`Selection`,`Row actions`,`Saved views`,`Pagination`]},{slug:`notifications`,title:`Notifications`,description:`Toast and notification surfaces for transient feedback, async completion, and unread activity.`,icon:r.BadgeIcon,category:`Overlay`,exports:[`Toast`,`NotificationCenter`],href:v(`notifications`),status:`Preview`,features:[`Toasts`,`Promise feedback`,`Unread activity`,`Status messaging`]},{slug:`command`,title:`Command`,description:`Command palette patterns for keyboard-driven discovery, search, grouped actions and async navigation.`,icon:r.TerminalSquareIcon,category:`Workflow`,exports:[`CommandPalette`],href:v(`command`),status:`Preview`,features:[`Command palette`,`Grouped actions`,`Async search`,`Keyboard discovery`]},{slug:`calendar`,title:`Calendar`,description:`Calendar, date picker and range picker flows for scheduling and reporting.`,icon:r.Grid2x2Icon,category:`Workflow`,exports:[`DateUtils`,`Calendar`,`DatePicker`,`DateRangePicker`],href:v(`calendar`),status:`Stable`,features:[`Date picker`,`Range picker`,`Scheduling flows`]},{slug:`upload`,title:`Upload`,description:`File and image upload surfaces with preview-friendly interaction patterns.`,icon:r.BlocksIcon,category:`Workflow`,exports:[`FileUpload`,`ImageUpload`],href:v(`upload`),status:`Preview`,features:[`File upload`,`Image upload`,`Attachment flows`]},{slug:`wizard`,title:`Wizard`,description:`Stepper and multi-step workflow patterns for onboarding and guided flows.`,icon:r.WorkflowIcon,category:`Workflow`,exports:[`Stepper`,`Wizard`],href:v(`wizard`),status:`Stable`,features:[`Step flow`,`Guided forms`,`Progress state`]}],je=[{label:`Docs`,href:m},{label:`Installation`,href:`/docs/installation`},{label:`Components`,href:`/components`},{label:`Search`,href:`/search`},{label:`Changelog`,href:`/changelog`}],Me=[{title:`Getting Started`,items:[{label:`Overview`,href:m,icon:r.BookOpenIcon},{label:`Installation`,href:`/docs/installation`,icon:r.ChevronRightIcon},{label:`Components catalog`,href:`/components`,icon:r.ComponentIcon},{label:`Changelog`,href:`/changelog`,icon:r.FileTextIcon}]},...C.map(e=>({title:e,items:O(e,g)})).filter(e=>e.items.length>0)],Ne=[{title:`Getting Started`,items:[{label:`Introduction`,href:`/playground/button`,icon:r.BookOpenIcon},{label:`Installation`,href:_(`button`),icon:r.ChevronRightIcon},{label:`Theming`,href:_(`button`),icon:r.SparklesIcon},{label:`Tokens`,href:_(`badge`),icon:r.Layers3Icon},{label:`Icon Library`,href:_(`popover`),icon:r.Grid2x2Icon}]},...C.map(e=>({title:e,items:O(e,_)})).filter(e=>e.items.length>0)],Pe=[`All blocks`,`Dashboard`,`Auth`,`Table`,`Settings`,`Pricing`,`Product`,`Marketing`],$=[`All layouts`,`Application`,`Marketing`],Fe=[`All themes`,`Light`,`Soft`],Ie=[`Popular`,`A-Z`],Le=[{title:`Application blocks`,text:`Dashboard, table and settings blocks should show route structure, visible actions and realistic operational density.`,items:[`Sidebar shell`,`Toolbar actions`,`Table states`,`Settings surfaces`]},{title:`Entry and conversion blocks`,text:`Auth, pricing, product and marketing blocks should explain trust, conversion hierarchy and where the section fits in a larger page flow.`,items:[`Form blocks`,`CTA hierarchy`,`Proof points`,`Responsive sections`]},{title:`Reusable block library`,text:`Every block card should show its category, where it fits, and which route opens the richer preview or template detail view.`,items:[`Category label`,`Usage notes`,`Preview action`,`Install path`]}],Re={slug:`dashboard-starter`,title:`Modern Dashboard`,description:`Clean dashboard with analytics, charts, and activity tables.`,bestFor:`Dashboard entry sections, KPI headers, recent activity, and operational overview surfaces.`,category:`Dashboard`,tags:[`Dashboard`,`Analytics`,`Charts`,`Overview`],uses:[`Sidebar`,`Section`,`Statistic`,`DataTable`],tone:`from-emerald-50 via-white to-sky-50`,href:S(`dashboard-starter`),previewHref:`/preview/blocks/dashboard-01`,previewTone:`dashboard`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and make sure the dashboard route already has theme tokens loaded.",`Copy the shell section into an authenticated page and connect it to live KPI and activity data.`,`Keep the block focused on one overview slice instead of turning it into a full page shell.`],dependencyGroups:[`Layout shell`,`Metric cards`,`Table primitives`,`Action buttons`],copyTargets:[`components/blocks/dashboard/overview-shell.tsx`,`components/blocks/dashboard/metric-row.tsx`,`components/blocks/dashboard/activity-table.tsx`],notes:[`Use this block when one dashboard section is enough; move to the template when navigation and multiple zones are required.`,`Primary actions should stay tied to one operational area, not a full application workflow.`]},ze=[{slug:`sidebar-layout`,title:`Sidebar Layout`,description:`Application shell with responsive sidebar.`,bestFor:`Route-level shells that need stable navigation, app header actions, and one main content zone.`,category:`Dashboard`,tags:[`Navigation`,`Shell`,`Analytics`],uses:[`Sidebar`,`Section`,`Button`],tone:`from-[color:var(--aui-page-bg-alt)] to-[color:var(--aui-page-bg)]`,href:S(`sidebar-layout`),previewHref:`/preview/blocks/dashboard-01`,previewTone:`dashboard`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and mount the shell inside an authenticated route group.",`Wire navigation items and header actions before copying child content zones into the shell.`,`Keep the shell generic enough to reuse across more than one application page.`],dependencyGroups:[`App shell`,`Sidebar navigation`,`Page header`,`Action controls`],copyTargets:[`components/blocks/layout/sidebar-layout.tsx`,`components/navigation/app-sidebar.tsx`],notes:[`Do not use this block for a whole admin app export; it is one shell slice, not the full template.`,`Navigation depth and section order should come from the app route model, not from hardcoded demo labels.`]},{slug:`crm-dashboard`,title:`CRM Dashboard`,description:`Sales pipeline and deals management.`,bestFor:`Pipeline snapshots, team handoff sections, and account-focused operational dashboards.`,category:`Product`,tags:[`CRM`,`Pipeline`,`Kanban`],uses:[`ResourcePage`,`Badge`,`Tabs`,`ActivityFeed`],tone:`from-[color:color-mix(in_oklch,var(--aui-accent)_10%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`crm-dashboard`),previewTone:`crm`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`crm-dashboard`,installSteps:["Run `npx tembro init` and reuse the CRM block inside an existing workspace route.",`Connect stage counts, owners, and next actions to live CRM entities before release.`,`Escalate to the CRM template only when the page needs reports, settings, and multiple sections together.`],dependencyGroups:[`Stage summaries`,`Owner badges`,`Activity feed`,`Tabs and headers`],copyTargets:[`components/blocks/crm/pipeline-summary.tsx`,`components/blocks/crm/account-activity.tsx`],notes:[`CRM sections lose clarity when actions are hidden; keep stage, owner, and next-step signals visible.`,`This block should stay narrower than the full CRM workspace template.`]},{slug:`users-table`,title:`Users Table`,description:`Advanced table with filters and actions.`,bestFor:`Management tables with filters, row actions, bulk actions, and compact result scanning.`,category:`Table`,tags:[`Data`,`Filters`,`Bulk actions`],uses:[`DataTable`,`PageToolbar`,`Button`,`Badge`],tone:`from-[color:var(--aui-page-bg-alt)] to-[color:var(--aui-page-bg)]`,href:S(`users-table`),previewHref:`/preview/blocks/table-01`,previewTone:`table`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and move the table block into the target resource page.",`Map columns, row identifiers, and action callbacks to your real API contract.`,`Keep pagination, filters, and bulk actions aligned with backend capabilities.`],dependencyGroups:[`Data table`,`Toolbar filters`,`Bulk actions`,`Status badges`],copyTargets:[`components/blocks/tables/users-table.tsx`,`components/blocks/tables/table-toolbar.tsx`],notes:[`Prefer this block for one resource section; use a template when the whole page needs navigation and surrounding analytics.`,`Do not treat demo filters as final product logic; they are only structural placeholders.`]},{slug:`auth-sign-in`,title:`Auth Sign In`,description:`Minimal sign in form with social login.`,bestFor:`Entry flows that need one focused sign-in surface, trust copy, and a compact auth action stack.`,category:`Auth`,tags:[`Sign in`,`Form`,`Trust`],uses:[`Card`,`Input`,`Button`,`Badge`],tone:`from-[color:color-mix(in_oklch,var(--aui-warning)_12%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`auth-sign-in`),previewHref:`/preview/blocks/auth-01`,previewTone:`auth`,layout:`Marketing`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and mount the auth block on a public or gated entry route.",`Replace demo trust copy, OAuth providers, and field labels with your real auth contract.`,`Use the wider auth or app template only when onboarding needs multiple steps or side content.`],dependencyGroups:[`Form fields`,`Card shell`,`Primary CTA`,`Trust badges`],copyTargets:[`components/blocks/auth/sign-in-card.tsx`,`components/blocks/auth/social-auth-row.tsx`],notes:[`Keep this block conversion-focused; avoid adding unrelated settings or dashboard content to the same surface.`,`Auth blocks should show trust and hierarchy clearly on mobile before they are shipped.`]},{slug:`settings-form`,title:`Settings Form`,description:`Profile and preferences settings form.`,bestFor:`One bounded settings section with fields, toggles, save actions, and light explanatory copy.`,category:`Settings`,tags:[`Profile`,`Preferences`,`Form`],uses:[`FormFieldShell`,`Input`,`Switch`,`Button`],tone:`from-[color:color-mix(in_oklch,var(--aui-surface-muted)_70%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`settings-form`),previewTone:`settings`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and place the settings block inside an existing account or workspace page.",`Wire field state, validation, and save feedback to your app settings contract.`,`Only move to a larger settings template when multiple settings areas need shared navigation.`],dependencyGroups:[`Form wrappers`,`Inputs and switches`,`Save actions`,`Inline helper text`],copyTargets:[`components/blocks/settings/profile-form.tsx`,`components/blocks/settings/preferences-section.tsx`],notes:[`This block is for one settings slice, not an entire account management surface.`,`Keep destructive account actions separate from routine preference editing.`]},{slug:`invoices-page`,title:`Invoices Page`,description:`Invoices list with status and actions.`,bestFor:`Billing or finance tables that need status columns, invoice actions, and readable operational totals.`,category:`Table`,tags:[`Finance`,`Invoices`,`Status`],uses:[`DataTable`,`Badge`,`Button`,`ResourcePage`],tone:`from-[color:color-mix(in_oklch,var(--aui-accent)_12%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`invoices-page`),previewHref:`/preview/blocks/table-01`,previewTone:`table`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and copy the invoice block into the billing route.",`Connect payment status, row actions, and export flows to real finance data.`,`Keep summaries close to the table instead of turning the block into a full finance dashboard.`],dependencyGroups:[`Table rows`,`Invoice status badges`,`Header actions`,`Finance filters`],copyTargets:[`components/blocks/finance/invoices-table.tsx`,`components/blocks/finance/invoice-actions.tsx`],notes:[`Finance blocks need explicit status language; avoid vague marketing labels in invoice rows.`,`When the page needs broader reporting and settings, step up to a template-level surface.`]}],Be=u,Ve=[[`variant`,`'default' | 'secondary' | ...`,`'default'`,`The visual style of the button.`],[`size`,`'xs' | 'sm' | 'md' | 'lg' | 'xl'`,`'md'`,`The size of the button.`],[`asChild`,`boolean`,`false`,`Render as a child element using Slot.`],[`disabled`,`boolean`,`false`,`Disables the button.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`onClick`,`(e: MouseEvent) => void`,`-`,`Click event handler.`]],He=[`Installation`,`Variations`,`Sizes`,`States`,`Icon buttons`,`Block button`,`Examples`,`API Reference`,`Accessibility`],Ue=[{title:`Action buttons`,cta:`Save changes`},{title:`Icon with text`,cta:`Send message`},{title:`Loading state`,cta:`Processing...`},{title:`Destructive action`,cta:`Delete item`}],We=[`Tab to focus`,`Visible focus ring`,`Enter / Space to activate`],Ge=[`Role: button`,`Name is programmatically determinable`,`Minimum touch target (44x44px)`,`Sufficient color contrast`],Ke=[{title:`Home`,description:`Open the landing page with the product overview.`,href:`/`,group:`Docs`,shortcut:`H`,keywords:[`home`,`landing`,`overview`,`introduction`]},{title:`Blocks`,description:`Browse reusable blocks and layout sections.`,href:`/blocks`,group:`Blocks`,shortcut:`B`,featured:!0,keywords:[`blocks`,`catalog`,`templates`,`dashboards`,`marketing`,`layout patterns`]},{title:`Components`,description:`Browse component docs and related modules.`,href:`/components`,group:`Docs`,shortcut:`C`,keywords:[`components`,`catalog`,`docs`,`family`,`category`]},{title:`Developer inventory`,description:`Open the export inventory with primary components, groups, and member routes.`,href:`/components/registry`,group:`Docs`,shortcut:`R`,keywords:[`developer inventory`,`registry`,`inventory`,`exports`,`component list`,`source of truth`]},{title:`Changelog`,description:`Read release notes and track API and docs changes.`,href:`/changelog`,group:`Docs`,shortcut:`L`,keywords:[`changelog`,`release`,`history`,`changes`,`version`]},{title:`Command page`,description:`Open the full route index and quick command page.`,href:`/command`,group:`Docs`,shortcut:`K`,keywords:[`command`,`search`,`palette`,`route index`,`jump`]},{title:`Installation`,description:`Initialize the project, write theme tokens, and copy working CLI commands.`,href:`/docs/installation`,group:`Docs`,shortcut:`I`,featured:!0,keywords:[`installation`,`setup`,`npm`,`theme`,`tembro`,`cli`]},{title:`Next.js installation`,description:`Initialize tembro in a Next.js app and write local component files.`,href:`/docs/installation/next`,group:`Docs`,shortcut:`I`,keywords:[`installation`,`next`,`nextjs`,`setup`,`init`,`tailwind`,`cli`]},{title:`Vite installation`,description:`Initialize tembro in a Vite app and write local component files.`,href:`/docs/installation/vite`,group:`Docs`,shortcut:`I`,keywords:[`installation`,`vite`,`setup`,`init`,`tailwind`,`cli`]},...J().flatMap(e=>[{title:e.title,description:e.description,href:`/components/${e.slug}`,group:`Components`,shortcut:`C`,featured:e.slug===`button`||e.slug===`input`||e.slug===`dialog`||e.slug===`select`||e.slug===`card`,keywords:[e.slug,e.title,e.category,D(e.slug),q(e.slug),...e.features,`component`,`detail`,`usage`,`installation`]}]),...Z().map(e=>({title:`${e.title} in ${e.surfaceTitle}`,description:`${e.summary} Documented inside the ${e.surfaceTitle} surface under ${e.sectionLabel.toLowerCase()}.`,href:e.href,group:`Components`,shortcut:`M`,keywords:[e.title,e.slug,e.component,e.surfaceTitle,e.surfaceSlug,e.sectionLabel,e.maturity,`member`,`surface`,`variant`,`wrapper`]})),...Q.map(e=>({title:`${e.title} group`,description:`${e.description} Open the grouped docs surface for related exports and usage boundaries.`,href:e.href,group:`Components`,shortcut:`F`,featured:e.slug===`data-table`||e.slug===`form`||e.slug===`layout`,keywords:[e.slug,e.title,e.category,...e.features,...e.exports,`component group`,`catalog`,`system`]})),...Q.flatMap(e=>e.exports.map(t=>({title:`${t} API`,description:`${e.title} export detail with import path, related docs and usage context.`,href:b(e.slug,t),group:`Components`,shortcut:`E`,keywords:[t,e.title,e.slug,...e.features,`export`,`api`,`component`]})))];exports.CLI_ADD_COMMAND=l,exports.CLI_INIT_NEXT_COMMAND=c,exports.CLI_INIT_VITE_COMMAND=ne,exports.CLI_INSTALL_COMMAND=re,exports.CLI_PACKAGE_NAME=s,exports.CLI_THEME_COMMAND=ie,exports.DOCS_APP_NAME=te,exports.DOCS_RELEASES_URL=se,exports.DOCS_REPO_URL=p,exports.DOCS_ROOT_PATH=m,exports.PACKAGE_GITHUB_RELEASES_URL=f,exports.PACKAGE_GITHUB_URL=d,exports.PACKAGE_IMPORT=ee,exports.PACKAGE_INSTALL_COMMAND=u,exports.PACKAGE_NAME=o,exports.PACKAGE_NPM_URL=ae,exports.PACKAGE_RELEASES_URL=oe,exports.PACKAGE_RELEASE_DATE=le,exports.PACKAGE_VERSION=ce,exports.accessibilityChecks=Ge,exports.blockCards=ze,exports.blockCoverageSections=Le,exports.blockLayoutFilters=$,exports.blockPath=S,exports.blockSortOptions=Ie,exports.blockTabs=Pe,exports.blockThemeFilters=Fe,exports.componentCatalog=B,exports.componentDocsPath=g,exports.componentExportPath=b,exports.componentExportSlug=y,exports.componentGroupMeta=w,exports.componentGroupOrder=C,exports.componentModuleCatalog=Q,exports.componentModulePath=v,exports.componentPlaygroundPath=_,exports.componentRelations=_e,exports.docsSidebar=Me,exports.exampleCards=Ue,exports.featuredBlock=Re,exports.getComponentDetailSidebarItems=Y,exports.getComponentDetailSidebarSections=Oe,exports.getComponentGroup=D,exports.getComponentGroupDetails=ge,exports.getComponentSurfaceCatalogItem=W,exports.getComponentSurfaceSections=X,exports.getDocumentedMemberByComponent=ke,exports.getDocumentedMembersByComponents=Ae,exports.getPrimaryComponentCatalog=J,exports.getPrimaryComponentMemberInventory=Z,exports.getPrimaryComponentSurfaceSlug=K,exports.getPrimaryComponentSurfaceTitle=q,exports.getVisibleComponentCatalog=De,exports.globalSearchItems=Ke,exports.inspectorChecks=We,exports.installCommand=Be,exports.isPrimaryComponentSurface=G,exports.playgroundSidebar=Ne,exports.primaryNav=je,exports.propRows=Ve,exports.releaseHistory=h,exports.templatePath=x,exports.tocItems=He;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../public-component-surface.cjs"),t=require("./tembro-registry.json.cjs"),n=require("./package-meta.cjs");let r=require("lucide-react");var i=[[`control`,`Control<TFieldValues>`,`-`,"RHF control instance from `useForm()`."],[`name`,`FieldPath<TFieldValues>`,`-`,`Field path used for registration and value lookup.`],[`rules`,`Omit<UseControllerProps['rules'], 'value' | 'name'>`,`-`,`Validation rules and constraints for the field.`],[`required`,`boolean | "*" | FieldError`,`false`,`Marks field required in shell and optional validation path.`],[`disabled`,`boolean`,`false`,`Disables input and blocks interaction.`],[`readOnly`,`boolean`,`false`,`Allows viewing without edit; value remains controlled.`],[`success`,`ReactNode`,`-`,`Optional success message rendered by the shared field shell.`],[`loading`,`boolean`,`false`,`Shows a consistent loading message inside the shared field shell.`],[`error`,`string | FieldError | null`,`-`,`Optional error override instead of default form state message.`]],a=[`RHF control wiring`,`name-based field registration`,`error and required visual states`,`validation contract`,`label/description consistency`,`disabled/readOnly handling`],o=`tembro`,s=`tembro`,ee=`tembro`,te=`tembro`,c=`npx ${s} init --template next --defaults`,ne=`npx ${s} init --template vite --defaults`,l=`npx ${s} add button input`,u=`${c}\n${l}`,re=`npx ${s} --help`,ie=`npx ${s} theme`,ae=`https://www.npmjs.com/package/tembro`,d=`https://github.com/AzamatJurayev-dev/azamat-ui-kit`,f=`${d}/releases`,p=d,oe=f,se=`${p}/releases`,m=`/docs`,h=[{version:n.PACKAGE_LATEST_VERSION,date:n.PACKAGE_LATEST_RELEASE_DATE,status:`Published`,summary:`Expanded the registry with newer dashboard, input, badge, sidebar, and notification primitives.`,notes:["Registry truth now includes `collapse`, `sidebar`, `statistic`, `badge`, `notification-center`, and `command-palette`.",`Component metadata was refreshed so docs can keep canonical surfaces and related helpers accurate.`,`CLI-first local component setup remains the default path for Next.js and Vite users.`]},{version:`0.3.18`,date:`June 30, 2026`,status:`Published`,summary:`Refined grouped docs and related-surface mapping.`,notes:[`Input, Select, Card, Badge, Overlay, Form, and Data Table components were aligned with the latest public exports.`,`Deprecated route-level names stayed aliased for compatibility while primary docs move toward simpler canonical surfaces.`,`Docs app metadata now prefers current package registry vocabulary over older showcase-only names.`]}],ce=h[0]?.version??`3.1.7`,le=h[0]?.date??`July 15, 2026`,g=e=>`/components/${e}`,_=e=>`/playground/${e}`,v=e=>`/components/${e}`,y=e=>e.replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/\s+/g,`-`).toLowerCase(),b=(e,t)=>`/components/${e}/${y(t)}`,x=e=>`/templates/${e}`,S=e=>`/blocks/${e}`,C=[`Primitives`,`Form Controls`,`Overlay`,`Data Display`,`Layout`,`Feedback`,`Patterns`],w={Primitives:{title:`Primitives`,description:`Foundation components for actions, text entry, compact layout and small state changes.`,whenToUse:`Use when you need a small reusable UI unit with minimal product opinion.`,whenNotToUse:`Do not start here when the page needs full form orchestration, route structure, or async flows.`},"Form Controls":{title:`Form Controls`,description:`Fields, wrappers and input flows for validation, selection, formatting and data entry.`,whenToUse:`Use for user input, validation, RHF wiring and constrained value contracts.`,whenNotToUse:`Do not use for read-only summaries or large page layout composition.`},Overlay:{title:`Overlay`,description:`Dialog, popover, menu and confirmation surfaces that appear above the current screen.`,whenToUse:`Use for contextual actions, confirmations and short focused tasks.`,whenNotToUse:`Do not hide long multi-step flows inside overlays when a full page works better.`},"Data Display":{title:`Data Display`,description:`Metrics, tables, empty states and read-oriented surfaces for operational screens.`,whenToUse:`Use when the main job is reading, comparing or scanning product data.`,whenNotToUse:`Do not use these as the first layer for input-heavy forms or route-level navigation.`},Layout:{title:`Layout`,description:`Shell, breadcrumbs, side navigation and page framing for structured application routes.`,whenToUse:`Use when the route needs hierarchy, section framing and navigation continuity.`,whenNotToUse:`Do not pull layout components into tiny isolated widgets or inline forms.`},Feedback:{title:`Feedback`,description:`Loading, result and toast patterns for status communication and short response loops.`,whenToUse:`Use when the UI needs clear success, error, pending or completion feedback.`,whenNotToUse:`Do not use feedback components as a substitute for missing page structure or field validation.`},Patterns:{title:`Patterns`,description:`Composed flows and builders that connect multiple primitives.`,whenToUse:`Use when the screen needs a repeatable workflow instead of one atomic control.`,whenNotToUse:`Do not start here when a primitive or one wrapper solves the need cleanly.`}},ue=new Set([`button`,`input`,`textarea`,`checkbox`,`switch`,`badge`,`card`,`tabs`,`collapse`,`kbd`]),de=new Set([`select`,`async-select`,`async-multi-select`,`radio-group`,`date-picker`,`date-range-picker`,`form-field-shell`,`form-input`,`form-select`,`form-textarea`,`form-switch`,`form-date-range-input`,`form-date-picker`,`form-date-range-picker`]),fe=new Set([`dialog`,`popover`,`dropdown-menu`,`tooltip`,`right-click-menu`,`confirm-dialog`,`alert-dialog`,`drawer`]),pe=new Set([`sidebar`,`breadcrumbs`,`section`]),me=new Set([`toast`,`loading-state`,`empty-state`]),he=new Set([`form-builder`,`resource-page`,`resource-detail-page`,`page-toolbar`,`bulk-action-bar`,`detail-layout`,`settings-page`,`data-view`]),T=new Map([[`app-sidebar`,`sidebar`],[`form-async-select`,`form-select`],[`form-search-input`,`form-input`],[`form-password-input`,`form-input`],[`form-number-input`,`form-input`],[`form-phone-input`,`form-input`],[`form-date-input`,`form-input`],[`confirm-action`,`confirm-dialog`],[`file-dropzone`,`file-upload`],[`hover-card`,`popover`],[`metric-card`,`statistic`],[`nav-tabs`,`tabs`],[`section-header`,`section`],[`side-panel`,`sidebar`],[`status-dot`,`status-legend`]]);function E(e){return T.get(e)??e}function D(e){return ue.has(e)?`Primitives`:de.has(e)?`Form Controls`:fe.has(e)?`Overlay`:pe.has(e)?`Layout`:me.has(e)?`Feedback`:he.has(e)?`Patterns`:`Data Display`}function ge(e){return w[D(e)]}function O(e,t){return B.filter(t=>D(t.slug)===e).map(e=>({label:e.title,href:t(e.slug),icon:e.icon,badge:e.status}))}var k=[{slug:`button`,title:`Button`,description:`Trigger actions with multiple variants, sizes, icon positions and loading states.`,icon:r.MousePointerClickIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`variant`,`'default' | 'secondary' | ...`,`'default'`,`The visual style of the button.`],[`size`,`'xs' | 'sm' | 'md' | 'lg' | 'xl'`,`'md'`,`The size of the button.`],[`asChild`,`boolean`,`false`,`Render as a child element using Slot.`],[`disabled`,`boolean`,`false`,`Disables the button.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`onClick`,`(e: MouseEvent) => void`,`-`,`Click event handler.`]],features:[`Variants`,`Sizes`,`Icon support`,`Loading state`]},{slug:`input`,title:`Input`,description:`Primary text-entry surface for forms, filters, and compact editor layouts before moving into presets.`,icon:r.FormInputIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled value.`],[`onValueChange`,`(value) => void`,`-`,`Direct text callback for controlled string flows.`],[`type`,`'text' | 'email' | 'password' | ...`,`'text'`,`Input HTML type before moving to a preset.`],[`clearable`,`boolean`,`false`,`Adds a built-in clear action when value exists.`],[`trailingAction`,`ReactNode`,`-`,`Interactive trailing slot for counters, shortcuts, or actions.`],[`replaceTrailingWhenClear`,`boolean`,`true`,`Keep or replace trailing content when clear is visible.`],[`disabled`,`boolean`,`false`,`Disables the field.`]],features:[`Primary text field`,`Built-in clear action`,`Trailing action slot`,`Preset-friendly API`]},{slug:`textarea`,title:`Textarea`,description:`Multi-line input with autosizing-friendly layout for notes, messages and long-form data.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`placeholder`,`string`,`-`,`Placeholder text.`],[`disabled`,`boolean`,`false`,`Disables the textarea.`],[`rows`,`number`,`-`,`Preferred visible rows.`],[`value`,`string`,`-`,`Controlled value.`],[`onChange`,`(event) => void`,`-`,`Change handler.`]],features:[`Long-form input`,`Disabled state`,`Resizable content`,`Controlled value`]},{slug:`select`,title:`Select`,description:`Primary selection surface for lists, status filters, and compact forms before moving into members.`,icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled selected value.`],[`defaultValue`,`string`,`-`,`Initial selected value.`],[`onValueChange`,`(value) => void`,`-`,`Selection change callback.`],[`searchable`,`boolean`,`false`,`Enables local filtering on the main surface.`],[`multiple`,`boolean`,`false`,`Allows multiple values when the active member supports it.`],[`size`,`'sm' | 'default'`,`'default'`,`Trigger size.`],[`disabled`,`boolean`,`false`,`Disables the trigger.`]],features:[`Primary choice input`,`Local filtering`,`Compact trigger`,`Preset-friendly API`]},{slug:`async-select`,title:`Async Select`,description:`Remote-aware select for search-driven datasets, edit hydration, and production loading or empty states.`,icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled selected value.`],[`selectedOption`,`AsyncSelectOption`,`-`,`Hydrated selected option for controlled edit modes.`],[`onValueChange`,`(value, option?) => void`,`-`,`Selection callback with optional option payload.`],[`loadOptions`,`(search) => Promise<AsyncSelectOption[]>`,`-`,`Async option fetcher.`],[`loadSelectedOption`,`(value) => Promise<AsyncSelectOption | null>`,`-`,`Fetch selected option for controlled edit.`],[`defaultOptions`,`AsyncSelectOption[]`,`-`,`Initial static options.`],[`clearable`,`boolean`,`true`,`Allows clearing the selected value.`],[`cacheOptions`,`boolean`,`false`,`Reuse options cache across repeated queries.`],[`minSearchLength`,`number`,`1`,`Minimum query length for request.`],[`debounceMs`,`number`,`250`,`Delay before calling remote search.`],[`labels`,`AsyncSelectLabels`,`-`,`Copy and state copy labels.`],[`renderLoading`,`AsyncSelectStateRenderer`,`-`,`Custom loading content renderer.`]],features:[`Remote option loading`,`Debounced search`,`Hydrated edit state`,`Clearable controlled output`]},{slug:`async-multi-select`,title:`Async Select`,description:"Legacy alias for Async Select multi mode. Use `isMulti` on AsyncSelect instead of installing a separate component.",icon:r.ComponentIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`isMulti`,`boolean`,`true`,`Turns AsyncSelect into multi mode with tag selection.`],[`value`,`string[]`,`-`,`Controlled selected values in multi mode.`],[`onValueChange`,`(values, options) => void`,`-`,`Bulk selection callback in multi mode.`],[`maxSelected`,`number`,`-`,`Upper cap for total selected items.`],[`showSelectAll`,`boolean`,`false`,`Allow select-all shortcut.`]],features:[`Legacy alias`,`Multi selection`,`Select-all helpers`,`Use AsyncSelect as the canonical API`]},{slug:`number-input`,title:`Number Input`,description:`Numeric entry with parsing, constraints, and precise change semantics.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`value`,`number | string`,`-`,`Controlled value.`],[`defaultValue`,`number | string`,`-`,`Initial uncontrolled value.`],[`onChange`,`React.ChangeEventHandler<HTMLInputElement>`,`-`,`Native change event.`],[`onNumberChange`,`(value) => void`,`-`,`Parsed numeric callback.`],[`onValueChange`,`(value) => void`,`-`,`String-based callback for raw typed value.`],[`min`,`number`,`-`,`Lower bound.`],[`max`,`number`,`-`,`Upper bound.`],[`step`,`number`,`1`,`Step size for changes.`],[`allowEmpty`,`boolean`,`false`,`Allows clearing the input without forcing zero.`]],features:[`Parsing`,`min/max`,`Step semantics`,`Invalid number handling`]},{slug:`date-picker`,title:`Date Picker`,description:`Popover-based date picker optimized for form fields and action buttons.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled picker value.`],[`defaultValue`,`string`,`-`,`Initial uncontrolled value.`],[`onValueChange`,`(value) => void`,`-`,`Picker change callback.`],[`disabled`,`boolean`,`false`,`Disables the popover trigger.`],[`min`,`string`,`-`,`Minimum selectable date string.`],[`max`,`string`,`-`,`Maximum selectable date string.`],[`disabledDates`,`string[]`,`-`,`Date literals that are blocked.`],[`className`,`string`,`-`,`Wrapper style class.`]],features:[`Popover selection`,`Date formatting`,`min/max`,`disabledDates`]},{slug:`date-range-picker`,title:`Date Range Picker`,description:`Popover date-range picker for period selection with constrained windows.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[[`value`,`{ from: string; to: string }`,`-`,`Controlled range value.`],[`defaultValue`,`{ from: string; to: string }`,`-`,`Initial uncontrolled range value.`],[`onValueChange`,`(value) => void`,`-`,`Range callback with from/to.`],[`disabled`,`boolean`,`false`,`Disables all picker interactions.`],[`min`,`string`,`-`,`Earliest allowed date.`],[`max`,`string`,`-`,`Latest allowed date.`],[`disabledDates`,`string[]`,`-`,`Date literals blocked from selection.`],[`className`,`string`,`-`,`Wrapper style class.`]],features:[`Range picker`,`Range windows`,`disabledDates`,`Boundary guards`]},{slug:`form-field-shell`,title:`Form Field Shell`,description:`Composable field shell that standardizes label, description, layout, errors and required markers.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`label`,`string`,`-`,`Field shell label text.`],[`description`,`string`,`-`,`Supporting helper text.`],[`descriptionPosition`,`'top' | 'bottom'`,`'bottom'`,`Description location relative to control.`],[`layout`,`'vertical' | 'horizontal' | 'inline'`,`'vertical'`,`Visual layout mode of label and field.`],[`required`,`boolean`,`false`,`Renders required marker and forwards required metadata.`],[`error`,`string | FieldError`,`-`,`Explicit error message shown in helper area.`],[`labelAction`,`ReactNode`,`-`,`Optional action in label area.`],[`readOnly`,`boolean`,`false`,`Read-only shell state.`],[`disabled`,`boolean`,`false`,`Disables shell state visuals.`],[`className`,`string`,`-`,`Custom wrapper class.`]],features:[`Label contract`,`Inline description`,`Horizontal/inline layout`,`ReadOnly + disabled states`,`Required indicator`]},{slug:`form-input`,title:`Form Input`,description:"Primary RHF field wrapper for text-like inputs. Use `kind` to cover search, password, number, phone, and date flows from one surface.",icon:r.FormInputIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`kind`,`'text' | 'search' | 'password' | 'number' | 'phone' | 'date'`,`'text'`,`Selects the field variant without changing wrapper-level API.`],[`type`,`'text' | 'email' | 'search' | ...`,`'text'`,`Rendered input type for base behavior when using the text variant.`],[`placeholder`,`string`,`-`,`Input placeholder.`],[`onValueChange`,`(value: string) => void`,`-`,`Change callback with parsed display value.`],[`defaultValue`,`string`,`-`,`Uncontrolled initial value in hybrid modes.`]],features:[...a,"Universal `kind` variants",`Error text and message flow`,`Single wrapper migration path`]},{slug:`form-select`,title:`Form Select`,description:'Primary RHF select wrapper. Start with the default simple mode and switch to `kind="async"` when option loading or hydration is remote.',icon:r.ComponentIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`kind`,`'simple' | 'async'`,`'simple'`,`Chooses the select surface while keeping the same form wrapper contract.`],[`options`,`SimpleSelectOption[]`,`-`,`Flat option set for select rendering.`],[`placeholder`,`string`,`-`,`Default label when empty.`],[`onValueChange`,`(value: string) => void`,`-`,`Selection change callback.`]],features:[...a,`Simple + async under one API`,`Form-driven value control`,`Clear/empty handling`]},{slug:`form-textarea`,title:`Form Textarea`,description:`RHF textarea wrapper with shell-level validation messages and descriptions.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`rows`,`number`,`-`,`Visible row count.`],[`minHeight`,`number`,`-`,`Optional minimum height in rem/px.`],[`maxLength`,`number`,`-`,`Input length safety guard.`],[`onValueChange`,`(value: string) => void`,`-`,`Raw text callback from field.`]],features:[...a,`Long text support`,`Error placement`,`Description + helper states`]},{slug:`form-switch`,title:`Form Switch`,description:`RHF switch wrapper with binary payload and shell-level feedback.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[...i,[`checked`,`boolean`,`-`,`Controlled checked value when controlled by wrapper.`],[`defaultChecked`,`boolean`,`false`,`Uncontrolled initial value in mixed modes.`],[`onCheckedChange`,`(value: boolean) => void`,`-`,`Boolean callback from switch state change.`]],features:[...a,`Boolean value contract`,`Readable shell errors`,`Disabled states`]},{slug:`form-date-range-input`,title:`Form Date Range Input`,description:`RHF range input wrapper supporting from/to bounds and required range validation.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`{ from: string; to: string }`,`-`,`RHF controlled date range value.`],[`min`,`string`,`-`,`Earliest valid date for start boundary.`],[`max`,`string`,`-`,`Latest valid date for end boundary.`],[`required`,`boolean | { from: boolean; to: boolean }`,`false`,`Require one or both bounds.`],[`onValueChange`,`(value: { from: string; to: string }) => void`,`-`,`Range update callback.`]],features:[...a,`Range required validation`,`from/to coordination`,`Filter-ready contract`]},{slug:`form-date-picker`,title:`Form Date Picker`,description:`RHF popover date picker wrapper with shared validation and controlled submit flow.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`string`,`-`,`Controlled popover date value.`],[`disabledDates`,`string[]`,`-`,`Calendar date blacklist.`],[`min`,`string`,`-`,`Earliest selectable date string.`],[`max`,`string`,`-`,`Latest selectable date string.`],[`onValueChange`,`(value: string | null) => void`,`-`,`Normalized picker value callback.`]],features:[...a,`Popover interaction`,`Range of disabled dates`,`Controlled popover state`]},{slug:`form-date-range-picker`,title:`Form Date Range Picker`,description:`RHF wrapper over popover date-range picker with required range and block-out support.`,icon:r.CalendarClockIcon,category:`Forms`,status:`Preview`,installCommand:u,propsRows:[...i,[`value`,`{ from: string; to: string }`,`-`,`Controlled range value object.`],[`fromLabel`,`string`,`"From"`,`Label text for start field.`],[`toLabel`,`string`,`"To"`,`Label text for end field.`],[`disabledDates`,`string[]`,`-`,`Date literals blocked from selection.`],[`onValueChange`,`(value: { from: string; to: string }) => void`,`-`,`Range callback for form state updates.`]],features:[...a,`Range-specific validation`,`Date range constraints`,`Accessible error mapping`]},{slug:`form-builder`,title:`Form Builder`,description:`RHF section builder for schema-driven forms with submit/reset and disabled/read-only modes.`,icon:r.FileTextIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`control`,`Control<TFieldValues>`,`-`,`RHF control passed to all generated sections.`],[`fields`,`FormBuilderField<TFieldValues, string>[]`,`-`,`Explicit field descriptors for full control.`],[`sections`,`FormBuilderSection<TFieldValues>[]`,`-`,`Form section descriptors with grouped presets.`],[`submitLabel`,`string`,`"Save"`,`Submit button text.`],[`resetLabel`,`string`,`"Reset"`,`Reset button text.`],[`disabled`,`boolean`,`false`,`Disables all controls and actions in builder.`],[`readOnly`,`boolean`,`false`,`Read-only state for generated field controls.`],[`columns`,`1 | 2 | 3`,`1`,`Grid column count for generated sections.`],[`onSubmit`,`(values) => Promise<void> | void`,`-`,"Submit handler for generated `<form>` events."]],features:[`Field schema`,`Section composition`,`Custom render hooks`,`Submit and reset control`,`Disabled/readOnly pass-through`,`Preset factories (inputField, phoneField, ...)`]},{slug:`radio-group`,title:`Radio Group`,description:`Single-choice grouped control for plans, density modes, and mutually exclusive settings.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`options`,`RadioGroupOption[]`,`-`,`Options with label, value and optional description.`],[`value`,`string`,`-`,`Controlled selected value.`],[`defaultValue`,`string`,`-`,`Initial uncontrolled value.`],[`onValueChange`,`(value) => void`,`-`,`Selection callback.`],[`orientation`,`'vertical' | 'horizontal'`,`'vertical'`,`Layout direction.`],[`size`,`'sm' | 'default' | 'lg'`,`'default'`,`Control density.`]],features:[`Single selection`,`Descriptions`,`Horizontal or vertical layout`,`Controlled plans`]},{slug:`checkbox`,title:`Checkbox`,description:`Binary selection control for permissions, tasks and grouped form actions.`,icon:r.BoxIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`checked`,`boolean | 'indeterminate'`,`false`,`Controlled checked state.`],[`defaultChecked`,`boolean | 'indeterminate'`,`false`,`Initial state.`],[`disabled`,`boolean`,`false`,`Disables the control.`],[`onCheckedChange`,`(checked) => void`,`-`,`Checked state callback.`]],features:[`Checked state`,`Indeterminate state`,`Disabled state`,`Task lists`]},{slug:`switch`,title:`Switch`,description:`On/off control for preferences, settings and lightweight toggles.`,icon:r.ToggleLeftIcon,category:`Forms`,status:`Stable`,installCommand:u,propsRows:[[`checked`,`boolean`,`false`,`Controlled on/off state.`],[`defaultChecked`,`boolean`,`false`,`Initial state.`],[`disabled`,`boolean`,`false`,`Disables the switch.`],[`onCheckedChange`,`(checked) => void`,`-`,`State change callback.`]],features:[`Checked state`,`Settings toggles`,`Disabled state`,`Compact interaction`]},{slug:`badge`,title:`Badge`,description:`Small status surface for counts, labels, intents and inline metadata.`,icon:r.BadgeIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`variant`,`'default' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link'`,`'default'`,`Visual style.`],[`render`,`ReactNode`,`-`,`Optional custom render target.`],[`className`,`string`,`-`,`Additional CSS classes.`]],features:[`Status labels`,`Variants`,`Inline metadata`,`Compact counters`]},{slug:`card`,title:`Card`,description:`Structured content container with header, content and footer slots.`,icon:r.LayoutDashboardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`size`,`'default' | 'sm'`,`'default'`,`Card density.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`children`,`ReactNode`,`-`,`Composed card content.`]],features:[`Header/footer slots`,`Compact size`,`Dashboard modules`,`Composed content`]},{slug:`tabs`,title:`Tabs`,description:`Segmented navigation for switching views without leaving the current route.`,icon:r.Layers3Icon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`value`,`string`,`-`,`Controlled active tab.`],[`defaultValue`,`string`,`-`,`Initial tab.`],[`orientation`,`'horizontal' | 'vertical'`,`'horizontal'`,`Tab list direction.`],[`disabled`,`boolean`,`false`,`Disables a trigger.`]],features:[`Segmented nav`,`Panel switching`,`Controlled state`,`Settings sections`]},{slug:`collapse`,title:`Collapse`,description:`Expandable disclosure surface for FAQs, dense settings, and progressive detail blocks.`,icon:r.WorkflowIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state for a single collapse item.`],[`defaultOpen`,`boolean`,`false`,`Initial uncontrolled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`items`,`CollapseItem[]`,`-`,"Grouped disclosure items for `CollapseGroup`."],[`type`,`'single' | 'multiple'`,`'multiple'`,`Whether one or many group items can stay open.`]],features:[`Disclosure sections`,`Controlled state`,`Grouped items`,`Dense content reveal`]},{slug:`dialog`,title:`Dialog`,description:`Focused modal surface for confirmation flows, forms and destructive actions.`,icon:r.AlertCircleIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`defaultOpen`,`boolean`,`false`,`Initial open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`showCloseButton`,`boolean`,`true`,`Toggles the close affordance.`]],features:[`Modal trigger`,`Overlay`,`Header/footer slots`,`Close actions`]},{slug:`popover`,title:`Popover`,description:`Lightweight anchored overlay for context actions and compact helper content.`,icon:r.SparklesIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`side`,`'top' | 'right' | 'bottom' | 'left'`,`'bottom'`,`Popup side.`],[`align`,`'start' | 'center' | 'end'`,`'center'`,`Popup alignment.`],[`sideOffset`,`number`,`4`,`Distance from trigger.`],[`children`,`ReactNode`,`-`,`Trigger and content composition.`]],features:[`Anchored overlay`,`Title/description`,`Action menus`,`Compact help content`]},{slug:`dropdown-menu`,title:`Dropdown Menu`,description:`Menu overlays with action, checkbox and radio items for dense navigation.`,icon:r.ComponentIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback.`],[`children`,`ReactNode`,`-`,`Trigger and content composition.`],[`side`,`'top' | 'right' | 'bottom' | 'left'`,`'bottom'`,`Popup side.`],[`align`,`'start' | 'center' | 'end'`,`'start'`,`Popup alignment.`],[`sideOffset`,`number`,`4`,`Distance from trigger.`],[`disabled`,`boolean`,`false`,`Disable menu interaction.`]],features:[`Dropdown patterns`,`Checkbox items`,`Radio groups`,`Shortcut labels`]},{slug:`tooltip`,title:`Tooltip`,description:`Compact hover and focus hint for controls that need one short piece of guidance.`,icon:r.SparklesIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`content`,`ReactNode`,`-`,`Tooltip label or helper content.`],[`side`,`'top' | 'bottom' | 'left' | 'right'`,`'top'`,`Placement around the trigger.`],[`disabled`,`boolean`,`false`,`Disables tooltip rendering.`],[`children`,`ReactNode`,`-`,`Trigger content wrapped by the tooltip.`]],features:[`Short helper copy`,`Hover + focus`,`Side placement`,`Low-noise guidance`]},{slug:`right-click-menu`,title:`Right Click Menu`,description:`Context menu surface for dense workspaces that need pointer-driven secondary actions.`,icon:r.MousePointerClickIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`items`,`RightClickMenuItem[]`,`-`,`Context actions shown after right click.`],[`children`,`ReactNode`,`-`,`Target area that owns the right-click interaction.`],[`className`,`string`,`-`,`Wrapper classes for the interaction zone.`]],features:[`Context actions`,`Pointer workflow`,`Compact menus`,`Workspace interactions`]},{slug:`confirm-dialog`,title:`Confirm Dialog`,description:`Clear confirm overlays for safe destructive and irreversible actions.`,icon:r.AlertCircleIcon,category:`Overlay`,status:`Stable`,installCommand:u,propsRows:[[`open`,`boolean`,`-`,`Controlled open state.`],[`onOpenChange`,`(open) => void`,`-`,`Open state callback for parent-driven flow.`],[`title`,`string`,`-`,`Dialog title text.`],[`description`,`string`,`-`,`Secondary context and scope text.`],[`confirmText`,`string`,`'Confirm'`,`Primary action label.`],[`confirmVariant`,`'default' | 'destructive'`,`'default'`,`Primary button emphasis.`],[`isLoading`,`boolean`,`false`,`Disables actions while async action runs.`],[`onConfirm`,`() => void | Promise<void>`,`-`,`Required confirm handler.`]],features:[`Destructive confirmations`,`Controlled usage`,`Async confirm`,`Clear copy guidance`]},{slug:`sidebar`,title:`Sidebar`,description:`Reusable application sidebar with header, footer, active states, collapsed mode and custom link rendering.`,icon:r.LayoutDashboardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`items`,`AppSidebarNavItem[]`,`[]`,`Sidebar entries with active, disabled, badge and callback state.`],[`header`,`ReactNode`,`-`,`Optional content rendered above navigation items.`],[`footer`,`ReactNode`,`-`,`Optional footer actions or account area.`],[`collapsed`,`boolean`,`false`,`Compact sidebar mode for dense layouts.`],[`onItemSelect`,`(item) => void`,`-`,`Called when a sidebar item is selected.`],[`renderItem`,`(item, state) => ReactNode`,`-`,`Override full item rendering.`],[`renderLink`,`(props) => ReactNode`,`-`,`Override anchor rendering for router integration.`]],features:[`Navigation sidebar`,`Collapsed state`,`Header and footer slots`,`Router-friendly rendering`]},{slug:`breadcrumbs`,title:`Breadcrumbs`,description:`Navigation breadcrumbs with current context, overflow collapse, and custom link rendering.`,icon:r.ChevronRightIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`items`,`BreadcrumbItem[]`,`-`,`Breadcrumb sequence for navigation context.`],[`separator`,`ReactNode`,`-`,`Custom separator between items.`],[`maxItems`,`number`,`-`,`Collapses middle items when the path gets too long.`],[`renderLink`,`(props) => ReactNode`,`-`,`Custom link renderer for each item.`],[`currentItemLabel`,`string`,`-`,`Accessible label for the current page item.`]],features:[`Navigation context`,`Custom separators`,`Custom links`,`Current state support`]},{slug:`page-header`,title:`Page Header`,description:`Top-level page heading block with breadcrumbs, actions and optional meta area.`,icon:r.CreditCardIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`title`,`ReactNode`,`-`,`Primary heading text.`],[`description`,`ReactNode`,`-`,`Subtext explanation for current page.`],[`eyebrow`,`ReactNode`,`-`,`Small uppercase lead text.`],[`breadcrumbs`,`ReactNode`,`-`,`Optional breadcrumb trail.`],[`actions`,`ReactNode`,`-`,`Actions rendered on the right side.`],[`meta`,`ReactNode`,`-`,`Secondary metadata block.`],[`sticky`,`boolean`,`false`,`Enable sticky positioning in scroll containers.`]],features:[`Page context`,`Action areas`,`Breadcrumb composition`,`Sticky header option`]},{slug:`info-card`,title:`Info Card`,description:`Flexible context card for summaries, metadata, quick actions, and supporting media inside real product surfaces.`,icon:r.FileTextIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`eyebrow`,`ReactNode`,`-`,`Small label above card title.`],[`title`,`ReactNode`,`-`,`Main card title.`],[`description`,`ReactNode`,`-`,`Supporting description text.`],[`icon`,`ReactNode`,`-`,`Optional leading icon.`],[`actions`,`ReactNode`,`-`,`Card action area.`],[`media`,`ReactNode`,`-`,`Optional media block.`],[`compact`,`boolean`,`false`,`Compact card density.`],[`orientation`,`'vertical' | 'horizontal'`,`'vertical'`,`Content layout direction.`]],features:[`Metadata summaries`,`Action regions`,`Media slots`,`Vertical or horizontal layout`]},{slug:`activity-feed`,title:`Activity Feed`,description:`Timeline-like feed list for events, audits and recent activity surfaces.`,icon:r.BadgeIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`items`,`ActivityFeedItem[]`,`-`,`List of timeline-like activity rows.`],[`title`,`ReactNode`,`-`,`Feed title.`],[`description`,`ReactNode`,`-`,`Supporting card description.`],[`actions`,`ReactNode`,`-`,`Optional header actions.`],[`empty`,`ReactNode`,`-`,`Fallback when there are no items.`],[`compact`,`boolean`,`false`,`Compact feed density.`],[`itemClassName`,`string`,`-`,`Class for each feed item.`]],features:[`Audit timeline`,`Empty state handling`,`Compact mode`,`Action rows`]},{slug:`data-state`,title:`Data State`,description:`Unified data state block for empty, search-empty, loading, error and success surfaces.`,icon:r.AlertCircleIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`status`,`"idle" | "loading" | "empty" | "error" | "success"`,`-`,`State preset that controls default copy and icon.`],[`title`,`ReactNode`,`-`,`Primary state title.`],[`description`,`ReactNode`,`-`,`Short explanation for the current state.`],[`variant`,`"card" | "plain" | "inline"`,`"card"`,`Container style for page, table and inline usage.`],[`query`,`ReactNode`,`-`,`Optional searched value for empty search results.`],[`actions`,`ReactNode`,`-`,`Custom action elements.`],[`onRetry`,`() => void`,`-`,`Retry callback for error/loading recovery.`],[`onClear`,`() => void`,`-`,`Clear callback for search-empty states.`]],features:[`Empty/search-empty states`,`Error retry`,`Plain table fallback`,`Inline state rows`]},{slug:`loading-state`,title:`Loading State`,description:`Scoped loading block with spinner, skeleton, or progress variants for real route and panel states.`,icon:r.SparklesIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`label`,`ReactNode`,`-`,`Loading heading.`],[`description`,`ReactNode`,`-`,`Loading explanation text.`],[`icon`,`ReactNode`,`-`,`Optional loading icon.`],[`variant`,`'spinner' | 'skeleton' | 'progress'`,`'spinner'`,`Visual loading style.`],[`progress`,`number`,`-`,"Progress amount when `variant` is `progress`."],[`className`,`string`,`-`,`Container class override.`]],features:[`Spinner, skeleton and progress`,`Section loading labels`,`Scoped placeholders`,`Custom icon`]},{slug:`scroll-box`,title:`Scroll Box`,description:`Scoped scrolling surface for dense lists, side panels, and bounded data regions.`,icon:r.PanelTopIcon,category:`Data Display`,status:`Stable`,installCommand:u,propsRows:[[`maxHeight`,`string | number`,`-`,`Maximum rendered height before scroll starts.`],[`axis`,`'y' | 'x' | 'both'`,`'y'`,`Allowed scroll direction.`],[`children`,`ReactNode`,`-`,`Scrollable content.`],[`className`,`string`,`-`,`Container classes.`]],features:[`Bounded scroll`,`Axis control`,`Dense lists`,`Panel content`]},{slug:`toast`,title:`Toast`,description:`Global transient messaging system with provider, stacking, promise states, placement and dismiss behavior.`,icon:r.ShieldCheckIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`children`,`ReactNode`,`-`,`Application children wrapped by provider.`],[`position`,`'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'`,`'top-right'`,`Toast container placement.`],[`defaultDuration`,`number`,`3000`,`Default auto-dismiss duration in ms.`],[`maxToasts`,`number`,`5`,`Maximum number of visible toasts.`],[`pauseOnHover`,`boolean`,`true`,`Pause dismiss timer when hovered.`],[`addToast`,`(input) => string`,`-`,`API to push a toast from context.`],[`success/info/warning/error/loading`,`(input) => string`,`-`,`Tone helpers for common outcomes.`],[`promise`,`(promise, messages) => Promise<T>`,`-`,`Tracks loading/success/error from async work.`]],features:[`Provider setup`,`Stacking and duration`,`Promise states`,`Placement options`]},{slug:`table`,title:`Table primitive`,description:`Low-level semantic table pieces for internal composition, not the primary public data-grid showcase.`,icon:r.Table2Icon,category:`Data Display`,status:`Preview`,installCommand:u,propsRows:[[`className`,`string`,`-`,`Additional table styling.`],[`children`,`ReactNode`,`-`,`Header, body and row markup.`],[`caption`,`ReactNode`,`-`,`Optional table caption.`]],features:[`Semantic rows`,`Header/body slots`,`Internal composition`,`Primitive markup`]},{slug:`kbd`,title:`Kbd`,description:`Keyboard hint token for shortcuts, command palettes, and focused action labels.`,icon:r.TerminalSquareIcon,category:`Components`,status:`Stable`,installCommand:u,propsRows:[[`size`,`'sm' | 'default' | 'lg'`,`'default'`,`Visual size for the key token.`],[`variant`,`'default' | 'outline' | 'ghost'`,`'default'`,`Surface treatment.`],[`children`,`ReactNode`,`-`,`Rendered key label.`],[`className`,`string`,`-`,`Extra classes for the token.`]],features:[`Shortcut tokens`,`Size variants`,`Outline or ghost style`,`Command labels`]},{slug:`data-table`,title:`Data Table`,description:`Primary reusable admin data grid with sorting, row selection, bulk actions, saved views, mobile cards, and server-aware pagination.`,icon:r.Table2Icon,category:`Data Display`,status:`Preview`,installCommand:u,propsRows:[[`columns`,`ColumnDef<RowData>[]`,`-`,`Table column definitions.`],[`data`,`Array<RowData>`,`-`,`Row data at current page in server mode.`],[`getRowId`,`(row) => string`,`-`,`Stable row identifier function.`],[`sorting`,`SortingState`,`[]`,`Controlled sort state.`],[`rowSelection`,`RowSelectionState`,`{}`,`Controlled row selection state.`],[`enableRowSelection`,`boolean`,`false`,`Turns row selection on.`],[`pagination`,`PaginationStateProps`,`-`,`Page controls, counts and page size.`],[`toolbarProps`,`ToolbarProps`,`-`,`Header actions, search and contextual controls.`],[`onRowClick`,`(row) => void`,`-`,`Row click callback.`],[`isLoading`,`boolean`,`false`,`Loading indicator state.`],[`isError`,`boolean`,`false`,`Error state flag for fallback.`],[`loadingState`,`LoadingState`,`-`,"Loading UI when `isLoading` is true."],[`emptyState`,`Omit<DataStateProps, "status">`,`-`,`State shown when no rows are present.`],[`errorState`,`ErrorState`,`-`,"State shown when `isError` is true."]],features:[`Column-based API`,`Sorting and pagination`,`Row selection and bulk actions`,`Toolbar, visibility and saved views`,`Mobile cards and server mode`,`Empty/loading/error states`]}],_e={button:{groupSlugs:[`actions`,`navigation`,`layout`],componentSlugs:[`badge`,`card`,`tabs`]},input:{groupSlugs:[`form`,`filters`],componentSlugs:[`textarea`,`select`,`switch`]},textarea:{groupSlugs:[`form`,`layout`],componentSlugs:[`input`,`card`,`badge`]},select:{groupSlugs:[`filters`,`overlay`],componentSlugs:[`select`,`async-select`,`form-select`]},"radio-group":{groupSlugs:[`form`],componentSlugs:[`checkbox`,`switch`,`select`]},"async-select":{groupSlugs:[`form`,`filters`],componentSlugs:[`select`,`async-select`,`form-select`]},"async-multi-select":{groupSlugs:[`form`],componentSlugs:[`select`,`async-select`,`form-select`]},"date-picker":{groupSlugs:[`form`,`display`],componentSlugs:[`calendar`,`date-range-picker`]},"date-range-picker":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-picker`,`calendar`,`data-table`]},"form-field-shell":{groupSlugs:[`form`],componentSlugs:[`form-input`,`form-select`,`form-textarea`,`form-switch`,`input`,`textarea`,`switch`]},"form-input":{groupSlugs:[`form`],componentSlugs:[`form-field-shell`,`form-textarea`,`input`]},"form-select":{groupSlugs:[`form`],componentSlugs:[`async-select`,`select`,`form-field-shell`]},"form-textarea":{groupSlugs:[`form`],componentSlugs:[`form-input`,`textarea`,`form-field-shell`]},"form-switch":{groupSlugs:[`form`],componentSlugs:[`form-field-shell`,`switch`,`checkbox`,`form-builder`]},"form-date-range-input":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-range-picker`,`form-date-range-picker`,`form-field-shell`]},"form-date-picker":{groupSlugs:[`form`],componentSlugs:[`date-picker`,`calendar`,`form-field-shell`]},"form-date-range-picker":{groupSlugs:[`form`,`filters`],componentSlugs:[`date-range-picker`,`form-date-range-input`,`calendar`,`form-field-shell`]},"form-builder":{groupSlugs:[`patterns`,`form`],componentSlugs:[`form-field-shell`,`form-input`,`form-switch`,`form-textarea`,`form-select`]},checkbox:{groupSlugs:[`form`],componentSlugs:[`switch`,`button`,`card`]},switch:{groupSlugs:[`layout`],componentSlugs:[`checkbox`,`tabs`,`badge`]},badge:{groupSlugs:[`actions`,`display`],componentSlugs:[`button`,`card`,`tabs`]},card:{groupSlugs:[`layout`,`display`,`actions`],componentSlugs:[`tabs`,`badge`,`button`]},tabs:{groupSlugs:[`navigation`,`layout`],componentSlugs:[`dialog`,`card`,`button`]},collapse:{groupSlugs:[`layout`,`display`,`form`],componentSlugs:[`tabs`,`card`]},dialog:{groupSlugs:[`overlay`,`notifications`],componentSlugs:[`popover`,`confirm-dialog`]},popover:{groupSlugs:[`overlay`,`navigation`],componentSlugs:[`dropdown-menu`,`dialog`,`confirm-dialog`]},"dropdown-menu":{groupSlugs:[`overlay`,`navigation`,`actions`],componentSlugs:[`popover`,`dialog`,`confirm-dialog`]},tooltip:{groupSlugs:[`overlay`,`actions`,`form`],componentSlugs:[`popover`,`button`,`input`]},"right-click-menu":{groupSlugs:[`overlay`,`actions`,`navigation`],componentSlugs:[`dropdown-menu`,`popover`,`data-table`]},"confirm-dialog":{groupSlugs:[`overlay`,`notifications`],componentSlugs:[`dialog`,`alert-dialog`]},table:{groupSlugs:[`data-table`,`display`,`filters`],componentSlugs:[`card`,`tabs`,`badge`]},"data-table":{groupSlugs:[`data-table`,`layout`,`filters`],componentSlugs:[`table`,`card`,`tabs`]},sidebar:{groupSlugs:[`layout`,`navigation`],componentSlugs:[`breadcrumbs`]},breadcrumbs:{groupSlugs:[`layout`,`navigation`],componentSlugs:[`section`,`sidebar`]},"info-card":{groupSlugs:[`display`,`layout`],componentSlugs:[`activity-feed`,`card`]},"activity-feed":{groupSlugs:[`display`],componentSlugs:[`info-card`]},"data-state":{groupSlugs:[`display`],componentSlugs:[`loading-state`,`data-table`]},"loading-state":{groupSlugs:[`display`],componentSlugs:[`data-state`,`data-table`]},"scroll-box":{groupSlugs:[`display`,`layout`],componentSlugs:[`table`,`data-table`]},toast:{groupSlugs:[`notifications`,`overlay`],componentSlugs:[`confirm-dialog`,`dialog`]},kbd:{groupSlugs:[`command`,`actions`],componentSlugs:[`button`,`tooltip`,`input`]}},ve=new Set([`button`,`input`,`select`,`date-picker`,`checkbox`,`switch`,`badge`,`card`,`tabs`,`dialog`,`popover`,`dropdown-menu`,`sidebar`,`breadcrumbs`,`data-table`,`info-card`,`activity-feed`,`loading-state`,`toast`,`notification-center`,`progress`]),ye={textarea:`input`,"tag-input":`input`,"otp-input":`input`,"form-input":`input`,"form-textarea":`input`,"async-select":`select`,"async-multi-select":`select`,"form-select":`select`,calendar:`date-picker`,"date-range-picker":`date-picker`,"form-date-range-input":`date-picker`,"form-date-picker":`date-picker`,"form-date-range-picker":`date-picker`,"confirm-dialog":`dialog`,"app-header":`sidebar`,section:`sidebar`,toolbar:`sidebar`,"split-layout":`sidebar`,"page-header":`breadcrumbs`,table:`data-table`},A={input:[{key:`core`,title:`Core input surfaces`,description:`Start with the default text field and move outward only when the workflow demands specialization.`,slugs:[`input`,`textarea`]},{key:`related`,title:`Related input patterns`,description:`Specialized input types for search, masking, numeric entry, and compact structured values.`,slugs:[`tag-input`,`otp-input`]},{key:`integrations`,title:`Form integrations`,description:`Use these wrappers when the field needs to plug directly into shared form shells or React Hook Form.`,slugs:[`form-input`,`form-textarea`]}],select:[{key:`core`,title:`Core select surfaces`,description:`Use the base selection control first, then expand only when the interaction model truly changes.`,slugs:[`select`]},{key:`related`,title:`Related select members`,description:`These members add real behavior such as remote loading or keyboard-first local filtering.`,slugs:[`async-select`]},{key:`integrations`,title:`Form integrations`,description:`Use wrapped selects when you need consistent form-level validation, labels, and shell behavior.`,slugs:[`form-select`]}],"date-picker":[{key:`core`,title:`Core date surfaces`,description:`Choose the popover picker or range picker when visual selection matters more than raw text entry.`,slugs:[`date-picker`,`date-range-picker`,`calendar`]},{key:`integrations`,title:`Form integrations`,description:`Use wrapped date fields when validation, labels, and form shell behavior should stay standardized.`,slugs:[`form-input`,`form-date-range-input`,`form-date-picker`,`form-date-range-picker`]}],dialog:[{key:`core`,title:`Core overlay surfaces`,description:`Use the lightest overlay that still matches the interaction. Do not default every action to a full modal.`,slugs:[`dialog`,`popover`,`dropdown-menu`]},{key:`advanced`,title:`Confirmation and shell patterns`,description:`These composed overlays handle destructive confirmation and side-drawer editing flows.`,slugs:[`confirm-dialog`,`drawer`]}],sidebar:[{key:`core`,title:`Sidebar surfaces`,description:`These pieces define the reusable sidebar surface first, then layer shell framing around it only when the route really needs it.`,slugs:[`sidebar`,`breadcrumbs`]},{key:`related`,title:`Route-level patterns`,description:`Use these patterns only after the sidebar and navigation contract are already clear.`,slugs:[`section`,`toolbar`,`split-layout`]}],"data-table":[{key:`core`,title:`Primary data table surface`,description:`Start with the full DataTable route first. It demonstrates the reusable grid the way product teams actually consume it.`,slugs:[`data-table`]},{key:`related`,title:`Supporting primitive`,description:`Drop down to the semantic table primitive only when you do not need the full DataTable workflow.`,slugs:[`table`]}],toast:[{key:`core`,title:`Global feedback surface`,description:`Use toast messaging for transient global feedback, not for critical form validation or persistent page states.`,slugs:[`toast`]}]},j=t.default,M=j?.groups??{},N=new Set((j?.recommended??[]).map(e=>e)),P=j?.migrationAliases??{},F=new Set(Object.values(P)),I=new Set([`app-header`,`async-multi-select`,`form`,`form-field`,`form-field-shell`,`form-input`,`form-select`,`form-switch`,`form-textarea`,`page-header`]),be=new Set([`kits`]),L=new Set([`all`,`dashboard`,`calendar-kit`,`wizard-kit`,...I]),xe=new Set([`hooks`]),Se={ui:`Components`,actions:`Components`,layout:`Components`,feedback:`Data Display`,display:`Data Display`,overlay:`Overlay`,form:`Forms`,dataTable:`Data Display`,data_table:`Data Display`,navigation:`Data Display`,filters:`Data Display`,calendar:`Data Display`,upload:`Data Display`,wizard:`Data Display`,notifications:`Data Display`,command:`Data Display`,patterns:`Patterns`},Ce={ui:r.ComponentIcon,actions:r.SparklesIcon,feedback:r.WalletIcon,display:r.DatabaseIcon,overlay:r.PanelTopIcon,inputs:r.FormInputIcon,form:r.FormInputIcon,dataTable:r.Table2Icon,data_table:r.Table2Icon,layout:r.LayoutDashboardIcon,navigation:r.BoxIcon,filters:r.SlidersHorizontalIcon,calendar:r.CalendarClockIcon,upload:r.FileTextIcon,wizard:r.WorkflowIcon,notifications:r.BellIcon,command:r.TerminalSquareIcon,patterns:r.BlocksIcon,hooks:r.SmartphoneIcon};function R(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}var we={ui:[`Composable primitive`,`Variant-ready styling`,`Keyboard and focus-friendly defaults`,`Local source-copy customization`],actions:[`Action composition`,`Icon and label pairing`,`Keyboard and focus-friendly defaults`,`Dense toolbar usage`],feedback:[`Inline status messaging`,`Loading, empty or error context`,`Accessible status copy`,`Actionable recovery guidance`],display:[`Structured content display`,`Empty and loading state support`,`Accessible reading order`,`Responsive data presentation`],overlay:[`Focused overlay behavior`,`Escape and outside-click handling`,`Accessible focus management`,`Compact action footer`],inputs:[`Controlled value support`,`Validation-ready states`,`Keyboard and focus-friendly defaults`,`Form-friendly composition`],form:[`Form shell integration`,`Validation and error states`,`Accessible label contract`,`Reusable field composition`],dataTable:[`Data workflow composition`,`Sorting/filtering integration`,`Accessible row and header semantics`,`Responsive operator surfaces`],data_table:[`Data workflow composition`,`Sorting/filtering integration`,`Accessible row and header semantics`,`Responsive operator surfaces`],layout:[`Route-level structure`,`Navigation-aware composition`,`Responsive shell behavior`,`Reusable product framing`],navigation:[`Section navigation`,`Current state support`,`Keyboard and focus-friendly defaults`,`Route-friendly links`],filters:[`Search and filter composition`,`Saved or reusable filter state`,`Accessible control labels`,`Data-table integration`],calendar:[`Date selection workflow`,`Boundary and disabled-date support`,`Keyboard and focus-friendly defaults`,`Scheduling-ready layout`],upload:[`File interaction workflow`,`Preview and progress states`,`Accessible upload guidance`,`Validation-ready constraints`],wizard:[`Step flow composition`,`Progress and completion state`,`Keyboard and focus-friendly defaults`,`Guided form workflow`],notifications:[`Transient status messaging`,`Unread and dismiss flows`,`Accessible notification copy`,`Async completion feedback`],command:[`Keyboard-first discovery`,`Search and grouped actions`,`Accessible command labels`,`Route or action execution`],patterns:[`Composed product workflow`,`Reusable screen section`,`Accessible structure`,`Production layout starting point`]},Te={ui:`Reusable primitive for product interfaces with source-copy styling and predictable focus behavior.`,actions:`Action surface for dense product workflows, toolbar controls and copy-friendly command areas.`,feedback:`Status surface for communicating loading, empty, success, warning or error context with a clear next step.`,display:`Read-oriented surface for presenting operational content, metadata, timelines or structured records.`,overlay:`Focused overlay pattern for short decisions, contextual actions and contained editing flows.`,inputs:`Input surface for controlled values, validation states and form-ready interaction patterns.`,form:`Form composition helper for labels, validation, controlled values and repeatable field structure.`,dataTable:`Data workflow helper for reusable tables, row actions, filtering, selection and responsive records.`,data_table:`Data workflow helper for reusable tables, row actions, filtering, selection and responsive records.`,layout:`Layout helper for route-level structure, navigation context and reusable application shells.`,navigation:`Navigation helper for route-aware sections, current state and keyboard-friendly movement.`,filters:`Filter composition helper for search, chips, saved views and data narrowing workflows.`,calendar:`Date and schedule surface for reporting, planning, disabled-date rules and calendar-style selection.`,upload:`Upload workflow surface for files, images, preview states, progress and validation guidance.`,wizard:`Guided workflow surface for multi-step forms, progress state and step-by-step completion.`,notifications:`Notification surface for async status, unread activity, dismiss behavior and transient updates.`,command:`Command surface for keyboard-first search, grouped actions and fast route or action discovery.`,patterns:`Composed product pattern that combines primitives into reusable production screen sections.`};function Ee(e){return we[e]??[`Source-copy component`,`Composable product usage`,`Keyboard and focus-friendly defaults`,`Local customization`]}function De(e,t){return`${t}. ${Te[e]??`Reusable source-copy surface for production product interfaces.`}`}var Oe=new Set(k.map(e=>e.slug)),z=new Map;for(let[t,n]of Object.entries(M))if(!(be.has(t)||xe.has(t)))for(let i of n){let n=P[i],a=n??i;if(!i||L.has(i)||L.has(a)||F.has(a)&&!e.isPublicComponentSurfaceSlug(a)||F.has(i)&&!e.isPublicComponentSurfaceSlug(i)||Oe.has(a)||z.has(a))continue;let o=Se[t]??`Data Display`,s=Ce[t]??r.SparklesIcon;z.set(a,{slug:a,title:R(n||a),description:De(t,R(a)),icon:s,category:o,status:N.has(a)?`Stable`:`Preview`,installCommand:u,propsRows:[[`className`,`string`,`-`,`Additional classes for wrapper element.`],[`children`,`ReactNode`,`-`,`Optional composed content or custom slots when the component supports composition.`],[`aria-label`,`string`,`-`,`Accessible label for icon-only, compact, or non-text usage.`]],features:Ee(t)})}var ke=[...z.values()],B=[...k,...ke].filter(e=>!I.has(e.slug)),V=[],H=new Map(V.map(e=>[e.slug,e])),U=new Set([...I,`app-header`,`page-header`,`resource-page`,`resource-detail-page`]),Ae=new Set([...U,...T.keys()]);function W(e){if(!e)return;let t=E(e),n=K(t);return t===n?H.get(t)??B.find(e=>e.slug===t):H.get(n)??B.find(e=>e.slug===n)}function G(e){return H.has(E(e))||ve.has(E(e))}function K(e){let t=E(e);return G(t)?t:ye[t]??t}function q(e){return W(K(e))?.title??e}function J(){let t=B.filter(e=>K(e.slug)===e.slug),n=new Map;for(let e of t)n.set(e.slug,e);for(let e of V)n.set(e.slug,e);return Array.from(n.values()).filter(e=>!U.has(e.slug)).filter(t=>e.isPublicComponentSurfaceSlug(t.slug)).sort((t,n)=>{let r=e.comparePublicComponentSurfaceOrder(t.slug,n.slug);return r===0?t.title.localeCompare(n.title):r})}function je(){let e=new Map;for(let t of B)e.set(t.slug,t);for(let t of V)e.set(t.slug,t);return Array.from(e.values()).filter(e=>!Ae.has(e.slug)).sort((e,t)=>e.title.localeCompare(t.title))}function Y(e){let t=e?K(e):void 0;return J().map(e=>({slug:e.slug,title:e.title,href:g(e.slug),status:e.status,group:D(e.slug),active:t?K(e.slug)===t:!1})).sort((e,t)=>e.title.localeCompare(t.title))}function Me(e){let t=new Map;for(let n of Y(e)){let e=n.title[0]?.toUpperCase()??`#`,r=`${e} - ${n.group}`;t.has(r)||t.set(r,{key:r,label:`${e} • ${n.group}`,items:[]}),t.get(r)?.items.push(n)}return Array.from(t.values())}function X(e){return(A[K(e)]??[]).map(e=>({...e,slugs:e.slugs.filter(e=>!I.has(e))})).filter(e=>e.slugs.length>0)}function Z(e){return(e?[K(e)]:Object.keys(A)).flatMap(e=>{let t=W(e);return X(e).flatMap(n=>{let r=[];for(let i of n.slugs){let a=B.find(e=>e.slug===i);a&&r.push({component:a.title,slug:a.slug,title:a.title,surfaceSlug:e,surfaceTitle:t?.title??e,sectionId:n.key,sectionLabel:n.title,sectionKey:n.key,summary:a.description,useWhen:n.description,maturity:n.key===`core`?`core`:n.key===`compatibility`?`compatibility`:`helper`,status:a.status,href:g(a.slug)})}return r})})}function Ne(e){return Z().find(t=>t.component===e)}function Pe(e){let t=new Set(e);return Z().filter(e=>t.has(e.component))}var Q=[{slug:`actions`,title:`Actions`,description:`Context actions, copy controls and quick grids for dense product surfaces.`,icon:r.MousePointerClickIcon,category:`Actions`,exports:[`ActionMenu`,`CopyButton`,`QuickActionGrid`],href:v(`actions`),status:`Stable`,features:[`Quick actions`,`Copy affordances`,`Dense command blocks`]},{slug:`layout`,title:`Application layout`,description:`Route-level sidebars, breadcrumbs and page framing helpers that support real reusable components instead of replacing them.`,icon:r.LayoutDashboardIcon,category:`Layout`,exports:[`Sidebar`,`Breadcrumbs`,`Section`],href:v(`layout`),status:`Stable`,features:[`Sidebar navigation`,`Page framing`,`Section structure`,`Sticky actions`]},{slug:`filters`,title:`Filters`,description:`Filter bars and chip patterns for narrowing data without leaving the current view.`,icon:r.SlidersHorizontalIcon,category:`Data`,exports:[`FilterBar`,`SavedFilterSelect`],href:v(`filters`),status:`Stable`,features:[`Filter bars`,`Chips`,`Search + filter pairing`]},{slug:`overlay`,title:`Overlay patterns`,description:`Confirm flows, modal shells, sheet layouts and dialog actions.`,icon:r.AlertCircleIcon,category:`Overlay`,exports:[`AlertDialog`,`ConfirmDialog`,`Drawer`,`Tooltip`,`Popover`,`RightClickMenu`],href:v(`overlay`),status:`Stable`,features:[`Confirm flows`,`Sheet layouts`,`Modal actions`,`Lightweight helper hints`]},{slug:`navigation`,title:`Navigation`,description:`Pagination and tabbed navigation patterns for sectioned or paginated interfaces.`,icon:r.ChevronRightIcon,category:`Layout`,exports:[`Pagination`],href:v(`navigation`),status:`Stable`,features:[`Pagination`,`Page tabs`,`Stepper tabs`]},{slug:`form`,title:`Form`,description:`Form shell and wrapper layer for labels, validation, and repeatable field composition.`,icon:r.FileTextIcon,category:`Forms`,exports:[`FormFieldShell`,`FormInput`,`FormSelect`,`FormTextarea`,`FormSwitch`,`FormDatePicker`],href:v(`form`),status:`Stable`,features:[`Field shell`,`Wrapped controls`,`Date helpers`,`Consistent validation`]},{slug:`display`,title:`Display`,description:`Metrics, activity, avatars, timelines and descriptive content surfaces.`,icon:r.DatabaseIcon,category:`Data`,exports:[`DescriptionList`,`Progress`,`PageState`,`Timeline`,`Statistic`,`InfoCard`,`ActivityFeed`,`StatusLegend`,`Avatar`,`DataState`,`ScrollBox`],href:v(`display`),status:`Stable`,features:[`Metric grids`,`Timelines`,`Activity feeds`,`Status legends`]},{slug:`data-table`,title:`DataTable`,description:`Primary reusable data-grid system. Helper pieces stay secondary to the main table route.`,icon:r.Table2Icon,category:`Data`,exports:[`DataTable`],href:v(`data-table`),status:`Stable`,features:[`Toolbar`,`Selection`,`Row actions`,`Saved views`,`Pagination`]},{slug:`notifications`,title:`Notifications`,description:`Toast and notification surfaces for transient feedback, async completion, and unread activity.`,icon:r.BadgeIcon,category:`Overlay`,exports:[`Toast`,`NotificationCenter`],href:v(`notifications`),status:`Preview`,features:[`Toasts`,`Promise feedback`,`Unread activity`,`Status messaging`]},{slug:`command`,title:`Command`,description:`Command palette patterns for keyboard-driven discovery, search, grouped actions and async navigation.`,icon:r.TerminalSquareIcon,category:`Workflow`,exports:[`CommandPalette`],href:v(`command`),status:`Preview`,features:[`Command palette`,`Grouped actions`,`Async search`,`Keyboard discovery`]},{slug:`calendar`,title:`Calendar`,description:`Calendar, date picker and range picker flows for scheduling and reporting.`,icon:r.Grid2x2Icon,category:`Workflow`,exports:[`DateUtils`,`Calendar`,`DatePicker`,`DateRangePicker`],href:v(`calendar`),status:`Stable`,features:[`Date picker`,`Range picker`,`Scheduling flows`]},{slug:`upload`,title:`Upload`,description:`File and image upload surfaces with preview-friendly interaction patterns.`,icon:r.BlocksIcon,category:`Workflow`,exports:[`FileUpload`,`ImageUpload`],href:v(`upload`),status:`Preview`,features:[`File upload`,`Image upload`,`Attachment flows`]},{slug:`wizard`,title:`Wizard`,description:`Stepper and multi-step workflow patterns for onboarding and guided flows.`,icon:r.WorkflowIcon,category:`Workflow`,exports:[`Stepper`,`Wizard`],href:v(`wizard`),status:`Stable`,features:[`Step flow`,`Guided forms`,`Progress state`]}],Fe=[{label:`Docs`,href:m},{label:`Installation`,href:`/docs/installation`},{label:`Components`,href:`/components`},{label:`Search`,href:`/search`},{label:`Changelog`,href:`/changelog`}],Ie=[{title:`Getting Started`,items:[{label:`Overview`,href:m,icon:r.BookOpenIcon},{label:`Installation`,href:`/docs/installation`,icon:r.ChevronRightIcon},{label:`Components catalog`,href:`/components`,icon:r.ComponentIcon},{label:`Changelog`,href:`/changelog`,icon:r.FileTextIcon}]},...C.map(e=>({title:e,items:O(e,g)})).filter(e=>e.items.length>0)],Le=[{title:`Getting Started`,items:[{label:`Introduction`,href:`/playground/button`,icon:r.BookOpenIcon},{label:`Installation`,href:_(`button`),icon:r.ChevronRightIcon},{label:`Theming`,href:_(`button`),icon:r.SparklesIcon},{label:`Tokens`,href:_(`badge`),icon:r.Layers3Icon},{label:`Icon Library`,href:_(`popover`),icon:r.Grid2x2Icon}]},...C.map(e=>({title:e,items:O(e,_)})).filter(e=>e.items.length>0)],Re=[`All blocks`,`Dashboard`,`Auth`,`Table`,`Settings`,`Pricing`,`Product`,`Marketing`],ze=[`All layouts`,`Application`,`Marketing`],Be=[`All themes`,`Light`,`Soft`],Ve=[`Popular`,`A-Z`],$=[{title:`Application blocks`,text:`Dashboard, table and settings blocks should show route structure, visible actions and realistic operational density.`,items:[`Sidebar shell`,`Toolbar actions`,`Table states`,`Settings surfaces`]},{title:`Entry and conversion blocks`,text:`Auth, pricing, product and marketing blocks should explain trust, conversion hierarchy and where the section fits in a larger page flow.`,items:[`Form blocks`,`CTA hierarchy`,`Proof points`,`Responsive sections`]},{title:`Reusable block library`,text:`Every block card should show its category, where it fits, and which route opens the richer preview or template detail view.`,items:[`Category label`,`Usage notes`,`Preview action`,`Install path`]}],He={slug:`dashboard-starter`,title:`Modern Dashboard`,description:`Clean dashboard with analytics, charts, and activity tables.`,bestFor:`Dashboard entry sections, KPI headers, recent activity, and operational overview surfaces.`,category:`Dashboard`,tags:[`Dashboard`,`Analytics`,`Charts`,`Overview`],uses:[`Sidebar`,`Section`,`Statistic`,`DataTable`],tone:`from-emerald-50 via-white to-sky-50`,href:S(`dashboard-starter`),previewHref:`/preview/blocks/dashboard-01`,previewTone:`dashboard`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and make sure the dashboard route already has theme tokens loaded.",`Copy the shell section into an authenticated page and connect it to live KPI and activity data.`,`Keep the block focused on one overview slice instead of turning it into a full page shell.`],dependencyGroups:[`Layout shell`,`Metric cards`,`Table primitives`,`Action buttons`],copyTargets:[`components/blocks/dashboard/overview-shell.tsx`,`components/blocks/dashboard/metric-row.tsx`,`components/blocks/dashboard/activity-table.tsx`],notes:[`Use this block when one dashboard section is enough; move to the template when navigation and multiple zones are required.`,`Primary actions should stay tied to one operational area, not a full application workflow.`]},Ue=[{slug:`sidebar-layout`,title:`Sidebar Layout`,description:`Application shell with responsive sidebar.`,bestFor:`Route-level shells that need stable navigation, app header actions, and one main content zone.`,category:`Dashboard`,tags:[`Navigation`,`Shell`,`Analytics`],uses:[`Sidebar`,`Section`,`Button`],tone:`from-[color:var(--aui-page-bg-alt)] to-[color:var(--aui-page-bg)]`,href:S(`sidebar-layout`),previewHref:`/preview/blocks/dashboard-01`,previewTone:`dashboard`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and mount the shell inside an authenticated route group.",`Wire navigation items and header actions before copying child content zones into the shell.`,`Keep the shell generic enough to reuse across more than one application page.`],dependencyGroups:[`App shell`,`Sidebar navigation`,`Page header`,`Action controls`],copyTargets:[`components/blocks/layout/sidebar-layout.tsx`,`components/navigation/app-sidebar.tsx`],notes:[`Do not use this block for a whole admin app export; it is one shell slice, not the full template.`,`Navigation depth and section order should come from the app route model, not from hardcoded demo labels.`]},{slug:`crm-dashboard`,title:`CRM Dashboard`,description:`Sales pipeline and deals management.`,bestFor:`Pipeline snapshots, team handoff sections, and account-focused operational dashboards.`,category:`Product`,tags:[`CRM`,`Pipeline`,`Kanban`],uses:[`ResourcePage`,`Badge`,`Tabs`,`ActivityFeed`],tone:`from-[color:color-mix(in_oklch,var(--aui-accent)_10%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`crm-dashboard`),previewTone:`crm`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`crm-dashboard`,installSteps:["Run `npx tembro init` and reuse the CRM block inside an existing workspace route.",`Connect stage counts, owners, and next actions to live CRM entities before release.`,`Escalate to the CRM template only when the page needs reports, settings, and multiple sections together.`],dependencyGroups:[`Stage summaries`,`Owner badges`,`Activity feed`,`Tabs and headers`],copyTargets:[`components/blocks/crm/pipeline-summary.tsx`,`components/blocks/crm/account-activity.tsx`],notes:[`CRM sections lose clarity when actions are hidden; keep stage, owner, and next-step signals visible.`,`This block should stay narrower than the full CRM workspace template.`]},{slug:`users-table`,title:`Users Table`,description:`Advanced table with filters and actions.`,bestFor:`Management tables with filters, row actions, bulk actions, and compact result scanning.`,category:`Table`,tags:[`Data`,`Filters`,`Bulk actions`],uses:[`DataTable`,`PageToolbar`,`Button`,`Badge`],tone:`from-[color:var(--aui-page-bg-alt)] to-[color:var(--aui-page-bg)]`,href:S(`users-table`),previewHref:`/preview/blocks/table-01`,previewTone:`table`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and move the table block into the target resource page.",`Map columns, row identifiers, and action callbacks to your real API contract.`,`Keep pagination, filters, and bulk actions aligned with backend capabilities.`],dependencyGroups:[`Data table`,`Toolbar filters`,`Bulk actions`,`Status badges`],copyTargets:[`components/blocks/tables/users-table.tsx`,`components/blocks/tables/table-toolbar.tsx`],notes:[`Prefer this block for one resource section; use a template when the whole page needs navigation and surrounding analytics.`,`Do not treat demo filters as final product logic; they are only structural placeholders.`]},{slug:`auth-sign-in`,title:`Auth Sign In`,description:`Minimal sign in form with social login.`,bestFor:`Entry flows that need one focused sign-in surface, trust copy, and a compact auth action stack.`,category:`Auth`,tags:[`Sign in`,`Form`,`Trust`],uses:[`Card`,`Input`,`Button`,`Badge`],tone:`from-[color:color-mix(in_oklch,var(--aui-warning)_12%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`auth-sign-in`),previewHref:`/preview/blocks/auth-01`,previewTone:`auth`,layout:`Marketing`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and mount the auth block on a public or gated entry route.",`Replace demo trust copy, OAuth providers, and field labels with your real auth contract.`,`Use the wider auth or app template only when onboarding needs multiple steps or side content.`],dependencyGroups:[`Form fields`,`Card shell`,`Primary CTA`,`Trust badges`],copyTargets:[`components/blocks/auth/sign-in-card.tsx`,`components/blocks/auth/social-auth-row.tsx`],notes:[`Keep this block conversion-focused; avoid adding unrelated settings or dashboard content to the same surface.`,`Auth blocks should show trust and hierarchy clearly on mobile before they are shipped.`]},{slug:`settings-form`,title:`Settings Form`,description:`Profile and preferences settings form.`,bestFor:`One bounded settings section with fields, toggles, save actions, and light explanatory copy.`,category:`Settings`,tags:[`Profile`,`Preferences`,`Form`],uses:[`FormFieldShell`,`Input`,`Switch`,`Button`],tone:`from-[color:color-mix(in_oklch,var(--aui-surface-muted)_70%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`settings-form`),previewTone:`settings`,layout:`Application`,theme:`Light`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and place the settings block inside an existing account or workspace page.",`Wire field state, validation, and save feedback to your app settings contract.`,`Only move to a larger settings template when multiple settings areas need shared navigation.`],dependencyGroups:[`Form wrappers`,`Inputs and switches`,`Save actions`,`Inline helper text`],copyTargets:[`components/blocks/settings/profile-form.tsx`,`components/blocks/settings/preferences-section.tsx`],notes:[`This block is for one settings slice, not an entire account management surface.`,`Keep destructive account actions separate from routine preference editing.`]},{slug:`invoices-page`,title:`Invoices Page`,description:`Invoices list with status and actions.`,bestFor:`Billing or finance tables that need status columns, invoice actions, and readable operational totals.`,category:`Table`,tags:[`Finance`,`Invoices`,`Status`],uses:[`DataTable`,`Badge`,`Button`,`ResourcePage`],tone:`from-[color:color-mix(in_oklch,var(--aui-accent)_12%,var(--aui-page-bg-alt))] to-[color:var(--aui-page-bg)]`,href:S(`invoices-page`),previewHref:`/preview/blocks/table-01`,previewTone:`table`,layout:`Application`,theme:`Soft`,relatedTemplateSlug:`dashboard-starter`,installSteps:["Run `npx tembro init` and copy the invoice block into the billing route.",`Connect payment status, row actions, and export flows to real finance data.`,`Keep summaries close to the table instead of turning the block into a full finance dashboard.`],dependencyGroups:[`Table rows`,`Invoice status badges`,`Header actions`,`Finance filters`],copyTargets:[`components/blocks/finance/invoices-table.tsx`,`components/blocks/finance/invoice-actions.tsx`],notes:[`Finance blocks need explicit status language; avoid vague marketing labels in invoice rows.`,`When the page needs broader reporting and settings, step up to a template-level surface.`]}],We=u,Ge=[[`variant`,`'default' | 'secondary' | ...`,`'default'`,`The visual style of the button.`],[`size`,`'xs' | 'sm' | 'md' | 'lg' | 'xl'`,`'md'`,`The size of the button.`],[`asChild`,`boolean`,`false`,`Render as a child element using Slot.`],[`disabled`,`boolean`,`false`,`Disables the button.`],[`className`,`string`,`-`,`Additional CSS classes.`],[`onClick`,`(e: MouseEvent) => void`,`-`,`Click event handler.`]],Ke=[`Installation`,`Variations`,`Sizes`,`States`,`Icon buttons`,`Block button`,`Examples`,`API Reference`,`Accessibility`],qe=[{title:`Action buttons`,cta:`Save changes`},{title:`Icon with text`,cta:`Send message`},{title:`Loading state`,cta:`Processing...`},{title:`Destructive action`,cta:`Delete item`}],Je=[`Tab to focus`,`Visible focus ring`,`Enter / Space to activate`],Ye=[`Role: button`,`Name is programmatically determinable`,`Minimum touch target (44x44px)`,`Sufficient color contrast`],Xe=[{title:`Home`,description:`Open the landing page with the product overview.`,href:`/`,group:`Docs`,shortcut:`H`,keywords:[`home`,`landing`,`overview`,`introduction`]},{title:`Blocks`,description:`Browse reusable blocks and layout sections.`,href:`/blocks`,group:`Blocks`,shortcut:`B`,featured:!0,keywords:[`blocks`,`catalog`,`templates`,`dashboards`,`marketing`,`layout patterns`]},{title:`Components`,description:`Browse component docs and related modules.`,href:`/components`,group:`Docs`,shortcut:`C`,keywords:[`components`,`catalog`,`docs`,`family`,`category`]},{title:`Developer inventory`,description:`Open the export inventory with primary components, groups, and member routes.`,href:`/components/registry`,group:`Docs`,shortcut:`R`,keywords:[`developer inventory`,`registry`,`inventory`,`exports`,`component list`,`source of truth`]},{title:`Changelog`,description:`Read release notes and track API and docs changes.`,href:`/changelog`,group:`Docs`,shortcut:`L`,keywords:[`changelog`,`release`,`history`,`changes`,`version`]},{title:`Command page`,description:`Open the full route index and quick command page.`,href:`/command`,group:`Docs`,shortcut:`K`,keywords:[`command`,`search`,`palette`,`route index`,`jump`]},{title:`Installation`,description:`Initialize the project, write theme tokens, and copy working CLI commands.`,href:`/docs/installation`,group:`Docs`,shortcut:`I`,featured:!0,keywords:[`installation`,`setup`,`npm`,`theme`,`tembro`,`cli`]},{title:`Next.js installation`,description:`Initialize tembro in a Next.js app and write local component files.`,href:`/docs/installation/next`,group:`Docs`,shortcut:`I`,keywords:[`installation`,`next`,`nextjs`,`setup`,`init`,`tailwind`,`cli`]},{title:`Vite installation`,description:`Initialize tembro in a Vite app and write local component files.`,href:`/docs/installation/vite`,group:`Docs`,shortcut:`I`,keywords:[`installation`,`vite`,`setup`,`init`,`tailwind`,`cli`]},...J().flatMap(e=>[{title:e.title,description:e.description,href:`/components/${e.slug}`,group:`Components`,shortcut:`C`,featured:e.slug===`button`||e.slug===`input`||e.slug===`dialog`||e.slug===`select`||e.slug===`card`,keywords:[e.slug,e.title,e.category,D(e.slug),q(e.slug),...e.features,`component`,`detail`,`usage`,`installation`]}]),...Z().map(e=>({title:`${e.title} in ${e.surfaceTitle}`,description:`${e.summary} Documented inside the ${e.surfaceTitle} surface under ${e.sectionLabel.toLowerCase()}.`,href:e.href,group:`Components`,shortcut:`M`,keywords:[e.title,e.slug,e.component,e.surfaceTitle,e.surfaceSlug,e.sectionLabel,e.maturity,`member`,`surface`,`variant`,`wrapper`]})),...Q.map(e=>({title:`${e.title} group`,description:`${e.description} Open the grouped docs surface for related exports and usage boundaries.`,href:e.href,group:`Components`,shortcut:`F`,featured:e.slug===`data-table`||e.slug===`form`||e.slug===`layout`,keywords:[e.slug,e.title,e.category,...e.features,...e.exports,`component group`,`catalog`,`system`]})),...Q.flatMap(e=>e.exports.map(t=>({title:`${t} API`,description:`${e.title} export detail with import path, related docs and usage context.`,href:b(e.slug,t),group:`Components`,shortcut:`E`,keywords:[t,e.title,e.slug,...e.features,`export`,`api`,`component`]})))];exports.CLI_ADD_COMMAND=l,exports.CLI_INIT_NEXT_COMMAND=c,exports.CLI_INIT_VITE_COMMAND=ne,exports.CLI_INSTALL_COMMAND=re,exports.CLI_PACKAGE_NAME=s,exports.CLI_THEME_COMMAND=ie,exports.DOCS_APP_NAME=te,exports.DOCS_RELEASES_URL=se,exports.DOCS_REPO_URL=p,exports.DOCS_ROOT_PATH=m,exports.PACKAGE_GITHUB_RELEASES_URL=f,exports.PACKAGE_GITHUB_URL=d,exports.PACKAGE_IMPORT=ee,exports.PACKAGE_INSTALL_COMMAND=u,exports.PACKAGE_NAME=o,exports.PACKAGE_NPM_URL=ae,exports.PACKAGE_RELEASES_URL=oe,exports.PACKAGE_RELEASE_DATE=le,exports.PACKAGE_VERSION=ce,exports.accessibilityChecks=Ye,exports.blockCards=Ue,exports.blockCoverageSections=$,exports.blockLayoutFilters=ze,exports.blockPath=S,exports.blockSortOptions=Ve,exports.blockTabs=Re,exports.blockThemeFilters=Be,exports.componentCatalog=B,exports.componentDocsPath=g,exports.componentExportPath=b,exports.componentExportSlug=y,exports.componentGroupMeta=w,exports.componentGroupOrder=C,exports.componentModuleCatalog=Q,exports.componentModulePath=v,exports.componentPlaygroundPath=_,exports.componentRelations=_e,exports.docsSidebar=Ie,exports.exampleCards=qe,exports.featuredBlock=He,exports.getComponentDetailSidebarItems=Y,exports.getComponentDetailSidebarSections=Me,exports.getComponentGroup=D,exports.getComponentGroupDetails=ge,exports.getComponentSurfaceCatalogItem=W,exports.getComponentSurfaceSections=X,exports.getDocumentedMemberByComponent=Ne,exports.getDocumentedMembersByComponents=Pe,exports.getPrimaryComponentCatalog=J,exports.getPrimaryComponentMemberInventory=Z,exports.getPrimaryComponentSurfaceSlug=K,exports.getPrimaryComponentSurfaceTitle=q,exports.getVisibleComponentCatalog=je,exports.globalSearchItems=Xe,exports.inspectorChecks=Je,exports.installCommand=We,exports.isPrimaryComponentSurface=G,exports.playgroundSidebar=Le,exports.primaryNav=Fe,exports.propRows=Ge,exports.releaseHistory=h,exports.templatePath=x,exports.tocItems=Ke;