@vjdesigns/vjdesigns-ui 2.4.0 → 2.5.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 (417) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +45 -1
  3. package/dist/ai/llms-full.txt +133 -76
  4. package/dist/ai/registry.json +82 -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 +14 -3
  33. package/dist/components/data-display/DataGrid/DataGrid.mjs +352 -267
  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 +6 -5
  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/DateTimePicker/DateTimePicker.cjs.js +1 -1
  128. package/dist/components/forms/DateTimePicker/DateTimePicker.mjs +19 -19
  129. package/dist/components/forms/DateTimePicker/DateTimePicker.module.css.mjs +1 -2
  130. package/dist/components/forms/Field/Field.cjs.js +1 -1
  131. package/dist/components/forms/Field/Field.mjs +14 -14
  132. package/dist/components/forms/Field/Field.module.css.mjs +1 -2
  133. package/dist/components/forms/Field/FieldContext.cjs.js +1 -1
  134. package/dist/components/forms/Field/FieldContext.mjs +2 -2
  135. package/dist/components/forms/FileUpload/FileUpload.cjs.js +1 -1
  136. package/dist/components/forms/FileUpload/FileUpload.mjs +250 -255
  137. package/dist/components/forms/FileUpload/FileUpload.module.css.mjs +1 -2
  138. package/dist/components/forms/Input/Input.cjs.js +1 -1
  139. package/dist/components/forms/Input/Input.mjs +35 -35
  140. package/dist/components/forms/Input/Input.module.css.mjs +1 -2
  141. package/dist/components/forms/NumberInput/NumberInput.cjs.js +1 -1
  142. package/dist/components/forms/NumberInput/NumberInput.mjs +137 -142
  143. package/dist/components/forms/NumberInput/NumberInput.module.css.mjs +1 -2
  144. package/dist/components/forms/PasswordInput/PasswordInput.cjs.js +1 -1
  145. package/dist/components/forms/PasswordInput/PasswordInput.mjs +142 -142
  146. package/dist/components/forms/PasswordInput/PasswordInput.module.css.mjs +1 -2
  147. package/dist/components/forms/PinInput/PinInput.cjs.js +1 -1
  148. package/dist/components/forms/PinInput/PinInput.mjs +12 -12
  149. package/dist/components/forms/PinInput/PinInput.module.css.mjs +1 -2
  150. package/dist/components/forms/Radio/Radio.cjs.js +1 -1
  151. package/dist/components/forms/Radio/Radio.mjs +2 -2
  152. package/dist/components/forms/Radio/Radio.module.css.mjs +1 -2
  153. package/dist/components/forms/Rating/Rating.cjs.js +1 -1
  154. package/dist/components/forms/Rating/Rating.mjs +110 -109
  155. package/dist/components/forms/Rating/Rating.module.css.mjs +1 -2
  156. package/dist/components/forms/SearchInput/SearchInput.cjs.js +1 -1
  157. package/dist/components/forms/SearchInput/SearchInput.mjs +118 -126
  158. package/dist/components/forms/SearchInput/SearchInput.module.css.mjs +1 -2
  159. package/dist/components/forms/SegmentedControl/SegmentedControl.cjs.js +1 -1
  160. package/dist/components/forms/SegmentedControl/SegmentedControl.mjs +46 -43
  161. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.mjs +1 -2
  162. package/dist/components/forms/Select/Select.cjs.js +1 -1
  163. package/dist/components/forms/Select/Select.mjs +2 -2
  164. package/dist/components/forms/Select/Select.module.css.mjs +1 -2
  165. package/dist/components/forms/Slider/Slider.cjs.js +1 -1
  166. package/dist/components/forms/Slider/Slider.mjs +2 -2
  167. package/dist/components/forms/Slider/Slider.module.css.mjs +1 -2
  168. package/dist/components/forms/Switch/Switch.cjs.js +1 -1
  169. package/dist/components/forms/Switch/Switch.mjs +39 -39
  170. package/dist/components/forms/Switch/Switch.module.css.mjs +1 -2
  171. package/dist/components/forms/TagInput/TagInput.cjs.js +1 -1
  172. package/dist/components/forms/TagInput/TagInput.mjs +197 -203
  173. package/dist/components/forms/TagInput/TagInput.module.css.mjs +1 -2
  174. package/dist/components/forms/Textarea/Textarea.cjs.js +1 -1
  175. package/dist/components/forms/Textarea/Textarea.mjs +59 -59
  176. package/dist/components/forms/Textarea/Textarea.module.css.mjs +1 -2
  177. package/dist/components/forms/TimePicker/TimePicker.cjs.js +1 -1
  178. package/dist/components/forms/TimePicker/TimePicker.mjs +14 -16
  179. package/dist/components/forms/TimePicker/TimePicker.module.css.mjs +1 -2
  180. package/dist/components/forms/TimePicker/timeUtils.cjs.js +1 -1
  181. package/dist/components/forms/TimePicker/timeUtils.d.ts +4 -1
  182. package/dist/components/forms/TimePicker/timeUtils.mjs +43 -38
  183. package/dist/components/forms/ToggleGroup/ToggleGroup.cjs.js +1 -1
  184. package/dist/components/forms/ToggleGroup/ToggleGroup.mjs +10 -10
  185. package/dist/components/forms/ToggleGroup/ToggleGroup.module.css.mjs +1 -2
  186. package/dist/components/layout/Box/Box.mjs +1 -2
  187. package/dist/components/layout/Box/Box.module.css.mjs +1 -2
  188. package/dist/components/layout/Container/Container.mjs +1 -2
  189. package/dist/components/layout/Container/Container.module.css.mjs +1 -2
  190. package/dist/components/layout/Divider/Divider.mjs +1 -2
  191. package/dist/components/layout/Divider/Divider.module.css.mjs +1 -2
  192. package/dist/components/layout/Flex/Flex.cjs.js +1 -1
  193. package/dist/components/layout/Flex/Flex.mjs +12 -13
  194. package/dist/components/layout/Flex/Flex.module.css.mjs +1 -2
  195. package/dist/components/layout/Grid/Grid.cjs.js +1 -1
  196. package/dist/components/layout/Grid/Grid.mjs +20 -21
  197. package/dist/components/layout/Grid/Grid.module.css.mjs +1 -2
  198. package/dist/components/layout/ResizablePanels/ResizablePanels.cjs.js +1 -1
  199. package/dist/components/layout/ResizablePanels/ResizablePanels.mjs +17 -17
  200. package/dist/components/layout/ResizablePanels/ResizablePanels.module.css.mjs +1 -2
  201. package/dist/components/layout/ScrollArea/ScrollArea.cjs.js +1 -1
  202. package/dist/components/layout/ScrollArea/ScrollArea.mjs +2 -2
  203. package/dist/components/layout/ScrollArea/ScrollArea.module.css.mjs +1 -2
  204. package/dist/components/layout/Stack/Stack.cjs.js +1 -1
  205. package/dist/components/layout/Stack/Stack.mjs +8 -9
  206. package/dist/components/layout/Stack/Stack.module.css.mjs +1 -2
  207. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.cjs.js +1 -1
  208. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.mjs +41 -41
  209. package/dist/components/navigation/Breadcrumbs/Breadcrumbs.module.css.mjs +1 -2
  210. package/dist/components/navigation/ContextMenu/ContextMenu.cjs.js +1 -1
  211. package/dist/components/navigation/ContextMenu/ContextMenu.mjs +48 -48
  212. package/dist/components/navigation/ContextMenu/ContextMenu.module.css.mjs +1 -2
  213. package/dist/components/navigation/Link/Link.cjs.js +1 -1
  214. package/dist/components/navigation/Link/Link.mjs +6 -7
  215. package/dist/components/navigation/Link/Link.module.css.mjs +1 -2
  216. package/dist/components/navigation/Menu/Menu.cjs.js +1 -1
  217. package/dist/components/navigation/Menu/Menu.mjs +11 -11
  218. package/dist/components/navigation/Menu/Menu.module.css.mjs +1 -2
  219. package/dist/components/navigation/Menu/MenuContent.cjs.js +1 -1
  220. package/dist/components/navigation/Menu/MenuContent.mjs +46 -46
  221. package/dist/components/navigation/Menu/MenuContext.cjs.js +1 -1
  222. package/dist/components/navigation/Menu/MenuContext.mjs +2 -2
  223. package/dist/components/navigation/Menu/MenuItem.cjs.js +1 -1
  224. package/dist/components/navigation/Menu/MenuItem.mjs +35 -39
  225. package/dist/components/navigation/Menu/MenuSub.cjs.js +1 -1
  226. package/dist/components/navigation/Menu/MenuSub.mjs +16 -20
  227. package/dist/components/navigation/Menu/useMenuRoot.cjs.js +1 -1
  228. package/dist/components/navigation/Menu/useMenuRoot.mjs +2 -2
  229. package/dist/components/navigation/Navbar/Navbar.cjs.js +1 -1
  230. package/dist/components/navigation/Navbar/Navbar.mjs +111 -111
  231. package/dist/components/navigation/Navbar/Navbar.module.css.mjs +1 -2
  232. package/dist/components/navigation/Pagination/Pagination.cjs.js +1 -1
  233. package/dist/components/navigation/Pagination/Pagination.mjs +31 -35
  234. package/dist/components/navigation/Pagination/Pagination.module.css.mjs +1 -2
  235. package/dist/components/navigation/Sidebar/Sidebar.cjs.js +1 -1
  236. package/dist/components/navigation/Sidebar/Sidebar.mjs +52 -52
  237. package/dist/components/navigation/Sidebar/Sidebar.module.css.mjs +1 -2
  238. package/dist/components/navigation/Sidebar/SidebarContext.cjs.js +1 -1
  239. package/dist/components/navigation/Sidebar/SidebarContext.mjs +2 -2
  240. package/dist/components/navigation/Sidebar/SidebarParts.cjs.js +1 -1
  241. package/dist/components/navigation/Sidebar/SidebarParts.mjs +76 -80
  242. package/dist/components/navigation/SkipLink/SkipLink.cjs.js +1 -1
  243. package/dist/components/navigation/SkipLink/SkipLink.mjs +12 -12
  244. package/dist/components/navigation/SkipLink/SkipLink.module.css.mjs +1 -2
  245. package/dist/components/navigation/Stepper/Stepper.cjs.js +1 -1
  246. package/dist/components/navigation/Stepper/Stepper.mjs +46 -46
  247. package/dist/components/navigation/Stepper/Stepper.module.css.mjs +1 -2
  248. package/dist/components/navigation/Tabs/Tabs.cjs.js +1 -1
  249. package/dist/components/navigation/Tabs/Tabs.mjs +2 -2
  250. package/dist/components/navigation/Tabs/Tabs.module.css.mjs +1 -2
  251. package/dist/components/overlays/CommandPalette/CommandPalette.cjs.js +1 -1
  252. package/dist/components/overlays/CommandPalette/CommandPalette.mjs +206 -206
  253. package/dist/components/overlays/CommandPalette/CommandPalette.module.css.mjs +1 -2
  254. package/dist/components/overlays/CommandPalette/CommandPaletteContext.cjs.js +1 -1
  255. package/dist/components/overlays/CommandPalette/CommandPaletteContext.mjs +2 -2
  256. package/dist/components/overlays/CommandPalette/CommandPaletteParts.cjs.js +1 -1
  257. package/dist/components/overlays/CommandPalette/CommandPaletteParts.mjs +104 -104
  258. package/dist/components/overlays/CommandPalette/commandPaletteUtils.cjs.js +1 -1
  259. package/dist/components/overlays/CommandPalette/commandPaletteUtils.mjs +62 -60
  260. package/dist/components/overlays/Drawer/Drawer.cjs.js +1 -1
  261. package/dist/components/overlays/Drawer/Drawer.mjs +31 -31
  262. package/dist/components/overlays/Drawer/Drawer.module.css.mjs +1 -2
  263. package/dist/components/overlays/Drawer/DrawerContent.cjs.js +1 -1
  264. package/dist/components/overlays/Drawer/DrawerContent.mjs +99 -99
  265. package/dist/components/overlays/Drawer/DrawerContext.cjs.js +1 -1
  266. package/dist/components/overlays/Drawer/DrawerContext.mjs +2 -2
  267. package/dist/components/overlays/Drawer/DrawerParts.cjs.js +1 -1
  268. package/dist/components/overlays/Drawer/DrawerParts.mjs +18 -18
  269. package/dist/components/overlays/Drawer/internal.mjs +1 -2
  270. package/dist/components/overlays/Drawer/useDragToClose.cjs.js +1 -1
  271. package/dist/components/overlays/Drawer/useDragToClose.mjs +2 -2
  272. package/dist/components/overlays/HoverCard/HoverCard.cjs.js +1 -1
  273. package/dist/components/overlays/HoverCard/HoverCard.mjs +31 -31
  274. package/dist/components/overlays/HoverCard/HoverCard.module.css.mjs +1 -2
  275. package/dist/components/overlays/Modal/ConfirmModal.cjs.js +1 -1
  276. package/dist/components/overlays/Modal/ConfirmModal.mjs +21 -23
  277. package/dist/components/overlays/Modal/Modal.cjs.js +1 -1
  278. package/dist/components/overlays/Modal/Modal.mjs +47 -47
  279. package/dist/components/overlays/Modal/Modal.module.css.mjs +1 -2
  280. package/dist/components/overlays/Modal/ModalContent.cjs.js +1 -1
  281. package/dist/components/overlays/Modal/ModalContent.mjs +24 -24
  282. package/dist/components/overlays/Modal/ModalContext.cjs.js +1 -1
  283. package/dist/components/overlays/Modal/ModalContext.mjs +2 -2
  284. package/dist/components/overlays/Modal/useScrollRegion.cjs.js +1 -1
  285. package/dist/components/overlays/Modal/useScrollRegion.mjs +2 -2
  286. package/dist/components/overlays/Popover/Popover.cjs.js +1 -1
  287. package/dist/components/overlays/Popover/Popover.mjs +40 -40
  288. package/dist/components/overlays/Popover/Popover.module.css.mjs +1 -2
  289. package/dist/components/overlays/Popover/PopoverContent.cjs.js +1 -1
  290. package/dist/components/overlays/Popover/PopoverContent.mjs +39 -39
  291. package/dist/components/overlays/Popover/PopoverContext.cjs.js +1 -1
  292. package/dist/components/overlays/Popover/PopoverContext.mjs +2 -2
  293. package/dist/components/overlays/Tooltip/Tooltip.cjs.js +1 -1
  294. package/dist/components/overlays/Tooltip/Tooltip.mjs +100 -95
  295. package/dist/components/overlays/Tooltip/Tooltip.module.css.mjs +1 -2
  296. package/dist/components/primitives/Button/Button.cjs.js +1 -1
  297. package/dist/components/primitives/Button/Button.mjs +59 -63
  298. package/dist/components/primitives/Button/Button.module.css.mjs +1 -2
  299. package/dist/components/primitives/Icon/Icon.cjs.js +1 -1
  300. package/dist/components/primitives/Icon/Icon.mjs +5 -6
  301. package/dist/components/primitives/Icon/Icon.module.css.mjs +1 -2
  302. package/dist/components/primitives/Icon/IconSvg.mjs +1 -2
  303. package/dist/components/primitives/Icon/icons.mjs +1 -2
  304. package/dist/components/primitives/Kbd/Kbd.cjs.js +1 -1
  305. package/dist/components/primitives/Kbd/Kbd.mjs +30 -30
  306. package/dist/components/primitives/Kbd/Kbd.module.css.mjs +1 -2
  307. package/dist/components/primitives/Typography/Typography.mjs +1 -2
  308. package/dist/components/primitives/Typography/Typography.module.css.mjs +1 -2
  309. package/dist/components/utilities/LocaleProvider/LocaleProvider.cjs.js +1 -1
  310. package/dist/components/utilities/LocaleProvider/LocaleProvider.mjs +11 -11
  311. package/dist/components/utilities/LocaleProvider/LocaleProvider.module.css.mjs +1 -2
  312. package/dist/components/utilities/Portal/Portal.cjs.js +1 -1
  313. package/dist/components/utilities/Portal/Portal.mjs +2 -2
  314. package/dist/components/utilities/Theme/Theme.cjs.js +1 -1
  315. package/dist/components/utilities/Theme/Theme.mjs +13 -13
  316. package/dist/components/utilities/Theme/Theme.module.css.mjs +1 -2
  317. package/dist/components/utilities/VisuallyHidden/VisuallyHidden.mjs +1 -2
  318. package/dist/components/utilities/VisuallyHidden/VisuallyHidden.module.css.mjs +1 -2
  319. package/dist/hooks/elementSource.cjs.js +1 -1
  320. package/dist/hooks/elementSource.mjs +4 -3
  321. package/dist/hooks/useClipboard.cjs.js +1 -1
  322. package/dist/hooks/useClipboard.mjs +2 -2
  323. package/dist/hooks/useControllableState.cjs.js +1 -1
  324. package/dist/hooks/useControllableState.mjs +2 -2
  325. package/dist/hooks/useDisclosure.cjs.js +1 -1
  326. package/dist/hooks/useDisclosure.mjs +2 -2
  327. package/dist/hooks/useDismiss.cjs.js +1 -1
  328. package/dist/hooks/useDismiss.mjs +2 -2
  329. package/dist/hooks/useElementObservers.cjs.js +1 -1
  330. package/dist/hooks/useElementObservers.mjs +2 -2
  331. package/dist/hooks/useEnvironment.cjs.js +1 -1
  332. package/dist/hooks/useEnvironment.mjs +2 -2
  333. package/dist/hooks/useFloatingPosition.cjs.js +1 -1
  334. package/dist/hooks/useFloatingPosition.mjs +2 -2
  335. package/dist/hooks/useFocusTrap.cjs.js +1 -1
  336. package/dist/hooks/useFocusTrap.mjs +4 -15
  337. package/dist/hooks/useFormReset.cjs.js +1 -1
  338. package/dist/hooks/useFormReset.mjs +2 -2
  339. package/dist/hooks/useFormValidation.cjs.js +1 -1
  340. package/dist/hooks/useFormValidation.mjs +2 -2
  341. package/dist/hooks/useHotkeys.cjs.js +1 -1
  342. package/dist/hooks/useHotkeys.mjs +2 -2
  343. package/dist/hooks/useInertOutside.cjs.js +1 -1
  344. package/dist/hooks/useInertOutside.mjs +5 -9
  345. package/dist/hooks/useMediaQuery.cjs.js +1 -1
  346. package/dist/hooks/useMediaQuery.mjs +2 -2
  347. package/dist/hooks/useMergedRef.cjs.js +1 -1
  348. package/dist/hooks/useMergedRef.mjs +2 -2
  349. package/dist/hooks/useOverlayLayer.cjs.js +1 -1
  350. package/dist/hooks/useOverlayLayer.mjs +3 -3
  351. package/dist/hooks/useResponsiveValue.cjs.js +1 -1
  352. package/dist/hooks/useResponsiveValue.mjs +2 -2
  353. package/dist/hooks/useScrollLock.cjs.js +1 -1
  354. package/dist/hooks/useScrollLock.mjs +2 -2
  355. package/dist/hooks/useStorage.cjs.js +1 -1
  356. package/dist/hooks/useStorage.mjs +2 -2
  357. package/dist/hooks/useTiming.cjs.js +1 -1
  358. package/dist/hooks/useTiming.mjs +10 -15
  359. package/dist/hooks/useVirtualizer.cjs.js +1 -1
  360. package/dist/hooks/useVirtualizer.d.ts +13 -0
  361. package/dist/hooks/useVirtualizer.mjs +93 -54
  362. package/dist/i18n/en.mjs +1 -2
  363. package/dist/i18n/merge.mjs +1 -2
  364. package/dist/i18n/plural.mjs +1 -2
  365. package/dist/index.cjs.js +1 -1
  366. package/dist/index.mjs +114 -114
  367. package/dist/locales/ar.mjs +1 -2
  368. package/dist/locales/bn.mjs +1 -2
  369. package/dist/locales/cs.mjs +1 -2
  370. package/dist/locales/da.mjs +1 -2
  371. package/dist/locales/de.mjs +1 -2
  372. package/dist/locales/el.mjs +1 -2
  373. package/dist/locales/es.mjs +1 -2
  374. package/dist/locales/fa.mjs +1 -2
  375. package/dist/locales/fi.mjs +1 -2
  376. package/dist/locales/fr.mjs +1 -2
  377. package/dist/locales/he.mjs +1 -2
  378. package/dist/locales/hi.mjs +1 -2
  379. package/dist/locales/hu.mjs +1 -2
  380. package/dist/locales/id.mjs +1 -2
  381. package/dist/locales/it.mjs +1 -2
  382. package/dist/locales/ja.mjs +1 -2
  383. package/dist/locales/ko.mjs +1 -2
  384. package/dist/locales/nb.mjs +1 -2
  385. package/dist/locales/nl.mjs +1 -2
  386. package/dist/locales/pl.mjs +1 -2
  387. package/dist/locales/pt-BR.mjs +1 -2
  388. package/dist/locales/ro.mjs +1 -2
  389. package/dist/locales/ru.mjs +1 -2
  390. package/dist/locales/sv.mjs +1 -2
  391. package/dist/locales/th.mjs +1 -2
  392. package/dist/locales/tr.mjs +1 -2
  393. package/dist/locales/uk.mjs +1 -2
  394. package/dist/locales/ur.mjs +1 -2
  395. package/dist/locales/vi.mjs +1 -2
  396. package/dist/locales/zh-Hans.mjs +1 -2
  397. package/dist/locales/zh-Hant.mjs +1 -2
  398. package/dist/types/common.mjs +1 -2
  399. package/dist/utils/announce.cjs.js +1 -1
  400. package/dist/utils/announce.mjs +3 -4
  401. package/dist/utils/brandPalette.mjs +1 -2
  402. package/dist/utils/clipboard.mjs +1 -2
  403. package/dist/utils/cx.mjs +1 -2
  404. package/dist/utils/fillSlot.cjs.js +1 -1
  405. package/dist/utils/fillSlot.mjs +2 -2
  406. package/dist/utils/flattenChildren.mjs +1 -2
  407. package/dist/utils/hotkeys.mjs +1 -2
  408. package/dist/utils/intl.cjs.js +1 -0
  409. package/dist/utils/intl.d.ts +10 -0
  410. package/dist/utils/intl.mjs +15 -0
  411. package/dist/utils/refs.mjs +1 -2
  412. package/dist/utils/responsive.mjs +1 -2
  413. package/dist/utils/slot.mjs +1 -2
  414. package/dist/utils/validators.mjs +1 -2
  415. package/dist/vjdesigns-ui.css +1 -1
  416. package/dist/vjdesigns-ui.css.d.ts +2 -0
  417. package/package.json +24 -14
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.4.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,7 +1291,7 @@ 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.
@@ -1265,6 +1310,7 @@ real `<table role="grid">` with `aria-sort`, `aria-selected`,
1265
1310
  - Sticky Header: A long list in a fixed-height area, with the header kept in view.
1266
1311
  - Right To Left: In right-to-left layouts the columns mirror and ArrowRight moves toward the start.
1267
1312
  - 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.
1313
+ - 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.
1268
1314
 
1269
1315
  ## EmptyState
1270
1316
 
@@ -1385,19 +1431,19 @@ import { List } from "@vjdesigns/vjdesigns-ui";
1385
1431
 
1386
1432
  Category: data-display · Storybook: Data Display/List
1387
1433
 
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
1434
+ A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.
1435
+
1436
+ Every variant draws its own markers, so the browser's markers are removed
1437
+ with CSS; `role="list"` is added so Safari and VoiceOver keep announcing
1438
+ the list and its item count.
1439
+
1440
+ This is a list, not a listbox: items are not selectable options and there
1441
+ is no roving focus. Interactive items (`List.ItemButton`, `List.ItemLink`)
1442
+ are ordinary Tab stops. For choosing among options, use a Listbox,
1443
+ Combobox, or Select instead.
1444
+
1445
+ Grouping: put a `List.Subheader` (a real heading by default) before each
1446
+ list and point the list at it with `aria-labelledby`, so screen readers
1401
1447
  announce "Account, list, 3 items".
1402
1448
 
1403
1449
  ### Props
@@ -1417,8 +1463,8 @@ announce "Account, list, 3 items".
1417
1463
 
1418
1464
  Also exported as `ListItem`.
1419
1465
 
1420
- A static list item (`<li>`) with optional `start`, `title`, `description`,
1421
- `meta`, and `end` slots, or plain `children`. For a clickable row, use
1466
+ A static list item (`<li>`) with optional `start`, `title`, `description`,
1467
+ `meta`, and `end` slots, or plain `children`. For a clickable row, use
1422
1468
  `List.ItemButton` or `List.ItemLink`.
1423
1469
 
1424
1470
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1436,14 +1482,14 @@ A static list item (`<li>`) with optional `start`, `title`, `description`,
1436
1482
 
1437
1483
  Also exported as `ListItemButton`.
1438
1484
 
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
1485
+ A list item whose main area is a real `<button>`. The button wraps the
1486
+ title (or `children` when there is no title) and its hit area is
1487
+ stretched over the whole row, so the row is clickable, while `end`
1488
+ actions sit above it and stay independently clickable. Never nest
1489
+ interactive elements in `title` or `description`.
1490
+
1491
+ `className` and `style` go on the row `<li>`; `ref`, `onClick`, `type`,
1492
+ `aria-*`, and every other prop go on the `<button>`. The description and
1447
1493
  meta become the button's accessible description.
1448
1494
 
1449
1495
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1465,12 +1511,12 @@ meta become the button's accessible description.
1465
1511
 
1466
1512
  Also exported as `ListItemLink`.
1467
1513
 
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
1514
+ A list item whose main area is a real `<a>`, stretched over the whole row
1515
+ like `List.ItemButton`. `selected` sets `aria-current="page"` (override
1516
+ with `current`). When `disabled`, the link loses its `href` and is marked
1517
+ `aria-disabled`, so it can't be followed or focused.
1518
+
1519
+ `className` and `style` go on the row `<li>`; everything else, including
1474
1520
  `ref` and `href`, goes on the `<a>`.
1475
1521
 
1476
1522
  - `start`: `ReactNode`. Leading visual: an `Avatar`, an `Icon`, or a thumbnail.
@@ -1492,14 +1538,14 @@ with `current`). When `disabled`, the link loses its `href` and is marked
1492
1538
 
1493
1539
  Also exported as `ListSubheader`.
1494
1540
 
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>
1541
+ An uppercase label for a group of items. Render it before (outside) a
1542
+ `List`, give it an `id`, and pass that id to the list's
1543
+ `aria-labelledby`. It must not go inside the `<ul>`, where it would be
1544
+ counted as an item.
1545
+
1546
+ ```tsx
1547
+ <List.Subheader id="acct">Account</List.Subheader>
1548
+ <List aria-labelledby="acct">...</List>
1503
1549
  ```
1504
1550
 
1505
1551
  - `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 +1682,7 @@ Semantic data table. See `TableRoot` docs above; parts are attached as `Table.*`
1636
1682
 
1637
1683
  Also exported as `TableCaption`.
1638
1684
 
1639
- The table's title (`<caption>`). It names the table and, when the table
1685
+ The table's title (`<caption>`). It names the table and, when the table
1640
1686
  scrolls, its scroll region. Strongly recommended on every table.
1641
1687
 
1642
1688
  - Plus every native `<caption>` attribute.
@@ -1678,9 +1724,9 @@ A table row (`<tr>`).
1678
1724
 
1679
1725
  Also exported as `TableHeaderCell`.
1680
1726
 
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
1727
+ A header cell (`<th>`). With `sortable`, the whole cell is a real
1728
+ `<button>` and the header carries `aria-sort` while it is the sorted column.
1729
+ The sort icon shows the direction by shape (up arrow, down arrow, or a
1684
1730
  neutral double arrow), not by color alone.
1685
1731
 
1686
1732
  - `align`: `TableCellAlign` (default "start" ("end" when `numeric`)). Horizontal alignment.
@@ -1710,8 +1756,8 @@ A data cell (`<td>`).
1710
1756
 
1711
1757
  Also exported as `TableSelectCell`.
1712
1758
 
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
1759
+ A data cell holding the row's selection checkbox. Pair with `selected` on
1760
+ the `Table.Row`. Give it a `rowLabel` (or `checkboxLabel`) so each
1715
1761
  checkbox has a unique accessible name.
1716
1762
 
1717
1763
  - `checked`: `boolean` (required). Whether the row is selected.
@@ -1725,7 +1771,7 @@ checkbox has a unique accessible name.
1725
1771
 
1726
1772
  Also exported as `TableSelectAllCell`.
1727
1773
 
1728
- A header cell (`<th scope="col">`) with a "select all" checkbox. Shows the
1774
+ A header cell (`<th scope="col">`) with a "select all" checkbox. Shows the
1729
1775
  mixed state (`aria-checked="mixed"`) when some rows are selected.
1730
1776
 
1731
1777
  - `checked`: `boolean` (required). Whether every row is selected.
@@ -2800,6 +2846,7 @@ and size are wired automatically, as with `Input`.
2800
2846
  - Required: `required` blocks native form submission until an option is chosen (`setCustomValidity` on the text input).
2801
2847
  - Clear On Escape: `clearOnEscape`: once the text matches the selection, Escape also clears the selection.
2802
2848
  - 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.
2849
+ - 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
2850
 
2804
2851
  ## DatePicker
2805
2852
 
@@ -3197,7 +3244,7 @@ import { FileUpload } from "@vjdesigns/vjdesigns-ui";
3197
3244
 
3198
3245
  Category: forms · Storybook: Forms/FileUpload
3199
3246
 
3200
- File picker with drag and drop, validation, and a file list.
3247
+ File picker with drag and drop, validation, and a file list.
3201
3248
  `FileUpload.List` is the standalone list for custom layouts.
3202
3249
 
3203
3250
  ### Props
@@ -3236,13 +3283,13 @@ File picker with drag and drop, validation, and a file list.
3236
3283
 
3237
3284
  Also exported as `FileUploadList`.
3238
3285
 
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.
3286
+ The list of selected files: icon or image thumbnail, name (truncated, full
3287
+ name on hover and focus), formatted size, optional upload progress and
3288
+ status, and a remove button per file. `FileUpload` renders one for you;
3289
+ use `FileUpload.List` directly for custom layouts.
3290
+
3291
+ After a removal, focus moves to the next item's remove button (or the
3292
+ previous one), then to `focusFallback` when the list becomes empty.
3246
3293
  Upload completions and failures are announced in a polite live region.
3247
3294
 
3248
3295
  - `files`: `File[]` (required). The files to show.
@@ -3340,21 +3387,21 @@ import { NumberInput } from "@vjdesigns/vjdesigns-ui";
3340
3387
 
3341
3388
  Category: forms · Storybook: Forms/NumberInput
3342
3389
 
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>
3390
+ A numeric text field following the WAI-ARIA spinbutton pattern. The
3391
+ `<input>` itself is the spinbutton: it takes focus, exposes
3392
+ `aria-valuenow`/`min`/`max`/`valuetext`, and handles ArrowUp/Down,
3393
+ PageUp/Down, Home/End, and Enter. Stepper buttons are pointer
3394
+ conveniences (press and hold to repeat) and stay out of the tab order.
3395
+
3396
+ Shows a formatted value (`Intl.NumberFormat`) when not focused and the
3397
+ plain editable number while focused; parses locale input (group
3398
+ separators, decimal comma). Built on `Input`, so size, variant, radius,
3399
+ addons, and `Field` wiring match every other text field.
3400
+
3401
+ ```tsx
3402
+ <Field label="Weight">
3403
+ <NumberInput min={0} step={2.5} endAddon="kg" defaultValue={60} />
3404
+ </Field>
3358
3405
  ```
3359
3406
 
3360
3407
  ### Props
@@ -6735,9 +6782,9 @@ import { Tooltip } from "@vjdesigns/vjdesigns-ui";
6735
6782
 
6736
6783
  Category: overlays · Storybook: Overlays/Tooltip
6737
6784
 
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
6785
+ A short, non-interactive label or description that appears on hover and on
6786
+ keyboard focus. Follows the WAI-ARIA tooltip pattern and WCAG 1.4.13: it
6787
+ can be dismissed with Escape, the pointer can move onto it, and it stays
6741
6788
  open until the pointer or focus leaves. Use `Popover` for interactive content.
6742
6789
 
6743
6790
  ### Props
@@ -6780,7 +6827,7 @@ import { TooltipProvider } from "@vjdesigns/vjdesigns-ui";
6780
6827
 
6781
6828
  Category: overlays · Storybook: Overlays/Tooltip
6782
6829
 
6783
- Optional. Sets shared timing for the tooltips inside it. Tooltips work
6830
+ Optional. Sets shared timing for the tooltips inside it. Tooltips work
6784
6831
  without a provider, using the defaults.
6785
6832
 
6786
6833
  ### Props
@@ -7943,6 +7990,16 @@ typing in that element.
7943
7990
  <Textarea onKeyDown={getHotkeyHandler([["mod+enter", send]])} />
7944
7991
  ```
7945
7992
 
7993
+ ## withExtraItems
7994
+
7995
+ ```ts
7996
+ withExtraItems(virtualizer: Virtualizer, extra: readonly number[]): VirtualItem[]
7997
+ ```
7998
+
7999
+ The window's items plus extra indices that must stay rendered even when
8000
+ scrolled out of view (a focused row, a highlighted option), in order.
8001
+ Render spacers between non-adjacent items from their `start` / `end`.
8002
+
7946
8003
  ## cx
7947
8004
 
7948
8005
  ```ts