@dashforge/tw 0.10.0-beta → 1.0.0

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 (292) hide show
  1. package/CHANGELOG.md +35 -12
  2. package/COVERAGE.md +2 -2
  3. package/PARITY.md +7 -9
  4. package/PERFORMANCE.md +3 -4
  5. package/THEME-AUDIT.md +3 -4
  6. package/dist/components/Accordion/Accordion.d.ts +21 -0
  7. package/dist/components/Accordion/Accordion.d.ts.map +1 -0
  8. package/dist/components/Accordion/accordion.types.d.ts +74 -0
  9. package/dist/components/Accordion/accordion.types.d.ts.map +1 -0
  10. package/dist/components/Accordion/accordion.variants.d.ts +58 -0
  11. package/dist/components/Accordion/accordion.variants.d.ts.map +1 -0
  12. package/dist/components/AppShell/AppShell.d.ts +46 -0
  13. package/dist/components/AppShell/AppShell.d.ts.map +1 -0
  14. package/dist/components/AppShell/appShell.types.d.ts +62 -0
  15. package/dist/components/AppShell/appShell.types.d.ts.map +1 -0
  16. package/dist/components/AppShell/appShell.variants.d.ts +65 -0
  17. package/dist/components/AppShell/appShell.variants.d.ts.map +1 -0
  18. package/dist/components/AspectRatio/AspectRatio.d.ts +36 -0
  19. package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -0
  20. package/dist/components/AspectRatio/aspectRatio.types.d.ts +50 -0
  21. package/dist/components/AspectRatio/aspectRatio.types.d.ts.map +1 -0
  22. package/dist/components/Autocomplete/Autocomplete.d.ts +32 -0
  23. package/dist/components/Autocomplete/Autocomplete.d.ts.map +1 -0
  24. package/dist/components/Autocomplete/autocomplete.types.d.ts +214 -0
  25. package/dist/components/Autocomplete/autocomplete.types.d.ts.map +1 -0
  26. package/dist/components/Autocomplete/autocomplete.variants.d.ts +214 -0
  27. package/dist/components/Autocomplete/autocomplete.variants.d.ts.map +1 -0
  28. package/dist/components/Box/Box.d.ts +36 -0
  29. package/dist/components/Box/Box.d.ts.map +1 -0
  30. package/dist/components/Box/box.types.d.ts +54 -0
  31. package/dist/components/Box/box.types.d.ts.map +1 -0
  32. package/dist/components/Box/box.variants.d.ts +402 -0
  33. package/dist/components/Box/box.variants.d.ts.map +1 -0
  34. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +23 -0
  35. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  36. package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts +98 -0
  37. package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts.map +1 -0
  38. package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts +85 -0
  39. package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts.map +1 -0
  40. package/dist/components/Button/Button.d.ts +44 -0
  41. package/dist/components/Button/Button.d.ts.map +1 -0
  42. package/dist/components/Button/button.types.d.ts +66 -0
  43. package/dist/components/Button/button.types.d.ts.map +1 -0
  44. package/dist/components/Button/button.variants.d.ts +104 -0
  45. package/dist/components/Button/button.variants.d.ts.map +1 -0
  46. package/dist/components/Calendar/Calendar.d.ts +14 -0
  47. package/dist/components/Calendar/Calendar.d.ts.map +1 -0
  48. package/dist/components/Calendar/calendar.types.d.ts +72 -0
  49. package/dist/components/Calendar/calendar.types.d.ts.map +1 -0
  50. package/dist/components/Calendar/calendar.variants.d.ts +99 -0
  51. package/dist/components/Calendar/calendar.variants.d.ts.map +1 -0
  52. package/dist/components/Checkbox/Checkbox.d.ts +31 -0
  53. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  54. package/dist/components/Checkbox/checkbox.types.d.ts +86 -0
  55. package/dist/components/Checkbox/checkbox.types.d.ts.map +1 -0
  56. package/dist/components/Checkbox/checkbox.variants.d.ts +109 -0
  57. package/dist/components/Checkbox/checkbox.variants.d.ts.map +1 -0
  58. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +38 -0
  59. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
  60. package/dist/components/ConfirmDialog/confirmDialog.types.d.ts +80 -0
  61. package/dist/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -0
  62. package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts +90 -0
  63. package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts.map +1 -0
  64. package/dist/components/Container/Container.d.ts +35 -0
  65. package/dist/components/Container/Container.d.ts.map +1 -0
  66. package/dist/components/Container/container.types.d.ts +41 -0
  67. package/dist/components/Container/container.types.d.ts.map +1 -0
  68. package/dist/components/Container/container.variants.d.ts +93 -0
  69. package/dist/components/Container/container.variants.d.ts.map +1 -0
  70. package/dist/components/DataGrid/DataGrid.d.ts +29 -0
  71. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -0
  72. package/dist/components/DataGrid/dataGrid.types.d.ts +214 -0
  73. package/dist/components/DataGrid/dataGrid.types.d.ts.map +1 -0
  74. package/dist/components/DataGrid/dataGrid.variants.d.ts +222 -0
  75. package/dist/components/DataGrid/dataGrid.variants.d.ts.map +1 -0
  76. package/dist/components/DataGrid/filters/ColumnFilters.d.ts +23 -0
  77. package/dist/components/DataGrid/filters/ColumnFilters.d.ts.map +1 -0
  78. package/dist/components/DataGrid/reorder/useColumnReorder.d.ts +50 -0
  79. package/dist/components/DataGrid/reorder/useColumnReorder.d.ts.map +1 -0
  80. package/dist/components/DataGrid/resize/useColumnResize.d.ts +39 -0
  81. package/dist/components/DataGrid/resize/useColumnResize.d.ts.map +1 -0
  82. package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts +44 -0
  83. package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts.map +1 -0
  84. package/dist/components/DatePicker/DatePicker.d.ts +14 -0
  85. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  86. package/dist/components/DatePicker/datePicker.types.d.ts +88 -0
  87. package/dist/components/DatePicker/datePicker.types.d.ts.map +1 -0
  88. package/dist/components/DatePicker/datePicker.variants.d.ts +97 -0
  89. package/dist/components/DatePicker/datePicker.variants.d.ts.map +1 -0
  90. package/dist/components/DateRangePicker/DateRangePicker.d.ts +13 -0
  91. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  92. package/dist/components/DateRangePicker/dateRangePicker.types.d.ts +85 -0
  93. package/dist/components/DateRangePicker/dateRangePicker.types.d.ts.map +1 -0
  94. package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts +183 -0
  95. package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts.map +1 -0
  96. package/dist/components/DateTimePicker/DateTimePicker.d.ts +13 -0
  97. package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  98. package/dist/components/DateTimePicker/dateTimePicker.types.d.ts +90 -0
  99. package/dist/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -0
  100. package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts +107 -0
  101. package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts.map +1 -0
  102. package/dist/components/Dialog/Dialog.d.ts +17 -0
  103. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  104. package/dist/components/Dialog/dialog.types.d.ts +75 -0
  105. package/dist/components/Dialog/dialog.types.d.ts.map +1 -0
  106. package/dist/components/Dialog/dialog.variants.d.ts +80 -0
  107. package/dist/components/Dialog/dialog.variants.d.ts.map +1 -0
  108. package/dist/components/Divider/Divider.d.ts +50 -0
  109. package/dist/components/Divider/Divider.d.ts.map +1 -0
  110. package/dist/components/Divider/divider.types.d.ts +47 -0
  111. package/dist/components/Divider/divider.types.d.ts.map +1 -0
  112. package/dist/components/Divider/divider.variants.d.ts +129 -0
  113. package/dist/components/Divider/divider.variants.d.ts.map +1 -0
  114. package/dist/components/Grid/Grid.d.ts +32 -0
  115. package/dist/components/Grid/Grid.d.ts.map +1 -0
  116. package/dist/components/Grid/grid.types.d.ts +103 -0
  117. package/dist/components/Grid/grid.types.d.ts.map +1 -0
  118. package/dist/components/Grid/grid.variants.d.ts +453 -0
  119. package/dist/components/Grid/grid.variants.d.ts.map +1 -0
  120. package/dist/components/LeftNav/LeftNav.d.ts +34 -0
  121. package/dist/components/LeftNav/LeftNav.d.ts.map +1 -0
  122. package/dist/components/LeftNav/leftNav.types.d.ts +136 -0
  123. package/dist/components/LeftNav/leftNav.types.d.ts.map +1 -0
  124. package/dist/components/LeftNav/leftNav.variants.d.ts +143 -0
  125. package/dist/components/LeftNav/leftNav.variants.d.ts.map +1 -0
  126. package/dist/components/NumberField/NumberField.d.ts +18 -0
  127. package/dist/components/NumberField/NumberField.d.ts.map +1 -0
  128. package/dist/components/NumberField/numberField.types.d.ts +79 -0
  129. package/dist/components/NumberField/numberField.types.d.ts.map +1 -0
  130. package/dist/components/NumberField/numberField.variants.d.ts +169 -0
  131. package/dist/components/NumberField/numberField.variants.d.ts.map +1 -0
  132. package/dist/components/OTPField/OTPField.d.ts +25 -0
  133. package/dist/components/OTPField/OTPField.d.ts.map +1 -0
  134. package/dist/components/OTPField/otpField.types.d.ts +74 -0
  135. package/dist/components/OTPField/otpField.types.d.ts.map +1 -0
  136. package/dist/components/OTPField/otpField.variants.d.ts +105 -0
  137. package/dist/components/OTPField/otpField.variants.d.ts.map +1 -0
  138. package/dist/components/Pagination/Pagination.d.ts +32 -0
  139. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  140. package/dist/components/Pagination/pagination.helpers.d.ts +23 -0
  141. package/dist/components/Pagination/pagination.helpers.d.ts.map +1 -0
  142. package/dist/components/Pagination/pagination.types.d.ts +120 -0
  143. package/dist/components/Pagination/pagination.types.d.ts.map +1 -0
  144. package/dist/components/Pagination/pagination.variants.d.ts +150 -0
  145. package/dist/components/Pagination/pagination.variants.d.ts.map +1 -0
  146. package/dist/components/Popover/Popover.d.ts +15 -0
  147. package/dist/components/Popover/Popover.d.ts.map +1 -0
  148. package/dist/components/Popover/popover.types.d.ts +45 -0
  149. package/dist/components/Popover/popover.types.d.ts.map +1 -0
  150. package/dist/components/Popover/popover.variants.d.ts +34 -0
  151. package/dist/components/Popover/popover.variants.d.ts.map +1 -0
  152. package/dist/components/RadioGroup/RadioGroup.d.ts +35 -0
  153. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
  154. package/dist/components/RadioGroup/radioGroup.types.d.ts +103 -0
  155. package/dist/components/RadioGroup/radioGroup.types.d.ts.map +1 -0
  156. package/dist/components/RadioGroup/radioGroup.variants.d.ts +166 -0
  157. package/dist/components/RadioGroup/radioGroup.variants.d.ts.map +1 -0
  158. package/dist/components/Skeleton/Skeleton.d.ts +23 -0
  159. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
  160. package/dist/components/Skeleton/skeleton.types.d.ts +56 -0
  161. package/dist/components/Skeleton/skeleton.types.d.ts.map +1 -0
  162. package/dist/components/Skeleton/skeleton.variants.d.ts +110 -0
  163. package/dist/components/Skeleton/skeleton.variants.d.ts.map +1 -0
  164. package/dist/components/Snackbar/Snackbar.d.ts +37 -0
  165. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -0
  166. package/dist/components/Snackbar/snackbar.types.d.ts +86 -0
  167. package/dist/components/Snackbar/snackbar.types.d.ts.map +1 -0
  168. package/dist/components/Snackbar/snackbar.variants.d.ts +153 -0
  169. package/dist/components/Snackbar/snackbar.variants.d.ts.map +1 -0
  170. package/dist/components/Stack/Stack.d.ts +24 -0
  171. package/dist/components/Stack/Stack.d.ts.map +1 -0
  172. package/dist/components/Stack/stack.types.d.ts +61 -0
  173. package/dist/components/Stack/stack.types.d.ts.map +1 -0
  174. package/dist/components/Stack/stack.variants.d.ts +163 -0
  175. package/dist/components/Stack/stack.variants.d.ts.map +1 -0
  176. package/dist/components/Switch/Switch.d.ts +15 -0
  177. package/dist/components/Switch/Switch.d.ts.map +1 -0
  178. package/dist/components/Switch/switch.types.d.ts +47 -0
  179. package/dist/components/Switch/switch.types.d.ts.map +1 -0
  180. package/dist/components/Switch/switch.variants.d.ts +105 -0
  181. package/dist/components/Switch/switch.variants.d.ts.map +1 -0
  182. package/dist/components/Table/Table.d.ts +24 -0
  183. package/dist/components/Table/Table.d.ts.map +1 -0
  184. package/dist/components/Table/cells/RenderButton.d.ts +13 -0
  185. package/dist/components/Table/cells/RenderButton.d.ts.map +1 -0
  186. package/dist/components/Table/cells/RenderChip.d.ts +80 -0
  187. package/dist/components/Table/cells/RenderChip.d.ts.map +1 -0
  188. package/dist/components/Table/cells/RenderText.d.ts +21 -0
  189. package/dist/components/Table/cells/RenderText.d.ts.map +1 -0
  190. package/dist/components/Table/cells/RenderTwoLine.d.ts +20 -0
  191. package/dist/components/Table/cells/RenderTwoLine.d.ts.map +1 -0
  192. package/dist/components/Table/cells/RowActionsMenu.d.ts +36 -0
  193. package/dist/components/Table/cells/RowActionsMenu.d.ts.map +1 -0
  194. package/dist/components/Table/cells/index.d.ts +11 -0
  195. package/dist/components/Table/cells/index.d.ts.map +1 -0
  196. package/dist/components/Table/table.types.d.ts +399 -0
  197. package/dist/components/Table/table.types.d.ts.map +1 -0
  198. package/dist/components/Table/table.variants.d.ts +285 -0
  199. package/dist/components/Table/table.variants.d.ts.map +1 -0
  200. package/dist/components/Tabs/Tabs.d.ts +19 -0
  201. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  202. package/dist/components/Tabs/tabs.types.d.ts +61 -0
  203. package/dist/components/Tabs/tabs.types.d.ts.map +1 -0
  204. package/dist/components/Tabs/tabs.variants.d.ts +82 -0
  205. package/dist/components/Tabs/tabs.variants.d.ts.map +1 -0
  206. package/dist/components/Tabs/useTabs.d.ts +55 -0
  207. package/dist/components/Tabs/useTabs.d.ts.map +1 -0
  208. package/dist/components/TextField/TextField.d.ts +25 -0
  209. package/dist/components/TextField/TextField.d.ts.map +1 -0
  210. package/dist/components/TextField/textField.types.d.ts +98 -0
  211. package/dist/components/TextField/textField.types.d.ts.map +1 -0
  212. package/dist/components/TextField/textField.variants.d.ts +166 -0
  213. package/dist/components/TextField/textField.variants.d.ts.map +1 -0
  214. package/dist/components/Textarea/Textarea.d.ts +16 -0
  215. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  216. package/dist/components/Textarea/textarea.types.d.ts +63 -0
  217. package/dist/components/Textarea/textarea.types.d.ts.map +1 -0
  218. package/dist/components/Textarea/textarea.variants.d.ts +197 -0
  219. package/dist/components/Textarea/textarea.variants.d.ts.map +1 -0
  220. package/dist/components/TimePicker/TimePicker.d.ts +12 -0
  221. package/dist/components/TimePicker/TimePicker.d.ts.map +1 -0
  222. package/dist/components/TimePicker/timePicker.types.d.ts +80 -0
  223. package/dist/components/TimePicker/timePicker.types.d.ts.map +1 -0
  224. package/dist/components/TimePicker/timePicker.variants.d.ts +103 -0
  225. package/dist/components/TimePicker/timePicker.variants.d.ts.map +1 -0
  226. package/dist/components/Tooltip/Tooltip.d.ts +29 -0
  227. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  228. package/dist/components/Tooltip/tooltip.types.d.ts +47 -0
  229. package/dist/components/Tooltip/tooltip.types.d.ts.map +1 -0
  230. package/dist/components/Tooltip/tooltip.variants.d.ts +34 -0
  231. package/dist/components/Tooltip/tooltip.variants.d.ts.map +1 -0
  232. package/dist/components/TopBar/TopBar.d.ts +33 -0
  233. package/dist/components/TopBar/TopBar.d.ts.map +1 -0
  234. package/dist/components/TopBar/topBar.types.d.ts +49 -0
  235. package/dist/components/TopBar/topBar.types.d.ts.map +1 -0
  236. package/dist/components/TopBar/topBar.variants.d.ts +79 -0
  237. package/dist/components/TopBar/topBar.variants.d.ts.map +1 -0
  238. package/dist/components/Typography/Typography.d.ts +42 -0
  239. package/dist/components/Typography/Typography.d.ts.map +1 -0
  240. package/dist/components/Typography/typography.types.d.ts +61 -0
  241. package/dist/components/Typography/typography.types.d.ts.map +1 -0
  242. package/dist/components/Typography/typography.variants.d.ts +167 -0
  243. package/dist/components/Typography/typography.variants.d.ts.map +1 -0
  244. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +42 -0
  245. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
  246. package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts +42 -0
  247. package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts.map +1 -0
  248. package/dist/components/_shared/data/getNestedValue.d.ts +20 -0
  249. package/dist/components/_shared/data/getNestedValue.d.ts.map +1 -0
  250. package/dist/components/_shared/data/useColumnAutoDetect.d.ts +45 -0
  251. package/dist/components/_shared/data/useColumnAutoDetect.d.ts.map +1 -0
  252. package/dist/components/_shared/data/useControllableState.d.ts +23 -0
  253. package/dist/components/_shared/data/useControllableState.d.ts.map +1 -0
  254. package/dist/components/_shared/data/useDebouncedValue.d.ts +10 -0
  255. package/dist/components/_shared/data/useDebouncedValue.d.ts.map +1 -0
  256. package/dist/components/_shared/data/useTableFilter.d.ts +36 -0
  257. package/dist/components/_shared/data/useTableFilter.d.ts.map +1 -0
  258. package/dist/components/_shared/data/useTableSearch.d.ts +23 -0
  259. package/dist/components/_shared/data/useTableSearch.d.ts.map +1 -0
  260. package/dist/components/_shared/data/useTableSelection.d.ts +25 -0
  261. package/dist/components/_shared/data/useTableSelection.d.ts.map +1 -0
  262. package/dist/components/_shared/data/useTableSort.d.ts +20 -0
  263. package/dist/components/_shared/data/useTableSort.d.ts.map +1 -0
  264. package/dist/components/_shared/data/useVirtualizer.d.ts +107 -0
  265. package/dist/components/_shared/data/useVirtualizer.d.ts.map +1 -0
  266. package/dist/components/_shared/resolveValidationState.d.ts +42 -0
  267. package/dist/components/_shared/resolveValidationState.d.ts.map +1 -0
  268. package/dist/hooks/useAccessState.d.ts +37 -0
  269. package/dist/hooks/useAccessState.d.ts.map +1 -0
  270. package/dist/index.d.ts +146 -1
  271. package/dist/index.d.ts.map +1 -0
  272. package/dist/index.esm.js +133 -24
  273. package/dist/src/components/Tabs/Tabs.d.ts +8 -4
  274. package/dist/src/components/Tabs/Tabs.d.ts.map +1 -1
  275. package/dist/src/components/Tabs/tabs.types.d.ts +8 -2
  276. package/dist/src/components/Tabs/tabs.types.d.ts.map +1 -1
  277. package/dist/src/components/Tabs/useTabs.d.ts +55 -0
  278. package/dist/src/components/Tabs/useTabs.d.ts.map +1 -0
  279. package/dist/src/index.d.ts +1 -1
  280. package/dist/src/index.d.ts.map +1 -1
  281. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  282. package/dist/utils/cn.d.ts +26 -0
  283. package/dist/utils/cn.d.ts.map +1 -0
  284. package/package.json +7 -8
  285. package/src/components/Tabs/Tabs.test.tsx +85 -14
  286. package/src/components/Tabs/Tabs.tsx +35 -24
  287. package/src/components/Tabs/tabs.types.ts +8 -2
  288. package/src/components/Tabs/useTabs.ts +167 -0
  289. package/src/components/TextField/TextField.test.tsx +5 -1
  290. package/src/index.ts +1 -1
  291. package/vite.config.ts +8 -0
  292. package/vitest.config.mts +8 -1
@@ -0,0 +1,25 @@
1
+ import type { TableRowSelectionMode } from '../../Table/table.types.js';
2
+ export interface UseTableSelectionResult {
3
+ selectedRowIds: string[];
4
+ isSelected: (rowId: string) => boolean;
5
+ toggleRow: (rowId: string) => void;
6
+ toggleAll: (allRowIds: string[]) => void;
7
+ clearSelection: () => void;
8
+ /** True when EVERY id in `allRowIds` is selected. */
9
+ isAllSelected: (allRowIds: string[]) => boolean;
10
+ /** True when at least one (but not all) of `allRowIds` is selected. */
11
+ isIndeterminate: (allRowIds: string[]) => boolean;
12
+ }
13
+ /**
14
+ * Selection logic helper. Given the controllable selection state +
15
+ * the setter (from `useControllableState`), exposes ergonomic
16
+ * helpers the Table calls from its render path.
17
+ *
18
+ * - `single` mode: at most one row selected. Toggling another
19
+ * replaces the previous.
20
+ * - `multiple` mode: any subset selectable; toggling adds/removes.
21
+ * - `none` mode: every toggle is a no-op (the Table shouldn't
22
+ * render the checkbox cells anyway, but this is defensive).
23
+ */
24
+ export declare function useTableSelection(mode: TableRowSelectionMode, selectedRowIds: string[], setSelectedRowIds: (next: string[] | ((prev: string[]) => string[])) => void): UseTableSelectionResult;
25
+ //# sourceMappingURL=useTableSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableSelection.d.ts","sourceRoot":"","sources":["../../../../src/components/_shared/data/useTableSelection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,qDAAqD;IACrD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAChD,uEAAuE;IACvE,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;CACnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,EAC3B,cAAc,EAAE,MAAM,EAAE,EACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,KAAK,IAAI,GAC3E,uBAAuB,CAqEzB"}
@@ -0,0 +1,20 @@
1
+ import type { TableColumn, TableSortModel } from '../../Table/table.types.js';
2
+ /**
3
+ * Applies the `sortModel` to `rows`. Returns a NEW sorted array
4
+ * (does not mutate input). Stable sort guaranteed by the underlying
5
+ * `Array.prototype.sort` in modern engines.
6
+ *
7
+ * Multi-column sort: items earlier in `sortModel` have higher
8
+ * precedence. Equal values fall through to the next sort item; if
9
+ * all sort items tie, the original order is preserved (stable).
10
+ */
11
+ export declare function useTableSort<T extends object>(rows: T[], cols: TableColumn<T>[], sortModel: TableSortModel): T[];
12
+ /**
13
+ * Three-state sort cycler: `none` → `asc` → `desc` → `none`.
14
+ *
15
+ * Used by the header click handler. Returns the next sort model
16
+ * to apply, given the current model + the clicked field + whether
17
+ * the user is multi-sorting (shift key).
18
+ */
19
+ export declare function cycleSortFor(current: TableSortModel, field: string, multi: boolean): TableSortModel;
20
+ //# sourceMappingURL=useTableSort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableSort.d.ts","sourceRoot":"","sources":["../../../../src/components/_shared/data/useTableSort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AA+CpC;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,IAAI,EAAE,CAAC,EAAE,EACT,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EACtB,SAAS,EAAE,cAAc,GACxB,CAAC,EAAE,CA2CL;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,cAAc,CAkBhB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Window descriptor — which slice of the row array is currently
3
+ * mounted in DOM, and how much spacer height to render above and
4
+ * below the visible window so the scrollbar size matches the
5
+ * "virtual" total height.
6
+ */
7
+ export interface VirtualizerWindow {
8
+ /** First row index inside the visible window (inclusive). */
9
+ startIndex: number;
10
+ /** Last row index inside the visible window (inclusive). */
11
+ endIndex: number;
12
+ /** Pixels to render above the visible rows (spacer top). */
13
+ paddingTop: number;
14
+ /** Pixels to render below the visible rows (spacer bottom). */
15
+ paddingBottom: number;
16
+ }
17
+ export interface UseVirtualizerArgs {
18
+ /** Total number of rows in the underlying data set. */
19
+ totalCount: number;
20
+ /** Fixed row height in pixels. */
21
+ rowHeight: number;
22
+ /**
23
+ * Visible viewport height in pixels. Pass the height of the
24
+ * scroll container.
25
+ */
26
+ viewportHeight: number;
27
+ /** Current scrollTop of the scroll container. */
28
+ scrollTop: number;
29
+ /**
30
+ * How many extra rows to render above / below the visible window
31
+ * for smoother scrolling (reduces blank-flash on fast scroll).
32
+ * @default 5
33
+ */
34
+ overscan?: number;
35
+ }
36
+ /**
37
+ * Compute the visible window of rows + the spacer heights given the
38
+ * current scroll position. Pure function — exported for testability.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * computeWindow({ totalCount: 1000, rowHeight: 48, viewportHeight: 600,
43
+ * scrollTop: 0, overscan: 5 });
44
+ * // → { startIndex: 0, endIndex: 17, paddingTop: 0, paddingBottom: 47136 }
45
+ * ```
46
+ */
47
+ export declare function computeWindow(args: UseVirtualizerArgs): VirtualizerWindow;
48
+ /**
49
+ * `useVirtualizer` — viewport-based row windowing for `<DataGrid>`.
50
+ *
51
+ * Hand-rolled (no `@tanstack/react-virtual` dep — constraint memorized
52
+ * in `feedback_dashforge_preset_is_identity` companion: "no new
53
+ * external runtime deps"). Uses scroll event + `requestAnimationFrame`
54
+ * debounce + `ResizeObserver` on the container. Fixed row height
55
+ * only in v1 — variable-height with measurement cache deferred to
56
+ * v1-bis.
57
+ *
58
+ * Returns:
59
+ * - `scrollRef`: attach to the scroll container `<div>`.
60
+ * - `window`: which row indices to mount + top/bottom spacer heights
61
+ * to preserve scroll-area size.
62
+ * - `viewportHeight`: current container height (re-measured on
63
+ * `ResizeObserver` ticks).
64
+ *
65
+ * The DataGrid renders `rows.slice(window.startIndex, window.endIndex + 1)`
66
+ * between two spacer `<tr style={{ height: paddingTop }} />` elements
67
+ * (above and below). This preserves `<table>` semantics — screen
68
+ * readers see a continuous structure with `aria-hidden` spacers.
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * const { scrollRef, window } = useVirtualizer({
73
+ * totalCount: rows.length,
74
+ * rowHeight: 48,
75
+ * overscan: 5,
76
+ * });
77
+ *
78
+ * return (
79
+ * <div ref={scrollRef} style={{ height: 600, overflow: 'auto' }}>
80
+ * <table>
81
+ * <tbody>
82
+ * <tr aria-hidden="true" style={{ height: window.paddingTop }} />
83
+ * {rows.slice(window.startIndex, window.endIndex + 1).map(...)}
84
+ * <tr aria-hidden="true" style={{ height: window.paddingBottom }} />
85
+ * </tbody>
86
+ * </table>
87
+ * </div>
88
+ * );
89
+ * ```
90
+ */
91
+ export declare function useVirtualizer(args: {
92
+ totalCount: number;
93
+ rowHeight: number;
94
+ overscan?: number;
95
+ /**
96
+ * Initial viewport height — used before the ResizeObserver
97
+ * settles on first paint. Pass an explicit `height` prop value
98
+ * if you have one; otherwise the hook re-measures on layout.
99
+ * @default 400
100
+ */
101
+ initialViewportHeight?: number;
102
+ }): {
103
+ scrollRef: React.RefObject<HTMLDivElement | null>;
104
+ window: VirtualizerWindow;
105
+ viewportHeight: number;
106
+ };
107
+ //# sourceMappingURL=useVirtualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVirtualizer.d.ts","sourceRoot":"","sources":["../../../../src/components/_shared/data/useVirtualizer.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,CAmBzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,GAAG;IACF,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB,CAqEA"}
@@ -0,0 +1,42 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { DashFormBridge } from '@dashforge/ui-core';
3
+ /**
4
+ * Resolved validation state for a bridge-managed field.
5
+ *
6
+ * Returned by `resolveValidationState`, this is consumed by all form
7
+ * components that surface error + helper text (TextField, Checkbox,
8
+ * Switch, …) to derive their final render state.
9
+ */
10
+ export interface ValidationState {
11
+ error: boolean;
12
+ helperText: ReactNode;
13
+ }
14
+ /**
15
+ * Compute `error` + `helperText` for a bridge-managed field.
16
+ *
17
+ * **Renderer-agnostic** — copy of the MUI-side
18
+ * `textField.validation.ts`. Promoted to a `_shared/` directory inside
19
+ * `@dashforge/tw` so all form components (TextField + Checkbox +
20
+ * Switch) reuse the same precedence logic without depending on a
21
+ * specific component folder.
22
+ *
23
+ * Precedence rules (matches MUI side byte-for-byte):
24
+ *
25
+ * 1. **Explicit props win.** If the user passed `error` / `helperText`
26
+ * explicitly, those values are used as-is.
27
+ * 2. **Auto values are gated by interaction.** The bridge's error is
28
+ * surfaced only when the field is `touched` OR the form has been
29
+ * submitted at least once (`submitCount > 0`). This prevents the
30
+ * "error spam while typing" anti-pattern.
31
+ * 3. **`error === false` explicitly clears the bridge's error message
32
+ * text.** Useful for forcing a "valid" visual state regardless of
33
+ * bridge state.
34
+ *
35
+ * @param name field name registered with the bridge
36
+ * @param bridge active `DashFormBridge` (guaranteed non-null at
37
+ * call sites by the surrounding `if (bridge)`)
38
+ * @param explicitError `error` prop from the consumer
39
+ * @param explicitHelperText `helperText` prop from the consumer
40
+ */
41
+ export declare function resolveValidationState(name: string, bridge: DashFormBridge, explicitError: boolean | undefined, explicitHelperText: ReactNode | undefined): ValidationState;
42
+ //# sourceMappingURL=resolveValidationState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveValidationState.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/resolveValidationState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,kBAAkB,EAAE,SAAS,GAAG,SAAS,GACxC,eAAe,CAYjB"}
@@ -0,0 +1,37 @@
1
+ import type { AccessRequirement, AccessState } from '@dashforge/rbac';
2
+ /**
3
+ * Hook to resolve RBAC access state for a UI component.
4
+ *
5
+ * **TW-side copy of the MUI implementation** in `@dashforge/ui/src/hooks/useAccessState.ts`.
6
+ * Per the architecture plan v2 (2026-05-15) the two ecosystems share
7
+ * only the bridge layer (`@dashforge/forms` + `@dashforge/ui-core` +
8
+ * `@dashforge/rbac`); UI-side hooks are duplicated intentionally so
9
+ * the MUI and TW ecosystems remain fully isolated.
10
+ *
11
+ * The behaviour is byte-equivalent to the MUI side:
12
+ *
13
+ * - If `access` is undefined → returns `DEFAULT_ACCESS_STATE`.
14
+ * - If `access` is supplied but no `RbacProvider` is mounted → returns
15
+ * `DEFAULT_ACCESS_STATE` and emits a dev-only `console.warn` so the
16
+ * developer notices the missing provider. Failing **open** is the
17
+ * safer default (RBAC silently denying everything would be a hidden
18
+ * regression in development).
19
+ * - Otherwise → evaluates the requirement against the active
20
+ * `rbac.engine` + `rbac.subject` via `resolveAccessState`.
21
+ *
22
+ * The memo dependency list is `[access, rbac]` — a stable RBAC
23
+ * context + identical access requirement re-uses the same result
24
+ * object so downstream `useMemo` / `React.memo` comparisons stay
25
+ * cheap.
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * function MyComponent({ access }: { access?: AccessRequirement }) {
30
+ * const accessState = useAccessState(access);
31
+ * if (!accessState.visible) return null;
32
+ * return <input disabled={accessState.disabled} readOnly={accessState.readonly} />;
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function useAccessState(access: AccessRequirement | undefined): AccessState;
37
+ //# sourceMappingURL=useAccessState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccessState.d.ts","sourceRoot":"","sources":["../../src/hooks/useAccessState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAetE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,WAAW,CA2Bb"}
package/dist/index.d.ts CHANGED
@@ -1 +1,146 @@
1
- export * from "./src/index";
1
+ /**
2
+ * @dashforge/tw
3
+ *
4
+ * Tailwind-rendered UI components for the Dashforge ecosystem.
5
+ *
6
+ * Architectural contract (plan v2 — 2026-05-15):
7
+ * - **Props-driven**: each Tailwind utility that matters for the public
8
+ * API becomes a typed prop. `sx` + `slotProps` are escape hatches.
9
+ * - **Tokens as source of truth**: components reference colors /
10
+ * spacing / radius / fontSize through `@dashforge/tw-tokens` via the
11
+ * `dashforgePreset()` from `@dashforge/tw-theme`.
12
+ * - **Shared bridge with MUI side**: both ecosystems consume
13
+ * `@dashforge/forms` + `@dashforge/ui-core` + `@dashforge/rbac`.
14
+ * No styling code is shared.
15
+ * - **Variant API**: `tailwind-variants` (TV) with `slots` +
16
+ * `compoundVariants`.
17
+ *
18
+ * F3 surface (tier-1, this release):
19
+ * - `<Button>` (action, RBAC only, `asChild` polymorphism)
20
+ * - `<TextField>` (bridge-integrated, 7 slots)
21
+ * - `<Checkbox>` (bridge-integrated, Radix Checkbox primitive)
22
+ * - `<Switch>` (bridge-integrated, Radix Switch primitive)
23
+ *
24
+ * @module @dashforge/tw
25
+ */
26
+ export { Button } from './components/Button/Button.js';
27
+ export type { ButtonProps } from './components/Button/button.types.js';
28
+ export { buttonVariants } from './components/Button/button.variants.js';
29
+ export { TextField } from './components/TextField/TextField.js';
30
+ export type { TextFieldProps, TextFieldSlotProps, } from './components/TextField/textField.types.js';
31
+ export { textFieldVariants } from './components/TextField/textField.variants.js';
32
+ export { Checkbox } from './components/Checkbox/Checkbox.js';
33
+ export type { CheckboxProps, CheckboxSlotProps, } from './components/Checkbox/checkbox.types.js';
34
+ export { checkboxVariants } from './components/Checkbox/checkbox.variants.js';
35
+ export { Switch } from './components/Switch/Switch.js';
36
+ export type { SwitchProps, SwitchSlotProps, } from './components/Switch/switch.types.js';
37
+ export { switchVariants } from './components/Switch/switch.variants.js';
38
+ export { RadioGroup } from './components/RadioGroup/RadioGroup.js';
39
+ export type { RadioGroupProps, RadioGroupOption, RadioGroupSlotProps, } from './components/RadioGroup/radioGroup.types.js';
40
+ export { radioGroupVariants } from './components/RadioGroup/radioGroup.variants.js';
41
+ export { Textarea } from './components/Textarea/Textarea.js';
42
+ export type { TextareaProps, TextareaSlotProps, } from './components/Textarea/textarea.types.js';
43
+ export { textareaVariants } from './components/Textarea/textarea.variants.js';
44
+ export { NumberField } from './components/NumberField/NumberField.js';
45
+ export type { NumberFieldProps, NumberFieldSlotProps, } from './components/NumberField/numberField.types.js';
46
+ export { numberFieldVariants } from './components/NumberField/numberField.variants.js';
47
+ export { OTPField } from './components/OTPField/OTPField.js';
48
+ export type { OTPFieldProps, OTPFieldSlotProps, OTPFieldMode, } from './components/OTPField/otpField.types.js';
49
+ export { otpFieldVariants } from './components/OTPField/otpField.variants.js';
50
+ export { Autocomplete } from './components/Autocomplete/Autocomplete.js';
51
+ export type { AutocompleteProps, AutocompleteOption, AutocompleteSlotProps, AutocompleteValue, } from './components/Autocomplete/autocomplete.types.js';
52
+ export { autocompleteVariants } from './components/Autocomplete/autocomplete.variants.js';
53
+ export { Calendar } from './components/Calendar/Calendar.js';
54
+ export type { CalendarProps, CalendarSlotProps, } from './components/Calendar/calendar.types.js';
55
+ export { calendarVariants, calendarDayVariants, } from './components/Calendar/calendar.variants.js';
56
+ export { DatePicker } from './components/DatePicker/DatePicker.js';
57
+ export type { DatePickerProps, DatePickerSlotProps, } from './components/DatePicker/datePicker.types.js';
58
+ export { datePickerVariants } from './components/DatePicker/datePicker.variants.js';
59
+ export { TimePicker } from './components/TimePicker/TimePicker.js';
60
+ export type { TimePickerProps, TimePickerSlotProps, } from './components/TimePicker/timePicker.types.js';
61
+ export { timePickerVariants } from './components/TimePicker/timePicker.variants.js';
62
+ export { DateTimePicker } from './components/DateTimePicker/DateTimePicker.js';
63
+ export type { DateTimePickerProps, DateTimePickerSlotProps, } from './components/DateTimePicker/dateTimePicker.types.js';
64
+ export { dateTimePickerVariants } from './components/DateTimePicker/dateTimePicker.variants.js';
65
+ export { DateRangePicker } from './components/DateRangePicker/DateRangePicker.js';
66
+ export type { DateRangePickerProps, DateRangePickerSlotProps, } from './components/DateRangePicker/dateRangePicker.types.js';
67
+ export { dateRangePickerVariants, dateRangeDayVariants, } from './components/DateRangePicker/dateRangePicker.variants.js';
68
+ export { Breadcrumbs } from './components/Breadcrumbs/Breadcrumbs.js';
69
+ export type { BreadcrumbsProps, BreadcrumbItem, BreadcrumbsSlotProps, BreadcrumbLinkComponent, } from './components/Breadcrumbs/breadcrumbs.types.js';
70
+ export { breadcrumbsVariants } from './components/Breadcrumbs/breadcrumbs.variants.js';
71
+ export { LeftNav } from './components/LeftNav/LeftNav.js';
72
+ export type { LeftNavProps, LeftNavNode, LeftNavItem, LeftNavGroup, LeftNavSlotProps, LeftNavLinkComponent, } from './components/LeftNav/leftNav.types.js';
73
+ export { leftNavVariants } from './components/LeftNav/leftNav.variants.js';
74
+ export { TopBar } from './components/TopBar/TopBar.js';
75
+ export type { TopBarProps, TopBarSlotProps, } from './components/TopBar/topBar.types.js';
76
+ export { topBarVariants } from './components/TopBar/topBar.variants.js';
77
+ export { AppShell } from './components/AppShell/AppShell.js';
78
+ export type { AppShellProps, AppShellSlotProps, } from './components/AppShell/appShell.types.js';
79
+ export { appShellVariants } from './components/AppShell/appShell.variants.js';
80
+ export { ConfirmDialogProvider, useConfirm, } from './components/ConfirmDialog/ConfirmDialog.js';
81
+ export type { ConfirmDialogProviderProps, ConfirmDialogSlotProps, ConfirmFn, ConfirmOptions, ConfirmSeverity, } from './components/ConfirmDialog/confirmDialog.types.js';
82
+ export { confirmDialogVariants } from './components/ConfirmDialog/confirmDialog.variants.js';
83
+ export { SnackbarProvider, useSnackbar, } from './components/Snackbar/Snackbar.js';
84
+ export type { SnackbarProviderProps, SnackbarApi, SnackbarOptions, SnackbarRecord, SnackbarSeverity, SnackbarPosition, SnackbarSlotProps, } from './components/Snackbar/snackbar.types.js';
85
+ export { snackbarVariants } from './components/Snackbar/snackbar.variants.js';
86
+ export { Typography } from './components/Typography/Typography.js';
87
+ export type { TypographyProps } from './components/Typography/typography.types.js';
88
+ export { typographyVariants } from './components/Typography/typography.variants.js';
89
+ export { Box } from './components/Box/Box.js';
90
+ export type { BoxProps } from './components/Box/box.types.js';
91
+ export { boxVariants } from './components/Box/box.variants.js';
92
+ export { Stack } from './components/Stack/Stack.js';
93
+ export type { StackProps } from './components/Stack/stack.types.js';
94
+ export { stackVariants } from './components/Stack/stack.variants.js';
95
+ export { Grid } from './components/Grid/Grid.js';
96
+ export type { GridProps, GridContainerProps, GridItemProps, ColSpan, GridSpacingStep, } from './components/Grid/grid.types.js';
97
+ export { gridVariants } from './components/Grid/grid.variants.js';
98
+ export { Container } from './components/Container/Container.js';
99
+ export type { ContainerProps } from './components/Container/container.types.js';
100
+ export { containerVariants } from './components/Container/container.variants.js';
101
+ export { Divider } from './components/Divider/Divider.js';
102
+ export type { DividerProps } from './components/Divider/divider.types.js';
103
+ export { dividerVariants, dividerLineVariants, } from './components/Divider/divider.variants.js';
104
+ export { AspectRatio } from './components/AspectRatio/AspectRatio.js';
105
+ export type { AspectRatioProps } from './components/AspectRatio/aspectRatio.types.js';
106
+ export { VisuallyHidden } from './components/VisuallyHidden/VisuallyHidden.js';
107
+ export type { VisuallyHiddenProps } from './components/VisuallyHidden/visuallyHidden.types.js';
108
+ export { Dialog } from './components/Dialog/Dialog.js';
109
+ export type { DialogProps, DialogSlotProps, } from './components/Dialog/dialog.types.js';
110
+ export { dialogVariants } from './components/Dialog/dialog.variants.js';
111
+ export { Tabs } from './components/Tabs/Tabs.js';
112
+ export type { TabsProps, TabsSlotProps, TabItem, } from './components/Tabs/tabs.types.js';
113
+ export { tabsVariants } from './components/Tabs/tabs.variants.js';
114
+ export { Tooltip } from './components/Tooltip/Tooltip.js';
115
+ export type { TooltipProps, TooltipSlotProps, } from './components/Tooltip/tooltip.types.js';
116
+ export { tooltipVariants } from './components/Tooltip/tooltip.variants.js';
117
+ export { Popover } from './components/Popover/Popover.js';
118
+ export type { PopoverProps, PopoverSlotProps, } from './components/Popover/popover.types.js';
119
+ export { popoverVariants } from './components/Popover/popover.variants.js';
120
+ export { Accordion } from './components/Accordion/Accordion.js';
121
+ export type { AccordionProps, AccordionSlotProps, AccordionItem, } from './components/Accordion/accordion.types.js';
122
+ export { accordionVariants } from './components/Accordion/accordion.variants.js';
123
+ export { Skeleton } from './components/Skeleton/Skeleton.js';
124
+ export type { SkeletonProps, SkeletonSlotProps, } from './components/Skeleton/skeleton.types.js';
125
+ export { skeletonVariants } from './components/Skeleton/skeleton.variants.js';
126
+ export { Pagination } from './components/Pagination/Pagination.js';
127
+ export type { PaginationProps, PaginationSlotProps, PaginationLabels, } from './components/Pagination/pagination.types.js';
128
+ export { paginationVariants } from './components/Pagination/pagination.variants.js';
129
+ export { Table } from './components/Table/Table.js';
130
+ export type { TableProps, TableColumn, TableColumnInferredType, TableCellContext, TableSortDirection, TableSortItem, TableSortModel, TableFilterItem, TableFilterModel, TableFilterOperator, TableFilterType, TableRowSelectionMode, TableExpandableConfig, TableLabels, TableSlotProps, NestedKeyOf, } from './components/Table/table.types.js';
131
+ export { tableVariants } from './components/Table/table.variants.js';
132
+ export { RenderText, RenderTwoLine, RenderChip, RenderButton, RowActionsMenu, } from './components/Table/cells/index.js';
133
+ export type { RenderTextProps, RenderTwoLineProps, RenderChipProps, RenderButtonProps, RowActionsMenuProps, TableRowAction, } from './components/Table/cells/index.js';
134
+ export { getNestedValue } from './components/_shared/data/getNestedValue.js';
135
+ export { DataGrid } from './components/DataGrid/DataGrid.js';
136
+ export type { DataGridProps, DataGridSlotProps, DataGridSelectAllScope, DataGridServerSideFlags, DataGridPaginationConfig, } from './components/DataGrid/dataGrid.types.js';
137
+ export { dataGridVariants } from './components/DataGrid/dataGrid.variants.js';
138
+ export { useAccessState } from './hooks/useAccessState.js';
139
+ export { cn } from './utils/cn.js';
140
+ export { tv } from 'tailwind-variants';
141
+ export type { VariantProps } from 'tailwind-variants';
142
+ /**
143
+ * Package version (synced with `package.json` at publish time).
144
+ */
145
+ export declare const VERSION = "0.11.0-beta";
146
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -14,7 +14,6 @@ import * as RadixRadioGroup from '@radix-ui/react-radio-group';
14
14
  import { useCalendar, resolveCalendarKey, formatLongDate, parseISODate, formatTime, generateTimeOptions, timeStringToMinutes, getTodayISODate, useDateRange } from '@dashforge/calendar-core';
15
15
  import * as RadixPopover from '@radix-ui/react-popover';
16
16
  import * as RadixDialog from '@radix-ui/react-dialog';
17
- import * as RadixTabs from '@radix-ui/react-tabs';
18
17
  import * as RadixTooltip from '@radix-ui/react-tooltip';
19
18
  import * as RadixAccordion from '@radix-ui/react-accordion';
20
19
 
@@ -8486,51 +8485,161 @@ const tabsVariants = tv({
8486
8485
  }
8487
8486
  });
8488
8487
 
8488
+ function useTabs(options) {
8489
+ var _ref;
8490
+ var _items_;
8491
+ const { items, value, defaultValue, onValueChange, orientation } = options;
8492
+ const baseId = useId();
8493
+ const firstValue = (_ref = (_items_ = items[0]) == null ? void 0 : _items_.value) != null ? _ref : '';
8494
+ const [internalValue, setInternalValue] = useState(defaultValue != null ? defaultValue : firstValue);
8495
+ const isControlled = value !== undefined;
8496
+ const activeValue = isControlled ? value : internalValue;
8497
+ // Tab buttons, keyed by value — used to move DOM focus on keyboard nav.
8498
+ const tabRefs = useRef(new Map());
8499
+ const select = useCallback((next)=>{
8500
+ if (!isControlled) {
8501
+ setInternalValue(next);
8502
+ }
8503
+ onValueChange == null ? void 0 : onValueChange(next);
8504
+ }, [
8505
+ isControlled,
8506
+ onValueChange
8507
+ ]);
8508
+ const handleKeyDown = useCallback((event)=>{
8509
+ var _tabRefs_current_get;
8510
+ const nextKey = orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight';
8511
+ const prevKey = orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft';
8512
+ const enabled = items.filter((item)=>item.disabled !== true);
8513
+ if (enabled.length === 0) {
8514
+ return;
8515
+ }
8516
+ const currentIndex = enabled.findIndex((item)=>item.value === activeValue);
8517
+ let targetIndex = null;
8518
+ if (event.key === nextKey) {
8519
+ targetIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % enabled.length;
8520
+ } else if (event.key === prevKey) {
8521
+ targetIndex = currentIndex < 0 ? enabled.length - 1 : (currentIndex - 1 + enabled.length) % enabled.length;
8522
+ } else if (event.key === 'Home') {
8523
+ targetIndex = 0;
8524
+ } else if (event.key === 'End') {
8525
+ targetIndex = enabled.length - 1;
8526
+ }
8527
+ if (targetIndex === null) {
8528
+ return;
8529
+ }
8530
+ event.preventDefault();
8531
+ const target = enabled[targetIndex];
8532
+ if (target === undefined) {
8533
+ return;
8534
+ }
8535
+ select(target.value);
8536
+ (_tabRefs_current_get = tabRefs.current.get(target.value)) == null ? void 0 : _tabRefs_current_get.focus();
8537
+ }, [
8538
+ items,
8539
+ orientation,
8540
+ activeValue,
8541
+ select
8542
+ ]);
8543
+ const getTabListProps = ()=>({
8544
+ role: 'tablist',
8545
+ 'aria-orientation': orientation,
8546
+ onKeyDown: handleKeyDown
8547
+ });
8548
+ const getTabProps = (item)=>{
8549
+ const active = item.value === activeValue;
8550
+ return {
8551
+ role: 'tab',
8552
+ id: `${baseId}-tab-${item.value}`,
8553
+ 'aria-selected': active,
8554
+ 'aria-controls': `${baseId}-panel-${item.value}`,
8555
+ tabIndex: active ? 0 : -1,
8556
+ disabled: item.disabled,
8557
+ 'data-state': active ? 'active' : 'inactive',
8558
+ onClick: ()=>{
8559
+ if (item.disabled !== true) {
8560
+ select(item.value);
8561
+ }
8562
+ },
8563
+ ref: (el)=>{
8564
+ if (el) {
8565
+ tabRefs.current.set(item.value, el);
8566
+ } else {
8567
+ tabRefs.current.delete(item.value);
8568
+ }
8569
+ }
8570
+ };
8571
+ };
8572
+ const getPanelProps = (item)=>{
8573
+ const active = item.value === activeValue;
8574
+ return {
8575
+ role: 'tabpanel',
8576
+ id: `${baseId}-panel-${item.value}`,
8577
+ 'aria-labelledby': `${baseId}-tab-${item.value}`,
8578
+ tabIndex: 0,
8579
+ hidden: !active,
8580
+ 'data-state': active ? 'active' : 'inactive'
8581
+ };
8582
+ };
8583
+ return {
8584
+ activeValue,
8585
+ getTabListProps,
8586
+ getTabProps,
8587
+ getPanelProps
8588
+ };
8589
+ }
8590
+
8489
8591
  /**
8490
8592
  * Dashforge TW `<Tabs>` — declarative tab navigation.
8491
8593
  *
8492
- * Built on `@radix-ui/react-tabs`:
8493
- * - APG tabs pattern (arrow-key navigation, automatic activation,
8494
- * `role="tablist"` + `role="tab"` + `role="tabpanel"`).
8495
- * - Controlled / uncontrolled (`value` / `defaultValue`).
8594
+ * Custom clean-room implementation on the headless `useTabs` engine — no
8595
+ * runtime UI dependency. Implements the WAI-ARIA APG tabs pattern: arrow-key
8596
+ * navigation, automatic activation, roving tabindex, `role="tablist"` +
8597
+ * `role="tab"` + `role="tabpanel"`.
8496
8598
  *
8497
8599
  * Two variant axes:
8498
8600
  * - `variant` — `underline` (default) | `pill`
8499
8601
  * - `orientation` — `horizontal` (default) | `vertical`
8602
+ *
8603
+ * Controlled (`value` + `onValueChange`) or uncontrolled (`defaultValue`).
8604
+ * `keepMounted` keeps inactive panels in the DOM (default: only the active
8605
+ * panel is mounted).
8500
8606
  */ function Tabs(props) {
8501
- var _items_, _slotProps_root, _slotProps_list;
8502
- const { items, value, defaultValue, onValueChange, variant = 'underline', orientation = 'horizontal', sx, slotProps } = props;
8607
+ var _slotProps_root, _slotProps_list;
8608
+ const { items, value, defaultValue, onValueChange, variant = 'underline', orientation = 'horizontal', keepMounted = false, sx, slotProps } = props;
8503
8609
  const v = tabsVariants({
8504
8610
  variant,
8505
8611
  orientation
8506
8612
  });
8507
- const resolvedDefault = defaultValue != null ? defaultValue : (_items_ = items[0]) == null ? void 0 : _items_.value;
8508
- return jsxs(RadixTabs.Root, {
8509
- value: value,
8510
- defaultValue: resolvedDefault,
8511
- onValueChange: onValueChange,
8512
- orientation: orientation,
8613
+ const tabs = useTabs({
8614
+ items,
8615
+ value,
8616
+ defaultValue,
8617
+ onValueChange,
8618
+ orientation
8619
+ });
8620
+ // Either all panels (hidden when inactive) or just the active one.
8621
+ const panels = keepMounted ? items : items.filter((item)=>item.value === tabs.activeValue);
8622
+ return jsxs("div", {
8513
8623
  className: cn(v.root(), sx, slotProps == null ? void 0 : (_slotProps_root = slotProps.root) == null ? void 0 : _slotProps_root.className),
8514
8624
  children: [
8515
- jsx(RadixTabs.List, {
8625
+ jsx("div", _extends({}, tabs.getTabListProps(), {
8516
8626
  className: cn(v.list(), slotProps == null ? void 0 : (_slotProps_list = slotProps.list) == null ? void 0 : _slotProps_list.className),
8517
8627
  children: items.map((item)=>{
8518
8628
  var _slotProps_trigger;
8519
- return jsx(RadixTabs.Trigger, {
8520
- value: item.value,
8521
- disabled: item.disabled,
8629
+ return jsx("button", _extends({
8630
+ type: "button"
8631
+ }, tabs.getTabProps(item), {
8522
8632
  className: cn(v.trigger(), slotProps == null ? void 0 : (_slotProps_trigger = slotProps.trigger) == null ? void 0 : _slotProps_trigger.className),
8523
8633
  children: item.label
8524
- }, item.value);
8634
+ }), item.value);
8525
8635
  })
8526
- }),
8527
- items.map((item)=>{
8636
+ })),
8637
+ panels.map((item)=>{
8528
8638
  var _slotProps_content;
8529
- return jsx(RadixTabs.Content, {
8530
- value: item.value,
8639
+ return jsx("div", _extends({}, tabs.getPanelProps(item), {
8531
8640
  className: cn(v.content(), slotProps == null ? void 0 : (_slotProps_content = slotProps.content) == null ? void 0 : _slotProps_content.className),
8532
8641
  children: item.content
8533
- }, item.value);
8642
+ }), item.value);
8534
8643
  })
8535
8644
  ]
8536
8645
  });
@@ -12795,6 +12904,6 @@ function SearchIcon(props) {
12795
12904
  */ // ───── Components ─────
12796
12905
  /**
12797
12906
  * Package version (synced with `package.json` at publish time).
12798
- */ const VERSION = '0.9.1-beta';
12907
+ */ const VERSION = '0.11.0-beta';
12799
12908
 
12800
12909
  export { Accordion, AppShell, AspectRatio, Autocomplete, Box, Breadcrumbs, Button, Calendar, Checkbox, ConfirmDialogProvider, Container, DataGrid, DatePicker, DateRangePicker, DateTimePicker, Dialog, Divider, Grid, LeftNav, NumberField, OTPField, Pagination, Popover, RadioGroup, RenderButton, RenderChip, RenderText, RenderTwoLine, RowActionsMenu, Skeleton, SnackbarProvider, Stack, Switch, Table, Tabs, TextField, Textarea, TimePicker, Tooltip, TopBar, Typography, VERSION, VisuallyHidden, accordionVariants, appShellVariants, autocompleteVariants, boxVariants, breadcrumbsVariants, buttonVariants, calendarDayVariants, calendarVariants, checkboxVariants, cn, confirmDialogVariants, containerVariants, dataGridVariants, datePickerVariants, dateRangeDayVariants, dateRangePickerVariants, dateTimePickerVariants, dialogVariants, dividerLineVariants, dividerVariants, getNestedValue, gridVariants, leftNavVariants, numberFieldVariants, otpFieldVariants, paginationVariants, popoverVariants, radioGroupVariants, skeletonVariants, snackbarVariants, stackVariants, switchVariants, tableVariants, tabsVariants, textFieldVariants, textareaVariants, timePickerVariants, tooltipVariants, topBarVariants, typographyVariants, useAccessState, useConfirm, useSnackbar };