@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
@@ -25,7 +25,6 @@ import {
25
25
  useTransition,
26
26
  } from 'react';
27
27
  import * as stylex from '@stylexjs/stylex';
28
- import type {IconName} from '../Icon';
29
28
  import {
30
29
  colorVars,
31
30
  sizeVars,
@@ -37,11 +36,11 @@ import {
37
36
  import {
38
37
  Field,
39
38
  type InputStatus,
40
- type InputStatusType,
41
39
  inputWrapperStyles,
42
40
  inputStatusBorderStyles,
43
41
  inputStatusHoverShadowStyles,
44
42
  inputStatusFocusWithinStyles,
43
+ type FieldStatusVariant,
45
44
  } from '../Field';
46
45
  import {Icon} from '../Icon';
47
46
  import {VisuallyHidden} from '../VisuallyHidden';
@@ -51,15 +50,16 @@ import {useSize} from '../SizeContext/SizeContext';
51
50
  import {Spinner} from '../Spinner';
52
51
  import {Calendar, type ISODateString, type CalendarHandle} from '../Calendar';
53
52
  import {useCalendarConstraints} from '../Calendar/hooks';
53
+ import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
54
54
  import {usePopover} from '../Popover';
55
55
  import {useTooltip} from '../Tooltip';
56
56
  import {getInputARIA, parseDateInput} from '../utils';
57
57
  import {
58
58
  plainDateFromISO,
59
59
  plainDateToISO,
60
- plainDateFormat,
61
- DATE_FORMAT_LONG,
60
+ formatSharedDate,
62
61
  } from '../utils/plainDate';
62
+ import type {TimestampFormat} from '../Timestamp';
63
63
 
64
64
  const styles = stylex.create({
65
65
  iconButton: {
@@ -127,6 +127,25 @@ const sizeStyles = stylex.create({
127
127
 
128
128
  export type DateInputSize = keyof typeof sizeStyles;
129
129
 
130
+ /**
131
+ * Named display formats for a committed date value. These are the date-only
132
+ * members of Timestamp's `format` vocabulary — reused verbatim (via
133
+ * `Extract`) so the same literal renders the same date shape in both
134
+ * `Timestamp` and `DateInput`:
135
+ * - `'date'`: locale short-month date, e.g. "Mar 21, 2026"
136
+ * - `'date_long'`: locale long-month date, e.g. "March 21, 2026" (the default)
137
+ * - `'date_weekday'`: short weekday + date, e.g. "Wed, Mar 21, 2026"
138
+ * - `'system_date'`: ISO 8601 calendar date, e.g. "2026-03-21"
139
+ *
140
+ * Because `DateInputFormat` is `Extract`ed from `TimestampFormat`, the two
141
+ * types stay in compile-time lockstep: renaming or removing one of these
142
+ * members from `TimestampFormat` breaks this type at build time.
143
+ */
144
+ export type DateInputFormat = Extract<
145
+ TimestampFormat,
146
+ 'date' | 'date_long' | 'date_weekday' | 'system_date'
147
+ >;
148
+
130
149
  // Re-export shared types for convenience
131
150
 
132
151
  export type {
@@ -259,6 +278,14 @@ export interface DateInputProps extends Omit<
259
278
  * If message is provided, displays below the input.
260
279
  */
261
280
  status?: InputStatus;
281
+ /**
282
+ * How the status message is placed relative to the input.
283
+ * - 'attached': message overlaps directly below the input (bordered treatment)
284
+ * - 'detached': message floats below as a separate element with spacing
285
+ * - 'tooltip': no message box; the status icon becomes a focusable info-tip button that reveals the message on hover, keyboard focus, or tap
286
+ * @default 'attached'
287
+ */
288
+ statusVariant?: FieldStatusVariant;
262
289
 
263
290
  /**
264
291
  * Width of the field. Numbers are treated as pixels, strings are used as-is
@@ -283,6 +310,37 @@ export interface DateInputProps extends Omit<
283
310
  * @default 1
284
311
  */
285
312
  numberOfMonths?: 1 | 2;
313
+
314
+ /**
315
+ * How the committed date value is displayed in the text field. Accepts a
316
+ * named format reused from `Timestamp`'s `format` vocabulary (so the same
317
+ * literal renders the same date shape in both components) or a function that
318
+ * maps the ISO value to a custom display string.
319
+ *
320
+ * - `'date_long'` (default): long-month date, e.g. "March 21, 2026"
321
+ * - `'date'`: short-month date, e.g. "Mar 21, 2026"
322
+ * - `'date_weekday'`: short weekday + date, e.g. "Wed, Mar 21, 2026"
323
+ * - `'system_date'`: ISO 8601 calendar date, e.g. "2026-03-21"
324
+ * - `(value: ISODateString) => string`: fully custom display string
325
+ *
326
+ * Formatting applies only to the committed value — never to text the user is
327
+ * actively typing. A custom function's output that `parseDateInput` cannot
328
+ * read back can't be re-committed after an edit; external `value` changes
329
+ * always recompute the display from the ISO value.
330
+ *
331
+ * @default 'date_long'
332
+ * @example
333
+ * ```
334
+ * <DateInput label="Ship date" value={date} onChange={setDate} format="date" />
335
+ * <DateInput
336
+ * label="Ship date"
337
+ * value={date}
338
+ * onChange={setDate}
339
+ * format={iso => new Date(iso + 'T00:00').toDateString()}
340
+ * />
341
+ * ```
342
+ */
343
+ format?: DateInputFormat | ((value: ISODateString) => string);
286
344
  }
287
345
 
288
346
  /**
@@ -315,9 +373,11 @@ export function DateInput({
315
373
  placeholder: placeholderFromProps,
316
374
  size: sizeProp,
317
375
  status,
376
+ statusVariant = 'attached',
318
377
  labelTooltip,
319
378
  hasClear = false,
320
379
  numberOfMonths = 1,
380
+ format = 'date_long',
321
381
  width,
322
382
  xstyle,
323
383
  className,
@@ -359,30 +419,24 @@ export function DateInput({
359
419
  isEnabled: showsDisabledMessage,
360
420
  });
361
421
 
362
- // Status icon mapping
363
- const statusIconMap: Record<InputStatusType, IconName> = {
364
- warning: 'warning',
365
- error: 'error',
366
- success: 'success',
367
- };
368
-
369
- const statusIconColorMap: Record<
370
- InputStatusType,
371
- 'warning' | 'error' | 'success'
372
- > = {
373
- warning: 'warning',
374
- error: 'error',
375
- success: 'success',
376
- };
377
-
378
422
  // Constraint checking for text input validation (reuses calendar logic)
379
423
  const {isDateDisabled} = useCalendarConstraints({min, max, dateConstraints});
380
424
 
425
+ const {statusIcon, describedBy: statusTooltipDescribedBy} =
426
+ useInputStatusIcon({
427
+ status,
428
+ statusVariant,
429
+ isInGroup: !!inputGroup,
430
+ });
431
+
381
432
  const {ariaLabelledBy, ariaDescribedBy} = getInputARIA(
382
433
  inputLabelID,
383
434
  [
384
435
  description ? descriptionID : null,
385
- status?.message ? statusMessageID : null,
436
+ statusVariant !== 'tooltip' && status?.message ? statusMessageID : null,
437
+ // The tooltip variant renders no message box; describe the input by the
438
+ // tooltip's content instead so the status is still announced.
439
+ statusTooltipDescribedBy,
386
440
  showsDisabledMessage ? disabledMessageTooltip.describedBy : null,
387
441
  ],
388
442
  inputGroup,
@@ -404,12 +458,26 @@ export function DateInput({
404
458
  }
405
459
  }
406
460
 
461
+ // Format a committed ISO value for display. The default `date_long` renders
462
+ // the long-month shape (byte-identical to the historical hardcoded
463
+ // DATE_FORMAT_LONG rendering, so still non-breaking); a function is called
464
+ // with the ISO value; every other named member reuses Timestamp's shared
465
+ // date mapping. Applies ONLY to the committed value, never to in-progress
466
+ // typed input.
467
+ const formatCommittedValue = useCallback(
468
+ (iso: ISODateString): string =>
469
+ typeof format === 'function'
470
+ ? format(iso)
471
+ : formatSharedDate(plainDateFromISO(iso), format),
472
+ [format],
473
+ );
474
+
407
475
  // Display value: pending input if typing, otherwise formatted value
408
476
  const displayValue =
409
477
  pendingInput !== null
410
478
  ? pendingInput
411
479
  : optimisticValue && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue)
412
- ? plainDateFormat(plainDateFromISO(optimisticValue), DATE_FORMAT_LONG)
480
+ ? formatCommittedValue(optimisticValue)
413
481
  : '';
414
482
 
415
483
  // Check if current input is valid (for styling purposes)
@@ -573,7 +641,9 @@ export function DateInput({
573
641
  sizeStyles[size],
574
642
  isEffectivelyDisabled && inputWrapperStyles.disabled,
575
643
  status && inputStatusBorderStyles[status.type],
576
- status && inputStatusHoverShadowStyles[status.type],
644
+ status &&
645
+ !isEffectivelyDisabled &&
646
+ inputStatusHoverShadowStyles[status.type],
577
647
  status && inputStatusFocusWithinStyles[status.type],
578
648
  inputGroup && groupStyles.inGroup,
579
649
  xstyle,
@@ -595,7 +665,20 @@ export function DateInput({
595
665
  styles.iconButton,
596
666
  isEffectivelyDisabled && styles.iconButtonDisabled,
597
667
  )}>
598
- <Icon icon="calendar" size="sm" color="secondary" />
668
+ <Icon
669
+ icon="calendar"
670
+ size="sm"
671
+ color="secondary"
672
+ // Stable theme target on the toggle glyph itself, so a theme can
673
+ // restyle just this icon (color, size, hover) — and each open/closed
674
+ // state — via `defineTheme`. Same-element rules in @layer astryx-theme
675
+ // win over the icon's own base color/size, which a button-level target
676
+ // could not reach. Reflects the popover's open/closed state as a
677
+ // `data-state` attribute.
678
+ {...themeProps('date-input-toggle-icon', {
679
+ state: popover.isOpen ? 'expanded' : 'collapsed',
680
+ })}
681
+ />
599
682
  </button>
600
683
  <input
601
684
  ref={mergeRefs(ref, inputRef)}
@@ -647,17 +730,20 @@ export function DateInput({
647
730
  onClick={handleClear}
648
731
  aria-label={t('@astryx.dateInput.clear', {label})}
649
732
  {...stylex.props(styles.iconButton)}>
650
- <Icon icon="close" size="sm" color="secondary" />
733
+ <Icon
734
+ icon="close"
735
+ size="sm"
736
+ color="secondary"
737
+ // Stable theme target on the clear glyph itself, so a theme can
738
+ // restyle just this icon (color, size, hover) via `defineTheme`.
739
+ // Same-element rules in @layer astryx-theme win over the icon's own
740
+ // base color/size, which a button-level target could not reach.
741
+ {...themeProps('date-input-clear-icon')}
742
+ />
651
743
  </button>
652
744
  )}
653
745
  {isBusy && <Spinner size="sm" />}
654
- {status && !inputGroup && (
655
- <Icon
656
- icon={statusIconMap[status.type]}
657
- size="md"
658
- color={statusIconColorMap[status.type]}
659
- />
660
- )}
746
+ {statusIcon}
661
747
  {popover.render(
662
748
  <Calendar
663
749
  handleRef={calendarRef}
@@ -699,6 +785,7 @@ export function DateInput({
699
785
  }
700
786
  : undefined
701
787
  }
788
+ statusVariant={statusVariant}
702
789
  labelTooltip={labelTooltip}
703
790
  width={width}>
704
791
  {inputWrapper}
@@ -13,6 +13,7 @@ export {DateInput} from './DateInput';
13
13
  export type {
14
14
  DateInputProps,
15
15
  DateInputSize,
16
+ DateInputFormat,
16
17
  DateInputStatus,
17
18
  DateInputStatusType,
18
19
  } from './DateInput';
@@ -127,6 +127,13 @@ export const docs = {
127
127
  type: "{type: 'warning' | 'error' | 'success', message?: string}",
128
128
  description: 'Status indicator for error, warning, or success states.',
129
129
  },
130
+ {
131
+ name: 'statusVariant',
132
+ type: "'attached' | 'detached' | 'tooltip'",
133
+ description:
134
+ '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; tooltip hides the message box and surfaces it in a tooltip on the status icon.',
135
+ default: "'attached'",
136
+ },
130
137
  {
131
138
  name: 'labelTooltip',
132
139
  type: 'string',
@@ -138,6 +145,12 @@ export const docs = {
138
145
  description: 'Number of months in the calendar.',
139
146
  default: '2',
140
147
  },
148
+ {
149
+ name: 'width',
150
+ type: 'SizeValue',
151
+ description:
152
+ '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.',
153
+ },
141
154
  {
142
155
  name: 'xstyle',
143
156
  type: 'StyleXStyles',
@@ -147,6 +160,8 @@ export const docs = {
147
160
  theming: {
148
161
  targets: [
149
162
  {className: 'astryx-date-range-input', visualProps: ['size', 'status']},
163
+ {className: 'astryx-date-range-input-toggle-icon', states: ['state']},
164
+ {className: 'astryx-date-range-input-clear-icon'},
150
165
  ],
151
166
  },
152
167
  usage: {
@@ -296,6 +311,7 @@ export const docsDense = {
296
311
  placeholder: 'placeholder when empty',
297
312
  size: 'trigger size',
298
313
  status: 'error/warning/success status',
314
+ statusVariant: 'How status message is placed: attached overlaps below input; detached floats below w/ spacing; tooltip hides the box and shows it on the status icon.',
299
315
  labelTooltip: 'tooltip via info icon at label end',
300
316
  numberOfMonths: 'months in calendar (default 2)',
301
317
  changeAction:
@@ -19,6 +19,9 @@ import userEvent from '@testing-library/user-event';
19
19
  import {getButton, queryButton} from '../__tests__/fastRoleQueries';
20
20
  import {DateRangeInput} from './DateRangeInput';
21
21
  import type {DateRange} from './DateRangeInput';
22
+ import {Icon} from '../Icon';
23
+ import {defineTheme} from '../theme/defineTheme';
24
+ import {generateThemeCSSFlat} from '../theme/generateThemeRules';
22
25
 
23
26
  describe('DateRangeInput', () => {
24
27
  it('renders with label', () => {
@@ -471,3 +474,140 @@ describe('DateRangeInput', () => {
471
474
  });
472
475
  });
473
476
  });
477
+
478
+ describe('DateRangeInput statusVariant forwarding', () => {
479
+ it('defaults to attached (status renders with data-variant="attached")', () => {
480
+ const {container} = render(
481
+ <DateRangeInput
482
+ label="Range"
483
+ value={null}
484
+ onChange={() => {}}
485
+ status={{type: 'error', message: 'Required'}}
486
+ />,
487
+ );
488
+ expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
489
+ 'data-variant',
490
+ 'attached',
491
+ );
492
+ });
493
+
494
+ it('forwards statusVariant="detached" to the underlying Field status', () => {
495
+ const {container} = render(
496
+ <DateRangeInput
497
+ label="Range"
498
+ value={null}
499
+ onChange={() => {}}
500
+ status={{type: 'error', message: 'Required'}}
501
+ statusVariant="detached"
502
+ />,
503
+ );
504
+ expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
505
+ 'data-variant',
506
+ 'detached',
507
+ );
508
+ });
509
+ });
510
+
511
+ describe('DateRangeInput icon theme targets', () => {
512
+ const RANGE: DateRange = {start: '2026-03-15', end: '2026-03-22'};
513
+
514
+ // Resolve a glyph span (the astryx-icon element) inside a given button,
515
+ // independent of the theme target class.
516
+ const iconIn = (button: HTMLElement): HTMLElement => {
517
+ const icon = button.querySelector('.astryx-icon');
518
+ if (icon == null) {
519
+ throw new Error('icon not found');
520
+ }
521
+ return icon as HTMLElement;
522
+ };
523
+
524
+ it('renders astryx-date-range-input-clear-icon on the clear glyph', () => {
525
+ render(
526
+ <DateRangeInput
527
+ label="Range"
528
+ value={RANGE}
529
+ onChange={() => {}}
530
+ hasClear
531
+ />,
532
+ );
533
+ // The stable target lands on the icon element itself (not the button), so a
534
+ // theme can restyle just this glyph (color, size, hover) via defineTheme —
535
+ // a button-level target could not reach the icon's own color/size.
536
+ const icon = iconIn(getButton('Clear Range'));
537
+ expect(icon).toHaveClass('astryx-date-range-input-clear-icon');
538
+ expect(icon).toHaveClass('astryx-icon');
539
+ });
540
+
541
+ it('renders astryx-date-range-input-toggle-icon on the calendar-toggle glyph, reflecting state', () => {
542
+ render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
543
+ const icon = iconIn(getButton('Open calendar'));
544
+ expect(icon).toHaveClass('astryx-date-range-input-toggle-icon');
545
+ expect(icon).toHaveClass('astryx-icon');
546
+ // Closed by default → data-state="collapsed".
547
+ expect(icon).toHaveAttribute('data-state', 'collapsed');
548
+ });
549
+
550
+ it('renders the default icons (secondary color, sm size) byte-identically', () => {
551
+ // Pixel-identical default guard: the glyphs must carry the exact same
552
+ // StyleX color/size classes as a standalone secondary/sm icon. The added
553
+ // target class is purely additive — it changes nothing until a theme
554
+ // targets it.
555
+ render(
556
+ <DateRangeInput
557
+ label="Range"
558
+ value={RANGE}
559
+ onChange={() => {}}
560
+ hasClear
561
+ />,
562
+ );
563
+ const clearIcon = iconIn(getButton('Clear Range'));
564
+
565
+ const {container: refContainer} = render(
566
+ <Icon icon="close" size="sm" color="secondary" />,
567
+ );
568
+ const refIcon = refContainer.querySelector('.astryx-icon') as HTMLElement;
569
+
570
+ const styleClasses = (el: HTMLElement) =>
571
+ el.className
572
+ .split(' ')
573
+ .filter(
574
+ c =>
575
+ c !== 'astryx-date-range-input-clear-icon' &&
576
+ c !== 'astryx-date-range-input-toggle-icon',
577
+ )
578
+ .sort();
579
+
580
+ expect(styleClasses(clearIcon)).toEqual(styleClasses(refIcon));
581
+ });
582
+
583
+ it('exposes the icon targets so a theme reaches icon color, size, and hover', () => {
584
+ // jsdom cannot resolve the @layer cascade, so the DOM-class assertions
585
+ // above (targets land on the icon elements) plus this generation assertion
586
+ // (the theme emits same-element icon rules in @layer astryx-theme) together
587
+ // prove the seam: a same-element theme rule wins over the icon's own
588
+ // base-layer color/size.
589
+ const theme = defineTheme({
590
+ name: 'date-range-input-icon-test',
591
+ components: {
592
+ 'date-range-input-clear-icon': {
593
+ base: {
594
+ width: '12px',
595
+ height: '12px',
596
+ fontSize: '12px',
597
+ color: 'var(--color-icon-secondary)',
598
+ ':hover': {color: 'var(--color-icon-primary)'},
599
+ },
600
+ },
601
+ 'date-range-input-toggle-icon': {
602
+ base: {width: '14px', height: '14px', fontSize: '14px'},
603
+ },
604
+ },
605
+ });
606
+ const css = generateThemeCSSFlat(theme);
607
+ expect(css).toContain('.astryx-date-range-input-clear-icon');
608
+ expect(css).toContain('.astryx-date-range-input-toggle-icon');
609
+ expect(css).toContain(':hover');
610
+ expect(css).toContain('12px');
611
+ expect(css).toContain('14px');
612
+ });
613
+ });
@@ -25,7 +25,6 @@ import {
25
25
  DATE_FORMAT_SHORT,
26
26
  DATE_FORMAT_SHORT_WITH_YEAR,
27
27
  } from '../utils/plainDate';
28
- import type {IconName} from '../Icon';
29
28
  import {
30
29
  colorVars,
31
30
  sizeVars,
@@ -38,11 +37,11 @@ import {
38
37
  import {
39
38
  Field,
40
39
  type InputStatus,
41
- type InputStatusType,
42
40
  inputWrapperStyles,
43
41
  inputStatusBorderStyles,
44
42
  inputStatusHoverShadowStyles,
45
43
  inputStatusFocusWithinStyles,
44
+ type FieldStatusVariant,
46
45
  } from '../Field';
47
46
  import {Icon} from '../Icon';
48
47
  import {Spinner} from '../Spinner';
@@ -53,6 +52,7 @@ import {mergeProps} from '../utils';
53
52
  import type {BaseProps} from '../BaseProps';
54
53
  import type {SizeValue} from '../utils/types';
55
54
  import {useSize} from '../SizeContext/SizeContext';
55
+ import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
56
56
  import {themeProps} from '../utils/themeProps';
57
57
  import {useTranslator} from '../i18n';
58
58
 
@@ -127,9 +127,9 @@ const styles = stylex.create({
127
127
  flexDirection: 'column',
128
128
  gap: spacingVars['--spacing-1'],
129
129
  padding: spacingVars['--spacing-3'],
130
- borderRightWidth: borderVars['--border-width'],
131
- borderRightStyle: 'solid',
132
- borderRightColor: colorVars['--color-border-emphasized'],
130
+ borderInlineEndWidth: borderVars['--border-width'],
131
+ borderInlineEndStyle: 'solid',
132
+ borderInlineEndColor: colorVars['--color-border-emphasized'],
133
133
  minWidth: 140,
134
134
  },
135
135
  presetButton: {
@@ -330,6 +330,14 @@ export interface DateRangeInputProps extends Omit<
330
330
  * Status indicator for the input.
331
331
  */
332
332
  status?: InputStatus;
333
+ /**
334
+ * How the status message is placed relative to the input.
335
+ * - 'attached': message overlaps directly below the input (bordered treatment)
336
+ * - 'detached': message floats below as a separate element with spacing
337
+ * - 'tooltip': no message box; the status icon becomes a focusable info-tip button that reveals the message on hover, keyboard focus, or tap
338
+ * @default 'attached'
339
+ */
340
+ statusVariant?: FieldStatusVariant;
333
341
 
334
342
  /**
335
343
  * Width of the field. Numbers are treated as pixels, strings are used as-is
@@ -385,6 +393,7 @@ export function DateRangeInput({
385
393
  placeholder: placeholderFromProps,
386
394
  size: sizeProp,
387
395
  status,
396
+ statusVariant = 'attached',
388
397
  labelTooltip,
389
398
  numberOfMonths = 2,
390
399
  width,
@@ -422,25 +431,19 @@ export function DateRangeInput({
422
431
  isEnabled: showsDisabledMessage,
423
432
  });
424
433
 
425
- const statusIconMap: Record<InputStatusType, IconName> = {
426
- warning: 'warning',
427
- error: 'error',
428
- success: 'success',
429
- };
430
-
431
- const statusIconColorMap: Record<
432
- InputStatusType,
433
- 'warning' | 'error' | 'success'
434
- > = {
435
- warning: 'warning',
436
- error: 'error',
437
- success: 'success',
438
- };
434
+ const {statusIcon, describedBy: statusTooltipDescribedBy} =
435
+ useInputStatusIcon({
436
+ status,
437
+ statusVariant,
438
+ });
439
439
 
440
440
  const ariaDescribedBy =
441
441
  [
442
442
  description ? descriptionID : null,
443
- status?.message ? statusMessageID : null,
443
+ statusVariant !== 'tooltip' && status?.message ? statusMessageID : null,
444
+ // The tooltip variant renders no message box; describe the input by the
445
+ // tooltip's content instead so the status is still announced.
446
+ statusTooltipDescribedBy,
444
447
  showsDisabledMessage ? disabledMessageTooltip.describedBy : null,
445
448
  ]
446
449
  .filter(Boolean)
@@ -529,6 +532,7 @@ export function DateRangeInput({
529
532
  }
530
533
  : undefined
531
534
  }
535
+ statusVariant={statusVariant}
532
536
  labelTooltip={labelTooltip}
533
537
  width={width}>
534
538
  <div
@@ -550,7 +554,9 @@ export function DateRangeInput({
550
554
  sizeStyles[size],
551
555
  isEffectivelyDisabled && inputWrapperStyles.disabled,
552
556
  status && inputStatusBorderStyles[status.type],
553
- status && inputStatusHoverShadowStyles[status.type],
557
+ status &&
558
+ !isEffectivelyDisabled &&
559
+ inputStatusHoverShadowStyles[status.type],
554
560
  status && inputStatusFocusWithinStyles[status.type],
555
561
  xstyle,
556
562
  ),
@@ -571,7 +577,14 @@ export function DateRangeInput({
571
577
  styles.iconButton,
572
578
  isEffectivelyDisabled && styles.iconButtonDisabled,
573
579
  )}>
574
- <Icon icon="calendar" size="sm" color="secondary" />
580
+ <Icon
581
+ icon="calendar"
582
+ size="sm"
583
+ color="secondary"
584
+ {...themeProps('date-range-input-toggle-icon', {
585
+ state: popover.isOpen ? 'expanded' : 'collapsed',
586
+ })}
587
+ />
575
588
  </button>
576
589
  <button
577
590
  ref={ref}
@@ -604,17 +617,16 @@ export function DateRangeInput({
604
617
  onClick={handleClear}
605
618
  aria-label={t('@astryx.dateInput.clear', {label})}
606
619
  {...stylex.props(styles.iconButton)}>
607
- <Icon icon="close" size="sm" color="secondary" />
620
+ <Icon
621
+ icon="close"
622
+ size="sm"
623
+ color="secondary"
624
+ {...themeProps('date-range-input-clear-icon')}
625
+ />
608
626
  </button>
609
627
  )}
610
628
  {isBusy && <Spinner size="sm" />}
611
- {status && (
612
- <Icon
613
- icon={statusIconMap[status.type]}
614
- size="md"
615
- color={statusIconColorMap[status.type]}
616
- />
617
- )}
629
+ {statusIcon}
618
630
  </div>
619
631
  {popover.render(
620
632
  <div {...stylex.props(styles.popoverLayout)}>
@@ -173,6 +173,12 @@ export const docs = {
173
173
  description: 'Number of months displayed simultaneously in the calendar.',
174
174
  default: '1',
175
175
  },
176
+ {
177
+ name: 'width',
178
+ type: 'SizeValue',
179
+ description:
180
+ '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.',
181
+ },
176
182
  {
177
183
  name: 'xstyle',
178
184
  type: 'StyleXStyles',
@@ -183,6 +189,14 @@ export const docs = {
183
189
  theming: {
184
190
  targets: [
185
191
  {className: 'astryx-date-time-input', visualProps: ['size', 'status']},
192
+ {
193
+ className: 'astryx-date-time-input-date-segment',
194
+ visualProps: ['size', 'status'],
195
+ },
196
+ {
197
+ className: 'astryx-date-time-input-time-segment',
198
+ visualProps: ['size', 'status'],
199
+ },
186
200
  ],
187
201
  },
188
202
  usage: {
@@ -469,11 +483,18 @@ export const docsZh = {
469
483
  description:
470
484
  '用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
471
485
  },
472
-
473
486
  ],
474
487
  theming: {
475
488
  targets: [
476
489
  {className: 'astryx-date-time-input', visualProps: ['size', 'status']},
490
+ {
491
+ className: 'astryx-date-time-input-date-segment',
492
+ visualProps: ['size', 'status'],
493
+ },
494
+ {
495
+ className: 'astryx-date-time-input-time-segment',
496
+ visualProps: ['size', 'status'],
497
+ },
477
498
  ],
478
499
  },
479
500
  };