@dashforge/tw 1.1.0 → 1.2.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 (577) hide show
  1. package/CHANGELOG.md +134 -1
  2. package/README.md +45 -0
  3. package/dist/index.esm.js +3986 -477
  4. package/dist/src/components/Accordion/Accordion.d.ts.map +1 -1
  5. package/dist/src/components/Accordion/accordion.types.d.ts +7 -0
  6. package/dist/src/components/Accordion/accordion.types.d.ts.map +1 -1
  7. package/dist/src/components/Alert/Alert.d.ts +1 -1
  8. package/dist/src/components/Alert/Alert.d.ts.map +1 -1
  9. package/dist/src/components/Alert/alert.types.d.ts +17 -0
  10. package/dist/src/components/Alert/alert.types.d.ts.map +1 -1
  11. package/dist/src/components/AppShell/AppShell.d.ts.map +1 -1
  12. package/dist/src/components/AppShell/appShell.types.d.ts +7 -0
  13. package/dist/src/components/AppShell/appShell.types.d.ts.map +1 -1
  14. package/dist/src/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  15. package/dist/src/components/Autocomplete/autocomplete.types.d.ts +47 -1
  16. package/dist/src/components/Autocomplete/autocomplete.types.d.ts.map +1 -1
  17. package/dist/src/components/Avatar/Avatar.d.ts.map +1 -1
  18. package/dist/src/components/Avatar/avatar.types.d.ts +17 -1
  19. package/dist/src/components/Avatar/avatar.types.d.ts.map +1 -1
  20. package/dist/src/components/Badge/Badge.d.ts.map +1 -1
  21. package/dist/src/components/Badge/badge.types.d.ts +27 -2
  22. package/dist/src/components/Badge/badge.types.d.ts.map +1 -1
  23. package/dist/src/components/Box/Box.d.ts.map +1 -1
  24. package/dist/src/components/Box/box.types.d.ts +64 -1
  25. package/dist/src/components/Box/box.types.d.ts.map +1 -1
  26. package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  27. package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts +26 -1
  28. package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
  29. package/dist/src/components/Button/Button.d.ts.map +1 -1
  30. package/dist/src/components/Button/button.types.d.ts +53 -1
  31. package/dist/src/components/Button/button.types.d.ts.map +1 -1
  32. package/dist/src/components/Calendar/Calendar.d.ts.map +1 -1
  33. package/dist/src/components/Calendar/calendar.types.d.ts +16 -0
  34. package/dist/src/components/Calendar/calendar.types.d.ts.map +1 -1
  35. package/dist/src/components/Card/Card.d.ts.map +1 -1
  36. package/dist/src/components/Card/card.types.d.ts +17 -0
  37. package/dist/src/components/Card/card.types.d.ts.map +1 -1
  38. package/dist/src/components/Checkbox/Checkbox.d.ts.map +1 -1
  39. package/dist/src/components/Checkbox/checkbox.types.d.ts +19 -1
  40. package/dist/src/components/Checkbox/checkbox.types.d.ts.map +1 -1
  41. package/dist/src/components/Chip/Chip.d.ts.map +1 -1
  42. package/dist/src/components/Chip/chip.types.d.ts +40 -1
  43. package/dist/src/components/Chip/chip.types.d.ts.map +1 -1
  44. package/dist/src/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
  45. package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts +30 -2
  46. package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -1
  47. package/dist/src/components/Container/Container.d.ts.map +1 -1
  48. package/dist/src/components/Container/container.types.d.ts +29 -1
  49. package/dist/src/components/Container/container.types.d.ts.map +1 -1
  50. package/dist/src/components/DataGrid/DataGrid.d.ts +1 -1
  51. package/dist/src/components/DataGrid/DataGrid.d.ts.map +1 -1
  52. package/dist/src/components/DataGrid/dataGrid.types.d.ts +124 -10
  53. package/dist/src/components/DataGrid/dataGrid.types.d.ts.map +1 -1
  54. package/dist/src/components/DatePicker/DatePicker.d.ts +1 -1
  55. package/dist/src/components/DatePicker/DatePicker.d.ts.map +1 -1
  56. package/dist/src/components/DatePicker/datePicker.types.d.ts +18 -0
  57. package/dist/src/components/DatePicker/datePicker.types.d.ts.map +1 -1
  58. package/dist/src/components/DateRangePicker/DateRangePicker.d.ts +1 -1
  59. package/dist/src/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  60. package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts +18 -0
  61. package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts.map +1 -1
  62. package/dist/src/components/DateTimePicker/DateTimePicker.d.ts +1 -1
  63. package/dist/src/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
  64. package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts +20 -0
  65. package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -1
  66. package/dist/src/components/Dialog/Dialog.d.ts.map +1 -1
  67. package/dist/src/components/Dialog/dialog.types.d.ts +25 -1
  68. package/dist/src/components/Dialog/dialog.types.d.ts.map +1 -1
  69. package/dist/src/components/Divider/Divider.d.ts.map +1 -1
  70. package/dist/src/components/Divider/divider.types.d.ts +37 -1
  71. package/dist/src/components/Divider/divider.types.d.ts.map +1 -1
  72. package/dist/src/components/Drawer/Drawer.d.ts +21 -0
  73. package/dist/src/components/Drawer/Drawer.d.ts.map +1 -0
  74. package/dist/src/components/Drawer/drawer.types.d.ts +311 -0
  75. package/dist/src/components/Drawer/drawer.types.d.ts.map +1 -0
  76. package/dist/src/components/Drawer/drawer.variants.d.ts +177 -0
  77. package/dist/src/components/Drawer/drawer.variants.d.ts.map +1 -0
  78. package/dist/src/components/Grid/Grid.d.ts.map +1 -1
  79. package/dist/src/components/Grid/grid.types.d.ts +16 -0
  80. package/dist/src/components/Grid/grid.types.d.ts.map +1 -1
  81. package/dist/src/components/IconButton/IconButton.d.ts.map +1 -1
  82. package/dist/src/components/IconButton/iconButton.types.d.ts +40 -1
  83. package/dist/src/components/IconButton/iconButton.types.d.ts.map +1 -1
  84. package/dist/src/components/LeftNav/LeftNav.d.ts.map +1 -1
  85. package/dist/src/components/LeftNav/leftNav.types.d.ts +26 -6
  86. package/dist/src/components/LeftNav/leftNav.types.d.ts.map +1 -1
  87. package/dist/src/components/Link/Link.d.ts +15 -0
  88. package/dist/src/components/Link/Link.d.ts.map +1 -0
  89. package/dist/src/components/Link/link.types.d.ts +169 -0
  90. package/dist/src/components/Link/link.types.d.ts.map +1 -0
  91. package/dist/src/components/Link/link.variants.d.ts +107 -0
  92. package/dist/src/components/Link/link.variants.d.ts.map +1 -0
  93. package/dist/src/components/Menu/Menu.d.ts +1 -1
  94. package/dist/src/components/Menu/Menu.d.ts.map +1 -1
  95. package/dist/src/components/Menu/menu.types.d.ts +20 -0
  96. package/dist/src/components/Menu/menu.types.d.ts.map +1 -1
  97. package/dist/src/components/NumberField/NumberField.d.ts.map +1 -1
  98. package/dist/src/components/NumberField/numberField.types.d.ts +47 -1
  99. package/dist/src/components/NumberField/numberField.types.d.ts.map +1 -1
  100. package/dist/src/components/OTPField/OTPField.d.ts.map +1 -1
  101. package/dist/src/components/OTPField/otpField.types.d.ts +35 -1
  102. package/dist/src/components/OTPField/otpField.types.d.ts.map +1 -1
  103. package/dist/src/components/Pagination/Pagination.d.ts.map +1 -1
  104. package/dist/src/components/Pagination/pagination.types.d.ts +26 -1
  105. package/dist/src/components/Pagination/pagination.types.d.ts.map +1 -1
  106. package/dist/src/components/Popover/Popover.d.ts.map +1 -1
  107. package/dist/src/components/Popover/popover.types.d.ts +29 -0
  108. package/dist/src/components/Popover/popover.types.d.ts.map +1 -1
  109. package/dist/src/components/Progress/Progress.d.ts +20 -0
  110. package/dist/src/components/Progress/Progress.d.ts.map +1 -0
  111. package/dist/src/components/Progress/progress.types.d.ts +200 -0
  112. package/dist/src/components/Progress/progress.types.d.ts.map +1 -0
  113. package/dist/src/components/Progress/progress.variants.d.ts +224 -0
  114. package/dist/src/components/Progress/progress.variants.d.ts.map +1 -0
  115. package/dist/src/components/RadioGroup/RadioGroup.d.ts.map +1 -1
  116. package/dist/src/components/RadioGroup/radioGroup.types.d.ts +25 -1
  117. package/dist/src/components/RadioGroup/radioGroup.types.d.ts.map +1 -1
  118. package/dist/src/components/Select/Select.d.ts +14 -0
  119. package/dist/src/components/Select/Select.d.ts.map +1 -0
  120. package/dist/src/components/Select/select.types.d.ts +272 -0
  121. package/dist/src/components/Select/select.types.d.ts.map +1 -0
  122. package/dist/src/components/Select/select.variants.d.ts +204 -0
  123. package/dist/src/components/Select/select.variants.d.ts.map +1 -0
  124. package/dist/src/components/Skeleton/Skeleton.d.ts.map +1 -1
  125. package/dist/src/components/Skeleton/skeleton.types.d.ts +25 -1
  126. package/dist/src/components/Skeleton/skeleton.types.d.ts.map +1 -1
  127. package/dist/src/components/Slider/Slider.d.ts +15 -0
  128. package/dist/src/components/Slider/Slider.d.ts.map +1 -0
  129. package/dist/src/components/Slider/slider.types.d.ts +268 -0
  130. package/dist/src/components/Slider/slider.types.d.ts.map +1 -0
  131. package/dist/src/components/Slider/slider.variants.d.ts +313 -0
  132. package/dist/src/components/Slider/slider.variants.d.ts.map +1 -0
  133. package/dist/src/components/Snackbar/Snackbar.d.ts.map +1 -1
  134. package/dist/src/components/Snackbar/snackbar.types.d.ts +29 -5
  135. package/dist/src/components/Snackbar/snackbar.types.d.ts.map +1 -1
  136. package/dist/src/components/Spinner/Spinner.d.ts.map +1 -1
  137. package/dist/src/components/Spinner/spinner.types.d.ts +22 -2
  138. package/dist/src/components/Spinner/spinner.types.d.ts.map +1 -1
  139. package/dist/src/components/Stack/Stack.d.ts.map +1 -1
  140. package/dist/src/components/Stack/stack.types.d.ts +53 -2
  141. package/dist/src/components/Stack/stack.types.d.ts.map +1 -1
  142. package/dist/src/components/Stack/stack.variants.d.ts +23 -0
  143. package/dist/src/components/Stack/stack.variants.d.ts.map +1 -1
  144. package/dist/src/components/Stepper/Step.d.ts +30 -0
  145. package/dist/src/components/Stepper/Step.d.ts.map +1 -0
  146. package/dist/src/components/Stepper/Stepper.d.ts +15 -0
  147. package/dist/src/components/Stepper/Stepper.d.ts.map +1 -0
  148. package/dist/src/components/Stepper/StepperContext.d.ts +8 -0
  149. package/dist/src/components/Stepper/StepperContext.d.ts.map +1 -0
  150. package/dist/src/components/Stepper/stepper.types.d.ts +358 -0
  151. package/dist/src/components/Stepper/stepper.types.d.ts.map +1 -0
  152. package/dist/src/components/Stepper/stepper.variants.d.ts +253 -0
  153. package/dist/src/components/Stepper/stepper.variants.d.ts.map +1 -0
  154. package/dist/src/components/Stepper/useStep.d.ts +53 -0
  155. package/dist/src/components/Stepper/useStep.d.ts.map +1 -0
  156. package/dist/src/components/Switch/Switch.d.ts.map +1 -1
  157. package/dist/src/components/Switch/switch.types.d.ts +44 -1
  158. package/dist/src/components/Switch/switch.types.d.ts.map +1 -1
  159. package/dist/src/components/Table/Table.d.ts +1 -1
  160. package/dist/src/components/Table/Table.d.ts.map +1 -1
  161. package/dist/src/components/Table/table.types.d.ts +103 -8
  162. package/dist/src/components/Table/table.types.d.ts.map +1 -1
  163. package/dist/src/components/Tabs/Tabs.d.ts.map +1 -1
  164. package/dist/src/components/Tabs/tabs.types.d.ts +26 -1
  165. package/dist/src/components/Tabs/tabs.types.d.ts.map +1 -1
  166. package/dist/src/components/TextField/TextField.d.ts.map +1 -1
  167. package/dist/src/components/TextField/textField.types.d.ts +30 -1
  168. package/dist/src/components/TextField/textField.types.d.ts.map +1 -1
  169. package/dist/src/components/Textarea/Textarea.d.ts.map +1 -1
  170. package/dist/src/components/Textarea/textarea.types.d.ts +51 -1
  171. package/dist/src/components/Textarea/textarea.types.d.ts.map +1 -1
  172. package/dist/src/components/TimePicker/TimePicker.d.ts +1 -1
  173. package/dist/src/components/TimePicker/TimePicker.d.ts.map +1 -1
  174. package/dist/src/components/TimePicker/timePicker.types.d.ts +18 -0
  175. package/dist/src/components/TimePicker/timePicker.types.d.ts.map +1 -1
  176. package/dist/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  177. package/dist/src/components/Tooltip/tooltip.types.d.ts +30 -0
  178. package/dist/src/components/Tooltip/tooltip.types.d.ts.map +1 -1
  179. package/dist/src/components/TopBar/TopBar.d.ts.map +1 -1
  180. package/dist/src/components/TopBar/topBar.types.d.ts +25 -1
  181. package/dist/src/components/TopBar/topBar.types.d.ts.map +1 -1
  182. package/dist/src/components/Typography/Typography.d.ts.map +1 -1
  183. package/dist/src/components/Typography/typography.types.d.ts +47 -1
  184. package/dist/src/components/Typography/typography.types.d.ts.map +1 -1
  185. package/dist/src/components/Typography/typography.variants.d.ts +2 -2
  186. package/dist/src/components/Typography/typography.variants.d.ts.map +1 -1
  187. package/dist/src/hooks/useStandaloneFieldWarning.d.ts +38 -0
  188. package/dist/src/hooks/useStandaloneFieldWarning.d.ts.map +1 -0
  189. package/dist/src/index.d.ts +62 -42
  190. package/dist/src/index.d.ts.map +1 -1
  191. package/package.json +11 -5
  192. package/.swcrc +0 -29
  193. package/A11Y.md +0 -130
  194. package/CONSUMER-VALIDATION.md +0 -130
  195. package/COVERAGE.md +0 -63
  196. package/PARITY.md +0 -481
  197. package/PERFORMANCE.md +0 -227
  198. package/REFINEMENT-NOTES.md +0 -50
  199. package/THEME-AUDIT.md +0 -174
  200. package/dashforge-tw-1.0.0.tgz +0 -0
  201. package/eslint.config.mjs +0 -62
  202. package/project.json +0 -15
  203. package/rollup.config.cjs +0 -16
  204. package/src/components/Accordion/Accordion.test.tsx +0 -95
  205. package/src/components/Accordion/Accordion.tsx +0 -97
  206. package/src/components/Accordion/accordion.types.ts +0 -66
  207. package/src/components/Accordion/accordion.variants.ts +0 -32
  208. package/src/components/Alert/Alert.test.tsx +0 -302
  209. package/src/components/Alert/Alert.tsx +0 -186
  210. package/src/components/Alert/alert.types.ts +0 -144
  211. package/src/components/Alert/alert.variants.ts +0 -71
  212. package/src/components/AppShell/AppShell.test.tsx +0 -223
  213. package/src/components/AppShell/AppShell.tsx +0 -239
  214. package/src/components/AppShell/appShell.types.ts +0 -49
  215. package/src/components/AppShell/appShell.variants.ts +0 -54
  216. package/src/components/AspectRatio/AspectRatio.test.tsx +0 -173
  217. package/src/components/AspectRatio/AspectRatio.tsx +0 -73
  218. package/src/components/AspectRatio/aspectRatio.types.ts +0 -54
  219. package/src/components/Autocomplete/Autocomplete.perf.test.tsx +0 -225
  220. package/src/components/Autocomplete/Autocomplete.test.tsx +0 -556
  221. package/src/components/Autocomplete/Autocomplete.tsx +0 -1069
  222. package/src/components/Autocomplete/autocomplete.types.ts +0 -198
  223. package/src/components/Autocomplete/autocomplete.variants.ts +0 -141
  224. package/src/components/Avatar/Avatar.test.tsx +0 -287
  225. package/src/components/Avatar/Avatar.tsx +0 -304
  226. package/src/components/Avatar/avatar.types.ts +0 -205
  227. package/src/components/Avatar/avatar.variants.ts +0 -194
  228. package/src/components/Badge/Badge.test.tsx +0 -385
  229. package/src/components/Badge/Badge.tsx +0 -174
  230. package/src/components/Badge/badge.types.ts +0 -154
  231. package/src/components/Badge/badge.variants.ts +0 -161
  232. package/src/components/Box/Box.test.tsx +0 -391
  233. package/src/components/Box/Box.tsx +0 -112
  234. package/src/components/Box/box.types.ts +0 -116
  235. package/src/components/Box/box.variants.ts +0 -230
  236. package/src/components/Breadcrumbs/Breadcrumbs.perf.test.tsx +0 -128
  237. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -231
  238. package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -203
  239. package/src/components/Breadcrumbs/breadcrumbs.types.ts +0 -87
  240. package/src/components/Breadcrumbs/breadcrumbs.variants.ts +0 -54
  241. package/src/components/Button/Button.test.tsx +0 -204
  242. package/src/components/Button/Button.tsx +0 -151
  243. package/src/components/Button/button.types.ts +0 -110
  244. package/src/components/Button/button.variants.ts +0 -159
  245. package/src/components/Calendar/Calendar.test.tsx +0 -75
  246. package/src/components/Calendar/Calendar.tsx +0 -264
  247. package/src/components/Calendar/calendar.types.ts +0 -65
  248. package/src/components/Calendar/calendar.variants.ts +0 -64
  249. package/src/components/Card/Card.test.tsx +0 -291
  250. package/src/components/Card/Card.tsx +0 -241
  251. package/src/components/Card/card.types.ts +0 -132
  252. package/src/components/Checkbox/Checkbox.test.tsx +0 -146
  253. package/src/components/Checkbox/Checkbox.tsx +0 -286
  254. package/src/components/Checkbox/checkbox.types.ts +0 -88
  255. package/src/components/Checkbox/checkbox.variants.ts +0 -68
  256. package/src/components/Chip/Chip.test.tsx +0 -316
  257. package/src/components/Chip/Chip.tsx +0 -224
  258. package/src/components/Chip/chip.types.ts +0 -128
  259. package/src/components/Chip/chip.variants.ts +0 -173
  260. package/src/components/ConfirmDialog/ConfirmDialog.perf.test.tsx +0 -172
  261. package/src/components/ConfirmDialog/ConfirmDialog.test.tsx +0 -311
  262. package/src/components/ConfirmDialog/ConfirmDialog.tsx +0 -252
  263. package/src/components/ConfirmDialog/confirmDialog.types.ts +0 -70
  264. package/src/components/ConfirmDialog/confirmDialog.variants.ts +0 -76
  265. package/src/components/Container/Container.test.tsx +0 -209
  266. package/src/components/Container/Container.tsx +0 -74
  267. package/src/components/Container/container.types.ts +0 -45
  268. package/src/components/Container/container.variants.ts +0 -81
  269. package/src/components/DataGrid/DataGrid.perf.test.tsx +0 -114
  270. package/src/components/DataGrid/DataGrid.test.tsx +0 -1153
  271. package/src/components/DataGrid/DataGrid.tsx +0 -1282
  272. package/src/components/DataGrid/dataGrid.types.ts +0 -238
  273. package/src/components/DataGrid/dataGrid.variants.ts +0 -152
  274. package/src/components/DataGrid/filters/ColumnFilters.test.tsx +0 -330
  275. package/src/components/DataGrid/filters/ColumnFilters.tsx +0 -456
  276. package/src/components/DataGrid/reorder/useColumnReorder.test.ts +0 -130
  277. package/src/components/DataGrid/reorder/useColumnReorder.ts +0 -144
  278. package/src/components/DataGrid/resize/useColumnResize.test.ts +0 -144
  279. package/src/components/DataGrid/resize/useColumnResize.ts +0 -135
  280. package/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx +0 -186
  281. package/src/components/DatePicker/DatePicker.test.tsx +0 -76
  282. package/src/components/DatePicker/DatePicker.tsx +0 -305
  283. package/src/components/DatePicker/datePicker.types.ts +0 -77
  284. package/src/components/DatePicker/datePicker.variants.ts +0 -50
  285. package/src/components/DateRangePicker/DateRangePicker.test.tsx +0 -92
  286. package/src/components/DateRangePicker/DateRangePicker.tsx +0 -510
  287. package/src/components/DateRangePicker/dateRangePicker.types.ts +0 -74
  288. package/src/components/DateRangePicker/dateRangePicker.variants.ts +0 -101
  289. package/src/components/DateTimePicker/DateTimePicker.test.tsx +0 -78
  290. package/src/components/DateTimePicker/DateTimePicker.tsx +0 -347
  291. package/src/components/DateTimePicker/dateTimePicker.types.ts +0 -79
  292. package/src/components/DateTimePicker/dateTimePicker.variants.ts +0 -55
  293. package/src/components/Dialog/Dialog.test.tsx +0 -96
  294. package/src/components/Dialog/Dialog.tsx +0 -102
  295. package/src/components/Dialog/dialog.types.ts +0 -62
  296. package/src/components/Dialog/dialog.variants.ts +0 -66
  297. package/src/components/Divider/Divider.test.tsx +0 -243
  298. package/src/components/Divider/Divider.tsx +0 -140
  299. package/src/components/Divider/divider.types.ts +0 -52
  300. package/src/components/Divider/divider.variants.ts +0 -116
  301. package/src/components/Grid/Grid.test.tsx +0 -321
  302. package/src/components/Grid/Grid.tsx +0 -148
  303. package/src/components/Grid/grid.types.ts +0 -112
  304. package/src/components/Grid/grid.variants.ts +0 -133
  305. package/src/components/IconButton/IconButton.test.tsx +0 -367
  306. package/src/components/IconButton/IconButton.tsx +0 -159
  307. package/src/components/IconButton/iconButton.types.ts +0 -106
  308. package/src/components/IconButton/iconButton.variants.ts +0 -31
  309. package/src/components/LeftNav/LeftNav.perf.test.tsx +0 -172
  310. package/src/components/LeftNav/LeftNav.test.tsx +0 -302
  311. package/src/components/LeftNav/LeftNav.tsx +0 -330
  312. package/src/components/LeftNav/leftNav.types.ts +0 -120
  313. package/src/components/LeftNav/leftNav.variants.ts +0 -107
  314. package/src/components/Menu/Menu.test.tsx +0 -408
  315. package/src/components/Menu/Menu.tsx +0 -335
  316. package/src/components/Menu/menu.types.ts +0 -221
  317. package/src/components/Menu/menu.variants.ts +0 -132
  318. package/src/components/NumberField/NumberField.test.tsx +0 -83
  319. package/src/components/NumberField/NumberField.tsx +0 -321
  320. package/src/components/NumberField/numberField.types.ts +0 -72
  321. package/src/components/NumberField/numberField.variants.ts +0 -94
  322. package/src/components/OTPField/OTPField.test.tsx +0 -121
  323. package/src/components/OTPField/OTPField.tsx +0 -250
  324. package/src/components/OTPField/otpField.types.ts +0 -58
  325. package/src/components/OTPField/otpField.variants.ts +0 -72
  326. package/src/components/Pagination/Pagination.test.tsx +0 -314
  327. package/src/components/Pagination/Pagination.tsx +0 -277
  328. package/src/components/Pagination/pagination.helpers.ts +0 -102
  329. package/src/components/Pagination/pagination.types.ts +0 -117
  330. package/src/components/Pagination/pagination.variants.ts +0 -117
  331. package/src/components/Popover/Popover.test.tsx +0 -72
  332. package/src/components/Popover/Popover.tsx +0 -55
  333. package/src/components/Popover/popover.types.ts +0 -42
  334. package/src/components/Popover/popover.variants.ts +0 -24
  335. package/src/components/RadioGroup/RadioGroup.test.tsx +0 -140
  336. package/src/components/RadioGroup/RadioGroup.tsx +0 -283
  337. package/src/components/RadioGroup/radioGroup.types.ts +0 -85
  338. package/src/components/RadioGroup/radioGroup.variants.ts +0 -87
  339. package/src/components/Skeleton/Skeleton.test.tsx +0 -127
  340. package/src/components/Skeleton/Skeleton.tsx +0 -49
  341. package/src/components/Skeleton/skeleton.types.ts +0 -59
  342. package/src/components/Skeleton/skeleton.variants.ts +0 -87
  343. package/src/components/Snackbar/Snackbar.perf.test.tsx +0 -144
  344. package/src/components/Snackbar/Snackbar.test.tsx +0 -327
  345. package/src/components/Snackbar/Snackbar.tsx +0 -316
  346. package/src/components/Snackbar/snackbar.types.ts +0 -127
  347. package/src/components/Snackbar/snackbar.variants.ts +0 -81
  348. package/src/components/Spinner/Spinner.test.tsx +0 -199
  349. package/src/components/Spinner/Spinner.tsx +0 -158
  350. package/src/components/Spinner/spinner.types.ts +0 -113
  351. package/src/components/Spinner/spinner.variants.ts +0 -83
  352. package/src/components/Stack/Stack.test.tsx +0 -309
  353. package/src/components/Stack/Stack.tsx +0 -115
  354. package/src/components/Stack/stack.types.ts +0 -68
  355. package/src/components/Stack/stack.variants.ts +0 -80
  356. package/src/components/Switch/Switch.test.tsx +0 -131
  357. package/src/components/Switch/Switch.tsx +0 -158
  358. package/src/components/Switch/switch.types.ts +0 -36
  359. package/src/components/Switch/switch.variants.ts +0 -70
  360. package/src/components/Table/Table.perf.test.tsx +0 -81
  361. package/src/components/Table/Table.test.tsx +0 -674
  362. package/src/components/Table/Table.tsx +0 -863
  363. package/src/components/Table/cells/RenderButton.tsx +0 -23
  364. package/src/components/Table/cells/RenderChip.tsx +0 -37
  365. package/src/components/Table/cells/RenderText.tsx +0 -37
  366. package/src/components/Table/cells/RenderTwoLine.tsx +0 -34
  367. package/src/components/Table/cells/RowActionsMenu.tsx +0 -147
  368. package/src/components/Table/cells/cells.test.tsx +0 -247
  369. package/src/components/Table/cells/index.ts +0 -14
  370. package/src/components/Table/table.types.ts +0 -438
  371. package/src/components/Table/table.variants.ts +0 -207
  372. package/src/components/Tabs/Tabs.test.tsx +0 -145
  373. package/src/components/Tabs/Tabs.tsx +0 -77
  374. package/src/components/Tabs/tabs.types.ts +0 -55
  375. package/src/components/Tabs/tabs.variants.ts +0 -69
  376. package/src/components/Tabs/useTabs.ts +0 -167
  377. package/src/components/TextField/TextField.test.tsx +0 -198
  378. package/src/components/TextField/TextField.tsx +0 -245
  379. package/src/components/TextField/textField.types.ts +0 -90
  380. package/src/components/TextField/textField.variants.ts +0 -105
  381. package/src/components/Textarea/Textarea.test.tsx +0 -75
  382. package/src/components/Textarea/Textarea.tsx +0 -190
  383. package/src/components/Textarea/textarea.types.ts +0 -60
  384. package/src/components/Textarea/textarea.variants.ts +0 -85
  385. package/src/components/TimePicker/TimePicker.test.tsx +0 -65
  386. package/src/components/TimePicker/TimePicker.tsx +0 -274
  387. package/src/components/TimePicker/timePicker.types.ts +0 -69
  388. package/src/components/TimePicker/timePicker.variants.ts +0 -53
  389. package/src/components/Tooltip/Tooltip.test.tsx +0 -73
  390. package/src/components/Tooltip/Tooltip.tsx +0 -70
  391. package/src/components/Tooltip/tooltip.types.ts +0 -44
  392. package/src/components/Tooltip/tooltip.variants.ts +0 -28
  393. package/src/components/TopBar/TopBar.test.tsx +0 -129
  394. package/src/components/TopBar/TopBar.tsx +0 -66
  395. package/src/components/TopBar/topBar.types.ts +0 -42
  396. package/src/components/TopBar/topBar.variants.ts +0 -38
  397. package/src/components/Typography/Typography.test.tsx +0 -247
  398. package/src/components/Typography/Typography.tsx +0 -112
  399. package/src/components/Typography/typography.types.ts +0 -65
  400. package/src/components/Typography/typography.variants.ts +0 -130
  401. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +0 -86
  402. package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -59
  403. package/src/components/VisuallyHidden/visuallyHidden.types.ts +0 -45
  404. package/src/components/_shared/data/getNestedValue.test.ts +0 -50
  405. package/src/components/_shared/data/getNestedValue.ts +0 -32
  406. package/src/components/_shared/data/useColumnAutoDetect.test.ts +0 -123
  407. package/src/components/_shared/data/useColumnAutoDetect.ts +0 -100
  408. package/src/components/_shared/data/useControllableState.ts +0 -48
  409. package/src/components/_shared/data/useDebouncedValue.ts +0 -24
  410. package/src/components/_shared/data/useTableFilter.test.ts +0 -166
  411. package/src/components/_shared/data/useTableFilter.ts +0 -118
  412. package/src/components/_shared/data/useTableSearch.test.ts +0 -115
  413. package/src/components/_shared/data/useTableSearch.ts +0 -66
  414. package/src/components/_shared/data/useTableSelection.test.ts +0 -100
  415. package/src/components/_shared/data/useTableSelection.ts +0 -100
  416. package/src/components/_shared/data/useTableSort.test.ts +0 -150
  417. package/src/components/_shared/data/useTableSort.ts +0 -141
  418. package/src/components/_shared/data/useVirtualizer.test.ts +0 -158
  419. package/src/components/_shared/data/useVirtualizer.ts +0 -199
  420. package/src/components/_shared/resolveValidationState.ts +0 -60
  421. package/src/components/_shared/severity/index.ts +0 -33
  422. package/src/components/_shared/severity/severity.types.ts +0 -50
  423. package/src/components/_shared/severity/severityIcons.tsx +0 -104
  424. package/src/components/_shared/severity/severityVariants.test.ts +0 -136
  425. package/src/components/_shared/severity/severityVariants.ts +0 -115
  426. package/src/components/_shared/themeIdentity.test.ts +0 -113
  427. package/src/hooks/useAccessState.spec.tsx +0 -161
  428. package/src/hooks/useAccessState.ts +0 -81
  429. package/src/index.ts +0 -550
  430. package/src/utils/cn.spec.ts +0 -16
  431. package/src/utils/cn.ts +0 -29
  432. package/test-output/vitest/coverage/base.css +0 -224
  433. package/test-output/vitest/coverage/block-navigation.js +0 -87
  434. package/test-output/vitest/coverage/clover.xml +0 -2418
  435. package/test-output/vitest/coverage/coverage-final.json +0 -89
  436. package/test-output/vitest/coverage/favicon.png +0 -0
  437. package/test-output/vitest/coverage/index.html +0 -746
  438. package/test-output/vitest/coverage/prettify.css +0 -1
  439. package/test-output/vitest/coverage/prettify.js +0 -2
  440. package/test-output/vitest/coverage/sort-arrow-sprite.png +0 -0
  441. package/test-output/vitest/coverage/sorter.js +0 -210
  442. package/test-output/vitest/coverage/src/components/Accordion/Accordion.tsx.html +0 -376
  443. package/test-output/vitest/coverage/src/components/Accordion/accordion.variants.ts.html +0 -181
  444. package/test-output/vitest/coverage/src/components/Accordion/index.html +0 -131
  445. package/test-output/vitest/coverage/src/components/AppShell/AppShell.tsx.html +0 -802
  446. package/test-output/vitest/coverage/src/components/AppShell/appShell.variants.ts.html +0 -247
  447. package/test-output/vitest/coverage/src/components/AppShell/index.html +0 -131
  448. package/test-output/vitest/coverage/src/components/AspectRatio/AspectRatio.tsx.html +0 -304
  449. package/test-output/vitest/coverage/src/components/AspectRatio/index.html +0 -116
  450. package/test-output/vitest/coverage/src/components/Autocomplete/Autocomplete.tsx.html +0 -3292
  451. package/test-output/vitest/coverage/src/components/Autocomplete/autocomplete.variants.ts.html +0 -508
  452. package/test-output/vitest/coverage/src/components/Autocomplete/index.html +0 -131
  453. package/test-output/vitest/coverage/src/components/Box/Box.tsx.html +0 -334
  454. package/test-output/vitest/coverage/src/components/Box/box.variants.ts.html +0 -775
  455. package/test-output/vitest/coverage/src/components/Box/index.html +0 -131
  456. package/test-output/vitest/coverage/src/components/Breadcrumbs/Breadcrumbs.tsx.html +0 -694
  457. package/test-output/vitest/coverage/src/components/Breadcrumbs/breadcrumbs.variants.ts.html +0 -247
  458. package/test-output/vitest/coverage/src/components/Breadcrumbs/index.html +0 -131
  459. package/test-output/vitest/coverage/src/components/Button/Button.tsx.html +0 -535
  460. package/test-output/vitest/coverage/src/components/Button/button.variants.ts.html +0 -562
  461. package/test-output/vitest/coverage/src/components/Button/index.html +0 -131
  462. package/test-output/vitest/coverage/src/components/Checkbox/Checkbox.tsx.html +0 -943
  463. package/test-output/vitest/coverage/src/components/Checkbox/checkbox.variants.ts.html +0 -289
  464. package/test-output/vitest/coverage/src/components/Checkbox/index.html +0 -131
  465. package/test-output/vitest/coverage/src/components/ConfirmDialog/ConfirmDialog.tsx.html +0 -841
  466. package/test-output/vitest/coverage/src/components/ConfirmDialog/confirmDialog.variants.ts.html +0 -313
  467. package/test-output/vitest/coverage/src/components/ConfirmDialog/index.html +0 -131
  468. package/test-output/vitest/coverage/src/components/Container/Container.tsx.html +0 -307
  469. package/test-output/vitest/coverage/src/components/Container/container.variants.ts.html +0 -328
  470. package/test-output/vitest/coverage/src/components/Container/index.html +0 -131
  471. package/test-output/vitest/coverage/src/components/DataGrid/DataGrid.tsx.html +0 -3937
  472. package/test-output/vitest/coverage/src/components/DataGrid/dataGrid.variants.ts.html +0 -541
  473. package/test-output/vitest/coverage/src/components/DataGrid/filters/ColumnFilters.tsx.html +0 -1453
  474. package/test-output/vitest/coverage/src/components/DataGrid/filters/index.html +0 -116
  475. package/test-output/vitest/coverage/src/components/DataGrid/index.html +0 -131
  476. package/test-output/vitest/coverage/src/components/DataGrid/reorder/index.html +0 -116
  477. package/test-output/vitest/coverage/src/components/DataGrid/reorder/useColumnReorder.ts.html +0 -517
  478. package/test-output/vitest/coverage/src/components/DataGrid/resize/index.html +0 -116
  479. package/test-output/vitest/coverage/src/components/DataGrid/resize/useColumnResize.ts.html +0 -490
  480. package/test-output/vitest/coverage/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx.html +0 -592
  481. package/test-output/vitest/coverage/src/components/DataGrid/visibility/index.html +0 -116
  482. package/test-output/vitest/coverage/src/components/DateTimePicker/DateTimePicker.tsx.html +0 -1042
  483. package/test-output/vitest/coverage/src/components/DateTimePicker/dateTimePicker.variants.ts.html +0 -337
  484. package/test-output/vitest/coverage/src/components/DateTimePicker/index.html +0 -131
  485. package/test-output/vitest/coverage/src/components/Dialog/Dialog.tsx.html +0 -391
  486. package/test-output/vitest/coverage/src/components/Dialog/dialog.variants.ts.html +0 -283
  487. package/test-output/vitest/coverage/src/components/Dialog/index.html +0 -131
  488. package/test-output/vitest/coverage/src/components/Divider/Divider.tsx.html +0 -505
  489. package/test-output/vitest/coverage/src/components/Divider/divider.variants.ts.html +0 -433
  490. package/test-output/vitest/coverage/src/components/Divider/index.html +0 -131
  491. package/test-output/vitest/coverage/src/components/Grid/Grid.tsx.html +0 -529
  492. package/test-output/vitest/coverage/src/components/Grid/grid.variants.ts.html +0 -484
  493. package/test-output/vitest/coverage/src/components/Grid/index.html +0 -131
  494. package/test-output/vitest/coverage/src/components/LeftNav/LeftNav.tsx.html +0 -1075
  495. package/test-output/vitest/coverage/src/components/LeftNav/index.html +0 -131
  496. package/test-output/vitest/coverage/src/components/LeftNav/leftNav.variants.ts.html +0 -406
  497. package/test-output/vitest/coverage/src/components/NumberField/NumberField.tsx.html +0 -1048
  498. package/test-output/vitest/coverage/src/components/NumberField/index.html +0 -131
  499. package/test-output/vitest/coverage/src/components/NumberField/numberField.variants.ts.html +0 -367
  500. package/test-output/vitest/coverage/src/components/OTPField/OTPField.tsx.html +0 -835
  501. package/test-output/vitest/coverage/src/components/OTPField/index.html +0 -131
  502. package/test-output/vitest/coverage/src/components/OTPField/otpField.variants.ts.html +0 -301
  503. package/test-output/vitest/coverage/src/components/Pagination/Pagination.tsx.html +0 -916
  504. package/test-output/vitest/coverage/src/components/Pagination/index.html +0 -146
  505. package/test-output/vitest/coverage/src/components/Pagination/pagination.helpers.ts.html +0 -391
  506. package/test-output/vitest/coverage/src/components/Pagination/pagination.variants.ts.html +0 -436
  507. package/test-output/vitest/coverage/src/components/Popover/Popover.tsx.html +0 -250
  508. package/test-output/vitest/coverage/src/components/Popover/index.html +0 -131
  509. package/test-output/vitest/coverage/src/components/Popover/popover.variants.ts.html +0 -157
  510. package/test-output/vitest/coverage/src/components/RadioGroup/RadioGroup.tsx.html +0 -934
  511. package/test-output/vitest/coverage/src/components/RadioGroup/index.html +0 -131
  512. package/test-output/vitest/coverage/src/components/RadioGroup/radioGroup.variants.ts.html +0 -346
  513. package/test-output/vitest/coverage/src/components/Skeleton/Skeleton.tsx.html +0 -232
  514. package/test-output/vitest/coverage/src/components/Skeleton/index.html +0 -131
  515. package/test-output/vitest/coverage/src/components/Skeleton/skeleton.variants.ts.html +0 -346
  516. package/test-output/vitest/coverage/src/components/Snackbar/Snackbar.tsx.html +0 -979
  517. package/test-output/vitest/coverage/src/components/Snackbar/index.html +0 -131
  518. package/test-output/vitest/coverage/src/components/Snackbar/snackbar.variants.ts.html +0 -307
  519. package/test-output/vitest/coverage/src/components/Stack/Stack.tsx.html +0 -430
  520. package/test-output/vitest/coverage/src/components/Stack/index.html +0 -131
  521. package/test-output/vitest/coverage/src/components/Stack/stack.variants.ts.html +0 -325
  522. package/test-output/vitest/coverage/src/components/Switch/Switch.tsx.html +0 -559
  523. package/test-output/vitest/coverage/src/components/Switch/index.html +0 -131
  524. package/test-output/vitest/coverage/src/components/Switch/switch.variants.ts.html +0 -295
  525. package/test-output/vitest/coverage/src/components/Table/Table.tsx.html +0 -2677
  526. package/test-output/vitest/coverage/src/components/Table/cells/RenderButton.tsx.html +0 -154
  527. package/test-output/vitest/coverage/src/components/Table/cells/RenderChip.tsx.html +0 -385
  528. package/test-output/vitest/coverage/src/components/Table/cells/RenderText.tsx.html +0 -196
  529. package/test-output/vitest/coverage/src/components/Table/cells/RenderTwoLine.tsx.html +0 -187
  530. package/test-output/vitest/coverage/src/components/Table/cells/RowActionsMenu.tsx.html +0 -526
  531. package/test-output/vitest/coverage/src/components/Table/cells/index.html +0 -191
  532. package/test-output/vitest/coverage/src/components/Table/cells/index.ts.html +0 -127
  533. package/test-output/vitest/coverage/src/components/Table/index.html +0 -131
  534. package/test-output/vitest/coverage/src/components/Table/table.variants.ts.html +0 -706
  535. package/test-output/vitest/coverage/src/components/Tabs/Tabs.tsx.html +0 -283
  536. package/test-output/vitest/coverage/src/components/Tabs/index.html +0 -131
  537. package/test-output/vitest/coverage/src/components/Tabs/tabs.variants.ts.html +0 -292
  538. package/test-output/vitest/coverage/src/components/TextField/TextField.tsx.html +0 -820
  539. package/test-output/vitest/coverage/src/components/TextField/index.html +0 -131
  540. package/test-output/vitest/coverage/src/components/TextField/textField.variants.ts.html +0 -400
  541. package/test-output/vitest/coverage/src/components/Textarea/Textarea.tsx.html +0 -655
  542. package/test-output/vitest/coverage/src/components/Textarea/index.html +0 -131
  543. package/test-output/vitest/coverage/src/components/Textarea/textarea.variants.ts.html +0 -340
  544. package/test-output/vitest/coverage/src/components/Tooltip/Tooltip.tsx.html +0 -295
  545. package/test-output/vitest/coverage/src/components/Tooltip/index.html +0 -131
  546. package/test-output/vitest/coverage/src/components/Tooltip/tooltip.variants.ts.html +0 -169
  547. package/test-output/vitest/coverage/src/components/TopBar/TopBar.tsx.html +0 -283
  548. package/test-output/vitest/coverage/src/components/TopBar/index.html +0 -131
  549. package/test-output/vitest/coverage/src/components/TopBar/topBar.variants.ts.html +0 -199
  550. package/test-output/vitest/coverage/src/components/Typography/Typography.tsx.html +0 -421
  551. package/test-output/vitest/coverage/src/components/Typography/index.html +0 -131
  552. package/test-output/vitest/coverage/src/components/Typography/typography.variants.ts.html +0 -436
  553. package/test-output/vitest/coverage/src/components/VisuallyHidden/VisuallyHidden.tsx.html +0 -262
  554. package/test-output/vitest/coverage/src/components/VisuallyHidden/index.html +0 -116
  555. package/test-output/vitest/coverage/src/components/_shared/data/getNestedValue.ts.html +0 -181
  556. package/test-output/vitest/coverage/src/components/_shared/data/index.html +0 -236
  557. package/test-output/vitest/coverage/src/components/_shared/data/useColumnAutoDetect.ts.html +0 -385
  558. package/test-output/vitest/coverage/src/components/_shared/data/useControllableState.ts.html +0 -229
  559. package/test-output/vitest/coverage/src/components/_shared/data/useDebouncedValue.ts.html +0 -157
  560. package/test-output/vitest/coverage/src/components/_shared/data/useTableFilter.ts.html +0 -439
  561. package/test-output/vitest/coverage/src/components/_shared/data/useTableSearch.ts.html +0 -283
  562. package/test-output/vitest/coverage/src/components/_shared/data/useTableSelection.ts.html +0 -385
  563. package/test-output/vitest/coverage/src/components/_shared/data/useTableSort.ts.html +0 -508
  564. package/test-output/vitest/coverage/src/components/_shared/data/useVirtualizer.ts.html +0 -682
  565. package/test-output/vitest/coverage/src/components/_shared/index.html +0 -116
  566. package/test-output/vitest/coverage/src/components/_shared/resolveValidationState.ts.html +0 -265
  567. package/test-output/vitest/coverage/src/hooks/index.html +0 -116
  568. package/test-output/vitest/coverage/src/hooks/useAccessState.ts.html +0 -328
  569. package/test-output/vitest/coverage/src/index.html +0 -116
  570. package/test-output/vitest/coverage/src/index.ts.html +0 -1153
  571. package/test-output/vitest/coverage/src/utils/cn.ts.html +0 -172
  572. package/test-output/vitest/coverage/src/utils/index.html +0 -116
  573. package/tsconfig.json +0 -13
  574. package/tsconfig.lib.json +0 -58
  575. package/tsconfig.spec.json +0 -34
  576. package/vite.config.ts +0 -33
  577. package/vitest.config.mts +0 -29
@@ -1,335 +0,0 @@
1
- import {
2
- createContext,
3
- forwardRef,
4
- memo,
5
- useContext,
6
- type ReactNode,
7
- } from 'react';
8
- import * as RadixMenu from '@radix-ui/react-dropdown-menu';
9
- import { DashFormContext, useEngineVisibility } from '@dashforge/ui-core';
10
- import { cn } from '../../utils/cn.js';
11
- import { useAccessState } from '../../hooks/useAccessState.js';
12
- import { menuVariants, placementToRadix } from './menu.variants.js';
13
- import type {
14
- MenuContentProps,
15
- MenuItemProps,
16
- MenuLabelProps,
17
- MenuProps,
18
- MenuSeparatorProps,
19
- MenuSkeletonProps,
20
- MenuTriggerProps,
21
- } from './menu.types.js';
22
-
23
- // ─── Context ─────────────────────────────────────────────────────
24
-
25
- /**
26
- * Internal Menu context — propagates the `closeOnItemClick` flag
27
- * down to `<MenuItem>` so each item knows whether to suppress the
28
- * default Radix close-on-select behaviour.
29
- *
30
- * @internal
31
- */
32
- interface MenuCtx {
33
- closeOnItemClick: boolean;
34
- }
35
-
36
- const MenuContext = createContext<MenuCtx>({ closeOnItemClick: true });
37
-
38
- // ─── Menu (Root provider) ────────────────────────────────────────
39
-
40
- /**
41
- * `<Menu>` — top-level provider that wraps Radix `DropdownMenu.Root`.
42
- *
43
- * Compound API:
44
- * ```tsx
45
- * <Menu>
46
- * <MenuTrigger>
47
- * <IconButton aria-label="Actions"><MoreIcon /></IconButton>
48
- * </MenuTrigger>
49
- * <MenuContent>
50
- * <MenuLabel>Actions</MenuLabel>
51
- * <MenuItem onClick={onEdit}>Edit</MenuItem>
52
- * <MenuSeparator />
53
- * <MenuItem color="danger" onClick={onDelete}>Delete</MenuItem>
54
- * </MenuContent>
55
- * </Menu>
56
- * ```
57
- *
58
- * Built on `@radix-ui/react-dropdown-menu` (purpose-built menu
59
- * primitive with full WAI-ARIA menu pattern + keyboard nav
60
- * + type-ahead + portal mount).
61
- *
62
- * Sub-menus and controlled selection mode are deliberately out of
63
- * scope for v1 (Sprint 4.4) — composable via Radix primitives if
64
- * needed via explicit sub-component opt-in (future).
65
- */
66
- export function Menu({
67
- children,
68
- open,
69
- defaultOpen,
70
- onOpenChange,
71
- closeOnItemClick = true,
72
- modal = false,
73
- }: MenuProps) {
74
- return (
75
- <MenuContext.Provider value={{ closeOnItemClick }}>
76
- <RadixMenu.Root
77
- open={open}
78
- defaultOpen={defaultOpen}
79
- onOpenChange={onOpenChange}
80
- modal={modal}
81
- >
82
- {children}
83
- </RadixMenu.Root>
84
- </MenuContext.Provider>
85
- );
86
- }
87
-
88
- // ─── MenuTrigger ─────────────────────────────────────────────────
89
-
90
- /**
91
- * `<MenuTrigger>` — the element that opens the menu.
92
- *
93
- * Always renders the immediate child via Radix Slot (`asChild`) — the
94
- * child receives the click handler + `aria-haspopup="menu"` +
95
- * `aria-expanded` reactive to open state. Pass any interactive
96
- * component as the child (`<IconButton>`, `<Button>`, `<Avatar>`,
97
- * custom).
98
- */
99
- export function MenuTrigger({ children }: MenuTriggerProps) {
100
- return <RadixMenu.Trigger asChild>{children}</RadixMenu.Trigger>;
101
- }
102
-
103
- // ─── MenuContent ─────────────────────────────────────────────────
104
-
105
- /**
106
- * `<MenuContent>` — the floating panel.
107
- *
108
- * Lazy-mounted via Radix Portal — zero DOM cost when the menu is
109
- * closed (one of the perf properties we inherit from Radix +
110
- * Atlaskit-style menus).
111
- *
112
- * Placement / sideOffset are read from the parent `<Menu>` via
113
- * Radix context — we re-pull the `<Menu>` props via the
114
- * `MenuContext` here.
115
- *
116
- * NB: placement is read from PARENT MENU PROPS, not from
117
- * `<MenuContent>` directly — keeps the floating-positioning API on
118
- * the provider where it belongs.
119
- */
120
- export const MenuContent = forwardRef<HTMLDivElement, MenuContentProps>(
121
- function MenuContent(props, ref) {
122
- const { children, minWidth, className, sx } = props;
123
- const v = menuVariants();
124
-
125
- // NB: we don't read `placement` from MenuContext (Radix Root
126
- // doesn't surface those props to descendants). Instead, the
127
- // consumer passes them on `<Menu>` and they're forwarded into
128
- // `<MenuContent>` via context-style props — to keep the API
129
- // simple, we DON'T expose placement on MenuContent itself; the
130
- // user sets it on Menu. We achieve this by reading the MenuProps
131
- // off the Radix-internal context… actually, simpler: we just
132
- // accept the default `bottom-start` from Radix and let the
133
- // consumer pass `side`/`align` via MenuContent if they want fine
134
- // control. For now, hardcode the most common defaults; Sprint
135
- // 4.4-bis can lift this if real demand emerges.
136
- const { side, align } = placementToRadix('bottom-start');
137
-
138
- return (
139
- <RadixMenu.Portal>
140
- <RadixMenu.Content
141
- ref={ref}
142
- side={side}
143
- align={align}
144
- sideOffset={6}
145
- style={
146
- minWidth !== undefined
147
- ? { minWidth: typeof minWidth === 'number' ? `${minWidth}px` : minWidth }
148
- : undefined
149
- }
150
- className={cn(v.content(), sx, className)}
151
- >
152
- {children}
153
- </RadixMenu.Content>
154
- </RadixMenu.Portal>
155
- );
156
- }
157
- );
158
-
159
- MenuContent.displayName = 'MenuContent';
160
-
161
- // ─── MenuItem ────────────────────────────────────────────────────
162
-
163
- /**
164
- * `<MenuItem>` — clickable row inside the menu.
165
- *
166
- * Memoized via `React.memo` for performance — re-renders only when
167
- * its own props change, not when sibling items mutate. Pattern
168
- * inspired by Atlaskit's `ButtonItem` optimization (one of the
169
- * reasons Atlaskit menus stay responsive on large item lists).
170
- *
171
- * Bridge integration:
172
- * - `access` — hides / disables the item per RBAC
173
- * - `visibleWhen` — engine-reactive predicate
174
- *
175
- * Both gates fold into the visible/disabled state; when the
176
- * predicate returns `false` OR `access` denies visibility, the
177
- * item renders `null` (does NOT occupy a row in the menu, vs
178
- * disabled which renders dimmed-but-present).
179
- */
180
- function MenuItemImpl(props: MenuItemProps) {
181
- const {
182
- children,
183
- onClick,
184
- icon,
185
- endIcon,
186
- disabled: disabledProp,
187
- selected,
188
- color = 'default',
189
- access,
190
- visibleWhen,
191
- className,
192
- sx,
193
- } = props;
194
-
195
- const { closeOnItemClick } = useContext(MenuContext);
196
-
197
- // Bridge hooks — always called (rules-of-hooks).
198
- const bridge = useContext(DashFormContext);
199
- const isBridgeVisible = useEngineVisibility(bridge?.engine, visibleWhen);
200
- const accessState = useAccessState(access);
201
-
202
- if (!isBridgeVisible || !accessState.visible) return null;
203
-
204
- const isDisabled =
205
- Boolean(disabledProp) || accessState.disabled || accessState.readonly;
206
-
207
- const v = menuVariants({ color, selected });
208
-
209
- return (
210
- <RadixMenu.Item
211
- disabled={isDisabled}
212
- onSelect={(e) => {
213
- if (isDisabled) return;
214
- // Suppress default close behaviour when the parent <Menu>
215
- // explicitly opted out (filter / multi-select pattern).
216
- if (!closeOnItemClick) e.preventDefault();
217
- onClick?.();
218
- }}
219
- className={cn(v.item(), sx, className)}
220
- >
221
- {icon != null && (
222
- <span className={v.itemIcon()}>{icon}</span>
223
- )}
224
- <span className={v.itemLabel()}>{children}</span>
225
- {endIcon != null && (
226
- <span className={v.itemEnd()}>{endIcon}</span>
227
- )}
228
- </RadixMenu.Item>
229
- );
230
- }
231
-
232
- export const MenuItem = memo(MenuItemImpl);
233
- MenuItem.displayName = 'MenuItem';
234
-
235
- // ─── MenuLabel ───────────────────────────────────────────────────
236
-
237
- /**
238
- * `<MenuLabel>` — non-interactive group heading.
239
- *
240
- * Renders via Radix `DropdownMenu.Label` which carries the right
241
- * ARIA semantics (`role="presentation"` — not announced as a
242
- * `menuitem` by screen readers).
243
- */
244
- export function MenuLabel({ children, className }: MenuLabelProps) {
245
- const v = menuVariants();
246
- return (
247
- <RadixMenu.Label className={cn(v.label(), className)}>
248
- {children}
249
- </RadixMenu.Label>
250
- );
251
- }
252
-
253
- // ─── MenuSeparator ───────────────────────────────────────────────
254
-
255
- /**
256
- * `<MenuSeparator>` — horizontal divider between items.
257
- *
258
- * Renders via Radix `DropdownMenu.Separator` — semantically correct
259
- * `role="separator"` for screen readers navigating the menu.
260
- */
261
- export function MenuSeparator({ className }: MenuSeparatorProps) {
262
- const v = menuVariants();
263
- return <RadixMenu.Separator className={cn(v.separator(), className)} />;
264
- }
265
-
266
- // ─── MenuSkeleton ────────────────────────────────────────────────
267
-
268
- /**
269
- * `<MenuSkeleton>` — Atlaskit-style loading state.
270
- *
271
- * Renders `count` placeholder rows (default 3) inside the menu while
272
- * real items are being fetched. Each row matches the geometry of a
273
- * real `<MenuItem>` (height, padding, icon slot) so the layout
274
- * doesn't jump when the real data arrives.
275
- *
276
- * `withHeading=true` adds a skeleton heading at the top, mimicking a
277
- * `<MenuLabel>` — useful when the real menu starts with a section
278
- * label.
279
- *
280
- * Pure visual — no animation overhead beyond Tailwind's
281
- * `animate-pulse` (motion-reduce-safe).
282
- *
283
- * @example
284
- * ```tsx
285
- * <MenuContent>
286
- * {isLoading ? (
287
- * <MenuSkeleton count={5} withHeading />
288
- * ) : (
289
- * items.map((it) => <MenuItem key={it.id}>{it.label}</MenuItem>)
290
- * )}
291
- * </MenuContent>
292
- * ```
293
- */
294
- export function MenuSkeleton({
295
- count = 3,
296
- withHeading = false,
297
- className,
298
- }: MenuSkeletonProps) {
299
- const v = menuVariants();
300
- return (
301
- <div
302
- role="presentation"
303
- aria-hidden="true"
304
- className={cn('animate-pulse motion-reduce:animate-none', className)}
305
- >
306
- {withHeading && (
307
- <div className={cn(v.label(), 'pointer-events-none')}>
308
- <span className="inline-block h-2.5 w-16 rounded-sm bg-neutral-200" />
309
- </div>
310
- )}
311
- {Array.from({ length: count }).map((_, i) => (
312
- <SkeletonRow key={i} />
313
- ))}
314
- </div>
315
- );
316
- }
317
-
318
- /**
319
- * One skeleton row — matches the dimensions of a real `<MenuItem>`
320
- * (icon slot + label slot). Internal — not exported.
321
- *
322
- * @internal
323
- */
324
- function SkeletonRow() {
325
- return (
326
- <div className="flex items-center gap-2 px-3 py-1.5 mx-1 my-0.5">
327
- <span className="inline-block h-4 w-4 shrink-0 rounded-sm bg-neutral-200" />
328
- <span className="inline-block h-3 flex-1 rounded-sm bg-neutral-200" />
329
- </div>
330
- );
331
- }
332
-
333
- // Re-export ReactNode type for downstream consumers — keeps the
334
- // import surface for the Menu module self-contained.
335
- export type { ReactNode };
@@ -1,221 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { ClassValue } from 'tailwind-variants';
3
- import type { Engine } from '@dashforge/ui-core';
4
- import type { AccessRequirement } from '@dashforge/rbac';
5
-
6
- /**
7
- * Placement of the menu content relative to the trigger. Maps 1:1 to
8
- * Radix DropdownMenu's `side` + `align` pair via the internal
9
- * helpers in Menu.tsx.
10
- */
11
- export type MenuPlacement =
12
- | 'top'
13
- | 'top-start'
14
- | 'top-end'
15
- | 'bottom'
16
- | 'bottom-start'
17
- | 'bottom-end'
18
- | 'left'
19
- | 'left-start'
20
- | 'left-end'
21
- | 'right'
22
- | 'right-start'
23
- | 'right-end';
24
-
25
- /**
26
- * Props for the top-level `<Menu>` provider.
27
- *
28
- * Wraps Radix `DropdownMenu.Root`. Provides open-state coordination
29
- * + closeOnItemClick context for descendant `<MenuItem>`s.
30
- */
31
- export interface MenuProps {
32
- /** Compound children: `<MenuTrigger>` + `<MenuContent>`. */
33
- children: ReactNode;
34
-
35
- /** Controlled open state. */
36
- open?: boolean;
37
-
38
- /** Default open state for uncontrolled mode. @default false */
39
- defaultOpen?: boolean;
40
-
41
- /** Open/close callback (controlled). */
42
- onOpenChange?: (open: boolean) => void;
43
-
44
- /**
45
- * Close the menu when an item is clicked. Set to `false` for
46
- * filter-style menus where item clicks should NOT dismiss (e.g.,
47
- * multi-select checkbox menus, sticky filter pills).
48
- * @default true
49
- */
50
- closeOnItemClick?: boolean;
51
-
52
- /**
53
- * Placement of the content relative to the trigger.
54
- * @default 'bottom-start'
55
- */
56
- placement?: MenuPlacement;
57
-
58
- /**
59
- * Pixel offset between trigger and content along the perpendicular
60
- * axis (e.g., for `placement='bottom-*'`, the vertical gap).
61
- * @default 6
62
- */
63
- sideOffset?: number;
64
-
65
- /**
66
- * Modal mode (Radix). When `true`, the menu blocks interaction with
67
- * the rest of the page (focus trap + outside scroll lock). When
68
- * `false`, dismissal is automatic on outside-click but the page
69
- * remains interactive. Default false matches the "lightweight
70
- * action menu" pattern.
71
- * @default false
72
- */
73
- modal?: boolean;
74
- }
75
-
76
- /**
77
- * Props for `<MenuTrigger>` — the element that opens the menu.
78
- *
79
- * Always renders via Radix Slot — the immediate child element
80
- * (typically `<IconButton>`, `<Button>`, or a custom interactive
81
- * component) receives the click handler, `aria-haspopup="menu"`,
82
- * and `aria-expanded` reactive to open state.
83
- */
84
- export interface MenuTriggerProps {
85
- /** The trigger element. */
86
- children: ReactNode;
87
- }
88
-
89
- /**
90
- * Props for `<MenuContent>` — the floating panel.
91
- *
92
- * Rendered through Radix `DropdownMenu.Portal`, lazily mounted only
93
- * when the menu is open (cost zero in DOM when closed).
94
- */
95
- export interface MenuContentProps {
96
- /** Items + labels + separators + skeletons. */
97
- children: ReactNode;
98
-
99
- /** CSS min-width for the menu panel. */
100
- minWidth?: number | string;
101
-
102
- /** Standard className — appended to the root via `cn()`. */
103
- className?: string;
104
-
105
- /** Root-element class shortcut. */
106
- sx?: ClassValue;
107
- }
108
-
109
- /**
110
- * Visual / semantic color of a `<MenuItem>`. `'danger'` highlights
111
- * destructive actions with a red hover state.
112
- */
113
- export type MenuItemColor = 'default' | 'danger';
114
-
115
- /**
116
- * Props for `<MenuItem>` — a clickable row inside the menu.
117
- *
118
- * Memoized (`React.memo`) for perf — re-renders only on prop change.
119
- * Pattern inspired by Atlaskit's ButtonItem optimization.
120
- */
121
- export interface MenuItemProps {
122
- /** Item label / content. */
123
- children: ReactNode;
124
-
125
- /**
126
- * Click handler. After firing, the menu closes (unless the parent
127
- * `<Menu closeOnItemClick={false}>` opts out).
128
- */
129
- onClick?: () => void;
130
-
131
- /** Leading icon slot. */
132
- icon?: ReactNode;
133
-
134
- /**
135
- * Trailing slot — typically a keyboard shortcut (`"⌘K"`), a
136
- * status hint, or a sub-menu chevron (when sub-menus arrive).
137
- */
138
- endIcon?: ReactNode;
139
-
140
- /** Disabled state — suppresses click + dims the item. */
141
- disabled?: boolean;
142
-
143
- /**
144
- * Visual hint of "active option" — for menus that show current
145
- * selection (e.g., theme picker). No controlled selection state
146
- * by design (v1) — purely visual.
147
- */
148
- selected?: boolean;
149
-
150
- /**
151
- * Color intent. `'danger'` highlights destructive actions
152
- * (Delete, Remove, Sign out) with a red hover tint.
153
- * @default 'default'
154
- */
155
- color?: MenuItemColor;
156
-
157
- /**
158
- * RBAC requirement. When the current subject doesn't satisfy it,
159
- * the item is hidden (or disabled per `onUnauthorized`).
160
- */
161
- access?: AccessRequirement;
162
-
163
- /**
164
- * Reactive visibility predicate. When `false`, the item renders
165
- * `null`. Use for state-driven menu items (e.g., "Restore" only
166
- * when an item was just deleted).
167
- */
168
- visibleWhen?: (engine: Engine) => boolean;
169
-
170
- /** Standard className. */
171
- className?: string;
172
-
173
- /** Root-element class shortcut. */
174
- sx?: ClassValue;
175
- }
176
-
177
- /**
178
- * Props for `<MenuLabel>` — non-interactive group heading.
179
- *
180
- * Rendered as `role="presentation"` so screen readers don't
181
- * announce it as a menuitem. Typical use: section dividers inside
182
- * a menu ("Workspace", "Account", "Help").
183
- */
184
- export interface MenuLabelProps {
185
- children: ReactNode;
186
- className?: string;
187
- }
188
-
189
- /**
190
- * Props for `<MenuSeparator>` — horizontal divider between items.
191
- */
192
- export interface MenuSeparatorProps {
193
- className?: string;
194
- }
195
-
196
- /**
197
- * Props for `<MenuSkeleton>` — Atlaskit-style loading state.
198
- *
199
- * Renders N placeholder rows that mimic the menu's item geometry,
200
- * giving the user immediate visual feedback while the real items
201
- * are being fetched (e.g., "Recent files" pulled from an API).
202
- * Strictly perceived-performance UX: no animation overhead beyond
203
- * Tailwind's `animate-pulse`.
204
- */
205
- export interface MenuSkeletonProps {
206
- /**
207
- * Number of skeleton item rows to render.
208
- * @default 3
209
- */
210
- count?: number;
211
-
212
- /**
213
- * Show a skeleton heading at the top of the list (matches the
214
- * height + indent of a real `<MenuLabel>`).
215
- * @default false
216
- */
217
- withHeading?: boolean;
218
-
219
- /** Standard className. */
220
- className?: string;
221
- }
@@ -1,132 +0,0 @@
1
- import { tv, type VariantProps } from 'tailwind-variants';
2
- import type { MenuPlacement } from './menu.types.js';
3
-
4
- /**
5
- * Tailwind-variants recipe for the Menu family.
6
- *
7
- * The whole menu family is styled here in one TV instance so the
8
- * compound rules (item color × selected × danger, etc.) live in
9
- * one source of truth.
10
- *
11
- * Slots:
12
- * - `content` — floating panel (DropdownMenu.Content)
13
- * - `item` — clickable row (DropdownMenu.Item)
14
- * - `itemIcon` — leading icon container
15
- * - `itemLabel` — text content slot
16
- * - `itemEnd` — trailing slot (shortcut hint, chevron, …)
17
- * - `label` — non-interactive heading (DropdownMenu.Label)
18
- * - `separator` — divider (DropdownMenu.Separator)
19
- * - `skeleton` — placeholder item (visual only, no Radix slot)
20
- */
21
- export const menuVariants = tv({
22
- slots: {
23
- content: [
24
- 'z-50 min-w-[180px] py-1.5',
25
- // Surface elevation: `bg-white` is hardcoded (does NOT
26
- // auto-invert via the dashforgePreset CSS-var swap), so we
27
- // pair it with `dark:bg-neutral-100` (target #171717 — one
28
- // elevation tier above page surface in dark mode). This is
29
- // Category B of THEME-AUDIT.md — must stay on the same
30
- // string literal so the whitelist regex matches.
31
- 'rounded-md border border-neutral-200 bg-white dark:bg-neutral-100 shadow-lg',
32
- // Smooth fade-in via Radix's data-state attributes. Motion-
33
- // reduce gated.
34
- 'data-[state=open]:animate-in data-[state=closed]:animate-out',
35
- 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
36
- 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',
37
- 'motion-reduce:animate-none motion-reduce:transition-none',
38
- // List reset (defensive — same defensive pattern as
39
- // Autocomplete listbox after the listbox-bullets fix in 1.0.1).
40
- 'list-none pl-0 m-0',
41
- ],
42
- item: [
43
- 'group relative flex cursor-pointer select-none items-center gap-2',
44
- 'px-3 py-1.5 mx-1 my-0.5',
45
- 'rounded-md text-sm text-neutral-900',
46
- 'outline-none',
47
- // Radix sets data-highlighted when the item is keyboard-focused
48
- // OR hovered. We anchor the active visual state to that single
49
- // attribute so keyboard + mouse interactions look identical.
50
- 'data-[highlighted]:bg-neutral-100',
51
- // Disabled (Radix sets data-disabled).
52
- 'data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed data-[disabled]:pointer-events-none',
53
- 'transition-colors duration-100',
54
- 'motion-reduce:transition-none',
55
- ],
56
- itemIcon: 'shrink-0 inline-flex items-center justify-center w-4 h-4',
57
- itemLabel: 'flex-1 truncate',
58
- itemEnd: 'shrink-0 ml-3 inline-flex items-center text-xs text-neutral-500',
59
- label: [
60
- 'px-3 py-1 mx-1 mt-1 text-xs font-medium uppercase tracking-wide',
61
- 'text-neutral-500',
62
- ],
63
- separator: 'h-px my-1 mx-1 bg-neutral-200',
64
- skeleton: [
65
- 'flex items-center gap-2 px-3 py-1.5 mx-1 my-0.5',
66
- 'animate-pulse motion-reduce:animate-none',
67
- ],
68
- },
69
- variants: {
70
- /**
71
- * Item color intent. `'danger'` highlights destructive actions
72
- * (Delete, Sign out) with red bg on hover. Both bg and text
73
- * shift to the danger palette when the item is highlighted.
74
- */
75
- color: {
76
- default: {},
77
- danger: {
78
- item: [
79
- 'text-danger-700',
80
- // Hover + keyboard focus → red soft bg + saturated text.
81
- 'data-[highlighted]:bg-danger-50 data-[highlighted]:text-danger-800',
82
- // Dark mode: bg-danger-50 doesn't auto-invert (color
83
- // palettes don't), so we add the explicit dark variant.
84
- // The `text-danger-700` base also gets a dark counterpart
85
- // for readability on the dark surface.
86
- 'dark:text-danger-300',
87
- 'dark:data-[highlighted]:bg-danger-950 dark:data-[highlighted]:text-danger-200',
88
- ],
89
- itemIcon: 'text-danger-600 dark:text-danger-400',
90
- },
91
- },
92
- /**
93
- * Visual `selected` hint — adds a faint primary bg + the
94
- * leading edge gets a primary accent. Pure visual; v1 has no
95
- * controlled selection state machine.
96
- */
97
- selected: {
98
- true: {
99
- item: [
100
- 'bg-primary-50 text-primary-900',
101
- 'dark:bg-primary-950 dark:text-primary-100',
102
- ],
103
- itemIcon: 'text-primary-600 dark:text-primary-400',
104
- },
105
- },
106
- },
107
- defaultVariants: {
108
- color: 'default',
109
- },
110
- });
111
-
112
- export type MenuVariants = VariantProps<typeof menuVariants>;
113
-
114
- /**
115
- * Resolve a `MenuPlacement` enum to Radix `side` + `align` props.
116
- * Single source of truth so Menu.tsx doesn't need a switch statement.
117
- */
118
- export function placementToRadix(placement: MenuPlacement): {
119
- side: 'top' | 'right' | 'bottom' | 'left';
120
- align: 'start' | 'center' | 'end';
121
- } {
122
- // The format is `<side>` or `<side>-<align>`. Center is the default
123
- // when no `-start` / `-end` suffix is present.
124
- const [side, alignSuffix] = placement.split('-') as [
125
- 'top' | 'right' | 'bottom' | 'left',
126
- 'start' | 'end' | undefined,
127
- ];
128
- return {
129
- side,
130
- align: alignSuffix ?? 'center',
131
- };
132
- }