@vjdesigns/vjdesigns-ui 2.4.0 → 3.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 (453) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +45 -1
  3. package/dist/ai/llms-full.txt +141 -76
  4. package/dist/ai/registry.json +125 -61
  5. package/dist/components/data-display/Accordion/Accordion.cjs.js +1 -1
  6. package/dist/components/data-display/Accordion/Accordion.mjs +22 -22
  7. package/dist/components/data-display/Accordion/Accordion.module.css.mjs +1 -2
  8. package/dist/components/data-display/Avatar/Avatar.cjs.js +1 -1
  9. package/dist/components/data-display/Avatar/Avatar.mjs +92 -92
  10. package/dist/components/data-display/Avatar/Avatar.module.css.mjs +1 -2
  11. package/dist/components/data-display/Badge/Badge.cjs.js +1 -1
  12. package/dist/components/data-display/Badge/Badge.mjs +2 -2
  13. package/dist/components/data-display/Badge/Badge.module.css.mjs +1 -2
  14. package/dist/components/data-display/Card/Card.cjs.js +1 -1
  15. package/dist/components/data-display/Card/Card.mjs +2 -2
  16. package/dist/components/data-display/Card/Card.module.css.mjs +1 -2
  17. package/dist/components/data-display/Carousel/Carousel.cjs.js +1 -1
  18. package/dist/components/data-display/Carousel/Carousel.mjs +42 -42
  19. package/dist/components/data-display/Carousel/Carousel.module.css.mjs +1 -2
  20. package/dist/components/data-display/Chat/Chat.cjs.js +1 -1
  21. package/dist/components/data-display/Chat/Chat.mjs +114 -118
  22. package/dist/components/data-display/Chat/Chat.module.css.mjs +1 -2
  23. package/dist/components/data-display/Chat/streams.mjs +1 -2
  24. package/dist/components/data-display/Chip/Chip.cjs.js +1 -1
  25. package/dist/components/data-display/Chip/Chip.mjs +50 -54
  26. package/dist/components/data-display/Chip/Chip.module.css.mjs +1 -2
  27. package/dist/components/data-display/CodeBlock/CodeBlock.cjs.js +4 -4
  28. package/dist/components/data-display/CodeBlock/CodeBlock.mjs +113 -113
  29. package/dist/components/data-display/CodeBlock/CodeBlock.module.css.mjs +1 -2
  30. package/dist/components/data-display/CodeBlock/tokenize.mjs +1 -2
  31. package/dist/components/data-display/DataGrid/DataGrid.cjs.js +1 -1
  32. package/dist/components/data-display/DataGrid/DataGrid.d.ts +59 -3
  33. package/dist/components/data-display/DataGrid/DataGrid.mjs +382 -272
  34. package/dist/components/data-display/DataGrid/DataGrid.module.css.cjs.js +1 -1
  35. package/dist/components/data-display/DataGrid/DataGrid.module.css.mjs +29 -26
  36. package/dist/components/data-display/DataGrid/dataGridUtils.cjs.js +1 -1
  37. package/dist/components/data-display/DataGrid/dataGridUtils.d.ts +18 -0
  38. package/dist/components/data-display/DataGrid/dataGridUtils.mjs +100 -32
  39. package/dist/components/data-display/EmptyState/EmptyState.cjs.js +1 -1
  40. package/dist/components/data-display/EmptyState/EmptyState.mjs +53 -53
  41. package/dist/components/data-display/EmptyState/EmptyState.module.css.mjs +1 -2
  42. package/dist/components/data-display/Image/Image.cjs.js +1 -1
  43. package/dist/components/data-display/Image/Image.mjs +6 -6
  44. package/dist/components/data-display/Image/Image.module.css.mjs +1 -2
  45. package/dist/components/data-display/List/List.cjs.js +1 -1
  46. package/dist/components/data-display/List/List.mjs +68 -68
  47. package/dist/components/data-display/List/List.module.css.mjs +1 -2
  48. package/dist/components/data-display/Stat/Stat.cjs.js +1 -1
  49. package/dist/components/data-display/Stat/Stat.mjs +112 -112
  50. package/dist/components/data-display/Stat/Stat.module.css.mjs +1 -2
  51. package/dist/components/data-display/Table/Table.cjs.js +1 -1
  52. package/dist/components/data-display/Table/Table.mjs +187 -183
  53. package/dist/components/data-display/Table/Table.module.css.mjs +1 -2
  54. package/dist/components/data-display/Table/useTable.cjs.js +1 -1
  55. package/dist/components/data-display/Table/useTable.mjs +2 -2
  56. package/dist/components/data-display/Timeline/Timeline.cjs.js +1 -1
  57. package/dist/components/data-display/Timeline/Timeline.mjs +64 -64
  58. package/dist/components/data-display/Timeline/Timeline.module.css.mjs +1 -2
  59. package/dist/components/data-display/TreeView/TreeView.cjs.js +1 -1
  60. package/dist/components/data-display/TreeView/TreeView.mjs +107 -119
  61. package/dist/components/data-display/TreeView/TreeView.module.css.mjs +1 -2
  62. package/dist/components/data-display/TreeView/treeUtils.mjs +1 -2
  63. package/dist/components/data-display/VirtualList/VirtualList.cjs.js +1 -1
  64. package/dist/components/data-display/VirtualList/VirtualList.mjs +2 -2
  65. package/dist/components/data-display/VirtualList/VirtualList.module.css.mjs +1 -2
  66. package/dist/components/feedback/Alert/Alert.cjs.js +1 -1
  67. package/dist/components/feedback/Alert/Alert.mjs +56 -56
  68. package/dist/components/feedback/Alert/Alert.module.css.mjs +1 -2
  69. package/dist/components/feedback/Banner/Banner.cjs.js +1 -1
  70. package/dist/components/feedback/Banner/Banner.mjs +48 -48
  71. package/dist/components/feedback/Banner/Banner.module.css.mjs +1 -2
  72. package/dist/components/feedback/ErrorSummary/ErrorSummary.cjs.js +1 -1
  73. package/dist/components/feedback/ErrorSummary/ErrorSummary.mjs +10 -10
  74. package/dist/components/feedback/ErrorSummary/ErrorSummary.module.css.mjs +1 -2
  75. package/dist/components/feedback/Progress/Progress.cjs.js +1 -1
  76. package/dist/components/feedback/Progress/Progress.mjs +2 -2
  77. package/dist/components/feedback/Progress/Progress.module.css.mjs +1 -2
  78. package/dist/components/feedback/Skeleton/Skeleton.cjs.js +1 -1
  79. package/dist/components/feedback/Skeleton/Skeleton.mjs +73 -73
  80. package/dist/components/feedback/Skeleton/Skeleton.module.css.mjs +1 -2
  81. package/dist/components/feedback/Spinner/Spinner.cjs.js +1 -1
  82. package/dist/components/feedback/Spinner/Spinner.mjs +29 -29
  83. package/dist/components/feedback/Spinner/Spinner.module.css.mjs +1 -2
  84. package/dist/components/feedback/Toast/Toast.cjs.js +1 -1
  85. package/dist/components/feedback/Toast/Toast.mjs +42 -42
  86. package/dist/components/feedback/Toast/Toast.module.css.mjs +1 -2
  87. package/dist/components/feedback/Toast/ToastItem.cjs.js +1 -1
  88. package/dist/components/feedback/Toast/ToastItem.mjs +10 -10
  89. package/dist/components/feedback/Toast/ToastProvider.cjs.js +1 -1
  90. package/dist/components/feedback/Toast/ToastProvider.mjs +11 -11
  91. package/dist/components/feedback/Toast/ToastViewport.cjs.js +1 -1
  92. package/dist/components/feedback/Toast/ToastViewport.mjs +30 -30
  93. package/dist/components/feedback/Toast/toastStore.mjs +1 -2
  94. package/dist/components/feedback/Toast/toastTiming.cjs.js +1 -1
  95. package/dist/components/feedback/Toast/toastTiming.mjs +2 -2
  96. package/dist/components/feedback/Toast/useToast.cjs.js +1 -1
  97. package/dist/components/feedback/Toast/useToast.mjs +2 -2
  98. package/dist/components/feedback/Toast/useToastAnnouncer.cjs.js +1 -1
  99. package/dist/components/feedback/Toast/useToastAnnouncer.mjs +2 -2
  100. package/dist/components/forms/CheckBox/CheckBox.cjs.js +1 -1
  101. package/dist/components/forms/CheckBox/CheckBox.mjs +2 -2
  102. package/dist/components/forms/CheckBox/CheckBox.module.css.mjs +1 -2
  103. package/dist/components/forms/ColorPicker/ColorInput.cjs.js +1 -1
  104. package/dist/components/forms/ColorPicker/ColorInput.mjs +43 -43
  105. package/dist/components/forms/ColorPicker/ColorPicker.cjs.js +1 -1
  106. package/dist/components/forms/ColorPicker/ColorPicker.mjs +153 -153
  107. package/dist/components/forms/ColorPicker/ColorPicker.module.css.mjs +1 -2
  108. package/dist/components/forms/ColorPicker/colorUtils.mjs +1 -2
  109. package/dist/components/forms/Combobox/Combobox.cjs.js +1 -1
  110. package/dist/components/forms/Combobox/Combobox.mjs +200 -213
  111. package/dist/components/forms/Combobox/Combobox.module.css.mjs +1 -2
  112. package/dist/components/forms/Combobox/ComboboxPopup.cjs.js +1 -1
  113. package/dist/components/forms/Combobox/ComboboxPopup.mjs +164 -121
  114. package/dist/components/forms/Combobox/comboboxUtils.cjs.js +1 -1
  115. package/dist/components/forms/Combobox/comboboxUtils.d.ts +4 -1
  116. package/dist/components/forms/Combobox/comboboxUtils.mjs +21 -20
  117. package/dist/components/forms/DatePicker/Calendar.cjs.js +1 -1
  118. package/dist/components/forms/DatePicker/Calendar.mjs +60 -66
  119. package/dist/components/forms/DatePicker/Calendar.module.css.mjs +1 -2
  120. package/dist/components/forms/DatePicker/DatePicker.cjs.js +1 -1
  121. package/dist/components/forms/DatePicker/DatePicker.mjs +72 -74
  122. package/dist/components/forms/DatePicker/DatePicker.module.css.mjs +1 -2
  123. package/dist/components/forms/DatePicker/DateRangePicker.cjs.js +1 -1
  124. package/dist/components/forms/DatePicker/DateRangePicker.mjs +117 -117
  125. package/dist/components/forms/DatePicker/DateRangePicker.module.css.mjs +1 -2
  126. package/dist/components/forms/DatePicker/dateUtils.mjs +1 -2
  127. package/dist/components/forms/DatePicker/index.d.ts +1 -1
  128. package/dist/components/forms/DateTimePicker/DateTimePicker.cjs.js +1 -1
  129. package/dist/components/forms/DateTimePicker/DateTimePicker.mjs +19 -19
  130. package/dist/components/forms/DateTimePicker/DateTimePicker.module.css.mjs +1 -2
  131. package/dist/components/forms/Field/Field.cjs.js +1 -1
  132. package/dist/components/forms/Field/Field.mjs +14 -14
  133. package/dist/components/forms/Field/Field.module.css.mjs +1 -2
  134. package/dist/components/forms/Field/FieldContext.cjs.js +1 -1
  135. package/dist/components/forms/Field/FieldContext.mjs +2 -2
  136. package/dist/components/forms/FileUpload/FileUpload.cjs.js +1 -1
  137. package/dist/components/forms/FileUpload/FileUpload.mjs +250 -255
  138. package/dist/components/forms/FileUpload/FileUpload.module.css.mjs +1 -2
  139. package/dist/components/forms/Input/Input.cjs.js +1 -1
  140. package/dist/components/forms/Input/Input.mjs +35 -35
  141. package/dist/components/forms/Input/Input.module.css.mjs +1 -2
  142. package/dist/components/forms/NumberInput/NumberInput.cjs.js +1 -1
  143. package/dist/components/forms/NumberInput/NumberInput.mjs +137 -142
  144. package/dist/components/forms/NumberInput/NumberInput.module.css.mjs +1 -2
  145. package/dist/components/forms/PasswordInput/PasswordInput.cjs.js +1 -1
  146. package/dist/components/forms/PasswordInput/PasswordInput.mjs +142 -142
  147. package/dist/components/forms/PasswordInput/PasswordInput.module.css.mjs +1 -2
  148. package/dist/components/forms/PinInput/PinInput.cjs.js +1 -1
  149. package/dist/components/forms/PinInput/PinInput.mjs +12 -12
  150. package/dist/components/forms/PinInput/PinInput.module.css.mjs +1 -2
  151. package/dist/components/forms/Radio/Radio.cjs.js +1 -1
  152. package/dist/components/forms/Radio/Radio.mjs +2 -2
  153. package/dist/components/forms/Radio/Radio.module.css.mjs +1 -2
  154. package/dist/components/forms/Rating/Rating.cjs.js +1 -1
  155. package/dist/components/forms/Rating/Rating.mjs +110 -109
  156. package/dist/components/forms/Rating/Rating.module.css.mjs +1 -2
  157. package/dist/components/forms/SearchInput/SearchInput.cjs.js +1 -1
  158. package/dist/components/forms/SearchInput/SearchInput.mjs +118 -126
  159. package/dist/components/forms/SearchInput/SearchInput.module.css.mjs +1 -2
  160. package/dist/components/forms/SegmentedControl/SegmentedControl.cjs.js +1 -1
  161. package/dist/components/forms/SegmentedControl/SegmentedControl.mjs +46 -43
  162. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.cjs.js +1 -1
  163. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.mjs +2 -3
  164. package/dist/components/forms/Select/Select.cjs.js +1 -1
  165. package/dist/components/forms/Select/Select.mjs +2 -2
  166. package/dist/components/forms/Select/Select.module.css.mjs +1 -2
  167. package/dist/components/forms/Slider/Slider.cjs.js +1 -1
  168. package/dist/components/forms/Slider/Slider.mjs +2 -2
  169. package/dist/components/forms/Slider/Slider.module.css.mjs +1 -2
  170. package/dist/components/forms/Switch/Switch.cjs.js +1 -1
  171. package/dist/components/forms/Switch/Switch.mjs +39 -39
  172. package/dist/components/forms/Switch/Switch.module.css.mjs +1 -2
  173. package/dist/components/forms/TagInput/TagInput.cjs.js +1 -1
  174. package/dist/components/forms/TagInput/TagInput.mjs +197 -203
  175. package/dist/components/forms/TagInput/TagInput.module.css.mjs +1 -2
  176. package/dist/components/forms/Textarea/Textarea.cjs.js +1 -1
  177. package/dist/components/forms/Textarea/Textarea.mjs +59 -59
  178. package/dist/components/forms/Textarea/Textarea.module.css.mjs +1 -2
  179. package/dist/components/forms/TimePicker/TimePicker.cjs.js +1 -1
  180. package/dist/components/forms/TimePicker/TimePicker.mjs +65 -67
  181. package/dist/components/forms/TimePicker/TimePicker.module.css.mjs +1 -2
  182. package/dist/components/forms/TimePicker/index.d.ts +1 -0
  183. package/dist/components/forms/TimePicker/timeUtils.cjs.js +1 -1
  184. package/dist/components/forms/TimePicker/timeUtils.d.ts +4 -1
  185. package/dist/components/forms/TimePicker/timeUtils.mjs +43 -38
  186. package/dist/components/forms/ToggleGroup/ToggleGroup.cjs.js +1 -1
  187. package/dist/components/forms/ToggleGroup/ToggleGroup.mjs +10 -10
  188. package/dist/components/forms/ToggleGroup/ToggleGroup.module.css.mjs +1 -2
  189. package/dist/components/layout/Box/Box.mjs +1 -2
  190. package/dist/components/layout/Box/Box.module.css.mjs +1 -2
  191. package/dist/components/layout/Container/Container.mjs +1 -2
  192. package/dist/components/layout/Container/Container.module.css.mjs +1 -2
  193. package/dist/components/layout/Divider/Divider.mjs +1 -2
  194. package/dist/components/layout/Divider/Divider.module.css.mjs +1 -2
  195. package/dist/components/layout/Flex/Flex.cjs.js +1 -1
  196. package/dist/components/layout/Flex/Flex.mjs +12 -13
  197. package/dist/components/layout/Flex/Flex.module.css.mjs +1 -2
  198. package/dist/components/layout/Grid/Grid.cjs.js +1 -1
  199. package/dist/components/layout/Grid/Grid.mjs +20 -21
  200. package/dist/components/layout/Grid/Grid.module.css.mjs +1 -2
  201. package/dist/components/layout/ResizablePanels/ResizablePanels.cjs.js +1 -1
  202. package/dist/components/layout/ResizablePanels/ResizablePanels.mjs +17 -17
  203. package/dist/components/layout/ResizablePanels/ResizablePanels.module.css.mjs +1 -2
  204. package/dist/components/layout/ScrollArea/ScrollArea.cjs.js +1 -1
  205. package/dist/components/layout/ScrollArea/ScrollArea.mjs +2 -2
  206. package/dist/components/layout/ScrollArea/ScrollArea.module.css.mjs +1 -2
  207. package/dist/components/layout/Stack/Stack.cjs.js +1 -1
  208. package/dist/components/layout/Stack/Stack.mjs +8 -9
  209. package/dist/components/layout/Stack/Stack.module.css.mjs +1 -2
  210. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.cjs.js +1 -1
  211. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.mjs +41 -41
  212. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.module.css.mjs +1 -2
  213. package/dist/components/navigation/ContextMenu/ContextMenu.cjs.js +1 -1
  214. package/dist/components/navigation/ContextMenu/ContextMenu.mjs +48 -48
  215. package/dist/components/navigation/ContextMenu/ContextMenu.module.css.mjs +1 -2
  216. package/dist/components/navigation/Link/Link.cjs.js +1 -1
  217. package/dist/components/navigation/Link/Link.mjs +6 -7
  218. package/dist/components/navigation/Link/Link.module.css.mjs +1 -2
  219. package/dist/components/navigation/Menu/Menu.cjs.js +1 -1
  220. package/dist/components/navigation/Menu/Menu.mjs +11 -11
  221. package/dist/components/navigation/Menu/Menu.module.css.mjs +1 -2
  222. package/dist/components/navigation/Menu/MenuContent.cjs.js +1 -1
  223. package/dist/components/navigation/Menu/MenuContent.mjs +46 -46
  224. package/dist/components/navigation/Menu/MenuContext.cjs.js +1 -1
  225. package/dist/components/navigation/Menu/MenuContext.mjs +2 -2
  226. package/dist/components/navigation/Menu/MenuItem.cjs.js +1 -1
  227. package/dist/components/navigation/Menu/MenuItem.mjs +35 -39
  228. package/dist/components/navigation/Menu/MenuSub.cjs.js +1 -1
  229. package/dist/components/navigation/Menu/MenuSub.mjs +16 -20
  230. package/dist/components/navigation/Menu/useMenuRoot.cjs.js +1 -1
  231. package/dist/components/navigation/Menu/useMenuRoot.mjs +2 -2
  232. package/dist/components/navigation/Navbar/Navbar.cjs.js +1 -1
  233. package/dist/components/navigation/Navbar/Navbar.mjs +111 -111
  234. package/dist/components/navigation/Navbar/Navbar.module.css.mjs +1 -2
  235. package/dist/components/navigation/Pagination/Pagination.cjs.js +1 -1
  236. package/dist/components/navigation/Pagination/Pagination.mjs +31 -35
  237. package/dist/components/navigation/Pagination/Pagination.module.css.mjs +1 -2
  238. package/dist/components/navigation/Sidebar/Sidebar.cjs.js +1 -1
  239. package/dist/components/navigation/Sidebar/Sidebar.mjs +52 -52
  240. package/dist/components/navigation/Sidebar/Sidebar.module.css.mjs +1 -2
  241. package/dist/components/navigation/Sidebar/SidebarContext.cjs.js +1 -1
  242. package/dist/components/navigation/Sidebar/SidebarContext.mjs +2 -2
  243. package/dist/components/navigation/Sidebar/SidebarParts.cjs.js +1 -1
  244. package/dist/components/navigation/Sidebar/SidebarParts.mjs +76 -80
  245. package/dist/components/navigation/SkipLink/SkipLink.cjs.js +1 -1
  246. package/dist/components/navigation/SkipLink/SkipLink.mjs +12 -12
  247. package/dist/components/navigation/SkipLink/SkipLink.module.css.mjs +1 -2
  248. package/dist/components/navigation/Stepper/Stepper.cjs.js +1 -1
  249. package/dist/components/navigation/Stepper/Stepper.mjs +46 -46
  250. package/dist/components/navigation/Stepper/Stepper.module.css.mjs +1 -2
  251. package/dist/components/navigation/Tabs/Tabs.cjs.js +1 -1
  252. package/dist/components/navigation/Tabs/Tabs.mjs +2 -2
  253. package/dist/components/navigation/Tabs/Tabs.module.css.mjs +1 -2
  254. package/dist/components/overlays/CommandPalette/CommandPalette.cjs.js +1 -1
  255. package/dist/components/overlays/CommandPalette/CommandPalette.mjs +206 -206
  256. package/dist/components/overlays/CommandPalette/CommandPalette.module.css.mjs +1 -2
  257. package/dist/components/overlays/CommandPalette/CommandPaletteContext.cjs.js +1 -1
  258. package/dist/components/overlays/CommandPalette/CommandPaletteContext.mjs +2 -2
  259. package/dist/components/overlays/CommandPalette/CommandPaletteParts.cjs.js +1 -1
  260. package/dist/components/overlays/CommandPalette/CommandPaletteParts.mjs +104 -104
  261. package/dist/components/overlays/CommandPalette/commandPaletteUtils.cjs.js +1 -1
  262. package/dist/components/overlays/CommandPalette/commandPaletteUtils.mjs +62 -60
  263. package/dist/components/overlays/Drawer/Drawer.cjs.js +1 -1
  264. package/dist/components/overlays/Drawer/Drawer.mjs +31 -31
  265. package/dist/components/overlays/Drawer/Drawer.module.css.mjs +1 -2
  266. package/dist/components/overlays/Drawer/DrawerContent.cjs.js +1 -1
  267. package/dist/components/overlays/Drawer/DrawerContent.mjs +99 -99
  268. package/dist/components/overlays/Drawer/DrawerContext.cjs.js +1 -1
  269. package/dist/components/overlays/Drawer/DrawerContext.mjs +2 -2
  270. package/dist/components/overlays/Drawer/DrawerParts.cjs.js +1 -1
  271. package/dist/components/overlays/Drawer/DrawerParts.mjs +18 -18
  272. package/dist/components/overlays/Drawer/internal.mjs +1 -2
  273. package/dist/components/overlays/Drawer/useDragToClose.cjs.js +1 -1
  274. package/dist/components/overlays/Drawer/useDragToClose.mjs +2 -2
  275. package/dist/components/overlays/HoverCard/HoverCard.cjs.js +1 -1
  276. package/dist/components/overlays/HoverCard/HoverCard.mjs +31 -31
  277. package/dist/components/overlays/HoverCard/HoverCard.module.css.mjs +1 -2
  278. package/dist/components/overlays/Modal/ConfirmModal.cjs.js +1 -1
  279. package/dist/components/overlays/Modal/ConfirmModal.mjs +21 -23
  280. package/dist/components/overlays/Modal/Modal.cjs.js +1 -1
  281. package/dist/components/overlays/Modal/Modal.mjs +47 -47
  282. package/dist/components/overlays/Modal/Modal.module.css.mjs +1 -2
  283. package/dist/components/overlays/Modal/ModalContent.cjs.js +1 -1
  284. package/dist/components/overlays/Modal/ModalContent.mjs +24 -24
  285. package/dist/components/overlays/Modal/ModalContext.cjs.js +1 -1
  286. package/dist/components/overlays/Modal/ModalContext.mjs +2 -2
  287. package/dist/components/overlays/Modal/useScrollRegion.cjs.js +1 -1
  288. package/dist/components/overlays/Modal/useScrollRegion.mjs +2 -2
  289. package/dist/components/overlays/Popover/Popover.cjs.js +1 -1
  290. package/dist/components/overlays/Popover/Popover.mjs +40 -40
  291. package/dist/components/overlays/Popover/Popover.module.css.mjs +1 -2
  292. package/dist/components/overlays/Popover/PopoverContent.cjs.js +1 -1
  293. package/dist/components/overlays/Popover/PopoverContent.mjs +39 -39
  294. package/dist/components/overlays/Popover/PopoverContext.cjs.js +1 -1
  295. package/dist/components/overlays/Popover/PopoverContext.mjs +2 -2
  296. package/dist/components/overlays/Tooltip/Tooltip.cjs.js +1 -1
  297. package/dist/components/overlays/Tooltip/Tooltip.mjs +100 -95
  298. package/dist/components/overlays/Tooltip/Tooltip.module.css.mjs +1 -2
  299. package/dist/components/primitives/Button/Button.cjs.js +1 -1
  300. package/dist/components/primitives/Button/Button.mjs +59 -63
  301. package/dist/components/primitives/Button/Button.module.css.mjs +1 -2
  302. package/dist/components/primitives/Icon/Icon.cjs.js +1 -1
  303. package/dist/components/primitives/Icon/Icon.mjs +5 -6
  304. package/dist/components/primitives/Icon/Icon.module.css.mjs +1 -2
  305. package/dist/components/primitives/Icon/IconSvg.mjs +1 -2
  306. package/dist/components/primitives/Icon/icons.mjs +1 -2
  307. package/dist/components/primitives/Kbd/Kbd.cjs.js +1 -1
  308. package/dist/components/primitives/Kbd/Kbd.mjs +30 -30
  309. package/dist/components/primitives/Kbd/Kbd.module.css.mjs +1 -2
  310. package/dist/components/primitives/Typography/Typography.mjs +1 -2
  311. package/dist/components/primitives/Typography/Typography.module.css.mjs +1 -2
  312. package/dist/components/utilities/LocaleProvider/LocaleProvider.cjs.js +1 -1
  313. package/dist/components/utilities/LocaleProvider/LocaleProvider.mjs +11 -11
  314. package/dist/components/utilities/LocaleProvider/LocaleProvider.module.css.mjs +1 -2
  315. package/dist/components/utilities/Portal/Portal.cjs.js +1 -1
  316. package/dist/components/utilities/Portal/Portal.mjs +2 -2
  317. package/dist/components/utilities/Theme/Theme.cjs.js +1 -1
  318. package/dist/components/utilities/Theme/Theme.mjs +13 -13
  319. package/dist/components/utilities/Theme/Theme.module.css.mjs +1 -2
  320. package/dist/components/utilities/VisuallyHidden/VisuallyHidden.mjs +1 -2
  321. package/dist/components/utilities/VisuallyHidden/VisuallyHidden.module.css.mjs +1 -2
  322. package/dist/hooks/elementSource.cjs.js +1 -1
  323. package/dist/hooks/elementSource.mjs +4 -3
  324. package/dist/hooks/useClipboard.cjs.js +1 -1
  325. package/dist/hooks/useClipboard.mjs +2 -2
  326. package/dist/hooks/useControllableState.cjs.js +1 -1
  327. package/dist/hooks/useControllableState.mjs +2 -2
  328. package/dist/hooks/useDisclosure.cjs.js +1 -1
  329. package/dist/hooks/useDisclosure.mjs +2 -2
  330. package/dist/hooks/useDismiss.cjs.js +1 -1
  331. package/dist/hooks/useDismiss.mjs +2 -2
  332. package/dist/hooks/useElementObservers.cjs.js +1 -1
  333. package/dist/hooks/useElementObservers.mjs +2 -2
  334. package/dist/hooks/useEnvironment.cjs.js +1 -1
  335. package/dist/hooks/useEnvironment.mjs +2 -2
  336. package/dist/hooks/useFloatingPosition.cjs.js +1 -1
  337. package/dist/hooks/useFloatingPosition.mjs +2 -2
  338. package/dist/hooks/useFocusTrap.cjs.js +1 -1
  339. package/dist/hooks/useFocusTrap.mjs +4 -15
  340. package/dist/hooks/useFormReset.cjs.js +1 -1
  341. package/dist/hooks/useFormReset.mjs +2 -2
  342. package/dist/hooks/useFormValidation.cjs.js +1 -1
  343. package/dist/hooks/useFormValidation.mjs +2 -2
  344. package/dist/hooks/useHotkeys.cjs.js +1 -1
  345. package/dist/hooks/useHotkeys.mjs +2 -2
  346. package/dist/hooks/useInertOutside.cjs.js +1 -1
  347. package/dist/hooks/useInertOutside.mjs +5 -9
  348. package/dist/hooks/useMediaQuery.cjs.js +1 -1
  349. package/dist/hooks/useMediaQuery.mjs +2 -2
  350. package/dist/hooks/useMergedRef.cjs.js +1 -1
  351. package/dist/hooks/useMergedRef.mjs +2 -2
  352. package/dist/hooks/useOverlayLayer.cjs.js +1 -1
  353. package/dist/hooks/useOverlayLayer.mjs +3 -3
  354. package/dist/hooks/useResponsiveValue.cjs.js +1 -1
  355. package/dist/hooks/useResponsiveValue.mjs +2 -2
  356. package/dist/hooks/useScrollLock.cjs.js +1 -1
  357. package/dist/hooks/useScrollLock.mjs +2 -2
  358. package/dist/hooks/useStorage.cjs.js +1 -1
  359. package/dist/hooks/useStorage.mjs +2 -2
  360. package/dist/hooks/useTiming.cjs.js +1 -1
  361. package/dist/hooks/useTiming.mjs +10 -15
  362. package/dist/hooks/useVirtualizer.cjs.js +1 -1
  363. package/dist/hooks/useVirtualizer.d.ts +13 -0
  364. package/dist/hooks/useVirtualizer.mjs +93 -54
  365. package/dist/i18n/en.cjs.js +1 -1
  366. package/dist/i18n/en.mjs +194 -4
  367. package/dist/i18n/merge.mjs +1 -2
  368. package/dist/i18n/plural.mjs +1 -2
  369. package/dist/i18n/types.d.ts +240 -0
  370. package/dist/index.cjs.js +1 -1
  371. package/dist/index.mjs +114 -114
  372. package/dist/locales/ar.cjs.js +1 -1
  373. package/dist/locales/ar.mjs +230 -4
  374. package/dist/locales/bn.cjs.js +1 -1
  375. package/dist/locales/bn.mjs +167 -4
  376. package/dist/locales/cs.cjs.js +1 -1
  377. package/dist/locales/cs.mjs +212 -4
  378. package/dist/locales/da.cjs.js +1 -1
  379. package/dist/locales/da.mjs +194 -4
  380. package/dist/locales/de.cjs.js +1 -1
  381. package/dist/locales/de.mjs +194 -4
  382. package/dist/locales/el.cjs.js +1 -1
  383. package/dist/locales/el.mjs +194 -4
  384. package/dist/locales/es.cjs.js +1 -1
  385. package/dist/locales/es.mjs +194 -4
  386. package/dist/locales/fa.cjs.js +1 -1
  387. package/dist/locales/fa.mjs +167 -4
  388. package/dist/locales/fi.cjs.js +1 -1
  389. package/dist/locales/fi.mjs +194 -4
  390. package/dist/locales/fr.cjs.js +1 -1
  391. package/dist/locales/fr.mjs +194 -4
  392. package/dist/locales/he.cjs.js +1 -1
  393. package/dist/locales/he.mjs +203 -4
  394. package/dist/locales/hi.cjs.js +1 -1
  395. package/dist/locales/hi.mjs +194 -4
  396. package/dist/locales/hu.cjs.js +1 -1
  397. package/dist/locales/hu.mjs +167 -4
  398. package/dist/locales/id.cjs.js +1 -1
  399. package/dist/locales/id.mjs +167 -4
  400. package/dist/locales/it.cjs.js +1 -1
  401. package/dist/locales/it.mjs +194 -4
  402. package/dist/locales/ja.cjs.js +1 -1
  403. package/dist/locales/ja.mjs +167 -4
  404. package/dist/locales/ko.cjs.js +1 -1
  405. package/dist/locales/ko.mjs +167 -4
  406. package/dist/locales/nb.cjs.js +1 -1
  407. package/dist/locales/nb.mjs +194 -4
  408. package/dist/locales/nl.cjs.js +1 -1
  409. package/dist/locales/nl.mjs +194 -4
  410. package/dist/locales/pl.cjs.js +1 -1
  411. package/dist/locales/pl.mjs +212 -4
  412. package/dist/locales/pt-BR.cjs.js +1 -1
  413. package/dist/locales/pt-BR.mjs +194 -4
  414. package/dist/locales/ro.cjs.js +1 -1
  415. package/dist/locales/ro.mjs +203 -4
  416. package/dist/locales/ru.cjs.js +1 -1
  417. package/dist/locales/ru.mjs +212 -4
  418. package/dist/locales/sv.cjs.js +1 -1
  419. package/dist/locales/sv.mjs +194 -4
  420. package/dist/locales/th.cjs.js +1 -1
  421. package/dist/locales/th.mjs +167 -4
  422. package/dist/locales/tr.cjs.js +1 -1
  423. package/dist/locales/tr.mjs +167 -4
  424. package/dist/locales/uk.cjs.js +1 -1
  425. package/dist/locales/uk.mjs +212 -4
  426. package/dist/locales/ur.cjs.js +1 -1
  427. package/dist/locales/ur.mjs +194 -4
  428. package/dist/locales/vi.cjs.js +1 -1
  429. package/dist/locales/vi.mjs +167 -4
  430. package/dist/locales/zh-Hans.cjs.js +1 -1
  431. package/dist/locales/zh-Hans.mjs +167 -4
  432. package/dist/locales/zh-Hant.cjs.js +1 -1
  433. package/dist/locales/zh-Hant.mjs +167 -4
  434. package/dist/types/common.mjs +1 -2
  435. package/dist/utils/announce.cjs.js +1 -1
  436. package/dist/utils/announce.mjs +3 -4
  437. package/dist/utils/brandPalette.mjs +1 -2
  438. package/dist/utils/clipboard.mjs +1 -2
  439. package/dist/utils/cx.mjs +1 -2
  440. package/dist/utils/fillSlot.cjs.js +1 -1
  441. package/dist/utils/fillSlot.mjs +2 -2
  442. package/dist/utils/flattenChildren.mjs +1 -2
  443. package/dist/utils/hotkeys.mjs +1 -2
  444. package/dist/utils/intl.cjs.js +1 -0
  445. package/dist/utils/intl.d.ts +10 -0
  446. package/dist/utils/intl.mjs +15 -0
  447. package/dist/utils/refs.mjs +1 -2
  448. package/dist/utils/responsive.mjs +1 -2
  449. package/dist/utils/slot.mjs +1 -2
  450. package/dist/utils/validators.mjs +1 -2
  451. package/dist/vjdesigns-ui.css +1 -1
  452. package/dist/vjdesigns-ui.css.d.ts +2 -0
  453. package/package.json +103 -90
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026 VJDesigns
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -82,6 +82,50 @@ export function SignupForm() {
82
82
  }
83
83
  ```
84
84
 
85
+ ### Next.js (App Router) and React Server Components
86
+
87
+ The library works in Server Components. Interactive components (anything with state, effects, or context: `Button`, `DataGrid`, `Modal`, ...) are marked `"use client"`, so you can render them from a Server Component like any client component. Utilities (`cx`, `sortRows`, `createBrandPalette`, `getLocaleDirection`, ...) and the locale catalogs have no directive, so you can call or read them on the server too. Every component also renders on the server for the first paint.
88
+
89
+ Put the providers in a small client file of your own, and render it from the root layout:
90
+
91
+ ```tsx
92
+ // app/providers.tsx
93
+ "use client";
94
+ import { LocaleProvider, ToastProvider } from "@vjdesigns/vjdesigns-ui";
95
+ import es from "@vjdesigns/vjdesigns-ui/locales/es";
96
+ import type { ReactNode } from "react";
97
+
98
+ export function Providers({ children }: { children: ReactNode }) {
99
+ return (
100
+ <LocaleProvider locale="es" messages={es}>
101
+ <ToastProvider>{children}</ToastProvider>
102
+ </LocaleProvider>
103
+ );
104
+ }
105
+ ```
106
+
107
+ ```tsx
108
+ // app/layout.tsx (a Server Component)
109
+ import "@vjdesigns/vjdesigns-ui/dist/vjdesigns-ui.css";
110
+ import { getLocaleDirection } from "@vjdesigns/vjdesigns-ui";
111
+ import { Providers } from "./providers";
112
+
113
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
114
+ return (
115
+ <html lang="es" dir={getLocaleDirection("es")}>
116
+ <body>
117
+ <Providers>{children}</Providers>
118
+ </body>
119
+ </html>
120
+ );
121
+ }
122
+ ```
123
+
124
+ Two rules of Server Components to keep in mind:
125
+
126
+ - **Functions can't be passed from a Server Component to a client one.** That includes event handlers (`onClick`), DataGrid columns with `cell` or `value` functions, and the locale catalogs themselves (their plural messages are functions, which is why `LocaleProvider` goes in the client providers file above). Render those components from your own `"use client"` file.
127
+ - **Compound parts can't be reached with a dot from a Server Component** (`Tabs.List`, `Menu.Item`): Next.js reports "You cannot dot into a client module". Use them inside a `"use client"` file, or use the named exports where they exist (`CardHeader`, `CardBody`, `NavbarBrand`, ...).
128
+
85
129
  ### Angular
86
130
 
87
131
  Make a standalone wrapper that renders the React component into its host element. The wrapper uses `createElement`, so you don't need to change your JSX or TSX settings.
@@ -778,4 +822,4 @@ See [RELEASING.md](RELEASING.md) for the full process, including how to update t
778
822
 
779
823
  ## License
780
824
 
781
- ISC
825
+ [ISC](LICENSE) © 2026 VJDesigns. The Pro package (`pro/`) has its own commercial license.
@@ -1,4 +1,4 @@
1
- # @vjdesigns/vjdesigns-ui 2.3.0: full reference
1
+ # @vjdesigns/vjdesigns-ui 2.5.0: full reference
2
2
 
3
3
  > Accessible React 19 component library: WCAG 2.2 AA verified (axe on every story, a contrast check on every color pair), 31 languages with right-to-left support, themeable with any brand color (auto-adjusted to stay accessible), tree-shakable, no runtime dependencies besides React.
4
4
 
@@ -83,6 +83,50 @@ export function SignupForm() {
83
83
  }
84
84
  ```
85
85
 
86
+ ### Next.js (App Router) and React Server Components
87
+
88
+ The library works in Server Components. Interactive components (anything with state, effects, or context: `Button`, `DataGrid`, `Modal`, ...) are marked `"use client"`, so you can render them from a Server Component like any client component. Utilities (`cx`, `sortRows`, `createBrandPalette`, `getLocaleDirection`, ...) and the locale catalogs have no directive, so you can call or read them on the server too. Every component also renders on the server for the first paint.
89
+
90
+ Put the providers in a small client file of your own, and render it from the root layout:
91
+
92
+ ```tsx
93
+ // app/providers.tsx
94
+ "use client";
95
+ import { LocaleProvider, ToastProvider } from "@vjdesigns/vjdesigns-ui";
96
+ import es from "@vjdesigns/vjdesigns-ui/locales/es";
97
+ import type { ReactNode } from "react";
98
+
99
+ export function Providers({ children }: { children: ReactNode }) {
100
+ return (
101
+ <LocaleProvider locale="es" messages={es}>
102
+ <ToastProvider>{children}</ToastProvider>
103
+ </LocaleProvider>
104
+ );
105
+ }
106
+ ```
107
+
108
+ ```tsx
109
+ // app/layout.tsx (a Server Component)
110
+ import "@vjdesigns/vjdesigns-ui/dist/vjdesigns-ui.css";
111
+ import { getLocaleDirection } from "@vjdesigns/vjdesigns-ui";
112
+ import { Providers } from "./providers";
113
+
114
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
115
+ return (
116
+ <html lang="es" dir={getLocaleDirection("es")}>
117
+ <body>
118
+ <Providers>{children}</Providers>
119
+ </body>
120
+ </html>
121
+ );
122
+ }
123
+ ```
124
+
125
+ Two rules of Server Components to keep in mind:
126
+
127
+ - **Functions can't be passed from a Server Component to a client one.** That includes event handlers (`onClick`), DataGrid columns with `cell` or `value` functions, and the locale catalogs themselves (their plural messages are functions, which is why `LocaleProvider` goes in the client providers file above). Render those components from your own `"use client"` file.
128
+ - **Compound parts can't be reached with a dot from a Server Component** (`Tabs.List`, `Menu.Item`): Next.js reports "You cannot dot into a client module". Use them inside a `"use client"` file, or use the named exports where they exist (`CardHeader`, `CardBody`, `NavbarBrand`, ...).
129
+
86
130
  ### Angular
87
131
 
88
132
  Make a standalone wrapper that renders the React component into its host element. The wrapper uses `createElement`, so you don't need to change your JSX or TSX settings.
@@ -607,8 +651,8 @@ import { Avatar } from "@vjdesigns/vjdesigns-ui";
607
651
 
608
652
  Category: data-display · Storybook: Data Display/Avatar
609
653
 
610
- A person's photo (`src`), with a fallback chain of image, initials (from
611
- `name`), then a user icon, so it always shows something. Supports a border,
654
+ A person's photo (`src`), with a fallback chain of image, initials (from
655
+ `name`), then a user icon, so it always shows something. Supports a border,
612
656
  a presence status dot, a highlight ring, and stacking in an `AvatarGroup`.
613
657
 
614
658
  ### Props
@@ -655,7 +699,7 @@ import { AvatarGroup } from "@vjdesigns/vjdesigns-ui";
655
699
 
656
700
  Category: data-display · Storybook: Data Display/Avatar
657
701
 
658
- Overlapping stack of avatars in a labelled `role="group"`. Avatars beyond
702
+ Overlapping stack of avatars in a labelled `role="group"`. Avatars beyond
659
703
  `max` collapse into a "+N" surplus avatar with an accessible label.
660
704
 
661
705
  ### Props
@@ -1233,6 +1277,7 @@ real `<table role="grid">` with `aria-sort`, `aria-selected`,
1233
1277
  - `onSelectedChange`: `(selected: DataGridRowId[]) => void`. Called with the next selected ids.
1234
1278
  - `isRowSelectable`: `(row: T) => boolean`. Rows that can't be selected (their checkbox is disabled).
1235
1279
  - `pageSize`: `number`. Rows per page. Shows a footer with the range and `Pagination`. Without it, every row shows.
1280
+ - `virtualize`: `boolean | "auto"` (default "auto"). Render only the rows in view (plus a few above and below), so grids of 100,000+ rows scroll, sort, filter, and select without delay. `"auto"` turns it on when more than 100 rows show at once. While it's on, the body scrolls inside the grid (its height is `maxHeight`, 70% of the window by default) and the table uses fixed layout unless you set `layout`, so columns keep their widths while you scroll; give columns a `width` to size them. Screen readers still get the full count (`aria-rowcount`) and each row's position (`aria-rowindex`).
1236
1281
  - `page`: `number`. Current page, starting at 1 (controlled).
1237
1282
  - `defaultPage`: `number` (default 1). Initial page when uncontrolled.
1238
1283
  - `onPageChange`: `(page: number) => void`. Called with the next page.
@@ -1246,11 +1291,16 @@ real `<table role="grid">` with `aria-sort`, `aria-selected`,
1246
1291
  - `hoverable`: `boolean` (default true). Highlight rows under the pointer.
1247
1292
  - `stickyHeader`: `boolean` (default true). Keep the header row visible while scrolling.
1248
1293
  - `maxHeight`: `CSSProperties["maxHeight"]`. Maximum height of the scrolling body (CSS length, or px as a number).
1249
- - `layout`: `"auto" | "fixed"` (default "auto"). Table layout. `fixed` makes column widths exact (content wraps or clips instead of widening a column).
1294
+ - `layout`: `"auto" | "fixed"` (default "auto" ("fixed" while virtualized)). Table layout. `fixed` makes column widths exact (content wraps or clips instead of widening a column).
1250
1295
  - `tableStyle`: `CSSProperties`. Style for the `<table>` (for example a total width when columns are resized).
1251
1296
  - `className`: `string`. Class name for the outer frame.
1252
1297
  - `style`: `CSSProperties`. Style for the outer frame.
1253
1298
  - `ref`: `Ref<HTMLTableElement>`. Ref to the `<table role="grid">`.
1299
+ - `treegrid`: `boolean` (default false). Rows form a hierarchy (groups, a tree): the table becomes a `role="treegrid"` and each row takes the `level` and `expanded` from `getRowProps`.
1300
+ - `getRowProps`: `(row: T) => DataGridRowProps`. Per-row level, expanded state, and class name.
1301
+ - `renderRowDetail`: `(row: T) => ReactNode`. Content for a full-width row under a row (master-detail), or null for none. Its controls are outside the grid's arrow-key navigation: Tab from the row moves into them. A grid with detail rows doesn't virtualize, so pair it with `pageSize` for long lists.
1302
+ - `onRowsShown`: `(rows: readonly T[]) => void`. Called with the rows the grid shows, sorted, filtered, and paged, in display order, whenever they change (to copy a cell range, or export exactly what's on screen).
1303
+ - `onVisibleRangeChange`: `(range: { start: number; end: number }) => void`. Called with the range of shown rows (indexes into them, inclusive) that are rendered in view. With virtualization this follows scrolling, which is what "load more while scrolling" needs.
1254
1304
 
1255
1305
  ### Examples (Storybook stories)
1256
1306
 
@@ -1265,6 +1315,9 @@ real `<table role="grid">` with `aria-sort`, `aria-selected`,
1265
1315
  - Sticky Header: A long list in a fixed-height area, with the header kept in view.
1266
1316
  - Right To Left: In right-to-left layouts the columns mirror and ArrowRight moves toward the start.
1267
1317
  - Extending Columns: Extending columns: `headerEnd` adds content after a header's label, outside its sort button (here a column menu button), and `className` / `style` reach every cell of a column. Controls marked `data-grid-secondary` don't steal the header's focus: the sort button stays its target, and F2 then Tab reaches them.
1318
+ - Large data (100,000 rows): 100,000 rows with sorting, search, and selection. Only the rows in view (plus a few above and below) are in the page, so scrolling, sorting, filtering, and selecting stay instant at any size. Screen readers still hear the full count (`aria-rowcount`) and each row's position.
1319
+ - Row Levels And Details: Extension points for hierarchical and master-detail grids: `treegrid` with `getRowProps` (each row's level and expanded state), and `renderRowDetail` (a full-width row under a row). DataGridPro builds its grouping, tree data, and details on these.
1320
+ - Rows Shown And Range: `onRowsShown` reports the rows on screen, sorted, filtered, and paged, in order; `onVisibleRangeChange` reports which of them are rendered in view. DataGridPro builds cell ranges and loading while scrolling on these.
1268
1321
 
1269
1322
  ## EmptyState
1270
1323
 
@@ -1385,19 +1438,19 @@ import { List } from "@vjdesigns/vjdesigns-ui";
1385
1438
 
1386
1439
  Category: data-display · Storybook: Data Display/List
1387
1440
 
1388
- A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.
1389
-
1390
- Every variant draws its own markers, so the browser's markers are removed
1391
- with CSS; `role="list"` is added so Safari and VoiceOver keep announcing
1392
- the list and its item count.
1393
-
1394
- This is a list, not a listbox: items are not selectable options and there
1395
- is no roving focus. Interactive items (`List.ItemButton`, `List.ItemLink`)
1396
- are ordinary Tab stops. For choosing among options, use a Listbox,
1397
- Combobox, or Select instead.
1398
-
1399
- Grouping: put a `List.Subheader` (a real heading by default) before each
1400
- list and point the list at it with `aria-labelledby`, so screen readers
1441
+ A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.
1442
+
1443
+ Every variant draws its own markers, so the browser's markers are removed
1444
+ with CSS; `role="list"` is added so Safari and VoiceOver keep announcing
1445
+ the list and its item count.
1446
+
1447
+ This is a list, not a listbox: items are not selectable options and there
1448
+ is no roving focus. Interactive items (`List.ItemButton`, `List.ItemLink`)
1449
+ are ordinary Tab stops. For choosing among options, use a Listbox,
1450
+ Combobox, or Select instead.
1451
+
1452
+ Grouping: put a `List.Subheader` (a real heading by default) before each
1453
+ list and point the list at it with `aria-labelledby`, so screen readers
1401
1454
  announce "Account, list, 3 items".
1402
1455
 
1403
1456
  ### Props
@@ -1417,8 +1470,8 @@ announce "Account, list, 3 items".
1417
1470
 
1418
1471
  Also exported as `ListItem`.
1419
1472
 
1420
- A static list item (`<li>`) with optional `start`, `title`, `description`,
1421
- `meta`, and `end` slots, or plain `children`. For a clickable row, use
1473
+ A static list item (`<li>`) with optional `start`, `title`, `description`,
1474
+ `meta`, and `end` slots, or plain `children`. For a clickable row, use
1422
1475
  `List.ItemButton` or `List.ItemLink`.
1423
1476
 
1424
1477
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1436,14 +1489,14 @@ A static list item (`<li>`) with optional `start`, `title`, `description`,
1436
1489
 
1437
1490
  Also exported as `ListItemButton`.
1438
1491
 
1439
- A list item whose main area is a real `<button>`. The button wraps the
1440
- title (or `children` when there is no title) and its hit area is
1441
- stretched over the whole row, so the row is clickable, while `end`
1442
- actions sit above it and stay independently clickable. Never nest
1443
- interactive elements in `title` or `description`.
1444
-
1445
- `className` and `style` go on the row `<li>`; `ref`, `onClick`, `type`,
1446
- `aria-*`, and every other prop go on the `<button>`. The description and
1492
+ A list item whose main area is a real `<button>`. The button wraps the
1493
+ title (or `children` when there is no title) and its hit area is
1494
+ stretched over the whole row, so the row is clickable, while `end`
1495
+ actions sit above it and stay independently clickable. Never nest
1496
+ interactive elements in `title` or `description`.
1497
+
1498
+ `className` and `style` go on the row `<li>`; `ref`, `onClick`, `type`,
1499
+ `aria-*`, and every other prop go on the `<button>`. The description and
1447
1500
  meta become the button's accessible description.
1448
1501
 
1449
1502
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1465,12 +1518,12 @@ meta become the button's accessible description.
1465
1518
 
1466
1519
  Also exported as `ListItemLink`.
1467
1520
 
1468
- A list item whose main area is a real `<a>`, stretched over the whole row
1469
- like `List.ItemButton`. `selected` sets `aria-current="page"` (override
1470
- with `current`). When `disabled`, the link loses its `href` and is marked
1471
- `aria-disabled`, so it can't be followed or focused.
1472
-
1473
- `className` and `style` go on the row `<li>`; everything else, including
1521
+ A list item whose main area is a real `<a>`, stretched over the whole row
1522
+ like `List.ItemButton`. `selected` sets `aria-current="page"` (override
1523
+ with `current`). When `disabled`, the link loses its `href` and is marked
1524
+ `aria-disabled`, so it can't be followed or focused.
1525
+
1526
+ `className` and `style` go on the row `<li>`; everything else, including
1474
1527
  `ref` and `href`, goes on the `<a>`.
1475
1528
 
1476
1529
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1492,14 +1545,14 @@ with `current`). When `disabled`, the link loses its `href` and is marked
1492
1545
 
1493
1546
  Also exported as `ListSubheader`.
1494
1547
 
1495
- An uppercase label for a group of items. Render it before (outside) a
1496
- `List`, give it an `id`, and pass that id to the list's
1497
- `aria-labelledby`. It must not go inside the `<ul>`, where it would be
1498
- counted as an item.
1499
-
1500
- ```tsx
1501
- <List.Subheader id="acct">Account</List.Subheader>
1502
- <List aria-labelledby="acct">...</List>
1548
+ An uppercase label for a group of items. Render it before (outside) a
1549
+ `List`, give it an `id`, and pass that id to the list's
1550
+ `aria-labelledby`. It must not go inside the `<ul>`, where it would be
1551
+ counted as an item.
1552
+
1553
+ ```tsx
1554
+ <List.Subheader id="acct">Account</List.Subheader>
1555
+ <List aria-labelledby="acct">...</List>
1503
1556
  ```
1504
1557
 
1505
1558
  - `as`: `ListSubheaderElement` (default "h3"). Element to render. A heading (default `h3`) so grouped lists show up in the screen reader's headings list; pick the level that fits the page outline, or `div` when a heading would be out of place.
@@ -1636,7 +1689,7 @@ Semantic data table. See `TableRoot` docs above; parts are attached as `Table.*`
1636
1689
 
1637
1690
  Also exported as `TableCaption`.
1638
1691
 
1639
- The table's title (`<caption>`). It names the table and, when the table
1692
+ The table's title (`<caption>`). It names the table and, when the table
1640
1693
  scrolls, its scroll region. Strongly recommended on every table.
1641
1694
 
1642
1695
  - Plus every native `<caption>` attribute.
@@ -1678,9 +1731,9 @@ A table row (`<tr>`).
1678
1731
 
1679
1732
  Also exported as `TableHeaderCell`.
1680
1733
 
1681
- A header cell (`<th>`). With `sortable`, the whole cell is a real
1682
- `<button>` and the header carries `aria-sort` while it is the sorted column.
1683
- The sort icon shows the direction by shape (up arrow, down arrow, or a
1734
+ A header cell (`<th>`). With `sortable`, the whole cell is a real
1735
+ `<button>` and the header carries `aria-sort` while it is the sorted column.
1736
+ The sort icon shows the direction by shape (up arrow, down arrow, or a
1684
1737
  neutral double arrow), not by color alone.
1685
1738
 
1686
1739
  - `align`: `TableCellAlign` (default "start" ("end" when `numeric`)). Horizontal alignment.
@@ -1710,8 +1763,8 @@ A data cell (`<td>`).
1710
1763
 
1711
1764
  Also exported as `TableSelectCell`.
1712
1765
 
1713
- A data cell holding the row's selection checkbox. Pair with `selected` on
1714
- the `Table.Row`. Give it a `rowLabel` (or `checkboxLabel`) so each
1766
+ A data cell holding the row's selection checkbox. Pair with `selected` on
1767
+ the `Table.Row`. Give it a `rowLabel` (or `checkboxLabel`) so each
1715
1768
  checkbox has a unique accessible name.
1716
1769
 
1717
1770
  - `checked`: `boolean` (required). Whether the row is selected.
@@ -1725,7 +1778,7 @@ checkbox has a unique accessible name.
1725
1778
 
1726
1779
  Also exported as `TableSelectAllCell`.
1727
1780
 
1728
- A header cell (`<th scope="col">`) with a "select all" checkbox. Shows the
1781
+ A header cell (`<th scope="col">`) with a "select all" checkbox. Shows the
1729
1782
  mixed state (`aria-checked="mixed"`) when some rows are selected.
1730
1783
 
1731
1784
  - `checked`: `boolean` (required). Whether every row is selected.
@@ -2800,6 +2853,7 @@ and size are wired automatically, as with `Input`.
2800
2853
  - Required: `required` blocks native form submission until an option is chosen (`setCustomValidity` on the text input).
2801
2854
  - Clear On Escape: `clearOnEscape`: once the text matches the selection, Escape also clears the selection.
2802
2855
  - Form submit, reset, and custom values: Form behavior: Enter submits what is shown (cleared text submits no team), a form reset restores the default, and re-entering a custom tag that's already chosen doesn't remove it.
2856
+ - Long list (10,000 options): 10,000 options. Only the options in view are in the page (plus the highlighted one), so opening, scrolling, and typing stay instant. Each option carries its position in the full list (`aria-setsize`, `aria-posinset`), so screen readers still hear "10,000 of 10,000". Lists with groups always render in full.
2803
2857
 
2804
2858
  ## DatePicker
2805
2859
 
@@ -3197,7 +3251,7 @@ import { FileUpload } from "@vjdesigns/vjdesigns-ui";
3197
3251
 
3198
3252
  Category: forms · Storybook: Forms/FileUpload
3199
3253
 
3200
- File picker with drag and drop, validation, and a file list.
3254
+ File picker with drag and drop, validation, and a file list.
3201
3255
  `FileUpload.List` is the standalone list for custom layouts.
3202
3256
 
3203
3257
  ### Props
@@ -3236,13 +3290,13 @@ File picker with drag and drop, validation, and a file list.
3236
3290
 
3237
3291
  Also exported as `FileUploadList`.
3238
3292
 
3239
- The list of selected files: icon or image thumbnail, name (truncated, full
3240
- name on hover and focus), formatted size, optional upload progress and
3241
- status, and a remove button per file. `FileUpload` renders one for you;
3242
- use `FileUpload.List` directly for custom layouts.
3243
-
3244
- After a removal, focus moves to the next item's remove button (or the
3245
- previous one), then to `focusFallback` when the list becomes empty.
3293
+ The list of selected files: icon or image thumbnail, name (truncated, full
3294
+ name on hover and focus), formatted size, optional upload progress and
3295
+ status, and a remove button per file. `FileUpload` renders one for you;
3296
+ use `FileUpload.List` directly for custom layouts.
3297
+
3298
+ After a removal, focus moves to the next item's remove button (or the
3299
+ previous one), then to `focusFallback` when the list becomes empty.
3246
3300
  Upload completions and failures are announced in a polite live region.
3247
3301
 
3248
3302
  - `files`: `File[]` (required). The files to show.
@@ -3340,21 +3394,21 @@ import { NumberInput } from "@vjdesigns/vjdesigns-ui";
3340
3394
 
3341
3395
  Category: forms · Storybook: Forms/NumberInput
3342
3396
 
3343
- A numeric text field following the WAI-ARIA spinbutton pattern. The
3344
- `<input>` itself is the spinbutton: it takes focus, exposes
3345
- `aria-valuenow`/`min`/`max`/`valuetext`, and handles ArrowUp/Down,
3346
- PageUp/Down, Home/End, and Enter. Stepper buttons are pointer
3347
- conveniences (press and hold to repeat) and stay out of the tab order.
3348
-
3349
- Shows a formatted value (`Intl.NumberFormat`) when not focused and the
3350
- plain editable number while focused; parses locale input (group
3351
- separators, decimal comma). Built on `Input`, so size, variant, radius,
3352
- addons, and `Field` wiring match every other text field.
3353
-
3354
- ```tsx
3355
- <Field label="Weight">
3356
- <NumberInput min={0} step={2.5} endAddon="kg" defaultValue={60} />
3357
- </Field>
3397
+ A numeric text field following the WAI-ARIA spinbutton pattern. The
3398
+ `<input>` itself is the spinbutton: it takes focus, exposes
3399
+ `aria-valuenow`/`min`/`max`/`valuetext`, and handles ArrowUp/Down,
3400
+ PageUp/Down, Home/End, and Enter. Stepper buttons are pointer
3401
+ conveniences (press and hold to repeat) and stay out of the tab order.
3402
+
3403
+ Shows a formatted value (`Intl.NumberFormat`) when not focused and the
3404
+ plain editable number while focused; parses locale input (group
3405
+ separators, decimal comma). Built on `Input`, so size, variant, radius,
3406
+ addons, and `Field` wiring match every other text field.
3407
+
3408
+ ```tsx
3409
+ <Field label="Weight">
3410
+ <NumberInput min={0} step={2.5} endAddon="kg" defaultValue={60} />
3411
+ </Field>
3358
3412
  ```
3359
3413
 
3360
3414
  ### Props
@@ -3911,6 +3965,7 @@ focusable, covering the segment) inside a `<label>`. `ref` points at the
3911
3965
  - Controlled
3912
3966
  - In Fieldset
3913
3967
  - Composition: Stats period
3968
+ - Right To Left: Right to left: the segments run from the right and the thumb sits under the selected one.
3914
3969
 
3915
3970
  ## Select
3916
3971
 
@@ -6735,9 +6790,9 @@ import { Tooltip } from "@vjdesigns/vjdesigns-ui";
6735
6790
 
6736
6791
  Category: overlays · Storybook: Overlays/Tooltip
6737
6792
 
6738
- A short, non-interactive label or description that appears on hover and on
6739
- keyboard focus. Follows the WAI-ARIA tooltip pattern and WCAG 1.4.13: it
6740
- can be dismissed with Escape, the pointer can move onto it, and it stays
6793
+ A short, non-interactive label or description that appears on hover and on
6794
+ keyboard focus. Follows the WAI-ARIA tooltip pattern and WCAG 1.4.13: it
6795
+ can be dismissed with Escape, the pointer can move onto it, and it stays
6741
6796
  open until the pointer or focus leaves. Use `Popover` for interactive content.
6742
6797
 
6743
6798
  ### Props
@@ -6780,7 +6835,7 @@ import { TooltipProvider } from "@vjdesigns/vjdesigns-ui";
6780
6835
 
6781
6836
  Category: overlays · Storybook: Overlays/Tooltip
6782
6837
 
6783
- Optional. Sets shared timing for the tooltips inside it. Tooltips work
6838
+ Optional. Sets shared timing for the tooltips inside it. Tooltips work
6784
6839
  without a provider, using the defaults.
6785
6840
 
6786
6841
  ### Props
@@ -7943,6 +7998,16 @@ typing in that element.
7943
7998
  <Textarea onKeyDown={getHotkeyHandler([["mod+enter", send]])} />
7944
7999
  ```
7945
8000
 
8001
+ ## withExtraItems
8002
+
8003
+ ```ts
8004
+ withExtraItems(virtualizer: Virtualizer, extra: readonly number[]): VirtualItem[]
8005
+ ```
8006
+
8007
+ The window's items plus extra indices that must stay rendered even when
8008
+ scrolled out of view (a focused row, a highlighted option), in order.
8009
+ Render spacers between non-adjacent items from their `start` / `end`.
8010
+
7946
8011
  ## cx
7947
8012
 
7948
8013
  ```ts