@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
@@ -21,7 +21,11 @@ import {spacingVars} from '../theme/tokens.stylex';
21
21
  import {mergeProps} from '../utils';
22
22
  import type {BaseProps} from '../BaseProps';
23
23
  import {TreeListItem} from './TreeListItem';
24
- import type {TreeListItemData, TreeListDensity} from './TreeListTypes';
24
+ import type {
25
+ TreeListItemData,
26
+ TreeListDensity,
27
+ TreeListVariant,
28
+ } from './TreeListTypes';
25
29
  import {themeProps} from '../utils/themeProps';
26
30
  import {useTreeFocus} from '../hooks/useTreeFocus';
27
31
 
@@ -29,7 +33,7 @@ import {useTreeFocus} from '../hooks/useTreeFocus';
29
33
  // Types
30
34
  // =============================================================================
31
35
 
32
- export {type TreeListDensity} from './TreeListTypes';
36
+ export {type TreeListDensity, type TreeListVariant} from './TreeListTypes';
33
37
 
34
38
  export interface TreeListProps extends BaseProps<HTMLDivElement> {
35
39
  /** Ref forwarded to the root element */
@@ -50,6 +54,16 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
50
54
  */
51
55
  density?: TreeListDensity;
52
56
 
57
+ /**
58
+ * Visual treatment of the hierarchy guide (connector) lines.
59
+ * - `lineGuides`: connector lines between parent and child rows
60
+ * - `noGuides`: no connector lines; indentation alone conveys nesting
61
+ *
62
+ * Orthogonal to `density` (which controls spacing) — the two compose.
63
+ * @default 'lineGuides'
64
+ */
65
+ variant?: TreeListVariant;
66
+
53
67
  /**
54
68
  * Header content rendered above the tree list.
55
69
  * Semantically associated via aria-labelledby.
@@ -69,6 +83,11 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
69
83
  const styles = stylex.create({
70
84
  root: {
71
85
  position: 'relative',
86
+ // Per-level indentation step. Public, themeable lever: a theme can retune
87
+ // the tree's indent metric (e.g. to `var(--spacing-5)`) via `defineTheme`
88
+ // on the `tree-list` target, and both the row margins (TreeListItem) and
89
+ // the guide-line offsets (TreeListBranches) read it so they stay aligned.
90
+ '--tree-list-indent': spacingVars['--spacing-4'],
72
91
  },
73
92
  list: {
74
93
  margin: 0,
@@ -156,6 +175,7 @@ function findInitialTabbableId(items: TreeListItemData[]): string | undefined {
156
175
  export function TreeList({
157
176
  items,
158
177
  density = 'balanced',
178
+ variant = 'lineGuides',
159
179
  header,
160
180
  xstyle,
161
181
  className,
@@ -275,6 +295,7 @@ export function TreeList({
275
295
  isExpanded={isExpanded}
276
296
  onToggle={handleToggle}
277
297
  density={density}
298
+ variant={variant}
278
299
  renderedChildren={renderedChildren}
279
300
  posInSet={index + 1}
280
301
  setSize={items.length}
@@ -16,6 +16,7 @@
16
16
  import * as stylex from '@stylexjs/stylex';
17
17
  import {colorVars, spacingVars} from '../theme/tokens.stylex';
18
18
  import {mergeProps} from '../utils';
19
+ import {themeProps} from '../utils/themeProps';
19
20
 
20
21
  const LINE_WIDTH = 1;
21
22
 
@@ -25,8 +26,10 @@ const LINE_WIDTH = 1;
25
26
  */
26
27
  const BRANCH_MARGIN = `calc(${spacingVars['--spacing-2']} + ${spacingVars['--spacing-0-5']})`;
27
28
 
28
- /** Per-level indent width, matching --spacing-4 (16px). */
29
- const LEVEL_INDENT = spacingVars['--spacing-4'];
29
+ /** Per-level indent width. Reads the public, themeable `--tree-list-indent`
30
+ * lever set on the tree-list root (default `--spacing-4`, 16px), so the guide
31
+ * lines stay aligned with the row indent when a theme retunes the step. */
32
+ const LEVEL_INDENT = 'var(--tree-list-indent)';
30
33
 
31
34
  const styles = stylex.create({
32
35
  container: {
@@ -36,10 +39,10 @@ const styles = stylex.create({
36
39
  },
37
40
  verticalLine: {
38
41
  borderRadius: 1,
39
- left: 0,
42
+ insetInlineStart: 0,
40
43
  margin: 'auto',
41
44
  position: 'absolute',
42
- right: 0,
45
+ insetInlineEnd: 0,
43
46
  width: LINE_WIDTH,
44
47
  backgroundColor: colorVars['--color-border-emphasized'],
45
48
  },
@@ -65,6 +68,11 @@ interface TreeListBranchesProps {
65
68
  /**
66
69
  * Renders vertical lines showing parent-child relationships in the tree.
67
70
  * Positioned in a full-height container to span the entire item including children.
71
+ *
72
+ * The line element carries the stable `astryx-tree-list-guide` theme target so a
73
+ * theme can recolor or hide the connectors via `defineTheme` (e.g.
74
+ * `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
75
+ * and reimplementing them.
68
76
  */
69
77
  export function TreeListBranches({
70
78
  ancestorsIsLast,
@@ -86,11 +94,14 @@ export function TreeListBranches({
86
94
  key={level}
87
95
  {...mergeProps(stylex.props(styles.container), {
88
96
  style: {
89
- left: branchOffset,
97
+ insetInlineStart: branchOffset,
90
98
  },
91
99
  })}>
92
100
  <div
93
- {...stylex.props(styles.verticalLine, styles.verticalFull)}
101
+ {...mergeProps(
102
+ themeProps('tree-list-guide'),
103
+ stylex.props(styles.verticalLine, styles.verticalFull),
104
+ )}
94
105
  />
95
106
  </div>
96
107
  )
@@ -100,10 +111,15 @@ export function TreeListBranches({
100
111
  <div
101
112
  {...mergeProps(stylex.props(styles.container), {
102
113
  style: {
103
- left: `calc(${BRANCH_MARGIN} + ${nestedLevel - 1} * ${LEVEL_INDENT})`,
114
+ insetInlineStart: `calc(${BRANCH_MARGIN} + ${nestedLevel - 1} * ${LEVEL_INDENT})`,
104
115
  },
105
116
  })}>
106
- <div {...stylex.props(styles.verticalLine, styles.verticalFull)} />
117
+ <div
118
+ {...mergeProps(
119
+ themeProps('tree-list-guide'),
120
+ stylex.props(styles.verticalLine, styles.verticalFull),
121
+ )}
122
+ />
107
123
  </div>
108
124
  )}
109
125
  </>
@@ -25,10 +25,10 @@ import {
25
25
  typeScaleVars,
26
26
  } from '../theme/tokens.stylex';
27
27
  import {getIcon} from '../Icon/globalIconRegistry';
28
- import {mergeProps} from '../utils';
28
+ import {mergeProps, rtlStyles} from '../utils';
29
29
  import {useLinkComponent} from '../Link/useLinkComponent';
30
30
  import {TreeListBranches} from './TreeListBranches';
31
- import type {TreeListDensity} from './TreeListTypes';
31
+ import type {TreeListDensity, TreeListVariant} from './TreeListTypes';
32
32
  import {themeProps} from '../utils/themeProps';
33
33
  import {useTranslator} from '../i18n';
34
34
 
@@ -82,6 +82,12 @@ const styles = stylex.create({
82
82
  position: 'relative',
83
83
  boxSizing: 'border-box',
84
84
  textAlign: 'start',
85
+ // Per-level indent. Declared here (not inline) so it lives in
86
+ // `@layer astryx-base` and the theme layer can override it in normal
87
+ // cascade order — an inline longhand would outrank every layer. The row
88
+ // publishes only the computed distance as `--_tree-indent`; the per-level
89
+ // step is the public `--tree-list-indent` lever (see TreeList `root`).
90
+ marginInlineStart: 'var(--_tree-indent, 0px)',
85
91
  },
86
92
  interactive: {
87
93
  cursor: 'pointer',
@@ -246,6 +252,11 @@ const descriptionSizeStyles = stylex.create({
246
252
  },
247
253
  });
248
254
 
255
+ // `CSSProperties` has no index signature for custom properties, so the row's
256
+ // inline style — which publishes the computed indent distance as the private
257
+ // `--_tree-indent` — needs this augmentation to typecheck.
258
+ type IndentStyle = React.CSSProperties & Record<'--_tree-indent', string>;
259
+
249
260
  // =============================================================================
250
261
  // Types
251
262
  // =============================================================================
@@ -268,6 +279,12 @@ export interface TreeListItemInternalProps {
268
279
  isExpanded: boolean;
269
280
  onToggle?: (id: string) => void;
270
281
  density: TreeListDensity;
282
+ /**
283
+ * Guide-line visual treatment. `noGuides` suppresses the connector lines;
284
+ * indentation is unaffected (it lives on the row's `marginLeft`, not the
285
+ * guide element).
286
+ */
287
+ variant: TreeListVariant;
271
288
  /** Pre-rendered children subtree (rendered by the parent recursion) */
272
289
  renderedChildren?: ReactNode;
273
290
  /** 1-based position of this item among its siblings (aria-posinset). */
@@ -304,6 +321,7 @@ export function TreeListItem({
304
321
  isExpanded,
305
322
  onToggle,
306
323
  density,
324
+ variant,
307
325
  renderedChildren,
308
326
  posInSet,
309
327
  setSize,
@@ -346,13 +364,35 @@ export function TreeListItem({
346
364
  return undefined;
347
365
  }, [onClick, hasChildren, onToggle, id, isDisabled]);
348
366
 
349
- const computedMarginLeft = hasChildren
350
- ? `calc(${nestedLevel} * ${spacingVars['--spacing-4']})`
351
- : `calc(${nestedLevel} * ${spacingVars['--spacing-4']} + ${spacingVars['--spacing-4']} + ${spacingVars['--spacing-2']})`;
367
+ // Per-level indent distance. The per-level step is the public, themeable
368
+ // `--tree-list-indent` lever (default `--spacing-4`, set on the tree-list
369
+ // root). Leaves add a fixed chevron-column offset (chevron width + gap) so
370
+ // their labels line up with sibling parents' labels; that offset is tied to
371
+ // the chevron's own dimensions, not the indent step, so it does not scale
372
+ // with the lever. Published as the private `--_tree-indent` and consumed by
373
+ // `contentWrapper`'s stylesheet `margin-inline-start` (kept out of the inline
374
+ // style so the theme layer can override it — see #4308).
375
+ const indentDistance = hasChildren
376
+ ? `calc(${nestedLevel} * var(--tree-list-indent))`
377
+ : `calc(${nestedLevel} * var(--tree-list-indent) + ${spacingVars['--spacing-4']} + ${spacingVars['--spacing-2']})`;
378
+ const indentStyle: IndentStyle = {'--_tree-indent': indentDistance};
352
379
 
353
380
  const labelAndDescription = (
354
381
  <>
355
- <span id={labelId} {...stylex.props(styles.label)}>
382
+ <span
383
+ id={labelId}
384
+ {...mergeProps(
385
+ // Stable theme target for the item's label text. The label carries no
386
+ // themeable handle today, so a theme can only reach it through a
387
+ // fragile structural selector (a content button's first span). This
388
+ // adds an `astryx-tree-list-item-label` class and reflects the row's
389
+ // `selected` state so a theme can, e.g., bold just the selected
390
+ // item's label via `defineTheme`.
391
+ themeProps('tree-list-item-label', {
392
+ selected: isSelected ? 'selected' : null,
393
+ }),
394
+ stylex.props(styles.label),
395
+ )}>
356
396
  {label}
357
397
  </span>
358
398
  {description != null && (
@@ -366,12 +406,14 @@ export function TreeListItem({
366
406
  );
367
407
 
368
408
  const chevronIcon = (
369
- <span
370
- {...stylex.props(
371
- styles.chevronSvg,
372
- isExpanded ? styles.chevronExpanded : styles.chevronCollapsed,
373
- )}>
374
- {getIcon('chevronRight')}
409
+ <span {...stylex.props(rtlStyles.mirror)}>
410
+ <span
411
+ {...stylex.props(
412
+ styles.chevronSvg,
413
+ isExpanded ? styles.chevronExpanded : styles.chevronCollapsed,
414
+ )}>
415
+ {getIcon('chevronRight')}
416
+ </span>
375
417
  </span>
376
418
  );
377
419
 
@@ -394,12 +436,30 @@ export function TreeListItem({
394
436
  // a separate tab stop. Row-level Enter/Space forwards to this button.
395
437
  tabIndex={-1}
396
438
  onClick={handleToggle}
397
- {...stylex.props(styles.chevronButton)}>
439
+ {...mergeProps(
440
+ // Stable theme target for the expand/collapse control. `data-tree-toggle`
441
+ // stays as the functional activation hook; this adds a themeable
442
+ // `astryx-tree-list-chevron` class and reflects the open/closed state so
443
+ // a theme can restyle the toggle (and each state) without a fragile
444
+ // `[data-tree-toggle]` selector.
445
+ themeProps('tree-list-chevron', {
446
+ state: isExpanded ? 'expanded' : 'collapsed',
447
+ }),
448
+ stylex.props(styles.chevronButton),
449
+ )}>
398
450
  {chevronIcon}
399
451
  </button>
400
452
  ) : (
401
453
  // Non-interactive chevron only when toggling is not wired up at all
402
- <span {...stylex.props(styles.chevronContainer)}>{chevronIcon}</span>
454
+ <span
455
+ {...mergeProps(
456
+ themeProps('tree-list-chevron', {
457
+ state: isExpanded ? 'expanded' : 'collapsed',
458
+ }),
459
+ stylex.props(styles.chevronContainer),
460
+ )}>
461
+ {chevronIcon}
462
+ </span>
403
463
  )
404
464
  ) : null;
405
465
 
@@ -461,13 +521,15 @@ export function TreeListItem({
461
521
  data-tree-level={nestedLevel + 1}
462
522
  data-tree-disabled={isDisabled || undefined}
463
523
  {...stylex.props(styles.wrapper)}>
464
- <div {...stylex.props(styles.treeBranches)}>
465
- <TreeListBranches
466
- ancestorsIsLast={ancestorsIsLast}
467
- isLast={isLast}
468
- nestedLevel={nestedLevel}
469
- />
470
- </div>
524
+ {variant !== 'noGuides' && (
525
+ <div {...stylex.props(styles.treeBranches)}>
526
+ <TreeListBranches
527
+ ancestorsIsLast={ancestorsIsLast}
528
+ isLast={isLast}
529
+ nestedLevel={nestedLevel}
530
+ />
531
+ </div>
532
+ )}
471
533
  <div {...stylex.props(styles.rowWrapper)}>
472
534
  <div
473
535
  {...mergeProps(
@@ -487,7 +549,7 @@ export function TreeListItem({
487
549
  isSelected && styles.selected,
488
550
  ),
489
551
  )}
490
- style={{marginLeft: computedMarginLeft}}
552
+ style={indentStyle}
491
553
  onClick={handleClick}>
492
554
  {innerContent}
493
555
  </div>
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * @file TreeListTypes.ts
5
5
  * @input Uses React types
6
- * @output Exports TreeListItemData, TreeListDensity types
6
+ * @output Exports TreeListItemData, TreeListDensity, TreeListVariant types
7
7
  * @position Type definitions; consumed by TreeList.tsx, TreeListItem.tsx, index.ts
8
8
  *
9
9
  * SYNC: When modified, update these files to stay in sync:
@@ -16,6 +16,32 @@ import type {ReactNode} from 'react';
16
16
  /** Spacing density for tree list items. */
17
17
  export type TreeListDensity = 'compact' | 'balanced' | 'spacious';
18
18
 
19
+ /**
20
+ * Extensible variant map for TreeList.
21
+ *
22
+ * Theme packages can add custom variants via TypeScript module augmentation:
23
+ * @example
24
+ * ```
25
+ * declare module '@astryxdesign/core/TreeList' {
26
+ * interface TreeListVariantMap {
27
+ * 'dotted': true;
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ export interface TreeListVariantMap {
33
+ lineGuides: true;
34
+ noGuides: true;
35
+ }
36
+
37
+ /**
38
+ * Visual treatment of the hierarchy guide (connector) lines. Extensible via
39
+ * module augmentation of TreeListVariantMap.
40
+ * - `lineGuides`: connector lines between parent and child rows (default)
41
+ * - `noGuides`: no connector lines; indentation alone conveys nesting
42
+ */
43
+ export type TreeListVariant = keyof TreeListVariantMap;
44
+
19
45
  /** Recursive item configuration for TreeList. */
20
46
  export interface TreeListItemData {
21
47
  /** Unique identifier for the item. Used as React key and for expansion tracking. */
@@ -12,5 +12,5 @@
12
12
  */
13
13
 
14
14
  export {TreeList} from './TreeList';
15
- export type {TreeListProps, TreeListDensity} from './TreeList';
16
- export type {TreeListItemData} from './TreeListTypes';
15
+ export type {TreeListProps, TreeListDensity, TreeListVariant} from './TreeList';
16
+ export type {TreeListItemData, TreeListVariantMap} from './TreeListTypes';
@@ -230,7 +230,7 @@ const styles = stylex.create({
230
230
  outline: 'none',
231
231
  backgroundColor: 'transparent',
232
232
  border: 'none',
233
- textAlign: 'left',
233
+ textAlign: 'start',
234
234
  },
235
235
  itemHighlighted: {
236
236
  backgroundColor: colorVars['--color-overlay-hover'],
@@ -431,7 +431,7 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
431
431
  resultsGenRef.current = gen;
432
432
  const shown = searchResults.slice(0, maxMenuItems);
433
433
  setResults(shown);
434
- setHighlightedIndex(searchResults.length > 0 ? 0 : -1);
434
+ setHighlightedIndex(shown.length > 0 ? 0 : -1);
435
435
  if (searchResults.length > 0 || searchQuery.length > 0) {
436
436
  showLayer();
437
437
  }
@@ -469,8 +469,9 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
469
469
  return;
470
470
  }
471
471
  resultsGenRef.current = gen;
472
- setResults(bootstrapResults.slice(0, maxMenuItems));
473
- setHighlightedIndex(bootstrapResults.length > 0 ? 0 : -1);
472
+ const shown = bootstrapResults.slice(0, maxMenuItems);
473
+ setResults(shown);
474
+ setHighlightedIndex(shown.length > 0 ? 0 : -1);
474
475
  if (bootstrapResults.length > 0) {
475
476
  showLayer();
476
477
  }
@@ -637,15 +638,19 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
637
638
  switch (e.key) {
638
639
  case 'ArrowDown':
639
640
  e.preventDefault();
640
- setHighlightedIndex(prev =>
641
- prev < results.length - 1 ? prev + 1 : 0,
642
- );
641
+ if (results.length > 0) {
642
+ setHighlightedIndex(prev =>
643
+ prev < results.length - 1 ? prev + 1 : 0,
644
+ );
645
+ }
643
646
  break;
644
647
  case 'ArrowUp':
645
648
  e.preventDefault();
646
- setHighlightedIndex(prev =>
647
- prev > 0 ? prev - 1 : results.length - 1,
648
- );
649
+ if (results.length > 0) {
650
+ setHighlightedIndex(prev =>
651
+ prev > 0 ? prev - 1 : results.length - 1,
652
+ );
653
+ }
649
654
  break;
650
655
  case 'Enter':
651
656
  e.preventDefault();
@@ -660,13 +665,17 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
660
665
  case 'Home':
661
666
  if (popover.isOpen) {
662
667
  e.preventDefault();
663
- setHighlightedIndex(0);
668
+ if (results.length > 0) {
669
+ setHighlightedIndex(0);
670
+ }
664
671
  }
665
672
  break;
666
673
  case 'End':
667
674
  if (popover.isOpen) {
668
675
  e.preventDefault();
669
- setHighlightedIndex(results.length - 1);
676
+ if (results.length > 0) {
677
+ setHighlightedIndex(results.length - 1);
678
+ }
670
679
  }
671
680
  break;
672
681
  }
@@ -694,13 +703,17 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
694
703
  // cursor walks off-screen once navigation passes the visible window. Mirrors
695
704
  // CommandPaletteItem's scrollIntoView({block: 'nearest'}) behavior.
696
705
  useEffect(() => {
697
- if (!popover.isOpen || highlightedIndex < 0) {
706
+ if (
707
+ !popover.isOpen ||
708
+ highlightedIndex < 0 ||
709
+ highlightedIndex >= results.length
710
+ ) {
698
711
  return;
699
712
  }
700
713
  document
701
714
  .getElementById(getItemId(highlightedIndex))
702
715
  ?.scrollIntoView?.({block: 'nearest'});
703
- }, [popover.isOpen, highlightedIndex, getItemId]);
716
+ }, [popover.isOpen, highlightedIndex, getItemId, results.length]);
704
717
 
705
718
  const selectedKey =
706
719
  value == null ? null : getKey(value.id, () => results.indexOf(value));
@@ -725,7 +738,9 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
725
738
  aria-expanded={popover.isOpen}
726
739
  aria-controls={listboxId}
727
740
  aria-activedescendant={
728
- popover.isOpen && highlightedIndex >= 0
741
+ popover.isOpen &&
742
+ highlightedIndex >= 0 &&
743
+ highlightedIndex < results.length
729
744
  ? getItemId(highlightedIndex)
730
745
  : undefined
731
746
  }
@@ -89,6 +89,13 @@ export const docs = {
89
89
  description:
90
90
  'Validation status object with type and message for error/warning/success states.',
91
91
  },
92
+ {
93
+ name: 'statusVariant',
94
+ type: "'attached' | 'detached'",
95
+ description:
96
+ 'How the status message is placed relative to the input. attached overlaps directly below the input (bordered treatment); detached floats below as a separate element with spacing.',
97
+ default: "'attached'",
98
+ },
92
99
  {
93
100
  name: 'renderItem',
94
101
  type: '(item: T) => ReactNode',
@@ -158,6 +165,12 @@ export const docs = {
158
165
  type: '(isOpen: boolean) => void',
159
166
  description: 'Callback when the dropdown opens or closes.',
160
167
  },
168
+ {
169
+ name: 'width',
170
+ type: 'SizeValue',
171
+ description:
172
+ 'Width of the field (number = pixels, string used as-is, e.g. "100%"). Sizes the whole field (label, control, and status) so they stay aligned.',
173
+ },
161
174
  {
162
175
  name: 'xstyle',
163
176
  type: 'StyleXStyles',
@@ -171,6 +171,33 @@ describe('BaseTypeahead', () => {
171
171
  });
172
172
  });
173
173
 
174
+ describe('empty results active descendant (#4059)', () => {
175
+ it('does not set aria-activedescendant when search has 0 results', async () => {
176
+ render(
177
+ <BaseTypeahead
178
+ searchSource={fruitSource}
179
+ value={null}
180
+ onChange={() => {}}
181
+ debounceMs={0}
182
+ />,
183
+ );
184
+ const input = screen.getByRole('combobox');
185
+ fireEvent.change(input, {target: {value: 'zzzzz'}});
186
+
187
+ await waitFor(() => {
188
+ expect(input).not.toHaveAttribute('aria-activedescendant');
189
+ });
190
+
191
+ // Press ArrowDown — should NOT set aria-activedescendant to option-0
192
+ fireEvent.keyDown(input, {key: 'ArrowDown'});
193
+ expect(input).not.toHaveAttribute('aria-activedescendant');
194
+
195
+ // Press Home — should NOT set aria-activedescendant
196
+ fireEvent.keyDown(input, {key: 'Home'});
197
+ expect(input).not.toHaveAttribute('aria-activedescendant');
198
+ });
199
+ });
200
+
174
201
  it('disables input when isDisabled', () => {
175
202
  render(
176
203
  <BaseTypeahead
@@ -948,3 +975,26 @@ describe('Typeahead disabledMessage', () => {
948
975
  expect(input).not.toHaveAttribute('aria-disabled');
949
976
  });
950
977
  });
978
+
979
+
980
+ describe('Typeahead statusVariant forwarding', () => {
981
+ it('defaults to attached (status renders with data-variant="attached")', () => {
982
+ const {container} = render(
983
+ <Typeahead label="Fruit" searchSource={fruitSource} value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} />,
984
+ );
985
+ expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
986
+ 'data-variant',
987
+ 'attached',
988
+ );
989
+ });
990
+
991
+ it('forwards statusVariant="detached" to the underlying Field status', () => {
992
+ const {container} = render(
993
+ <Typeahead label="Fruit" searchSource={fruitSource} value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} statusVariant="detached" />,
994
+ );
995
+ expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
996
+ 'data-variant',
997
+ 'detached',
998
+ );
999
+ });
1000
+ });
@@ -36,6 +36,7 @@ import {
36
36
  inputStatusBorderStyles,
37
37
  inputStatusHoverShadowStyles,
38
38
  inputStatusFocusWithinStyles,
39
+ type FieldStatusVariant,
39
40
  } from '../Field';
40
41
  import {Token} from '../Token';
41
42
  import {useTooltip} from '../Tooltip';
@@ -75,6 +76,13 @@ export interface TypeaheadProps<T extends SearchableItem> extends Omit<
75
76
  isOptional?: boolean;
76
77
  /** Validation status. */
77
78
  status?: InputStatus;
79
+ /**
80
+ * How the status message is placed relative to the input.
81
+ * - 'attached': message overlaps directly below the input (bordered treatment)
82
+ * - 'detached': message floats below as a separate element with spacing
83
+ * @default 'attached'
84
+ */
85
+ statusVariant?: FieldStatusVariant;
78
86
  /**
79
87
  * Icon to display at the start of the input.
80
88
  * Accepts a ReactNode (e.g. `<Icon icon={SearchIcon} />`) or an SVG icon component directly.
@@ -226,6 +234,7 @@ export function Typeahead<T extends SearchableItem>({
226
234
  isRequired = false,
227
235
  isOptional = false,
228
236
  status,
237
+ statusVariant = 'attached',
229
238
  startIcon,
230
239
  labelTooltip,
231
240
  searchSource,
@@ -412,7 +421,7 @@ export function Typeahead<T extends SearchableItem>({
412
421
  styles.wrapper,
413
422
  sizeStyle,
414
423
  status && inputStatusBorderStyles[status.type],
415
- status && inputStatusHoverShadowStyles[status.type],
424
+ status && !isDisabled && inputStatusHoverShadowStyles[status.type],
416
425
  status && inputStatusFocusWithinStyles[status.type],
417
426
  isDisabled && inputWrapperStyles.disabled,
418
427
  inputGroup && groupStyles.inGroup,
@@ -500,6 +509,7 @@ export function Typeahead<T extends SearchableItem>({
500
509
  }
501
510
  : undefined
502
511
  }
512
+ statusVariant={statusVariant}
503
513
  labelTooltip={labelTooltip}
504
514
  width={width}
505
515
  xstyle={xstyle}
@@ -132,6 +132,7 @@ export function TypeaheadItem<T extends SearchableItem>({
132
132
  icon,
133
133
  description,
134
134
  isDisabled = false,
135
+ xstyle,
135
136
  }: TypeaheadItemProps<T>) {
136
137
  // If item has a pre-rendered element, use it
137
138
  if (item.element) {
@@ -143,7 +144,7 @@ export function TypeaheadItem<T extends SearchableItem>({
143
144
  ref={ref}
144
145
  {...mergeProps(
145
146
  themeProps('typeahead-item'),
146
- stylex.props(styles.container, isDisabled && styles.disabled),
147
+ stylex.props(styles.container, isDisabled && styles.disabled, xstyle),
147
148
  )}>
148
149
  {icon}
149
150
  <div {...stylex.props(styles.content)}>