@astryxdesign/core 0.1.8 → 0.1.9-canary.02ef052

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 (728) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/dist/AppShell/AppShell.d.ts.map +1 -1
  3. package/dist/AppShell/AppShell.js +6 -2
  4. package/dist/AppShell/AppShellMobileContext.d.ts +8 -0
  5. package/dist/AppShell/AppShellMobileContext.d.ts.map +1 -1
  6. package/dist/Avatar/Avatar.d.ts +58 -3
  7. package/dist/Avatar/Avatar.d.ts.map +1 -1
  8. package/dist/Avatar/Avatar.js +240 -53
  9. package/dist/Avatar/AvatarStatusDot.d.ts +35 -5
  10. package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
  11. package/dist/Avatar/AvatarStatusDot.js +144 -19
  12. package/dist/AvatarGroup/AvatarGroup.d.ts +7 -1
  13. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  14. package/dist/AvatarGroup/AvatarGroup.js +58 -6
  15. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  16. package/dist/AvatarGroup/AvatarGroupOverflow.js +1 -0
  17. package/dist/Banner/Banner.d.ts +9 -1
  18. package/dist/Banner/Banner.d.ts.map +1 -1
  19. package/dist/Banner/Banner.js +33 -4
  20. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +31 -2
  21. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +215 -6
  23. package/dist/Breadcrumbs/index.d.ts +6 -0
  24. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  25. package/dist/Breadcrumbs/index.js +10 -1
  26. package/dist/Button/Button.d.ts +8 -2
  27. package/dist/Button/Button.d.ts.map +1 -1
  28. package/dist/Button/Button.js +33 -4
  29. package/dist/ButtonGroup/ButtonGroup.d.ts +9 -1
  30. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  31. package/dist/ButtonGroup/ButtonGroup.js +30 -1
  32. package/dist/Calendar/Calendar.d.ts.map +1 -1
  33. package/dist/Calendar/Calendar.js +80 -11
  34. package/dist/Calendar/dayCellUtils.d.ts +4 -4
  35. package/dist/Calendar/dayCellUtils.js +3 -3
  36. package/dist/Calendar/styles.d.ts +30 -31
  37. package/dist/Calendar/styles.d.ts.map +1 -1
  38. package/dist/Calendar/styles.js +30 -31
  39. package/dist/Card/Card.d.ts +8 -2
  40. package/dist/Card/Card.d.ts.map +1 -1
  41. package/dist/Card/Card.js +28 -2
  42. package/dist/Carousel/Carousel.d.ts +4 -1
  43. package/dist/Carousel/Carousel.d.ts.map +1 -1
  44. package/dist/Carousel/Carousel.js +46 -16
  45. package/dist/Chat/ChatComposer.d.ts +8 -0
  46. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  47. package/dist/Chat/ChatComposer.js +46 -7
  48. package/dist/Chat/ChatComposerDrawer.d.ts +2 -0
  49. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  50. package/dist/Chat/ChatComposerDrawer.js +11 -1
  51. package/dist/Chat/ChatComposerInput.d.ts +20 -3
  52. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  53. package/dist/Chat/ChatComposerInput.js +36 -4
  54. package/dist/Chat/ChatContext.d.ts +33 -0
  55. package/dist/Chat/ChatContext.d.ts.map +1 -1
  56. package/dist/Chat/ChatContext.js +16 -2
  57. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  58. package/dist/Chat/ChatDictationButton.js +4 -2
  59. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  60. package/dist/Chat/ChatLayout.js +4 -4
  61. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  62. package/dist/Chat/ChatLayoutScrollButton.js +4 -4
  63. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  64. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  65. package/dist/Chat/ChatSendButton.js +7 -1
  66. package/dist/Chat/ChatToolCalls.d.ts +5 -1
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +27 -11
  69. package/dist/Chat/index.d.ts +2 -1
  70. package/dist/Chat/index.d.ts.map +1 -1
  71. package/dist/Chat/index.js +1 -1
  72. package/dist/Chat/useChatStreamScroll.d.ts +2 -1
  73. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  74. package/dist/Chat/useChatStreamScroll.js +22 -8
  75. package/dist/Chat/useSpeechRecognition.d.ts +0 -1
  76. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  77. package/dist/Chat/useSpeechRecognition.js +1 -1
  78. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  79. package/dist/Chat/useTriggerMenu.js +2 -2
  80. package/dist/CheckboxInput/CheckboxInput.js +5 -5
  81. package/dist/CheckboxList/CheckboxListItem.d.ts +20 -1
  82. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  83. package/dist/CheckboxList/CheckboxListItem.js +11 -1
  84. package/dist/Citation/Citation.d.ts +22 -1
  85. package/dist/Citation/Citation.d.ts.map +1 -1
  86. package/dist/Citation/Citation.js +20 -6
  87. package/dist/ClickableCard/ClickableCard.d.ts +9 -2
  88. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  89. package/dist/ClickableCard/ClickableCard.js +5 -2
  90. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  91. package/dist/CodeBlock/CodeBlock.js +22 -9
  92. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  93. package/dist/Collapsible/Collapsible.js +3 -1
  94. package/dist/CommandPalette/CommandPalette.d.ts +2 -2
  95. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  96. package/dist/CommandPalette/CommandPalette.js +45 -4
  97. package/dist/CommandPalette/CommandPaletteGroup.d.ts.map +1 -1
  98. package/dist/CommandPalette/CommandPaletteGroup.js +9 -2
  99. package/dist/CommandPalette/CommandPaletteInput.d.ts +7 -1
  100. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  101. package/dist/CommandPalette/CommandPaletteInput.js +6 -1
  102. package/dist/CommandPalette/CommandPaletteItem.js +1 -1
  103. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  104. package/dist/ContextMenu/ContextMenu.js +14 -5
  105. package/dist/ContextMenu/index.d.ts +1 -0
  106. package/dist/ContextMenu/index.d.ts.map +1 -1
  107. package/dist/ContextMenu/index.js +3 -1
  108. package/dist/DateInput/DateInput.d.ts +56 -2
  109. package/dist/DateInput/DateInput.d.ts.map +1 -1
  110. package/dist/DateInput/DateInput.js +59 -21
  111. package/dist/DateInput/index.d.ts +1 -1
  112. package/dist/DateInput/index.d.ts.map +1 -1
  113. package/dist/DateRangeInput/DateRangeInput.d.ts +10 -2
  114. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  115. package/dist/DateRangeInput/DateRangeInput.js +23 -20
  116. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  117. package/dist/DateTimeInput/DateTimeInput.js +33 -19
  118. package/dist/Dialog/Dialog.d.ts +3 -0
  119. package/dist/Dialog/Dialog.d.ts.map +1 -1
  120. package/dist/Dialog/Dialog.js +57 -6
  121. package/dist/Dialog/DialogContext.d.ts +7 -0
  122. package/dist/Dialog/DialogContext.d.ts.map +1 -1
  123. package/dist/Dialog/DialogContext.js +2 -2
  124. package/dist/Dialog/DialogHeader.d.ts +5 -2
  125. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  126. package/dist/Dialog/DialogHeader.js +6 -1
  127. package/dist/Divider/Divider.js +1 -1
  128. package/dist/DropdownMenu/DropdownMenu.d.ts +6 -0
  129. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  130. package/dist/DropdownMenu/DropdownMenu.js +22 -5
  131. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +1 -2
  132. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  133. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +5 -3
  134. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  135. package/dist/DropdownMenu/DropdownMenuItem.js +5 -2
  136. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -2
  137. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
  138. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +1 -2
  139. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  140. package/dist/DropdownMenu/DropdownMenuRadioItem.js +4 -1
  141. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +104 -0
  142. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -0
  143. package/dist/DropdownMenu/DropdownMenuSubMenu.js +427 -0
  144. package/dist/DropdownMenu/index.d.ts +10 -0
  145. package/dist/DropdownMenu/index.d.ts.map +1 -1
  146. package/dist/DropdownMenu/index.js +13 -0
  147. package/dist/DropdownMenu/menuItemHover.d.ts +23 -0
  148. package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -0
  149. package/dist/DropdownMenu/menuItemHover.js +33 -0
  150. package/dist/DropdownMenu/menuItemRoles.d.ts +8 -0
  151. package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -1
  152. package/dist/DropdownMenu/menuItemRoles.js +10 -1
  153. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  154. package/dist/DropdownMenu/renderDropdownItems.js +21 -6
  155. package/dist/Field/Field.d.ts +3 -1
  156. package/dist/Field/Field.d.ts.map +1 -1
  157. package/dist/Field/Field.js +6 -4
  158. package/dist/Field/FieldLabel.d.ts +1 -1
  159. package/dist/Field/FieldLabel.d.ts.map +1 -1
  160. package/dist/Field/FieldLabel.js +43 -16
  161. package/dist/Field/inputStyles.stylex.d.ts +1 -0
  162. package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
  163. package/dist/Field/inputStyles.stylex.js +1 -0
  164. package/dist/FieldStatus/FieldStatus.d.ts +18 -0
  165. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  166. package/dist/FieldStatus/FieldStatus.js +60 -6
  167. package/dist/FileInput/FileInput.d.ts +10 -2
  168. package/dist/FileInput/FileInput.d.ts.map +1 -1
  169. package/dist/FileInput/FileInput.js +54 -35
  170. package/dist/HoverCard/HoverCard.d.ts +9 -1
  171. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  172. package/dist/HoverCard/HoverCard.js +2 -0
  173. package/dist/HoverCard/useHoverCard.d.ts +8 -0
  174. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  175. package/dist/HoverCard/useHoverCard.js +17 -6
  176. package/dist/Icon/Icon.d.ts +22 -3
  177. package/dist/Icon/Icon.d.ts.map +1 -1
  178. package/dist/Icon/Icon.js +19 -3
  179. package/dist/Item/Item.d.ts +6 -1
  180. package/dist/Item/Item.d.ts.map +1 -1
  181. package/dist/Item/Item.js +22 -1
  182. package/dist/Layer/useLayer.d.ts +6 -0
  183. package/dist/Layer/useLayer.d.ts.map +1 -1
  184. package/dist/Layer/useLayer.js +2 -0
  185. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  186. package/dist/Lightbox/Lightbox.js +19 -13
  187. package/dist/Markdown/Markdown.d.ts.map +1 -1
  188. package/dist/Markdown/Markdown.js +7 -0
  189. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  190. package/dist/MobileNav/MobileNav.js +6 -1
  191. package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
  192. package/dist/MobileNav/MobileNavToggle.js +4 -0
  193. package/dist/MultiSelector/MultiSelector.d.ts +9 -1
  194. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  195. package/dist/MultiSelector/MultiSelector.js +104 -50
  196. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  197. package/dist/MultiSelector/hooks.js +16 -0
  198. package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
  199. package/dist/NumberInput/NumberInput.d.ts +10 -2
  200. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  201. package/dist/NumberInput/NumberInput.js +22 -17
  202. package/dist/Outline/Outline.d.ts +0 -1
  203. package/dist/Outline/Outline.d.ts.map +1 -1
  204. package/dist/Outline/Outline.js +0 -1
  205. package/dist/OverflowList/OverflowList.d.ts +20 -3
  206. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  207. package/dist/OverflowList/OverflowList.js +29 -4
  208. package/dist/Pagination/Pagination.d.ts.map +1 -1
  209. package/dist/Pagination/Pagination.js +11 -3
  210. package/dist/Popover/Popover.d.ts.map +1 -1
  211. package/dist/Popover/Popover.js +3 -2
  212. package/dist/Popover/usePopover.d.ts.map +1 -1
  213. package/dist/Popover/usePopover.js +3 -9
  214. package/dist/PowerSearch/PowerSearch.d.ts +9 -2
  215. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  216. package/dist/PowerSearch/PowerSearch.js +2 -0
  217. package/dist/PowerSearch/PowerSearchEditPopover.js +1 -1
  218. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  219. package/dist/RadioList/RadioList.d.ts +2 -2
  220. package/dist/RadioList/RadioListItem.js +4 -4
  221. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  222. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  223. package/dist/SegmentedControl/SegmentedControlItem.js +2 -1
  224. package/dist/SelectableCard/SelectableCard.d.ts +9 -2
  225. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  226. package/dist/SelectableCard/SelectableCard.js +16 -13
  227. package/dist/Selector/Selector.d.ts +8 -0
  228. package/dist/Selector/Selector.d.ts.map +1 -1
  229. package/dist/Selector/Selector.js +65 -19
  230. package/dist/Selector/hooks.d.ts.map +1 -1
  231. package/dist/Selector/hooks.js +16 -0
  232. package/dist/SideNav/SideNav.d.ts.map +1 -1
  233. package/dist/SideNav/SideNav.js +5 -5
  234. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  235. package/dist/SideNav/SideNavCollapseButton.js +13 -10
  236. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  237. package/dist/SideNav/SideNavHeading.js +21 -8
  238. package/dist/SideNav/SideNavItem.d.ts +1 -1
  239. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  240. package/dist/SideNav/SideNavItem.js +12 -10
  241. package/dist/Slider/Slider.d.ts.map +1 -1
  242. package/dist/Slider/Slider.js +106 -36
  243. package/dist/Stack/stack.stylex.d.ts +9 -9
  244. package/dist/Switch/Switch.d.ts +8 -1
  245. package/dist/Switch/Switch.d.ts.map +1 -1
  246. package/dist/Switch/Switch.js +160 -91
  247. package/dist/TabList/Tab.js +2 -2
  248. package/dist/TabList/TabMenu.js +1 -1
  249. package/dist/Table/BaseTable.d.ts.map +1 -1
  250. package/dist/Table/BaseTable.js +33 -6
  251. package/dist/Table/TableCell.js +3 -3
  252. package/dist/Table/TableHeaderCell.js +3 -3
  253. package/dist/Table/index.d.ts +2 -0
  254. package/dist/Table/index.d.ts.map +1 -1
  255. package/dist/Table/index.js +1 -0
  256. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  257. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +15 -11
  258. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  259. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +36 -26
  260. package/dist/Table/plugins/rowStatus/index.d.ts +3 -0
  261. package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -0
  262. package/dist/Table/plugins/rowStatus/index.js +3 -0
  263. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +60 -0
  264. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -0
  265. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +145 -0
  266. package/dist/Table/plugins/selection/useTableSelection.d.ts +13 -0
  267. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  268. package/dist/Table/plugins/selection/useTableSelection.js +7 -1
  269. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +1 -1
  270. package/dist/Table/plugins/tree/useTableTreeData.d.ts +16 -0
  271. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  272. package/dist/Table/plugins/tree/useTableTreeData.js +105 -12
  273. package/dist/Table/plugins/tree/useTableTreeState.d.ts +6 -0
  274. package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -1
  275. package/dist/Table/plugins/tree/useTableTreeState.js +22 -1
  276. package/dist/Table/types.d.ts +32 -0
  277. package/dist/Table/types.d.ts.map +1 -1
  278. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  279. package/dist/Table/useBaseTablePlugins.js +5 -3
  280. package/dist/TextArea/TextArea.d.ts +10 -1
  281. package/dist/TextArea/TextArea.d.ts.map +1 -1
  282. package/dist/TextArea/TextArea.js +18 -19
  283. package/dist/TextInput/TextInput.d.ts +10 -2
  284. package/dist/TextInput/TextInput.d.ts.map +1 -1
  285. package/dist/TextInput/TextInput.js +20 -17
  286. package/dist/Thumbnail/Thumbnail.d.ts +26 -5
  287. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  288. package/dist/Thumbnail/Thumbnail.js +97 -54
  289. package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +9 -0
  290. package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +1 -0
  291. package/dist/Thumbnail/thumbnail.markers.stylex.js +14 -0
  292. package/dist/TimeInput/TimeInput.d.ts +10 -2
  293. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  294. package/dist/TimeInput/TimeInput.js +32 -21
  295. package/dist/Timestamp/Timestamp.d.ts +3 -1
  296. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  297. package/dist/Timestamp/Timestamp.js +8 -6
  298. package/dist/Toast/useToast.d.ts.map +1 -1
  299. package/dist/Toast/useToast.js +2 -5
  300. package/dist/ToggleButton/ToggleButtonGroup.d.ts +0 -1
  301. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  302. package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
  303. package/dist/Token/Token.d.ts +30 -3
  304. package/dist/Token/Token.d.ts.map +1 -1
  305. package/dist/Token/Token.js +17 -2
  306. package/dist/Token/index.d.ts +1 -1
  307. package/dist/Token/index.d.ts.map +1 -1
  308. package/dist/Tokenizer/Tokenizer.d.ts +10 -3
  309. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  310. package/dist/Tokenizer/Tokenizer.js +20 -6
  311. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  312. package/dist/Tooltip/useTooltip.js +17 -1
  313. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  314. package/dist/TopNav/TopNavHeading.js +18 -8
  315. package/dist/TopNav/TopNavMegaMenu.js +10 -4
  316. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +9 -1
  317. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  318. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +8 -1
  319. package/dist/TopNav/TopNavMenu.d.ts +2 -1
  320. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  321. package/dist/TopNav/TopNavMenu.js +68 -6
  322. package/dist/TreeList/TreeList.d.ts +12 -3
  323. package/dist/TreeList/TreeList.d.ts.map +1 -1
  324. package/dist/TreeList/TreeList.js +3 -0
  325. package/dist/TreeList/TreeListBranches.d.ts +5 -0
  326. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  327. package/dist/TreeList/TreeListBranches.js +18 -10
  328. package/dist/TreeList/TreeListItem.d.ts +8 -2
  329. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  330. package/dist/TreeList/TreeListItem.js +59 -21
  331. package/dist/TreeList/TreeListTypes.d.ts +25 -1
  332. package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
  333. package/dist/TreeList/index.d.ts +2 -2
  334. package/dist/TreeList/index.d.ts.map +1 -1
  335. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  336. package/dist/Typeahead/BaseTypeahead.js +20 -11
  337. package/dist/Typeahead/Typeahead.d.ts +9 -2
  338. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  339. package/dist/Typeahead/Typeahead.js +3 -1
  340. package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
  341. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  342. package/dist/Typeahead/TypeaheadItem.js +20 -10
  343. package/dist/astryx.css +61 -39
  344. package/dist/astryx.umd.js +53 -53
  345. package/dist/astryx.umd.js.map +4 -4
  346. package/dist/authoring/doc.d.ts.map +1 -1
  347. package/dist/docs-types.d.ts +8 -0
  348. package/dist/docs-types.d.ts.map +1 -1
  349. package/dist/hooks/computeOverflow.d.ts +47 -0
  350. package/dist/hooks/computeOverflow.d.ts.map +1 -0
  351. package/dist/hooks/computeOverflow.js +213 -0
  352. package/dist/hooks/index.d.ts +3 -0
  353. package/dist/hooks/index.d.ts.map +1 -1
  354. package/dist/hooks/index.js +3 -1
  355. package/dist/hooks/isRtlElement.d.ts +18 -0
  356. package/dist/hooks/isRtlElement.d.ts.map +1 -0
  357. package/dist/hooks/isRtlElement.js +27 -0
  358. package/dist/hooks/useDevWarning.d.ts +18 -0
  359. package/dist/hooks/useDevWarning.d.ts.map +1 -0
  360. package/dist/hooks/useDevWarning.js +49 -0
  361. package/dist/hooks/useGridFocus.d.ts +6 -1
  362. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  363. package/dist/hooks/useGridFocus.js +12 -9
  364. package/dist/hooks/useInputStatusIcon.d.ts +38 -0
  365. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -0
  366. package/dist/hooks/useInputStatusIcon.js +158 -0
  367. package/dist/hooks/useListFocus.d.ts +39 -1
  368. package/dist/hooks/useListFocus.d.ts.map +1 -1
  369. package/dist/hooks/useListFocus.js +54 -9
  370. package/dist/hooks/useOverflow.d.ts +19 -0
  371. package/dist/hooks/useOverflow.d.ts.map +1 -1
  372. package/dist/hooks/useOverflow.js +36 -25
  373. package/dist/i18n/InternationalizationContext.d.ts +1 -0
  374. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  375. package/dist/i18n/InternationalizationContext.js +3 -0
  376. package/dist/i18n/InternationalizationProvider.d.ts +8 -1
  377. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  378. package/dist/i18n/InternationalizationProvider.js +5 -1
  379. package/dist/i18n/getLocaleDirection.d.ts +18 -0
  380. package/dist/i18n/getLocaleDirection.d.ts.map +1 -0
  381. package/dist/i18n/getLocaleDirection.js +29 -0
  382. package/dist/i18n/index.d.ts +6 -0
  383. package/dist/i18n/index.d.ts.map +1 -1
  384. package/dist/i18n/index.js +7 -1
  385. package/dist/i18n/resolve.d.ts.map +1 -1
  386. package/dist/i18n/resolve.js +7 -18
  387. package/dist/i18n/useDirection.d.ts +2 -0
  388. package/dist/i18n/useDirection.d.ts.map +1 -0
  389. package/dist/i18n/useDirection.js +27 -0
  390. package/dist/theme/Theme.d.ts.map +1 -1
  391. package/dist/theme/Theme.js +2 -7
  392. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  393. package/dist/theme/derivedVarRegistry.js +13 -0
  394. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  395. package/dist/theme/generateThemeRules.js +51 -0
  396. package/dist/theme/hct.d.ts +0 -1
  397. package/dist/theme/hct.d.ts.map +1 -1
  398. package/dist/theme/hct.js +1 -1
  399. package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
  400. package/dist/theme/syntax/defineSyntaxTheme.js +2 -1
  401. package/dist/utils/devWarning.d.ts +42 -0
  402. package/dist/utils/devWarning.d.ts.map +1 -0
  403. package/dist/utils/devWarning.js +88 -0
  404. package/dist/utils/index.d.ts +4 -1
  405. package/dist/utils/index.d.ts.map +1 -1
  406. package/dist/utils/index.js +4 -2
  407. package/dist/utils/plainDate.d.ts +30 -0
  408. package/dist/utils/plainDate.d.ts.map +1 -1
  409. package/dist/utils/plainDate.js +65 -3
  410. package/dist/utils/rtlStyles.d.ts +24 -0
  411. package/dist/utils/rtlStyles.d.ts.map +1 -0
  412. package/dist/utils/rtlStyles.js +27 -0
  413. package/dist/utils/types.d.ts +13 -0
  414. package/dist/utils/types.d.ts.map +1 -1
  415. package/locales/en.json +104 -0
  416. package/locales/fr-FR.json +14 -0
  417. package/locales/pseudo.json +78 -0
  418. package/package.json +6 -1
  419. package/src/AppShell/AppShell.tsx +6 -0
  420. package/src/AppShell/AppShellMobileContext.tsx +8 -0
  421. package/src/AppShell/useAppShellMobile.doc.mjs +8 -0
  422. package/src/Avatar/Avatar.doc.mjs +64 -5
  423. package/src/Avatar/Avatar.test.tsx +374 -1
  424. package/src/Avatar/Avatar.tsx +367 -69
  425. package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
  426. package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
  427. package/src/Avatar/AvatarStatusDot.tsx +180 -21
  428. package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
  429. package/src/AvatarGroup/AvatarGroup.test.tsx +141 -1
  430. package/src/AvatarGroup/AvatarGroup.tsx +58 -3
  431. package/src/AvatarGroup/AvatarGroupOverflow.tsx +1 -0
  432. package/src/Banner/Banner.doc.mjs +9 -0
  433. package/src/Banner/Banner.test.tsx +30 -0
  434. package/src/Banner/Banner.tsx +53 -9
  435. package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +26 -0
  436. package/src/Breadcrumbs/BreadcrumbItem.tsx +333 -14
  437. package/src/Breadcrumbs/Breadcrumbs.doc.mjs +2 -0
  438. package/src/Breadcrumbs/Breadcrumbs.test.tsx +335 -2
  439. package/src/Breadcrumbs/index.ts +31 -0
  440. package/src/Button/Button.doc.mjs +9 -4
  441. package/src/Button/Button.test.tsx +49 -0
  442. package/src/Button/Button.tsx +27 -3
  443. package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -0
  444. package/src/ButtonGroup/ButtonGroup.test.tsx +37 -0
  445. package/src/ButtonGroup/ButtonGroup.tsx +32 -0
  446. package/src/Calendar/Calendar.doc.mjs +12 -1
  447. package/src/Calendar/Calendar.test.tsx +362 -19
  448. package/src/Calendar/Calendar.tsx +111 -32
  449. package/src/Calendar/dayCellUtils.test.ts +23 -18
  450. package/src/Calendar/dayCellUtils.ts +3 -3
  451. package/src/Calendar/styles.ts +33 -39
  452. package/src/Card/Card.doc.mjs +9 -0
  453. package/src/Card/Card.test.tsx +21 -3
  454. package/src/Card/Card.tsx +35 -2
  455. package/src/Carousel/Carousel.doc.mjs +1 -0
  456. package/src/Carousel/Carousel.test.tsx +53 -0
  457. package/src/Carousel/Carousel.tsx +59 -10
  458. package/src/Chat/ChatComposer.doc.mjs +12 -3
  459. package/src/Chat/ChatComposer.test.tsx +115 -0
  460. package/src/Chat/ChatComposer.tsx +73 -9
  461. package/src/Chat/ChatComposerDrawer.test.tsx +61 -0
  462. package/src/Chat/ChatComposerDrawer.tsx +11 -1
  463. package/src/Chat/ChatComposerInput.doc.mjs +7 -0
  464. package/src/Chat/ChatComposerInput.test.tsx +103 -0
  465. package/src/Chat/ChatComposerInput.tsx +51 -5
  466. package/src/Chat/ChatContext.tsx +37 -10
  467. package/src/Chat/ChatDictationButton.tsx +11 -2
  468. package/src/Chat/ChatLayout.tsx +7 -5
  469. package/src/Chat/ChatLayoutScrollButton.tsx +7 -2
  470. package/src/Chat/ChatMessageMetadata.tsx +1 -2
  471. package/src/Chat/ChatSendButton.tsx +11 -1
  472. package/src/Chat/ChatToolCalls.test.tsx +64 -0
  473. package/src/Chat/ChatToolCalls.tsx +33 -5
  474. package/src/Chat/index.ts +5 -1
  475. package/src/Chat/useChatStreamScroll.test.tsx +49 -0
  476. package/src/Chat/useChatStreamScroll.ts +27 -10
  477. package/src/Chat/useSpeechRecognition.ts +1 -1
  478. package/src/Chat/useTriggerMenu.tsx +4 -2
  479. package/src/CheckboxInput/CheckboxInput.doc.mjs +6 -0
  480. package/src/CheckboxInput/CheckboxInput.test.tsx +32 -1
  481. package/src/CheckboxInput/CheckboxInput.tsx +5 -5
  482. package/src/CheckboxList/CheckboxList.doc.mjs +6 -0
  483. package/src/CheckboxList/CheckboxList.test.tsx +81 -3
  484. package/src/CheckboxList/CheckboxListItem.doc.mjs +33 -5
  485. package/src/CheckboxList/CheckboxListItem.tsx +41 -5
  486. package/src/Citation/Citation.doc.mjs +4 -3
  487. package/src/Citation/Citation.test.tsx +97 -0
  488. package/src/Citation/Citation.tsx +43 -11
  489. package/src/ClickableCard/ClickableCard.doc.mjs +2 -0
  490. package/src/ClickableCard/ClickableCard.test.tsx +34 -0
  491. package/src/ClickableCard/ClickableCard.tsx +13 -3
  492. package/src/CodeBlock/CodeBlock.test.tsx +56 -0
  493. package/src/CodeBlock/CodeBlock.tsx +45 -10
  494. package/src/Collapsible/Collapsible.doc.mjs +1 -0
  495. package/src/Collapsible/Collapsible.test.tsx +7 -0
  496. package/src/Collapsible/Collapsible.tsx +16 -6
  497. package/src/CommandPalette/CommandPalette.doc.mjs +1 -0
  498. package/src/CommandPalette/CommandPalette.test.tsx +95 -1
  499. package/src/CommandPalette/CommandPalette.tsx +44 -3
  500. package/src/CommandPalette/CommandPaletteGroup.test.tsx +71 -0
  501. package/src/CommandPalette/CommandPaletteGroup.tsx +12 -1
  502. package/src/CommandPalette/CommandPaletteInput.doc.mjs +26 -9
  503. package/src/CommandPalette/CommandPaletteInput.test.tsx +34 -0
  504. package/src/CommandPalette/CommandPaletteInput.tsx +11 -0
  505. package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
  506. package/src/ContextMenu/ContextMenu.test.tsx +235 -0
  507. package/src/ContextMenu/ContextMenu.tsx +13 -11
  508. package/src/ContextMenu/index.ts +5 -0
  509. package/src/DateInput/DateInput.doc.mjs +41 -0
  510. package/src/DateInput/DateInput.test.tsx +338 -0
  511. package/src/DateInput/DateInput.tsx +119 -32
  512. package/src/DateInput/index.ts +1 -0
  513. package/src/DateRangeInput/DateRangeInput.doc.mjs +16 -0
  514. package/src/DateRangeInput/DateRangeInput.test.tsx +140 -0
  515. package/src/DateRangeInput/DateRangeInput.tsx +42 -30
  516. package/src/DateTimeInput/DateTimeInput.doc.mjs +22 -1
  517. package/src/DateTimeInput/DateTimeInput.test.tsx +147 -0
  518. package/src/DateTimeInput/DateTimeInput.tsx +58 -41
  519. package/src/Dialog/Dialog.doc.mjs +2 -2
  520. package/src/Dialog/Dialog.test.tsx +77 -4
  521. package/src/Dialog/Dialog.tsx +89 -5
  522. package/src/Dialog/DialogContext.ts +9 -2
  523. package/src/Dialog/DialogHeader.doc.mjs +2 -2
  524. package/src/Dialog/DialogHeader.tsx +9 -2
  525. package/src/Divider/Divider.tsx +2 -2
  526. package/src/DropdownMenu/DropdownMenu.test.tsx +229 -0
  527. package/src/DropdownMenu/DropdownMenu.tsx +31 -12
  528. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +9 -4
  529. package/src/DropdownMenu/DropdownMenuItem.tsx +9 -3
  530. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +1 -2
  531. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +8 -2
  532. package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +88 -0
  533. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +635 -0
  534. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +553 -0
  535. package/src/DropdownMenu/index.ts +16 -0
  536. package/src/DropdownMenu/menuItemHover.ts +39 -0
  537. package/src/DropdownMenu/menuItemRoles.ts +9 -0
  538. package/src/DropdownMenu/renderDropdownItems.tsx +29 -15
  539. package/src/Field/Field.test.tsx +57 -12
  540. package/src/Field/Field.tsx +20 -14
  541. package/src/Field/FieldLabel.tsx +9 -1
  542. package/src/Field/inputStyles.stylex.ts +2 -0
  543. package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
  544. package/src/FieldStatus/FieldStatus.test.tsx +150 -40
  545. package/src/FieldStatus/FieldStatus.tsx +69 -5
  546. package/src/FileInput/FileInput.doc.mjs +23 -2
  547. package/src/FileInput/FileInput.test.tsx +135 -12
  548. package/src/FileInput/FileInput.tsx +65 -51
  549. package/src/HoverCard/HoverCard.doc.mjs +13 -0
  550. package/src/HoverCard/HoverCard.test.tsx +21 -2
  551. package/src/HoverCard/HoverCard.tsx +11 -0
  552. package/src/HoverCard/useHoverCard.doc.mjs +2 -0
  553. package/src/HoverCard/useHoverCard.tsx +39 -5
  554. package/src/Icon/Icon.doc.mjs +16 -2
  555. package/src/Icon/Icon.test.tsx +89 -0
  556. package/src/Icon/Icon.tsx +58 -5
  557. package/src/IconButton/IconButton.doc.mjs +8 -0
  558. package/src/IconButton/IconButton.test.tsx +15 -18
  559. package/src/Item/Item.test.tsx +40 -18
  560. package/src/Item/Item.tsx +38 -2
  561. package/src/Layer/useLayer.tsx +8 -0
  562. package/src/Lightbox/Lightbox.tsx +15 -7
  563. package/src/List/List.test.tsx +9 -8
  564. package/src/Markdown/Markdown.test.tsx +21 -0
  565. package/src/Markdown/Markdown.tsx +4 -0
  566. package/src/MobileNav/MobileNav.tsx +12 -1
  567. package/src/MobileNav/MobileNavToggle.test.tsx +116 -0
  568. package/src/MobileNav/MobileNavToggle.tsx +9 -1
  569. package/src/MultiSelector/MultiSelector.doc.mjs +24 -2
  570. package/src/MultiSelector/MultiSelector.test.tsx +498 -3
  571. package/src/MultiSelector/MultiSelector.tsx +149 -65
  572. package/src/MultiSelector/hooks.ts +17 -0
  573. package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
  574. package/src/NumberInput/NumberInput.doc.mjs +21 -0
  575. package/src/NumberInput/NumberInput.test.tsx +82 -7
  576. package/src/NumberInput/NumberInput.tsx +36 -28
  577. package/src/Outline/Outline.tsx +0 -1
  578. package/src/OverflowList/OverflowList.doc.mjs +39 -6
  579. package/src/OverflowList/OverflowList.test.tsx +111 -0
  580. package/src/OverflowList/OverflowList.tsx +48 -8
  581. package/src/Pagination/Pagination.tsx +11 -3
  582. package/src/Popover/Popover.tsx +7 -4
  583. package/src/Popover/usePopover.tsx +9 -13
  584. package/src/PowerSearch/PowerSearch.doc.mjs +29 -0
  585. package/src/PowerSearch/PowerSearch.test.tsx +43 -0
  586. package/src/PowerSearch/PowerSearch.tsx +10 -1
  587. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +67 -0
  588. package/src/PowerSearch/PowerSearchEditPopover.tsx +1 -1
  589. package/src/PowerSearch/usePowerSearchSource.ts +1 -2
  590. package/src/RadioList/RadioList.doc.mjs +6 -0
  591. package/src/RadioList/RadioList.tsx +2 -2
  592. package/src/RadioList/RadioListItem.tsx +4 -4
  593. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -0
  594. package/src/SelectableCard/SelectableCard.doc.mjs +2 -0
  595. package/src/SelectableCard/SelectableCard.test.tsx +46 -4
  596. package/src/SelectableCard/SelectableCard.tsx +29 -16
  597. package/src/Selector/Selector.doc.mjs +15 -0
  598. package/src/Selector/Selector.test.tsx +417 -0
  599. package/src/Selector/Selector.tsx +86 -21
  600. package/src/Selector/hooks.ts +17 -0
  601. package/src/SideNav/SideNav.test.tsx +119 -3
  602. package/src/SideNav/SideNav.tsx +1 -8
  603. package/src/SideNav/SideNavCollapseButton.tsx +15 -8
  604. package/src/SideNav/SideNavHeading.tsx +24 -8
  605. package/src/SideNav/SideNavItem.tsx +10 -4
  606. package/src/Slider/Slider.doc.mjs +6 -0
  607. package/src/Slider/Slider.test.tsx +314 -13
  608. package/src/Slider/Slider.tsx +117 -28
  609. package/src/Switch/Switch.doc.mjs +142 -42
  610. package/src/Switch/Switch.test.tsx +54 -1
  611. package/src/Switch/Switch.tsx +90 -33
  612. package/src/TabList/Tab.tsx +2 -2
  613. package/src/TabList/TabMenu.tsx +2 -2
  614. package/src/Table/BaseTable.tsx +37 -7
  615. package/src/Table/Table.doc.mjs +11 -0
  616. package/src/Table/Table.test.tsx +85 -0
  617. package/src/Table/TableCell.tsx +3 -3
  618. package/src/Table/TableHeaderCell.tsx +3 -3
  619. package/src/Table/index.ts +5 -0
  620. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +15 -8
  621. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +24 -17
  622. package/src/Table/plugins/rowStatus/index.ts +7 -0
  623. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +138 -0
  624. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +189 -0
  625. package/src/Table/plugins/selection/useTableSelection.test.tsx +77 -3
  626. package/src/Table/plugins/selection/useTableSelection.tsx +22 -1
  627. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -1
  628. package/src/Table/plugins/tree/useTableTreeData.test.tsx +135 -3
  629. package/src/Table/plugins/tree/useTableTreeData.tsx +139 -8
  630. package/src/Table/plugins/tree/useTableTreeState.test.tsx +104 -0
  631. package/src/Table/plugins/tree/useTableTreeState.tsx +46 -2
  632. package/src/Table/types.ts +33 -0
  633. package/src/Table/useBaseTablePlugins.ts +10 -6
  634. package/src/Table/useTableRowStatus.doc.mjs +30 -0
  635. package/src/Table/useTableSelection.doc.mjs +65 -14
  636. package/src/Table/useTableTreeData.doc.mjs +29 -0
  637. package/src/Table/useTableTreeState.doc.mjs +2 -2
  638. package/src/TextArea/TextArea.doc.mjs +21 -0
  639. package/src/TextArea/TextArea.test.tsx +32 -1
  640. package/src/TextArea/TextArea.tsx +27 -26
  641. package/src/TextInput/TextInput.doc.mjs +21 -0
  642. package/src/TextInput/TextInput.test.tsx +150 -0
  643. package/src/TextInput/TextInput.tsx +28 -25
  644. package/src/Thumbnail/Thumbnail.doc.mjs +19 -10
  645. package/src/Thumbnail/Thumbnail.test.tsx +98 -7
  646. package/src/Thumbnail/Thumbnail.tsx +142 -42
  647. package/src/Thumbnail/thumbnail.markers.stylex.ts +12 -0
  648. package/src/TimeInput/TimeInput.doc.mjs +21 -0
  649. package/src/TimeInput/TimeInput.test.tsx +99 -1
  650. package/src/TimeInput/TimeInput.tsx +43 -31
  651. package/src/Timestamp/Timestamp.doc.mjs +4 -4
  652. package/src/Timestamp/Timestamp.test.tsx +32 -0
  653. package/src/Timestamp/Timestamp.tsx +28 -8
  654. package/src/Toast/useToast.tsx +7 -8
  655. package/src/ToggleButton/ToggleButtonGroup.tsx +1 -1
  656. package/src/Token/Token.test.tsx +21 -15
  657. package/src/Token/Token.tsx +31 -14
  658. package/src/Token/index.ts +1 -1
  659. package/src/Tokenizer/Tokenizer.doc.mjs +38 -2
  660. package/src/Tokenizer/Tokenizer.test.tsx +206 -2
  661. package/src/Tokenizer/Tokenizer.tsx +30 -6
  662. package/src/Tooltip/Tooltip.test.tsx +46 -0
  663. package/src/Tooltip/useTooltip.tsx +20 -0
  664. package/src/TopNav/TopNav.test.tsx +125 -1
  665. package/src/TopNav/TopNavHeading.tsx +24 -8
  666. package/src/TopNav/TopNavMegaMenu.test.tsx +149 -1
  667. package/src/TopNav/TopNavMegaMenu.tsx +10 -4
  668. package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +3 -3
  669. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +19 -2
  670. package/src/TopNav/TopNavMenu.test.tsx +118 -4
  671. package/src/TopNav/TopNavMenu.tsx +83 -5
  672. package/src/TreeList/TreeList.doc.mjs +28 -0
  673. package/src/TreeList/TreeList.test.tsx +272 -0
  674. package/src/TreeList/TreeList.tsx +23 -2
  675. package/src/TreeList/TreeListBranches.tsx +24 -8
  676. package/src/TreeList/TreeListItem.tsx +84 -22
  677. package/src/TreeList/TreeListTypes.ts +27 -1
  678. package/src/TreeList/index.ts +2 -2
  679. package/src/Typeahead/BaseTypeahead.tsx +30 -15
  680. package/src/Typeahead/Typeahead.doc.mjs +13 -0
  681. package/src/Typeahead/Typeahead.test.tsx +50 -0
  682. package/src/Typeahead/Typeahead.tsx +11 -1
  683. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  684. package/src/__tests__/inputWidthContract.test.tsx +62 -0
  685. package/src/authoring/doc.ts +1 -3
  686. package/src/doc-mjs.d.ts +19 -0
  687. package/src/docs-types.ts +5 -0
  688. package/src/hooks/computeOverflow.test.ts +422 -0
  689. package/src/hooks/computeOverflow.ts +290 -0
  690. package/src/hooks/index.ts +8 -0
  691. package/src/hooks/isRtlElement.ts +27 -0
  692. package/src/hooks/useDevWarning.test.tsx +45 -0
  693. package/src/hooks/useDevWarning.ts +54 -0
  694. package/src/hooks/useGridFocus.doc.mjs +3 -3
  695. package/src/hooks/useGridFocus.test.tsx +41 -0
  696. package/src/hooks/useGridFocus.ts +21 -10
  697. package/src/hooks/useInputStatusIcon.test.tsx +162 -0
  698. package/src/hooks/useInputStatusIcon.tsx +224 -0
  699. package/src/hooks/useListFocus.doc.mjs +25 -3
  700. package/src/hooks/useListFocus.test.tsx +153 -1
  701. package/src/hooks/useListFocus.ts +102 -9
  702. package/src/hooks/useOverflow.test.ts +96 -4
  703. package/src/hooks/useOverflow.ts +74 -33
  704. package/src/i18n/InternationalizationContext.ts +4 -0
  705. package/src/i18n/InternationalizationProvider.doc.mjs +99 -2
  706. package/src/i18n/InternationalizationProvider.tsx +12 -2
  707. package/src/i18n/__tests__/getLocaleDirection.test.ts +40 -0
  708. package/src/i18n/__tests__/useDirection.test.tsx +66 -0
  709. package/src/i18n/getLocaleDirection.ts +29 -0
  710. package/src/i18n/index.ts +6 -0
  711. package/src/i18n/resolve.ts +9 -21
  712. package/src/i18n/useDirection.ts +29 -0
  713. package/src/reset.css +0 -26
  714. package/src/reset.test.ts +60 -0
  715. package/src/theme/Theme.tsx +11 -14
  716. package/src/theme/derivedVarRegistry.test.ts +1 -0
  717. package/src/theme/derivedVarRegistry.ts +6 -0
  718. package/src/theme/generateThemeRules.test.ts +107 -0
  719. package/src/theme/generateThemeRules.ts +56 -0
  720. package/src/theme/hct.ts +1 -1
  721. package/src/theme/syntax/defineSyntaxTheme.ts +5 -6
  722. package/src/utils/devWarning.test.ts +56 -0
  723. package/src/utils/devWarning.ts +102 -0
  724. package/src/utils/index.ts +8 -0
  725. package/src/utils/plainDate.test.ts +46 -6
  726. package/src/utils/plainDate.ts +69 -3
  727. package/src/utils/rtlStyles.ts +27 -0
  728. package/src/utils/types.ts +14 -0
@@ -55,14 +55,18 @@ const columns: TableColumn<FileRow>[] = [
55
55
  ];
56
56
 
57
57
  function TreeTable(
58
- props: Partial<UseTableTreeStateConfig<FileRow>> & {data?: FileRow[]},
58
+ props: Partial<UseTableTreeStateConfig<FileRow>> & {
59
+ data?: FileRow[];
60
+ hasExpandAllControl?: boolean;
61
+ },
59
62
  ) {
63
+ const {hasExpandAllControl, ...stateProps} = props;
60
64
  const {visibleData, treeConfig} = useTableTreeState<FileRow>({
61
65
  data: props.data ?? fileTree,
62
66
  idKey: 'id',
63
- ...props,
67
+ ...stateProps,
64
68
  });
65
- const tree = useTableTreeData(treeConfig);
69
+ const tree = useTableTreeData({...treeConfig, hasExpandAllControl});
66
70
 
67
71
  return (
68
72
  <Table data={visibleData} columns={columns} idKey="id" plugins={{tree}} />
@@ -592,3 +596,131 @@ describe('useTableTreeData — composition with sorting', () => {
592
596
  expect(names).toEqual(['src', 'utils.ts', 'components', 'README.md']);
593
597
  });
594
598
  });
599
+
600
+ // =============================================================================
601
+ // header expand-all control
602
+ // =============================================================================
603
+
604
+ describe('useTableTreeData: expand-all header control', () => {
605
+ /** The header row is the first row; return its expand-all toggle if present. */
606
+ function queryExpandAllButton(): HTMLElement | null {
607
+ const headerRow = screen.getAllByRole('row')[0];
608
+ return (
609
+ within(headerRow).queryByRole('button', {name: /expand all/i}) ??
610
+ within(headerRow).queryByRole('button', {name: /collapse all/i})
611
+ );
612
+ }
613
+
614
+ it('renders no expand-all control by default', () => {
615
+ render(<TreeTable defaultExpandedIds={['src']} />);
616
+ expect(queryExpandAllButton()).toBeNull();
617
+ });
618
+
619
+ it('renders an "Expand all" toggle in the tree column header when enabled and collapsed', () => {
620
+ render(<TreeTable hasExpandAllControl />);
621
+ const headerRow = screen.getAllByRole('row')[0];
622
+ expect(
623
+ within(headerRow).getByRole('button', {name: /expand all/i}),
624
+ ).toBeInTheDocument();
625
+ });
626
+
627
+ it('expands every row when the collapsed toggle is clicked', async () => {
628
+ const user = userEvent.setup();
629
+ render(<TreeTable hasExpandAllControl />);
630
+
631
+ // Collapsed: only roots are visible.
632
+ expect(getBodyRows()).toHaveLength(2);
633
+
634
+ await user.click(
635
+ within(screen.getAllByRole('row')[0]).getByRole('button', {
636
+ name: /expand all/i,
637
+ }),
638
+ );
639
+
640
+ // Every level is now visible.
641
+ expect(
642
+ getBodyRows().map(r => within(r).getByText(/.+/, {selector: 'td *'})),
643
+ ).not.toHaveLength(2);
644
+ expect(screen.getByText('Button.tsx')).toBeInTheDocument();
645
+ });
646
+
647
+ it('relabels the toggle "Collapse all" once everything is expanded', () => {
648
+ render(
649
+ <TreeTable
650
+ hasExpandAllControl
651
+ defaultExpandedIds={['src', 'components']}
652
+ />,
653
+ );
654
+ const headerRow = screen.getAllByRole('row')[0];
655
+ expect(
656
+ within(headerRow).getByRole('button', {name: /collapse all/i}),
657
+ ).toBeInTheDocument();
658
+ });
659
+
660
+ it('collapses back to roots when the expanded toggle is clicked', async () => {
661
+ const user = userEvent.setup();
662
+ render(
663
+ <TreeTable
664
+ hasExpandAllControl
665
+ defaultExpandedIds={['src', 'components']}
666
+ />,
667
+ );
668
+ expect(screen.getByText('Button.tsx')).toBeInTheDocument();
669
+
670
+ await user.click(
671
+ within(screen.getAllByRole('row')[0]).getByRole('button', {
672
+ name: /collapse all/i,
673
+ }),
674
+ );
675
+
676
+ expect(getBodyRows()).toHaveLength(2);
677
+ expect(screen.queryByText('Button.tsx')).not.toBeInTheDocument();
678
+ });
679
+
680
+ it('marks the toggle aria-expanded=false in the indeterminate (partial) state', () => {
681
+ // 'src' expanded but 'components' not: partially expanded.
682
+ render(<TreeTable hasExpandAllControl defaultExpandedIds={['src']} />);
683
+ const headerRow = screen.getAllByRole('row')[0];
684
+ const toggle = within(headerRow).getByRole('button', {
685
+ name: /expand all/i,
686
+ });
687
+ expect(toggle).toHaveAttribute('aria-expanded', 'false');
688
+ });
689
+
690
+ it('does not render the control for flat data even when enabled', () => {
691
+ const flat: FileRow[] = [
692
+ {id: 'a', name: 'A', size: 1},
693
+ {id: 'b', name: 'B', size: 2},
694
+ ];
695
+ render(<TreeTable data={flat} hasExpandAllControl />);
696
+ expect(queryExpandAllButton()).toBeNull();
697
+ });
698
+
699
+ it('renders the toggle inline with the header label, not stacked above it', () => {
700
+ render(<TreeTable hasExpandAllControl />);
701
+ const headerRow = screen.getAllByRole('row')[0];
702
+ const toggle = within(headerRow).getByRole('button', {
703
+ name: /expand all/i,
704
+ });
705
+ // The tree column's <th> holds the label text ('Name'). The bug was that
706
+ // the toggle went into the `before` slot, which BaseTable renders as a
707
+ // block sibling of the label, stacking the chevron ABOVE the title. The
708
+ // fix wraps the label + toggle in one inline-flex container, so they must
709
+ // share the same immediate parent (the toggle is a sibling of the label,
710
+ // not in a separate stacked slot).
711
+ const th = toggle.closest('th');
712
+ expect(th).not.toBeNull();
713
+ const label = within(th as HTMLElement).getByText('Name');
714
+ const wrapper = label.parentElement as HTMLElement;
715
+ expect(wrapper).toContainElement(toggle);
716
+ // The toggle precedes the label within that shared wrapper (chevron sits
717
+ // to the LEFT of the title). StyleX compiles the inline-flex layout to a
718
+ // class on this wrapper; assert the class is present (real CSS is not
719
+ // applied in jsdom, so we check the class hook, not computed display).
720
+ expect(wrapper.className).not.toBe('');
721
+ const kids = Array.from(wrapper.childNodes);
722
+ expect(kids.indexOf(toggle)).toBeLessThan(
723
+ kids.findIndex(n => n.textContent === 'Name' || n.contains(label)),
724
+ );
725
+ });
726
+ });
@@ -42,8 +42,13 @@ import {
42
42
  import * as stylex from '@stylexjs/stylex';
43
43
  import {colorVars, radiusVars, spacingVars} from '../../../theme/tokens.stylex';
44
44
  import {Icon} from '../../../Icon';
45
- import {mergeRefs} from '../../../utils';
46
- import type {TablePlugin, TableColumn, BodyRowRenderProps} from '../../types';
45
+ import {mergeRefs, rtlStyles} from '../../../utils';
46
+ import type {
47
+ TablePlugin,
48
+ TableColumn,
49
+ BodyRowRenderProps,
50
+ HeaderCellRenderProps,
51
+ } from '../../types';
47
52
  import {useTranslator} from '../../../i18n';
48
53
 
49
54
  // =============================================================================
@@ -78,6 +83,22 @@ export interface UseTableTreeDataConfig<T extends Record<string, unknown>> {
78
83
  * identically to a Table without the plugin.
79
84
  */
80
85
  hasExpandableRows: boolean;
86
+ /**
87
+ * Aggregate expansion state across every expandable row. When provided
88
+ * together with `onExpandAll`/`onCollapseAll`, the tree column header shows
89
+ * an expand-all toggle. `useTableTreeState` supplies all three.
90
+ */
91
+ isAllExpanded?: boolean | 'indeterminate';
92
+ /** Expand every expandable row. Wired to the header expand-all control. */
93
+ onExpandAll?: () => void;
94
+ /** Collapse every row. Wired to the header expand-all control. */
95
+ onCollapseAll?: () => void;
96
+ /**
97
+ * Show the expand-all/collapse-all toggle in the tree column header. Needs
98
+ * `isAllExpanded` and `onExpandAll`/`onCollapseAll` to be present.
99
+ * @default false
100
+ */
101
+ hasExpandAllControl?: boolean;
81
102
  /**
82
103
  * Indent step per level, as spacing tokens.
83
104
  * @default 'md'
@@ -243,6 +264,13 @@ const treeStyles = stylex.create({
243
264
  height: '24px',
244
265
  flexShrink: '0',
245
266
  },
267
+ /** Header expand-all toggle: same affordance as a row expander. */
268
+ headerCell: {
269
+ display: 'inline-flex',
270
+ alignItems: 'center',
271
+ gap: spacingVars['--spacing-1'],
272
+ minWidth: 0,
273
+ },
246
274
  });
247
275
 
248
276
  // =============================================================================
@@ -271,12 +299,63 @@ function TreeExpander({
271
299
  : t('@astryx.tableTree.expandRow')
272
300
  }
273
301
  aria-expanded={isExpanded}>
274
- <span
275
- {...stylex.props(
276
- treeStyles.chevron,
277
- isExpanded && treeStyles.chevronExpanded,
278
- )}>
279
- <Icon icon="chevronRight" size="xsm" />
302
+ <span {...stylex.props(rtlStyles.mirror)}>
303
+ <span
304
+ {...stylex.props(
305
+ treeStyles.chevron,
306
+ isExpanded && treeStyles.chevronExpanded,
307
+ )}>
308
+ <Icon icon="chevronRight" size="xsm" />
309
+ </span>
310
+ </span>
311
+ </button>
312
+ );
313
+ }
314
+
315
+ /**
316
+ * Header expand-all/collapse-all toggle. Rendered in the tree column header
317
+ * when `hasExpandAllControl` is set and the state hook supplies the aggregate
318
+ * `isAllExpanded` plus `onExpandAll`/`onCollapseAll`. Shares the chevron
319
+ * affordance with the per-row expander; the chevron points down (expanded)
320
+ * only when every expandable row is expanded, matching the row expander.
321
+ */
322
+ function TreeExpandAllToggle({
323
+ isAllExpanded,
324
+ onExpandAll,
325
+ onCollapseAll,
326
+ }: {
327
+ isAllExpanded: boolean | 'indeterminate';
328
+ onExpandAll: () => void;
329
+ onCollapseAll: () => void;
330
+ }) {
331
+ const t = useTranslator();
332
+ const allExpanded = isAllExpanded === true;
333
+ return (
334
+ <button
335
+ type="button"
336
+ {...stylex.props(treeStyles.expanderButton)}
337
+ onClick={e => {
338
+ e.stopPropagation();
339
+ if (allExpanded) {
340
+ onCollapseAll();
341
+ } else {
342
+ onExpandAll();
343
+ }
344
+ }}
345
+ aria-label={
346
+ allExpanded
347
+ ? t('@astryx.tableTree.collapseAllRows')
348
+ : t('@astryx.tableTree.expandAllRows')
349
+ }
350
+ aria-expanded={allExpanded}>
351
+ <span {...stylex.props(rtlStyles.mirror)}>
352
+ <span
353
+ {...stylex.props(
354
+ treeStyles.chevron,
355
+ allExpanded && treeStyles.chevronExpanded,
356
+ )}>
357
+ <Icon icon="chevronRight" size="xsm" />
358
+ </span>
280
359
  </span>
281
360
  </button>
282
361
  );
@@ -380,6 +459,11 @@ export function useTableTreeData<T extends Record<string, unknown>>(
380
459
  output: TableColumn<T>[];
381
460
  } | null>(null);
382
461
 
462
+ // The resolved tree column key, written by transformColumns (pipeline step 1)
463
+ // and read by transformHeaderCell (step 4) to place the expand-all toggle on
464
+ // the same column that carries the row expanders.
465
+ const treeKeyRef = useRef<string | undefined>(undefined);
466
+
383
467
  // The plugin object is created once per store and never changes shape:
384
468
  // every transform reads the live config through the store, and
385
469
  // internally no-ops when hasExpandableRows is false. Swapping between
@@ -426,6 +510,7 @@ export function useTableTreeData<T extends Record<string, unknown>>(
426
510
  ? treeColumnKey
427
511
  : (columns.find(c => !c.key.startsWith('__'))?.key ??
428
512
  columns[0]?.key);
513
+ treeKeyRef.current = treeKey;
429
514
 
430
515
  // Migration guarantee: flat data renders identically to a Table
431
516
  // without the plugin.
@@ -459,6 +544,52 @@ export function useTableTreeData<T extends Record<string, unknown>>(
459
544
  return output;
460
545
  },
461
546
 
547
+ transformHeaderCell(
548
+ props: HeaderCellRenderProps,
549
+ column: TableColumn<T>,
550
+ ): HeaderCellRenderProps {
551
+ const {
552
+ hasExpandableRows,
553
+ hasExpandAllControl,
554
+ isAllExpanded,
555
+ onExpandAll,
556
+ onCollapseAll,
557
+ } = store.getConfig();
558
+
559
+ // Only the tree column carries the toggle, and only when the control
560
+ // is enabled, the data is actually hierarchical, and the state hook
561
+ // supplied the aggregate state plus both handlers. Otherwise this is a
562
+ // pass-through (flat data stays a no-op).
563
+ if (
564
+ !hasExpandAllControl ||
565
+ !hasExpandableRows ||
566
+ column.key !== treeKeyRef.current ||
567
+ isAllExpanded === undefined ||
568
+ !onExpandAll ||
569
+ !onCollapseAll
570
+ ) {
571
+ return props;
572
+ }
573
+
574
+ // Wrap the header label + the toggle in one inline-flex row so the
575
+ // chevron sits to the LEFT of the title on the same line. BaseTable
576
+ // only applies its own flex row for the `after` slot, so a bare
577
+ // `before` would stack above the label in the block-level <th>.
578
+ return {
579
+ ...props,
580
+ content: (
581
+ <span {...stylex.props(treeStyles.headerCell)}>
582
+ <TreeExpandAllToggle
583
+ isAllExpanded={isAllExpanded}
584
+ onExpandAll={onExpandAll}
585
+ onCollapseAll={onCollapseAll}
586
+ />
587
+ {props.content}
588
+ </span>
589
+ ),
590
+ };
591
+ },
592
+
462
593
  transformBodyRow(props: BodyRowRenderProps, item: T) {
463
594
  // Attach a ref that subscribes to the store for imperative row
464
595
  // ARIA. The ref returns a cleanup so React unsubscribes on
@@ -634,3 +634,107 @@ describe('useTableTreeState — semantics edges', () => {
634
634
  expect(ids(result.current.visibleData)).toEqual(['src', 'readme']);
635
635
  });
636
636
  });
637
+
638
+ // =============================================================================
639
+ // isAllExpanded (drives the header expand-all control)
640
+ // =============================================================================
641
+
642
+ describe('useTableTreeState: isAllExpanded', () => {
643
+ it('reports false when nothing is expanded', () => {
644
+ const {result} = renderHook(() =>
645
+ useTableTreeState({data: fileTree, idKey: 'id'}),
646
+ );
647
+
648
+ expect(result.current.isAllExpanded).toBe(false);
649
+ });
650
+
651
+ it('reports true only when every expandable row is expanded', () => {
652
+ const {result} = renderHook(() =>
653
+ useTableTreeState({data: fileTree, idKey: 'id'}),
654
+ );
655
+
656
+ act(() => {
657
+ result.current.expandAll();
658
+ });
659
+
660
+ expect(result.current.isAllExpanded).toBe(true);
661
+ });
662
+
663
+ it("reports 'indeterminate' when some but not all expandable rows are expanded", () => {
664
+ const {result} = renderHook(() =>
665
+ useTableTreeState({
666
+ data: fileTree,
667
+ idKey: 'id',
668
+ defaultExpandedIds: ['src'],
669
+ }),
670
+ );
671
+
672
+ // 'src' and 'components' are both expandable; only 'src' is expanded.
673
+ expect(result.current.isAllExpanded).toBe('indeterminate');
674
+ });
675
+
676
+ it('returns to false after collapseAll', () => {
677
+ const {result} = renderHook(() =>
678
+ useTableTreeState({
679
+ data: fileTree,
680
+ idKey: 'id',
681
+ defaultExpandedIds: ['src', 'components'],
682
+ }),
683
+ );
684
+
685
+ act(() => {
686
+ result.current.collapseAll();
687
+ });
688
+
689
+ expect(result.current.isAllExpanded).toBe(false);
690
+ });
691
+
692
+ it('reports false for flat data (no expandable rows)', () => {
693
+ const flat: FileRow[] = [
694
+ {id: 'a', name: 'A', size: 1},
695
+ {id: 'b', name: 'B', size: 2},
696
+ ];
697
+ const {result} = renderHook(() =>
698
+ useTableTreeState({data: flat, idKey: 'id'}),
699
+ );
700
+
701
+ expect(result.current.isAllExpanded).toBe(false);
702
+ });
703
+
704
+ it('ignores expanded ids that match no expandable row when aggregating', () => {
705
+ // 'readme' is a leaf (not expandable) and 'ghost' matches nothing; neither
706
+ // should count toward the expandable total, so an all-expandable set that
707
+ // omits them still reads as fully expanded.
708
+ const {result} = renderHook(() =>
709
+ useTableTreeState({
710
+ data: fileTree,
711
+ idKey: 'id',
712
+ defaultExpandedIds: ['src', 'components', 'readme', 'ghost'],
713
+ }),
714
+ );
715
+
716
+ expect(result.current.isAllExpanded).toBe(true);
717
+ });
718
+
719
+ it('exposes the aggregate state and expand/collapse handlers through treeConfig', () => {
720
+ const {result} = renderHook(() =>
721
+ useTableTreeState({data: fileTree, idKey: 'id'}),
722
+ );
723
+
724
+ // The headless plugin reads everything it needs to render the header
725
+ // expand-all control from treeConfig, not from the state hook directly.
726
+ expect(result.current.treeConfig.isAllExpanded).toBe(false);
727
+
728
+ act(() => {
729
+ result.current.treeConfig.onExpandAll?.();
730
+ });
731
+ expect(result.current.isAllExpanded).toBe(true);
732
+ expect(result.current.treeConfig.isAllExpanded).toBe(true);
733
+
734
+ act(() => {
735
+ result.current.treeConfig.onCollapseAll?.();
736
+ });
737
+ expect(result.current.isAllExpanded).toBe(false);
738
+ expect(result.current.treeConfig.isAllExpanded).toBe(false);
739
+ });
740
+ });
@@ -74,6 +74,12 @@ export interface UseTableTreeStateResult<T extends Record<string, unknown>> {
74
74
  treeConfig: UseTableTreeDataConfig<T>;
75
75
  /** The current expanded row ids. */
76
76
  expandedIds: ReadonlySet<string>;
77
+ /**
78
+ * Aggregate expansion state across every expandable row: `true` when all are
79
+ * expanded, `false` when none are, `'indeterminate'` when some but not all
80
+ * are. Drives the header expand-all control. Reports `false` for flat data.
81
+ */
82
+ isAllExpanded: boolean | 'indeterminate';
77
83
  /** Expand every expandable row in the tree. */
78
84
  expandAll: () => void;
79
85
  /** Collapse every row. */
@@ -211,6 +217,25 @@ export function useTableTreeState<T extends Record<string, unknown>>(
211
217
 
212
218
  const hasExpandableRows = allExpandableIds.length > 0;
213
219
 
220
+ // Aggregate state for the header expand-all control. Only expandable ids
221
+ // count toward the total, so expanded ids that match a leaf or no row at
222
+ // all never skew the tally.
223
+ const isAllExpanded: boolean | 'indeterminate' = useMemo(() => {
224
+ if (!hasExpandableRows) {
225
+ return false;
226
+ }
227
+ const expandedCount = allExpandableIds.filter(id =>
228
+ expandedIds.has(id),
229
+ ).length;
230
+ if (expandedCount === 0) {
231
+ return false;
232
+ }
233
+ if (expandedCount === allExpandableIds.length) {
234
+ return true;
235
+ }
236
+ return 'indeterminate';
237
+ }, [hasExpandableRows, allExpandableIds, expandedIds]);
238
+
214
239
  const onToggleItem = useCallback(
215
240
  (item: T) => {
216
241
  const id = getId(item);
@@ -243,11 +268,30 @@ export function useTableTreeState<T extends Record<string, unknown>>(
243
268
  getRowMeta,
244
269
  onToggleItem,
245
270
  hasExpandableRows,
271
+ isAllExpanded,
272
+ onExpandAll: expandAll,
273
+ onCollapseAll: collapseAll,
246
274
  indent,
247
275
  treeColumnKey,
248
276
  }),
249
- [getRowMeta, onToggleItem, hasExpandableRows, indent, treeColumnKey],
277
+ [
278
+ getRowMeta,
279
+ onToggleItem,
280
+ hasExpandableRows,
281
+ isAllExpanded,
282
+ expandAll,
283
+ collapseAll,
284
+ indent,
285
+ treeColumnKey,
286
+ ],
250
287
  );
251
288
 
252
- return {visibleData, treeConfig, expandedIds, expandAll, collapseAll};
289
+ return {
290
+ visibleData,
291
+ treeConfig,
292
+ expandedIds,
293
+ isAllExpanded,
294
+ expandAll,
295
+ collapseAll,
296
+ };
253
297
  }
@@ -540,6 +540,39 @@ export interface BaseTableProps<
540
540
  /** Plugins to transform render props at each level */
541
541
  plugins?: TablePlugin<T>[];
542
542
 
543
+ /**
544
+ * ARIA row index (1-based) assigned to the **first** rendered body row.
545
+ *
546
+ * The row ordinal is an accessibility concern independent of any visible
547
+ * index column: `aria-rowindex` on each `<tr>` should reflect the row's
548
+ * position in the **full** dataset, not just the current page. For a
549
+ * paginated / windowed view, pass the offset of the first visible row,
550
+ * e.g. `(page - 1) * pageSize + 1`.
551
+ *
552
+ * Setting this (or {@link rowCount}) opts the table into emitting
553
+ * `aria-rowindex` on body rows and `aria-rowcount` on the `<table>`. Data
554
+ * rows are numbered from this value; the header row keeps native table
555
+ * semantics and is not assigned an ARIA row index (so the visible
556
+ * `useTableRowIndex` numbering and `aria-rowindex` stay in agreement).
557
+ *
558
+ * Applies to data-driven mode only (ignored in children mode).
559
+ *
560
+ * @default 1
561
+ */
562
+ rowIndexStart?: number;
563
+ /**
564
+ * Total number of body rows across **all** pages/windows, used for
565
+ * `aria-rowcount` on the `<table>`. Provide this for paginated data so
566
+ * assistive tech can announce "row X of Y" against the full dataset.
567
+ *
568
+ * When omitted but {@link rowIndexStart} is set (a windowed view with an
569
+ * unknown total, e.g. cursor pagination), `aria-rowcount` is set to `-1`
570
+ * per the ARIA convention for an unknown row count.
571
+ *
572
+ * Applies to data-driven mode only (ignored in children mode).
573
+ */
574
+ rowCount?: number;
575
+
543
576
  /** Children mode — render `<tr>`/`<td>` directly instead of data-driven */
544
577
  children?: ReactNode;
545
578
  /**
@@ -38,6 +38,7 @@
38
38
 
39
39
  import {useRef} from 'react';
40
40
  import type {TablePlugin} from './types';
41
+ import {devWarn} from '../utils/devWarning';
41
42
 
42
43
  // ======================================================================// Canonical Plugin Order
43
44
  // ======================================================================
@@ -112,8 +113,9 @@ function validatePlugin<T extends Record<string, unknown>>(
112
113
  // Warn about unknown keys (likely misspelled transform names)
113
114
  for (const key of keys) {
114
115
  if (!VALID_TRANSFORM_KEYS.has(key)) {
115
- console.warn(
116
- `[Table] Plugin "${name}" has unknown key "${key}". ` +
116
+ devWarn(
117
+ 'Table',
118
+ `Plugin "${name}" has unknown key "${key}". ` +
117
119
  `Valid keys: ${[...VALID_TRANSFORM_KEYS].join(', ')}. ` +
118
120
  `This key will be ignored.`,
119
121
  );
@@ -125,8 +127,9 @@ function validatePlugin<T extends Record<string, unknown>>(
125
127
  if (VALID_TRANSFORM_KEYS.has(key)) {
126
128
  const value = (plugin as Record<string, unknown>)[key];
127
129
  if (value != null && typeof value !== 'function') {
128
- console.warn(
129
- `[Table] Plugin "${name}" has non-function value for "${key}" ` +
130
+ devWarn(
131
+ 'Table',
132
+ `Plugin "${name}" has non-function value for "${key}" ` +
130
133
  `(got ${typeof value}). Transform will be skipped.`,
131
134
  );
132
135
  }
@@ -140,8 +143,9 @@ function validatePlugin<T extends Record<string, unknown>>(
140
143
  typeof (plugin as Record<string, unknown>)[key] === 'function',
141
144
  );
142
145
  if (!hasTransforms) {
143
- console.warn(
144
- `[Table] Plugin "${name}" has no transform methods. ` +
146
+ devWarn(
147
+ 'Table',
148
+ `Plugin "${name}" has no transform methods. ` +
145
149
  `It will be included in the pipeline but won't do anything.`,
146
150
  );
147
151
  }
@@ -0,0 +1,30 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('../docs-types').ComponentDoc} */
4
+
5
+ export const docs = {
6
+ name: 'useTableRowStatus',
7
+ subComponentOf: 'Table',
8
+ displayName: 'useTableRowStatus',
9
+ description:
10
+ 'Hook that returns a TablePlugin which prepends a narrow column signaling per-row status: a colored status dot by default, or an icon when provided (shape + color is more accessible than color alone). getStatus maps a row to a semantic color (mapped to a theme token) or raw CSS color, an optional icon, and a required accessible label (shown in a tooltip on hover and announced to assistive technology, so status is never color-only); return null for no indicator. Memoize getStatus with useCallback for a stable plugin identity.',
11
+ props: [
12
+ {
13
+ name: 'getStatus',
14
+ type: "(item: T) => { color: 'accent' | 'success' | 'error' | 'warning' | 'red' | 'orange' | 'green' | 'yellow' | 'blue' | 'gray' | string; icon?: IconName; label: string } | null",
15
+ description:
16
+ 'Derive the status indicator for a row: a semantic color (accent, success, error, warning, red, orange, green, yellow, blue, gray, each mapped to a theme token) or a raw CSS color as an escape hatch; an optional icon to signal status by shape instead of the dot (recommended when multiple statuses coexist; valid names: close, chevronDown, chevronLeft, chevronRight, check, success, error, warning, info, calendar, clock, externalLink, menu, moreHorizontal, search, arrowUp, arrowDown, arrowsUpDown, funnel, eyeSlash, viewColumns, copy, checkDouble, wrench, stop, microphone); and a required accessible label (announced via role="img" and shown in a tooltip on hover, so a status is never conveyed by color alone). Return null for rows with no status. Memoize with useCallback for a stable plugin identity.',
17
+ required: true,
18
+ },
19
+ ],
20
+ };
21
+
22
+ /** @type {import('../docs-types').TranslationDoc} */
23
+ export const docsDense = {
24
+ description:
25
+ 'Returns a TablePlugin that prepends a narrow per-row status column: a colored dot, or an icon when provided (shape + color beats color alone for a11y). getStatus maps a row to {color, icon?, label} or null. color is a semantic name (success/error/warning/etc.) mapped to a theme token, or a raw CSS color. label is required (tooltip + accessible name). Memoize getStatus with useCallback.',
26
+ propDescriptions: {
27
+ getStatus:
28
+ 'Map a row to {color, icon?, label} or null. color = semantic status name (mapped to a token) or raw CSS; icon = shape signifier (a11y); label = required accessible name (tooltip + role="img"). Memoize with useCallback.',
29
+ },
30
+ };