@astryxdesign/core 0.1.5 → 0.1.6-canary.02f2602

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 (564) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +2 -0
  3. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  4. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  5. package/dist/AlertDialog/AlertDialog.js +21 -18
  6. package/dist/AlertDialog/useImperativeAlertDialog.d.ts +0 -2
  7. package/dist/AlertDialog/useImperativeAlertDialog.d.ts.map +1 -1
  8. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -5
  9. package/dist/AppShell/AppShell.d.ts.map +1 -1
  10. package/dist/AppShell/AppShell.js +55 -53
  11. package/dist/AspectRatio/AspectRatio.js +5 -5
  12. package/dist/Avatar/Avatar.js +19 -19
  13. package/dist/Avatar/AvatarStatusDot.js +5 -5
  14. package/dist/AvatarGroup/AvatarGroup.d.ts +1 -1
  15. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  16. package/dist/AvatarGroup/AvatarGroup.js +9 -6
  17. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  18. package/dist/Badge/Badge.js +3 -3
  19. package/dist/Banner/Banner.d.ts.map +1 -1
  20. package/dist/Banner/Banner.js +32 -30
  21. package/dist/Blockquote/Blockquote.js +7 -7
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  23. package/dist/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  24. package/dist/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  25. package/dist/Breadcrumbs/Breadcrumbs.js +11 -8
  26. package/dist/Button/Button.d.ts.map +1 -1
  27. package/dist/Button/Button.js +53 -23
  28. package/dist/ButtonGroup/ButtonGroup.d.ts +20 -5
  29. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  30. package/dist/ButtonGroup/ButtonGroup.js +34 -18
  31. package/dist/Calendar/Calendar.d.ts.map +1 -1
  32. package/dist/Calendar/Calendar.js +51 -48
  33. package/dist/Card/Card.js +3 -3
  34. package/dist/Carousel/Carousel.d.ts +1 -1
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +27 -24
  37. package/dist/Center/Center.js +3 -3
  38. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  39. package/dist/Chat/ChatComposer.js +27 -24
  40. package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
  41. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  42. package/dist/Chat/ChatComposerDrawer.js +23 -16
  43. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  44. package/dist/Chat/ChatComposerInput.js +20 -16
  45. package/dist/Chat/ChatDictationButton.js +10 -10
  46. package/dist/Chat/ChatLayout.d.ts +1 -11
  47. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  48. package/dist/Chat/ChatLayout.js +23 -21
  49. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  50. package/dist/Chat/ChatLayoutScrollButton.js +13 -11
  51. package/dist/Chat/ChatMessage.d.ts +1 -1
  52. package/dist/Chat/ChatMessage.d.ts.map +1 -1
  53. package/dist/Chat/ChatMessage.js +20 -14
  54. package/dist/Chat/ChatMessageBubble.d.ts +1 -1
  55. package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
  56. package/dist/Chat/ChatMessageBubble.js +10 -8
  57. package/dist/Chat/ChatMessageList.d.ts +1 -1
  58. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  59. package/dist/Chat/ChatMessageList.js +17 -15
  60. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  61. package/dist/Chat/ChatMessageMetadata.js +24 -19
  62. package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
  63. package/dist/Chat/ChatPastedTextToken.js +16 -14
  64. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  65. package/dist/Chat/ChatSendButton.js +6 -4
  66. package/dist/Chat/ChatSystemMessage.js +11 -11
  67. package/dist/Chat/ChatTokenizedText.js +8 -8
  68. package/dist/Chat/ChatToolCalls.js +73 -73
  69. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  70. package/dist/Chat/useSpeechRecognition.js +4 -2
  71. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  72. package/dist/Chat/useTriggerMenu.js +19 -17
  73. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  74. package/dist/CheckboxInput/CheckboxInput.js +26 -24
  75. package/dist/CheckboxList/CheckboxList.d.ts +1 -1
  76. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  77. package/dist/CheckboxList/CheckboxList.js +12 -10
  78. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  79. package/dist/CheckboxList/CheckboxListItem.js +8 -6
  80. package/dist/Citation/Citation.d.ts.map +1 -1
  81. package/dist/Citation/Citation.js +20 -12
  82. package/dist/ClickableCard/ClickableCard.js +6 -6
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  85. package/dist/CodeBlock/CodeBlock.js +114 -96
  86. package/dist/Collapsible/Collapsible.js +11 -11
  87. package/dist/Collapsible/CollapsibleGroup.js +7 -7
  88. package/dist/CommandPalette/CommandPalette.d.ts +1 -1
  89. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  90. package/dist/CommandPalette/CommandPalette.js +39 -34
  91. package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
  92. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  93. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  94. package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
  95. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  96. package/dist/CommandPalette/CommandPaletteInput.js +17 -14
  97. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  98. package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
  99. package/dist/CommandPalette/CommandPaletteList.d.ts.map +1 -1
  100. package/dist/CommandPalette/CommandPaletteList.js +7 -4
  101. package/dist/ContextMenu/ContextMenu.d.ts +1 -1
  102. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  103. package/dist/ContextMenu/ContextMenu.js +14 -11
  104. package/dist/DateInput/DateInput.d.ts +1 -1
  105. package/dist/DateInput/DateInput.d.ts.map +1 -1
  106. package/dist/DateInput/DateInput.js +28 -23
  107. package/dist/DateRangeInput/DateRangeInput.d.ts +1 -1
  108. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  109. package/dist/DateRangeInput/DateRangeInput.js +32 -27
  110. package/dist/DateTimeInput/DateTimeInput.d.ts +1 -1
  111. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  112. package/dist/DateTimeInput/DateTimeInput.js +41 -33
  113. package/dist/Dialog/Dialog.js +9 -9
  114. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  115. package/dist/Dialog/DialogHeader.js +20 -18
  116. package/dist/Dialog/useImperativeDialog.js +3 -3
  117. package/dist/Divider/Divider.js +7 -7
  118. package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
  119. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  120. package/dist/DropdownMenu/DropdownMenu.js +21 -15
  121. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  122. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  123. package/dist/EmptyState/EmptyState.d.ts +4 -1
  124. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  125. package/dist/EmptyState/EmptyState.js +9 -9
  126. package/dist/Field/Field.js +17 -17
  127. package/dist/Field/FieldLabel.js +15 -15
  128. package/dist/Field/InputClearButton.js +5 -5
  129. package/dist/FieldStatus/FieldStatus.js +3 -3
  130. package/dist/FileInput/FileInput.d.ts.map +1 -1
  131. package/dist/FileInput/FileInput.js +34 -30
  132. package/dist/FormLayout/FormLayout.js +5 -5
  133. package/dist/Grid/Grid.js +3 -3
  134. package/dist/Grid/GridSpan.js +3 -3
  135. package/dist/HStack/HStack.js +3 -3
  136. package/dist/Heading/Heading.js +10 -10
  137. package/dist/HoverCard/HoverCard.js +9 -9
  138. package/dist/HoverCard/useHoverCard.js +3 -3
  139. package/dist/Icon/Icon.js +11 -11
  140. package/dist/Icon/defaultIcons.js +116 -116
  141. package/dist/IconButton/IconButton.js +3 -3
  142. package/dist/InputGroup/InputGroup.js +9 -9
  143. package/dist/InputGroup/InputGroupText.js +3 -3
  144. package/dist/Item/Item.js +17 -17
  145. package/dist/Kbd/Kbd.js +5 -5
  146. package/dist/Layer/LayerProvider.js +7 -7
  147. package/dist/Layer/useLayer.js +5 -5
  148. package/dist/Layout/Layout.js +21 -21
  149. package/dist/Layout/LayoutContent.js +3 -3
  150. package/dist/Layout/LayoutFooter.js +5 -5
  151. package/dist/Layout/LayoutHeader.js +5 -5
  152. package/dist/Layout/LayoutPanel.js +3 -3
  153. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  154. package/dist/Lightbox/Lightbox.js +35 -33
  155. package/dist/Lightbox/useLightbox.d.ts +0 -1
  156. package/dist/Lightbox/useLightbox.d.ts.map +1 -1
  157. package/dist/Lightbox/useLightbox.js +3 -4
  158. package/dist/Link/Link.d.ts +5 -3
  159. package/dist/Link/Link.d.ts.map +1 -1
  160. package/dist/Link/Link.js +47 -18
  161. package/dist/Link/LinkProvider.js +3 -3
  162. package/dist/Link/useLinkify.js +3 -3
  163. package/dist/List/List.js +11 -11
  164. package/dist/List/ListItem.js +11 -11
  165. package/dist/Markdown/Markdown.d.ts.map +1 -1
  166. package/dist/Markdown/Markdown.js +111 -109
  167. package/dist/MetadataList/MetadataList.js +10 -10
  168. package/dist/MetadataList/MetadataListItem.js +15 -15
  169. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  170. package/dist/MobileNav/MobileNav.js +19 -17
  171. package/dist/MobileNav/MobileNavToggle.d.ts +1 -1
  172. package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
  173. package/dist/MobileNav/MobileNavToggle.js +9 -6
  174. package/dist/MoreMenu/MoreMenu.d.ts +1 -1
  175. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  176. package/dist/MoreMenu/MoreMenu.js +7 -4
  177. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  178. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  179. package/dist/MultiSelector/MultiSelector.js +69 -62
  180. package/dist/NavIcon/NavIcon.js +3 -3
  181. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  182. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  183. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  184. package/dist/NumberInput/NumberInput.js +21 -17
  185. package/dist/Outline/Outline.d.ts +1 -1
  186. package/dist/Outline/Outline.d.ts.map +1 -1
  187. package/dist/Outline/Outline.js +19 -16
  188. package/dist/OverflowList/OverflowList.js +8 -8
  189. package/dist/Overlay/Overlay.js +3 -3
  190. package/dist/Overlay/OverlayScrim.js +5 -5
  191. package/dist/Overlay/useOverlay.d.ts +0 -3
  192. package/dist/Overlay/useOverlay.d.ts.map +1 -1
  193. package/dist/Overlay/useOverlay.js +3 -6
  194. package/dist/Pagination/Pagination.d.ts +1 -1
  195. package/dist/Pagination/Pagination.d.ts.map +1 -1
  196. package/dist/Pagination/Pagination.js +73 -46
  197. package/dist/Popover/Popover.js +16 -16
  198. package/dist/Popover/usePopover.d.ts.map +1 -1
  199. package/dist/Popover/usePopover.js +11 -8
  200. package/dist/PowerSearch/PowerSearch.d.ts +1 -1
  201. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  202. package/dist/PowerSearch/PowerSearch.js +95 -85
  203. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +1 -1
  204. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  205. package/dist/PowerSearch/PowerSearchEditPopover.js +109 -103
  206. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  207. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  208. package/dist/PowerSearch/PowerSearchToken.js +12 -8
  209. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  210. package/dist/PowerSearch/PowerSearchValueEditor.js +88 -75
  211. package/dist/PowerSearch/formatFilterValue.d.ts +2 -1
  212. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  213. package/dist/PowerSearch/formatFilterValue.js +19 -9
  214. package/dist/PowerSearch/index.d.ts +2 -1
  215. package/dist/PowerSearch/index.d.ts.map +1 -1
  216. package/dist/PowerSearch/index.js +1 -0
  217. package/dist/PowerSearch/resolveOperatorLabel.d.ts +23 -0
  218. package/dist/PowerSearch/resolveOperatorLabel.d.ts.map +1 -0
  219. package/dist/PowerSearch/resolveOperatorLabel.js +28 -0
  220. package/dist/PowerSearch/types.d.ts +28 -2
  221. package/dist/PowerSearch/types.d.ts.map +1 -1
  222. package/dist/PowerSearch/usePowerSearchConfig.d.ts.map +1 -1
  223. package/dist/PowerSearch/usePowerSearchConfig.js +27 -27
  224. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  225. package/dist/PowerSearch/usePowerSearchSource.js +15 -8
  226. package/dist/ProgressBar/ProgressBar.js +13 -13
  227. package/dist/RadioList/RadioList.js +7 -7
  228. package/dist/RadioList/RadioListItem.js +18 -18
  229. package/dist/Resizable/ResizeHandle.d.ts +1 -1
  230. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  231. package/dist/Resizable/ResizeHandle.js +10 -7
  232. package/dist/Section/Section.js +5 -5
  233. package/dist/SegmentedControl/SegmentedControl.js +5 -5
  234. package/dist/SegmentedControl/SegmentedControlItem.js +7 -7
  235. package/dist/SelectableCard/SelectableCard.js +5 -5
  236. package/dist/Selector/Selector.d.ts.map +1 -1
  237. package/dist/Selector/Selector.js +57 -51
  238. package/dist/Selector/SelectorOption.js +3 -3
  239. package/dist/SideNav/SideNav.d.ts.map +1 -1
  240. package/dist/SideNav/SideNav.js +38 -36
  241. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  242. package/dist/SideNav/SideNavCollapseButton.js +8 -6
  243. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  244. package/dist/SideNav/SideNavHeading.js +92 -90
  245. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  246. package/dist/SideNav/SideNavItem.js +49 -43
  247. package/dist/SideNav/SideNavSection.js +14 -14
  248. package/dist/Skeleton/Skeleton.js +3 -3
  249. package/dist/Slider/Slider.js +23 -23
  250. package/dist/Spinner/Spinner.js +9 -9
  251. package/dist/StatusDot/StatusDot.js +5 -5
  252. package/dist/Switch/Switch.d.ts.map +1 -1
  253. package/dist/Switch/Switch.js +29 -27
  254. package/dist/TabList/Tab.js +18 -18
  255. package/dist/TabList/TabList.d.ts +1 -1
  256. package/dist/TabList/TabList.d.ts.map +1 -1
  257. package/dist/TabList/TabList.js +9 -6
  258. package/dist/TabList/TabMenu.js +23 -23
  259. package/dist/Table/BaseTable.d.ts.map +1 -1
  260. package/dist/Table/BaseTable.js +39 -37
  261. package/dist/Table/Table.d.ts.map +1 -1
  262. package/dist/Table/Table.js +10 -8
  263. package/dist/Table/TableBody.js +3 -3
  264. package/dist/Table/TableCell.js +3 -3
  265. package/dist/Table/TableFooter.js +3 -3
  266. package/dist/Table/TableHeader.js +3 -3
  267. package/dist/Table/TableHeaderCell.js +3 -3
  268. package/dist/Table/TableRow.js +5 -5
  269. package/dist/Table/index.d.ts +4 -0
  270. package/dist/Table/index.d.ts.map +1 -1
  271. package/dist/Table/index.js +2 -0
  272. package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -9
  273. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  274. package/dist/Table/plugins/filtering/useTableFiltering.js +127 -90
  275. package/dist/Table/plugins/groupedRows/index.d.ts +3 -0
  276. package/dist/Table/plugins/groupedRows/index.d.ts.map +1 -0
  277. package/dist/Table/plugins/groupedRows/index.js +3 -0
  278. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +78 -0
  279. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -0
  280. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +257 -0
  281. package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
  282. package/dist/Table/plugins/pagination/useTablePagination.js +12 -9
  283. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
  284. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  285. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +30 -28
  286. package/dist/Table/plugins/rowIndex/index.d.ts +3 -0
  287. package/dist/Table/plugins/rowIndex/index.d.ts.map +1 -0
  288. package/dist/Table/plugins/rowIndex/index.js +3 -0
  289. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +50 -0
  290. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts.map +1 -0
  291. package/dist/Table/plugins/rowIndex/useTableRowIndex.js +91 -0
  292. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  293. package/dist/Table/plugins/selection/useTableSelection.js +23 -20
  294. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  295. package/dist/Table/plugins/sortable/useTableSortable.js +23 -21
  296. package/dist/Table/tableContextMenu.js +9 -9
  297. package/dist/Text/Text.js +10 -10
  298. package/dist/TextArea/TextArea.js +14 -14
  299. package/dist/TextInput/TextInput.d.ts.map +1 -1
  300. package/dist/TextInput/TextInput.js +20 -16
  301. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  302. package/dist/Thumbnail/Thumbnail.js +37 -31
  303. package/dist/TimeInput/TimeInput.d.ts +1 -1
  304. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  305. package/dist/TimeInput/TimeInput.js +28 -23
  306. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  307. package/dist/Timestamp/Timestamp.js +29 -14
  308. package/dist/Toast/Toast.d.ts.map +1 -1
  309. package/dist/Toast/Toast.js +17 -15
  310. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  311. package/dist/Toast/ToastViewport.js +14 -12
  312. package/dist/Toast/useToast.js +4 -4
  313. package/dist/ToggleButton/ToggleButton.js +12 -12
  314. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  315. package/dist/Token/Token.d.ts.map +1 -1
  316. package/dist/Token/Token.js +29 -23
  317. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  318. package/dist/Tokenizer/Tokenizer.js +33 -31
  319. package/dist/Toolbar/Toolbar.js +18 -18
  320. package/dist/Tooltip/Tooltip.js +11 -11
  321. package/dist/Tooltip/useTooltip.js +3 -3
  322. package/dist/TopNav/TopNav.d.ts +2 -1
  323. package/dist/TopNav/TopNav.d.ts.map +1 -1
  324. package/dist/TopNav/TopNav.js +36 -33
  325. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  326. package/dist/TopNav/TopNavHeading.js +72 -70
  327. package/dist/TopNav/TopNavItem.js +5 -5
  328. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  329. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +10 -10
  330. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  331. package/dist/TopNav/TopNavMenu.js +32 -32
  332. package/dist/TreeList/TreeList.d.ts.map +1 -1
  333. package/dist/TreeList/TreeList.js +13 -9
  334. package/dist/TreeList/TreeListBranches.js +11 -11
  335. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  336. package/dist/TreeList/TreeListItem.js +37 -31
  337. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  338. package/dist/Typeahead/BaseTypeahead.js +26 -22
  339. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  340. package/dist/Typeahead/Typeahead.js +15 -13
  341. package/dist/Typeahead/TypeaheadItem.js +10 -10
  342. package/dist/VStack/VStack.js +3 -3
  343. package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -3
  344. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  345. package/dist/VisuallyHidden/VisuallyHidden.js +1 -3
  346. package/dist/astryx.css +20 -2
  347. package/dist/astryx.umd.js +66 -64
  348. package/dist/astryx.umd.js.map +4 -4
  349. package/dist/authoring/doc.d.ts +145 -0
  350. package/dist/authoring/doc.d.ts.map +1 -0
  351. package/dist/authoring/doc.js +100 -0
  352. package/dist/authoring/index.d.ts +29 -0
  353. package/dist/authoring/index.d.ts.map +1 -0
  354. package/dist/authoring/index.js +28 -0
  355. package/dist/authoring/integration.d.ts +35 -0
  356. package/dist/authoring/integration.d.ts.map +1 -0
  357. package/dist/authoring/integration.js +30 -0
  358. package/dist/authoring/template.d.ts +66 -0
  359. package/dist/authoring/template.d.ts.map +1 -0
  360. package/dist/authoring/template.js +55 -0
  361. package/dist/config.d.ts +80 -0
  362. package/dist/config.d.ts.map +1 -0
  363. package/dist/config.js +40 -0
  364. package/dist/hooks/useKeyboardHint.js +9 -9
  365. package/dist/i18n/InternationalizationContext.d.ts +12 -0
  366. package/dist/i18n/InternationalizationContext.d.ts.map +1 -0
  367. package/dist/i18n/InternationalizationContext.js +29 -0
  368. package/dist/i18n/InternationalizationProvider.d.ts +62 -0
  369. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -0
  370. package/dist/i18n/InternationalizationProvider.js +44 -0
  371. package/dist/i18n/index.d.ts +24 -0
  372. package/dist/i18n/index.d.ts.map +1 -0
  373. package/dist/i18n/index.js +21 -0
  374. package/dist/i18n/resolve.d.ts +22 -0
  375. package/dist/i18n/resolve.d.ts.map +1 -0
  376. package/dist/i18n/resolve.js +141 -0
  377. package/dist/i18n/translator.d.ts +25 -0
  378. package/dist/i18n/translator.d.ts.map +1 -0
  379. package/dist/i18n/translator.js +1 -0
  380. package/dist/i18n/types.d.ts +47 -0
  381. package/dist/i18n/types.d.ts.map +1 -0
  382. package/dist/i18n/types.js +1 -0
  383. package/dist/i18n/useTranslator.d.ts +15 -0
  384. package/dist/i18n/useTranslator.d.ts.map +1 -0
  385. package/dist/i18n/useTranslator.js +39 -0
  386. package/dist/index.d.ts +1 -0
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +3 -0
  389. package/dist/theme/MediaTheme.js +3 -3
  390. package/dist/theme/Theme.js +7 -7
  391. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  392. package/locales/en.json +746 -0
  393. package/locales/pseudo.json +560 -0
  394. package/package.json +24 -3
  395. package/src/AlertDialog/AlertDialog.doc.mjs +5 -0
  396. package/src/AlertDialog/AlertDialog.tsx +4 -1
  397. package/src/AlertDialog/useImperativeAlertDialog.tsx +0 -2
  398. package/src/AppShell/AppShell.doc.mjs +8 -2
  399. package/src/AppShell/AppShell.tsx +3 -1
  400. package/src/AvatarGroup/AvatarGroup.tsx +4 -1
  401. package/src/Banner/Banner.tsx +10 -5
  402. package/src/Breadcrumbs/Breadcrumbs.tsx +4 -1
  403. package/src/Button/Button.tsx +34 -4
  404. package/src/ButtonGroup/ButtonGroup.test.tsx +386 -2
  405. package/src/ButtonGroup/ButtonGroup.tsx +27 -11
  406. package/src/Calendar/Calendar.tsx +8 -5
  407. package/src/Card/Card.doc.mjs +3 -3
  408. package/src/Carousel/Carousel.tsx +10 -7
  409. package/src/Chat/ChatComposer.tsx +5 -1
  410. package/src/Chat/ChatComposerDrawer.tsx +9 -2
  411. package/src/Chat/ChatComposerInput.tsx +10 -4
  412. package/src/Chat/ChatLayout.tsx +5 -12
  413. package/src/Chat/ChatLayoutScrollButton.tsx +4 -2
  414. package/src/Chat/ChatMessage.tsx +5 -1
  415. package/src/Chat/ChatMessageBubble.tsx +2 -0
  416. package/src/Chat/ChatMessageList.doc.mjs +1 -1
  417. package/src/Chat/ChatMessageList.tsx +2 -0
  418. package/src/Chat/ChatMessageMetadata.tsx +15 -9
  419. package/src/Chat/ChatPastedTextToken.tsx +3 -1
  420. package/src/Chat/ChatSendButton.tsx +3 -1
  421. package/src/Chat/ChatToolCalls.doc.mjs +1 -1
  422. package/src/Chat/useSpeechRecognition.ts +11 -2
  423. package/src/Chat/useTriggerMenu.tsx +4 -2
  424. package/src/CheckboxInput/CheckboxInput.test.tsx +16 -0
  425. package/src/CheckboxInput/CheckboxInput.tsx +4 -2
  426. package/src/CheckboxList/CheckboxList.doc.mjs +6 -1
  427. package/src/CheckboxList/CheckboxList.tsx +2 -0
  428. package/src/CheckboxList/CheckboxListItem.tsx +7 -1
  429. package/src/Citation/Citation.tsx +4 -2
  430. package/src/ClickableCard/ClickableCard.doc.mjs +1 -1
  431. package/src/CodeBlock/CodeBlock.tsx +91 -40
  432. package/src/Collapsible/Collapsible.doc.mjs +3 -3
  433. package/src/CommandPalette/CommandPalette.tsx +10 -3
  434. package/src/CommandPalette/CommandPaletteInput.test.tsx +1 -1
  435. package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
  436. package/src/CommandPalette/CommandPaletteList.tsx +4 -1
  437. package/src/ContextMenu/ContextMenu.tsx +4 -1
  438. package/src/DateInput/DateInput.doc.mjs +2 -2
  439. package/src/DateInput/DateInput.tsx +13 -5
  440. package/src/DateRangeInput/DateRangeInput.doc.mjs +7 -7
  441. package/src/DateRangeInput/DateRangeInput.tsx +14 -6
  442. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -2
  443. package/src/DateTimeInput/DateTimeInput.tsx +17 -7
  444. package/src/Dialog/DialogHeader.tsx +4 -2
  445. package/src/DropdownMenu/DropdownMenu.tsx +12 -8
  446. package/src/EmptyState/EmptyState.doc.mjs +3 -3
  447. package/src/EmptyState/EmptyState.tsx +4 -1
  448. package/src/Field/Field.doc.mjs +2 -2
  449. package/src/FileInput/FileInput.tsx +3 -1
  450. package/src/Grid/Grid.doc.mjs +5 -5
  451. package/src/InputGroup/InputGroup.doc.mjs +1 -1
  452. package/src/Layer/useLayer.doc.mjs +2 -2
  453. package/src/Lightbox/Lightbox.doc.mjs +7 -2
  454. package/src/Lightbox/Lightbox.tsx +6 -4
  455. package/src/Lightbox/useLightbox.tsx +0 -1
  456. package/src/Link/Link.test.tsx +74 -2
  457. package/src/Link/Link.tsx +48 -3
  458. package/src/Markdown/Markdown.tsx +12 -4
  459. package/src/MobileNav/MobileNav.tsx +4 -2
  460. package/src/MobileNav/MobileNavToggle.tsx +5 -3
  461. package/src/MoreMenu/MoreMenu.tsx +4 -1
  462. package/src/MultiSelector/MultiSelector.tsx +14 -5
  463. package/src/NumberInput/NumberInput.tsx +3 -1
  464. package/src/Outline/Outline.tsx +4 -1
  465. package/src/OverflowList/OverflowList.doc.mjs +2 -2
  466. package/src/Overlay/useOverlay.tsx +0 -3
  467. package/src/Pagination/Pagination.tsx +35 -12
  468. package/src/Popover/usePopover.tsx +6 -1
  469. package/src/PowerSearch/PowerSearch.doc.mjs +9 -4
  470. package/src/PowerSearch/PowerSearch.tsx +22 -10
  471. package/src/PowerSearch/PowerSearchEditPopover.tsx +27 -20
  472. package/src/PowerSearch/PowerSearchToken.tsx +17 -6
  473. package/src/PowerSearch/PowerSearchValueEditor.tsx +34 -21
  474. package/src/PowerSearch/formatFilterValue.test.ts +282 -0
  475. package/src/PowerSearch/formatFilterValue.ts +21 -8
  476. package/src/PowerSearch/index.ts +5 -0
  477. package/src/PowerSearch/resolveOperatorLabel.ts +34 -0
  478. package/src/PowerSearch/types.ts +33 -9
  479. package/src/PowerSearch/usePowerSearchConfig.ts +59 -27
  480. package/src/PowerSearch/usePowerSearchSource.ts +17 -8
  481. package/src/RadioList/RadioList.doc.mjs +1 -1
  482. package/src/Resizable/ResizeHandle.tsx +4 -1
  483. package/src/Section/Section.doc.mjs +4 -4
  484. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  485. package/src/Selector/Selector.tsx +11 -6
  486. package/src/SideNav/SideNav.tsx +4 -2
  487. package/src/SideNav/SideNavCollapseButton.tsx +3 -1
  488. package/src/SideNav/SideNavHeading.tsx +5 -3
  489. package/src/SideNav/SideNavItem.tsx +3 -1
  490. package/src/Slider/Slider.doc.mjs +2 -2
  491. package/src/Stack/Stack.doc.mjs +10 -10
  492. package/src/Switch/Switch.doc.mjs +2 -2
  493. package/src/Switch/Switch.test.tsx +16 -0
  494. package/src/Switch/Switch.tsx +4 -2
  495. package/src/TabList/TabList.tsx +4 -1
  496. package/src/Table/BaseTable.tsx +8 -1
  497. package/src/Table/Table.doc.mjs +1 -1
  498. package/src/Table/Table.tsx +3 -1
  499. package/src/Table/index.ts +7 -0
  500. package/src/Table/plugins/filtering/useTableFiltering.tsx +31 -30
  501. package/src/Table/plugins/groupedRows/index.ts +7 -0
  502. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +231 -0
  503. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +351 -0
  504. package/src/Table/plugins/pagination/useTablePagination.tsx +4 -1
  505. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +8 -4
  506. package/src/Table/plugins/rowIndex/index.ts +4 -0
  507. package/src/Table/plugins/rowIndex/useTableRowIndex.test.tsx +132 -0
  508. package/src/Table/plugins/rowIndex/useTableRowIndex.tsx +114 -0
  509. package/src/Table/plugins/selection/useTableSelection.tsx +6 -7
  510. package/src/Table/plugins/sortable/useTableSortable.tsx +8 -5
  511. package/src/Table/useTableFiltering.doc.mjs +2 -2
  512. package/src/Table/useTableGroupedRows.doc.mjs +71 -0
  513. package/src/Table/useTableRowIndex.doc.mjs +50 -0
  514. package/src/Table/useTableSortable.doc.mjs +11 -11
  515. package/src/Text/Text.doc.mjs +2 -2
  516. package/src/TextInput/TextInput.tsx +3 -1
  517. package/src/Thumbnail/Thumbnail.tsx +4 -2
  518. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  519. package/src/TimeInput/TimeInput.tsx +6 -2
  520. package/src/Timestamp/Timestamp.doc.mjs +4 -4
  521. package/src/Timestamp/Timestamp.test.tsx +120 -7
  522. package/src/Timestamp/Timestamp.tsx +21 -1
  523. package/src/Toast/Toast.tsx +3 -1
  524. package/src/Toast/ToastViewport.tsx +3 -1
  525. package/src/Token/Token.tsx +4 -2
  526. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  527. package/src/Tokenizer/Tokenizer.tsx +4 -4
  528. package/src/Toolbar/Toolbar.doc.mjs +1 -1
  529. package/src/TopNav/TopNav.doc.mjs +1 -0
  530. package/src/TopNav/TopNav.test.tsx +30 -0
  531. package/src/TopNav/TopNav.tsx +6 -4
  532. package/src/TopNav/TopNavHeading.tsx +5 -3
  533. package/src/TreeList/TreeList.tsx +5 -1
  534. package/src/TreeList/TreeListItem.tsx +6 -1
  535. package/src/Typeahead/BaseTypeahead.tsx +11 -4
  536. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  537. package/src/Typeahead/Typeahead.tsx +3 -1
  538. package/src/VisuallyHidden/VisuallyHidden.tsx +1 -3
  539. package/src/authoring/doc.ts +166 -0
  540. package/src/authoring/index.test.ts +52 -0
  541. package/src/authoring/index.ts +50 -0
  542. package/src/authoring/integration.ts +42 -0
  543. package/src/authoring/template.ts +74 -0
  544. package/src/config.test.ts +16 -0
  545. package/src/config.ts +92 -0
  546. package/src/docPropLiterals.test.ts +902 -0
  547. package/src/hooks/useHotkeys.doc.mjs +5 -5
  548. package/src/i18n/InternationalizationContext.ts +39 -0
  549. package/src/i18n/InternationalizationProvider.doc.mjs +72 -0
  550. package/src/i18n/InternationalizationProvider.tsx +83 -0
  551. package/src/i18n/__tests__/e2e-pagination.test.tsx +172 -0
  552. package/src/i18n/__tests__/e2e-powersearch.test.tsx +130 -0
  553. package/src/i18n/__tests__/resolve.test.ts +284 -0
  554. package/src/i18n/index.ts +32 -0
  555. package/src/i18n/resolve.ts +165 -0
  556. package/src/i18n/translator.ts +31 -0
  557. package/src/i18n/types.ts +53 -0
  558. package/src/i18n/useTranslator.doc.mjs +46 -0
  559. package/src/i18n/useTranslator.ts +50 -0
  560. package/src/index.ts +3 -0
  561. package/dist/NavItem/index.d.ts +0 -9
  562. package/dist/NavItem/index.d.ts.map +0 -1
  563. package/dist/NavItem/index.js +0 -10
  564. package/src/NavItem/index.ts +0 -11
@@ -8,9 +8,10 @@
8
8
  * @output Exports ButtonGroup component, context, and types
9
9
  * @position Groups buttons with connected styling; consumed by index.ts
10
10
  *
11
- * Children (Button, IconButton) consume the ButtonGroup context to
12
- * apply position-aware styles using CSS :first-child / :last-child
13
- * pseudo-classes no cloneElement or wrapper divs needed.
11
+ * Children (Button, IconButton) consume the ButtonGroup context to apply
12
+ * position-aware styles in pure CSS no cloneElement or wrapper divs needed.
13
+ * The end-cap radius rules live in Button.tsx; see IS_LAST_ITEM there for why
14
+ * the trailing edge cannot use :last-child (#2508).
14
15
  *
15
16
  * SYNC: When modified, update these files to stay in sync:
16
17
  * - /packages/core/src/ButtonGroup/ButtonGroup.doc.mjs (props table, features)
@@ -25,7 +26,7 @@ import * as stylex from '@stylexjs/stylex';
25
26
  import type {ButtonSize} from '../Button';
26
27
  import {SizeProvider, useSize} from '../SizeContext/SizeContext';
27
28
  import {useListFocus} from '../hooks/useListFocus';
28
- import {mergeProps, mergeRefs} from '../utils';
29
+ import {mergeProps, mergeRefs, composeEventHandlers} from '../utils';
29
30
  import type {BaseProps} from '../BaseProps';
30
31
  import {ButtonGroupContext} from './ButtonGroupContext';
31
32
  import type {ButtonGroupOrientation} from './ButtonGroupContext';
@@ -97,7 +98,10 @@ const styles = stylex.create({
97
98
  * handling (only on outer edges), and horizontal or vertical orientation.
98
99
  *
99
100
  * Children automatically detect the group via context and apply position-aware
100
- * styles using CSS :first-child / :last-child pseudo-classes.
101
+ * styles in pure CSS.
102
+ *
103
+ * Members that render their own layer — a Button with a `tooltip`, or a
104
+ * DropdownMenu — compose correctly, including as the trailing member.
101
105
  *
102
106
  * @example
103
107
  * ```
@@ -107,6 +111,17 @@ const styles = stylex.create({
107
111
  * <Button label="Paste" />
108
112
  * </ButtonGroup>
109
113
  * ```
114
+ *
115
+ * @example
116
+ * ```
117
+ * <ButtonGroup label="Approve action">
118
+ * <Button label="Allow once" variant="primary" />
119
+ * <DropdownMenu
120
+ * button={{label: 'Allow options', variant: 'primary', isIconOnly: true, icon: <Icon icon="chevronDown" />}}
121
+ * items={[{label: 'Allow for 30 minutes'}, {label: 'Always allow'}]}
122
+ * />
123
+ * </ButtonGroup>
124
+ * ```
110
125
  */
111
126
  export function ButtonGroup({
112
127
  children,
@@ -119,6 +134,7 @@ export function ButtonGroup({
119
134
  style,
120
135
  ref,
121
136
  'data-testid': testId,
137
+ onKeyDown,
122
138
  ...props
123
139
  }: ButtonGroupProps): ReactNode {
124
140
  const size = useSize(sizeProp, 'md');
@@ -138,11 +154,7 @@ export function ButtonGroup({
138
154
  <SizeProvider value={size}>
139
155
  <div
140
156
  ref={mergeRefs(ref, listRef)}
141
- role="group"
142
- aria-label={label}
143
- onKeyDown={handleKeyDown}
144
- aria-disabled={isDisabled || undefined}
145
- data-testid={testId}
157
+ {...props}
146
158
  {...mergeProps(
147
159
  themeProps('button-group', {size, orientation}),
148
160
  stylex.props(
@@ -153,7 +165,11 @@ export function ButtonGroup({
153
165
  className,
154
166
  style,
155
167
  )}
156
- {...props}>
168
+ role="group"
169
+ aria-label={label}
170
+ onKeyDown={composeEventHandlers(onKeyDown, handleKeyDown)}
171
+ aria-disabled={isDisabled || undefined}
172
+ data-testid={testId}>
157
173
  {children}
158
174
  </div>
159
175
  </SizeProvider>
@@ -56,7 +56,7 @@ import {
56
56
  DATE_FORMAT_WITH_WEEKDAY,
57
57
  DATE_FORMAT_MONTH_YEAR,
58
58
  } from '../utils/plainDate';
59
- import {mergeProps} from '../utils';
59
+ import {mergeProps, composeEventHandlers} from '../utils';
60
60
  import {
61
61
  computeDayCellState,
62
62
  computeRangeRounding,
@@ -84,6 +84,7 @@ import type {
84
84
  } from '../utils/dateTypes';
85
85
  import {normalizeDayOfWeek} from '../utils/dateTypes';
86
86
  import {themeProps} from '../utils/themeProps';
87
+ import {useTranslator} from '../i18n';
87
88
 
88
89
  /** Imperative handle for Calendar handleRef */
89
90
 
@@ -197,6 +198,7 @@ export type CalendarProps = CalendarSingleProps | CalendarRangeProps;
197
198
  * ```
198
199
  */
199
200
  export function Calendar({ref, ...props}: CalendarProps) {
201
+ const t = useTranslator();
200
202
  const {
201
203
  handleRef,
202
204
  mode = 'single',
@@ -216,6 +218,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
216
218
  xstyle,
217
219
  className,
218
220
  style,
221
+ onKeyDown,
219
222
  ...rest
220
223
  } = props;
221
224
 
@@ -418,18 +421,18 @@ export function Calendar({ref, ...props}: CalendarProps) {
418
421
  return (
419
422
  <div
420
423
  ref={ref}
424
+ {...rest}
421
425
  {...mergeProps(
422
426
  themeProps('calendar', {mode}),
423
427
  stylex.props(calendarStyles.calendar, xstyle),
424
428
  className,
425
429
  style,
426
430
  )}
427
- onKeyDown={handleCalendarKeyDown}
428
- {...rest}>
431
+ onKeyDown={composeEventHandlers(onKeyDown, handleCalendarKeyDown)}>
429
432
  {/* Header with navigation */}
430
433
  <div {...stylex.props(calendarStyles.header)}>
431
434
  <Button
432
- label="Previous month"
435
+ label={t('@astryx.calendar.previousMonth')}
433
436
  variant="ghost"
434
437
  icon={
435
438
  // Wrapper span (not Icon props): Icon's string mode clobbers
@@ -449,7 +452,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
449
452
  </span>
450
453
 
451
454
  <Button
452
- label="Next month"
455
+ label={t('@astryx.calendar.nextMonth')}
453
456
  variant="ghost"
454
457
  icon={
455
458
  <span {...stylex.props(calendarStyles.navIcon)}>
@@ -62,9 +62,9 @@ export const docs = {
62
62
  },
63
63
  {
64
64
  name: 'variant',
65
- type: "'default' | 'muted' | 'blue' | 'cyan' | 'gray' | 'green' | 'orange' | 'pink' | 'purple' | 'red' | 'teal' | 'yellow'",
65
+ type: "'default' | 'transparent' | 'muted' | 'blue' | 'cyan' | 'gray' | 'green' | 'orange' | 'pink' | 'purple' | 'red' | 'teal' | 'yellow'",
66
66
  description:
67
- 'Background color variant. `default` uses the standard card background. `muted` uses the muted background for de-emphasised cards. The non-semantic variants use the corresponding `--color-<name>-background` token.',
67
+ 'Background color variant. `default` uses the standard card background. `transparent` drops the background entirely. `muted` uses the muted background for de-emphasised cards. The non-semantic variants use the corresponding `--color-background-<name>` token.',
68
68
  default: "'default'",
69
69
  },
70
70
  ],
@@ -169,6 +169,6 @@ export const docsDense = {
169
169
  minHeight: 'min card height',
170
170
  children: 'content inside card',
171
171
  padding: 'internal padding via spacing scale',
172
- variant: 'background color variant; `default` = standard card bg, `muted` = muted bg for de-emphasised cards; non-semantic variants use the corresponding `--color-<name>-background` token',
172
+ variant: 'background color variant; `default` = standard card bg, `transparent` = no background at all, `muted` = muted bg for de-emphasised cards; non-semantic variants use the corresponding `--color-background-<name>` token',
173
173
  },
174
174
  };
@@ -34,6 +34,7 @@ import type {BaseProps} from '../BaseProps';
34
34
  import {mergeProps, mergeRefs} from '../utils';
35
35
  import type {SpacingStep} from '../utils/types';
36
36
  import {themeProps} from '../utils/themeProps';
37
+ import {useTranslator} from '../i18n';
37
38
 
38
39
  export interface CarouselProps extends BaseProps<HTMLDivElement> {
39
40
  ref?: React.Ref<HTMLDivElement>;
@@ -256,13 +257,15 @@ export function Carousel({
256
257
  hasEdgeFade = true,
257
258
  hasSnap = false,
258
259
  padding,
259
- 'aria-label': ariaLabel = 'Carousel',
260
+ 'aria-label': ariaLabelFromProps,
260
261
  xstyle,
261
262
  className,
262
263
  style,
263
264
  'data-testid': testId,
264
265
  ...htmlProps
265
266
  }: CarouselProps) {
267
+ const t = useTranslator();
268
+ const ariaLabel = ariaLabelFromProps ?? t('@astryx.carousel.label');
266
269
  const scrollElRef = useRef<HTMLElement | null>(null);
267
270
  const {scrollRef, overflowStart, overflowEnd} = useScrollOverflow();
268
271
 
@@ -330,16 +333,16 @@ export function Carousel({
330
333
  <div
331
334
  ref={mergeRefs(ref, layer.ref as React.Ref<HTMLDivElement>)}
332
335
  data-testid={testId}
333
- role="region"
334
- aria-label={ariaLabel}
335
- aria-roledescription="carousel"
336
+ {...htmlProps}
336
337
  {...mergeProps(
337
338
  themeProps('carousel'),
338
339
  stylex.props(styles.root, xstyle),
339
340
  className,
340
341
  style,
341
342
  )}
342
- {...htmlProps}>
343
+ role="region"
344
+ aria-label={ariaLabel}
345
+ aria-roledescription="carousel">
343
346
  <div
344
347
  ref={composedRef}
345
348
  tabIndex={0}
@@ -366,7 +369,7 @@ export function Carousel({
366
369
  )}>
367
370
  <Button
368
371
  icon={<Icon icon="chevronLeft" size="xsm" />}
369
- label="Scroll left"
372
+ label={t('@astryx.carousel.scrollLeft')}
370
373
  variant="ghost"
371
374
  size="sm"
372
375
  isIconOnly
@@ -387,7 +390,7 @@ export function Carousel({
387
390
  )}>
388
391
  <Button
389
392
  icon={<Icon icon="chevronRight" size="xsm" />}
390
- label="Scroll right"
393
+ label={t('@astryx.carousel.scrollRight')}
391
394
  variant="ghost"
392
395
  size="sm"
393
396
  isIconOnly
@@ -49,6 +49,7 @@ import {ChatComposerInput} from './ChatComposerInput';
49
49
  import {ChatComposerContext} from './ChatContext';
50
50
  import {ChatSendButton} from './ChatSendButton';
51
51
  import {themeProps} from '../utils/themeProps';
52
+ import {useTranslator} from '../i18n';
52
53
 
53
54
  // =============================================================================
54
55
  // Types
@@ -268,6 +269,7 @@ const styles = stylex.create({
268
269
  * ```
269
270
  */
270
271
  export function ChatComposer(props: ChatComposerProps) {
272
+ const t = useTranslator();
271
273
  const {
272
274
  ref,
273
275
  onSubmit,
@@ -275,7 +277,7 @@ export function ChatComposer(props: ChatComposerProps) {
275
277
  isStopShown = false,
276
278
  value: controlledValue,
277
279
  onChange,
278
- placeholder = 'Type a message\u2026',
280
+ placeholder: placeholderFromProps,
279
281
  isDisabled = false,
280
282
  density = 'balanced',
281
283
  drawer,
@@ -292,6 +294,8 @@ export function ChatComposer(props: ChatComposerProps) {
292
294
  style,
293
295
  ...rest
294
296
  } = props;
297
+ const placeholder =
298
+ placeholderFromProps ?? t('@astryx.chat.composer.placeholder');
295
299
 
296
300
  const [internalValue, setInternalValue] = useState('');
297
301
 
@@ -30,6 +30,7 @@ import {Badge} from '../Badge';
30
30
  import {mergeProps} from '../utils';
31
31
  import type {BaseProps} from '../BaseProps';
32
32
  import {themeProps} from '../utils/themeProps';
33
+ import {useTranslator} from '../i18n';
33
34
 
34
35
  export interface ChatComposerDrawerProps extends BaseProps<HTMLDivElement> {
35
36
  ref?: React.Ref<HTMLDivElement>;
@@ -220,7 +221,7 @@ export function ChatComposerDrawer({
220
221
  ref,
221
222
  children,
222
223
  count,
223
- label = 'Items',
224
+ label: labelFromProps,
224
225
  isCollapsed: controlledCollapsed,
225
226
  defaultIsCollapsed = false,
226
227
  onCollapsedChange,
@@ -230,6 +231,8 @@ export function ChatComposerDrawer({
230
231
  'data-testid': testId,
231
232
  ...htmlProps
232
233
  }: ChatComposerDrawerProps): React.ReactElement {
234
+ const t = useTranslator();
235
+ const label = labelFromProps ?? t('@astryx.chat.composerDrawer.label');
233
236
  const [internalCollapsed, setInternalCollapsed] =
234
237
  useState(defaultIsCollapsed);
235
238
  const isControlled = controlledCollapsed !== undefined;
@@ -268,7 +271,11 @@ export function ChatComposerDrawer({
268
271
  role="button"
269
272
  tabIndex={0}
270
273
  aria-expanded={!isCollapsed}
271
- aria-label={isCollapsed ? `Expand ${label}` : `Collapse ${label}`}
274
+ aria-label={
275
+ isCollapsed
276
+ ? t('@astryx.chatComposerDrawer.expand', {label})
277
+ : t('@astryx.chatComposerDrawer.collapse', {label})
278
+ }
272
279
  onClick={toggle}
273
280
  onKeyDown={e => {
274
281
  if (e.key === 'Enter' || e.key === ' ') {
@@ -53,6 +53,7 @@ import {
53
53
  import {Badge, type BadgeProps} from '../Badge';
54
54
  import {useChatComposerContext} from './ChatContext';
55
55
  import {themeProps} from '../utils/themeProps';
56
+ import {useTranslator} from '../i18n';
56
57
 
57
58
  // =============================================================================
58
59
  // Types
@@ -96,8 +97,7 @@ export type ChatComposerTokenCustom = {
96
97
  * Use for tooltips, hovercards, or any content beyond a badge.
97
98
  */
98
99
  export type ChatComposerToken =
99
- | ChatComposerTokenBadge
100
- | ChatComposerTokenCustom;
100
+ ChatComposerTokenBadge | ChatComposerTokenCustom;
101
101
 
102
102
  export type ChatComposerTriggerItem = SearchableItem;
103
103
 
@@ -279,6 +279,7 @@ function serialize(node: Node): string {
279
279
  // =============================================================================
280
280
 
281
281
  export function ChatComposerInput(props: ChatComposerInputProps) {
282
+ const t = useTranslator();
282
283
  const composerCtx = useChatComposerContext();
283
284
  const hasControlledValueProp = props.value !== undefined;
284
285
 
@@ -287,12 +288,12 @@ export function ChatComposerInput(props: ChatComposerInputProps) {
287
288
  handleRef,
288
289
  value: controlledValue = composerCtx?.value,
289
290
  onChange: onChangeProp,
290
- placeholder = composerCtx?.placeholder ?? 'Type a message\u2026',
291
+ placeholder: placeholderFromProps,
291
292
  maxRows = 8,
292
293
  triggers,
293
294
  debounceMs = 150,
294
295
  hasHistory = true,
295
- label = 'Message input',
296
+ label: labelFromProps,
296
297
  isDisabled = composerCtx?.isDisabled ?? false,
297
298
  onPaste: onPasteProp,
298
299
  pasteAsToken: pasteAsTokenProp,
@@ -303,6 +304,11 @@ export function ChatComposerInput(props: ChatComposerInputProps) {
303
304
  style,
304
305
  ...rest
305
306
  } = props;
307
+ const label = labelFromProps ?? t('@astryx.chat.composerInput.label');
308
+ const placeholder =
309
+ placeholderFromProps ??
310
+ composerCtx?.placeholder ??
311
+ t('@astryx.chat.composer.placeholder');
306
312
 
307
313
  const composerOnChange = composerCtx?.onChange;
308
314
  const onChange = useCallback(
@@ -32,6 +32,7 @@ import {useChatNewMessages} from './useChatNewMessages';
32
32
  import {ChatLayoutScrollButton} from './ChatLayoutScrollButton';
33
33
  import {ChatLayoutContext} from './ChatContext';
34
34
  import {themeProps} from '../utils/themeProps';
35
+ import {useTranslator} from '../i18n';
35
36
 
36
37
  // =============================================================================
37
38
  // Types
@@ -39,17 +40,6 @@ import {themeProps} from '../utils/themeProps';
39
40
 
40
41
  type Density = 'compact' | 'balanced' | 'spacious';
41
42
 
42
- /** Imperative handle for ChatLayout scroll controls. */
43
- export interface ChatLayoutHandle {
44
- /** Scroll a message to the top and unlock for stream-in. */
45
- /** Scroll to bottom and re-lock. */
46
- scrollToBottom: () => void;
47
- /** Navigate to a message, no lock change. */
48
- scrollToMessage: (el: HTMLElement) => void;
49
- /** Scroll to the last message. */
50
- scrollToLastMessage: () => void;
51
- }
52
-
53
43
  export interface ChatLayoutProps extends BaseProps<HTMLDivElement> {
54
44
  /** Ref forwarded to the root element. */
55
45
  ref?: React.Ref<HTMLDivElement>;
@@ -268,7 +258,9 @@ export function ChatLayout({
268
258
  style,
269
259
  'data-testid': testId,
270
260
  ref,
261
+ ...rest
271
262
  }: ChatLayoutProps) {
263
+ const t = useTranslator();
272
264
  const rootRef = useRef<HTMLDivElement>(null);
273
265
 
274
266
  const scrollContainerRef = externalScrollRef ?? rootRef;
@@ -284,7 +276,7 @@ export function ChatLayout({
284
276
  const defaultScrollButton = (
285
277
  <ChatLayoutScrollButton
286
278
  isVisible={scroll.isScrolledUp || newMsgs.hasNewMessages}
287
- label={newMsgs.hasNewMessages ? 'New messages' : undefined}
279
+ label={newMsgs.hasNewMessages ? t('@astryx.chatLayout.newMessages') : undefined}
288
280
  onClick={() => {
289
281
  newMsgs.dismiss();
290
282
  scroll.scrollToBottom();
@@ -327,6 +319,7 @@ export function ChatLayout({
327
319
  return (
328
320
  <ChatLayoutContext value={layoutContext}>
329
321
  <div
322
+ {...rest}
330
323
  ref={mergeRefs(ref, rootRef)}
331
324
  data-testid={testId}
332
325
  {...mergeProps(
@@ -30,6 +30,7 @@ import {Icon} from '../Icon';
30
30
  import {Button} from '../Button';
31
31
  import type {BaseProps} from '../BaseProps';
32
32
  import {mergeProps} from '../utils';
33
+ import {useTranslator} from '../i18n';
33
34
 
34
35
  // =============================================================================
35
36
  // Types
@@ -120,6 +121,7 @@ export function ChatLayoutScrollButton({
120
121
  style,
121
122
  ...rest
122
123
  }: ChatLayoutScrollButtonProps) {
124
+ const t = useTranslator();
123
125
  return (
124
126
  <div
125
127
  ref={ref}
@@ -132,8 +134,8 @@ export function ChatLayoutScrollButton({
132
134
  label ? styles.expanded : styles.collapsed,
133
135
  )}>
134
136
  <Button
135
- label={label ?? 'Scroll to bottom'}
136
- aria-label={label ?? 'Scroll to bottom'}
137
+ label={label ?? t('@astryx.chatLayoutScrollButton.scrollToBottom')}
138
+ aria-label={label ?? t('@astryx.chatLayoutScrollButton.scrollToBottom')}
137
139
  icon={<Icon icon="chevronDown" size="md" />}
138
140
  variant="ghost"
139
141
  size="md"
@@ -36,6 +36,7 @@ import {
36
36
  import {mergeProps} from '../utils';
37
37
  import type {BaseProps} from '../BaseProps';
38
38
  import {themeProps} from '../utils/themeProps';
39
+ import {useTranslator} from '../i18n';
39
40
 
40
41
  export interface ChatMessageProps extends BaseProps<HTMLElement> {
41
42
  ref?: React.Ref<HTMLElement>;
@@ -167,7 +168,9 @@ export function ChatMessage({
167
168
  style: styleProp,
168
169
  'data-testid': testId,
169
170
  ref,
171
+ ...rest
170
172
  }: ChatMessageProps) {
173
+ const t = useTranslator();
171
174
  const listContext = useChatListContext();
172
175
  const density = densityProp ?? listContext?.density ?? 'balanced';
173
176
 
@@ -216,9 +219,10 @@ export function ChatMessage({
216
219
  return (
217
220
  <ChatMessageContext value={contextValue}>
218
221
  <article
222
+ {...rest}
219
223
  ref={ref}
220
224
  data-testid={testId}
221
- aria-label={!hasName ? `Message from ${sender}` : undefined}
225
+ aria-label={!hasName ? t('@astryx.chatMessage.messageFrom', {sender}) : undefined}
222
226
  aria-labelledby={hasName ? nameId : undefined}
223
227
  {...mergeProps(
224
228
  themeProps('chat-message', {sender, density}),
@@ -216,6 +216,7 @@ export function ChatMessageBubble({
216
216
  style: styleProp,
217
217
  'data-testid': testId,
218
218
  ref,
219
+ ...rest
219
220
  }: ChatMessageBubbleProps) {
220
221
  const msgContext = useChatMessageContext();
221
222
  const sender = msgContext?.sender ?? 'assistant';
@@ -274,6 +275,7 @@ export function ChatMessageBubble({
274
275
  </div>
275
276
  )}
276
277
  <div
278
+ {...rest}
277
279
  ref={ref}
278
280
  data-testid={testId}
279
281
  {...mergeProps(
@@ -42,7 +42,7 @@ export const docs = {
42
42
  },
43
43
  {
44
44
  name: 'gap',
45
- type: 'SpacingStep',
45
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
46
46
  description: 'Gap between top-level message rows. Defaults to the selected density; override for LLM event streams or independent rows that need different spacing from density.',
47
47
  },
48
48
  {
@@ -210,6 +210,7 @@ export function ChatMessageList({
210
210
  style,
211
211
  'data-testid': testId,
212
212
  ref,
213
+ ...rest
213
214
  }: ChatMessageListProps) {
214
215
  const layoutContext = useChatLayoutContext();
215
216
  const sentinelRef = useRef<HTMLDivElement>(null);
@@ -264,6 +265,7 @@ export function ChatMessageList({
264
265
  return (
265
266
  <ChatListContext value={contextValue}>
266
267
  <div
268
+ {...rest}
267
269
  ref={ref}
268
270
  role="log"
269
271
  aria-live="polite"
@@ -26,19 +26,20 @@ import type {IconName} from '../Icon/globalIconRegistry';
26
26
  import {mergeProps} from '../utils';
27
27
  import type {BaseProps} from '../BaseProps';
28
28
  import {themeProps} from '../utils/themeProps';
29
+ import {useTranslator} from '../i18n';
29
30
 
30
31
  export type ChatMessageStatus =
31
32
  'sending' | 'sent' | 'delivered' | 'read' | 'error';
32
33
 
33
34
  const STATUS_CONFIG: Record<
34
35
  ChatMessageStatus,
35
- {icon: IconName; label: string}
36
+ {icon: IconName; i18nKey: string}
36
37
  > = {
37
- sending: {icon: 'clock', label: 'Sending'},
38
- sent: {icon: 'check', label: 'Sent'},
39
- delivered: {icon: 'checkDouble', label: 'Delivered'},
40
- read: {icon: 'checkDouble', label: 'Read'},
41
- error: {icon: 'error', label: 'Failed'},
38
+ sending: {icon: 'clock', i18nKey: '@astryx.chat.status.sending'},
39
+ sent: {icon: 'check', i18nKey: '@astryx.chat.status.sent'},
40
+ delivered: {icon: 'checkDouble', i18nKey: '@astryx.chat.status.delivered'},
41
+ read: {icon: 'checkDouble', i18nKey: '@astryx.chat.status.read'},
42
+ error: {icon: 'error', i18nKey: '@astryx.chat.status.failed'},
42
43
  };
43
44
 
44
45
  const pulseKeyframes = stylex.keyframes({
@@ -116,10 +117,13 @@ export function ChatMessageMetadata({
116
117
  style,
117
118
  ...rest
118
119
  }: ChatMessageMetadataProps) {
120
+ const t = useTranslator();
119
121
  const msgContext = useChatMessageContext();
120
122
  const sender = msgContext?.sender ?? 'assistant';
121
123
 
122
124
  const statusConfig = status != null ? STATUS_CONFIG[status] : null;
125
+ const statusLabel =
126
+ statusConfig != null ? t(statusConfig.i18nKey) : '';
123
127
 
124
128
  const hasContent =
125
129
  timestamp != null || footer != null || statusConfig != null;
@@ -149,15 +153,17 @@ export function ChatMessageMetadata({
149
153
  {footer != null && statusConfig != null && <span>·</span>}
150
154
  {statusConfig != null && (
151
155
  <span
152
- title={statusConfig.label}
153
- aria-label={'Message ' + statusConfig.label.toLowerCase()}
156
+ title={statusLabel}
157
+ aria-label={t('@astryx.chat.messageAriaLabel', {
158
+ status: statusLabel.toLowerCase(),
159
+ })}
154
160
  {...stylex.props(
155
161
  styles.statusRow,
156
162
  status === 'error' && styles.statusError,
157
163
  status === 'sending' && styles.statusPulse,
158
164
  )}>
159
165
  <Icon icon={statusConfig.icon} size="xsm" color="inherit" />
160
- <span>{statusConfig.label}</span>
166
+ <span>{statusLabel}</span>
161
167
  </span>
162
168
  )}
163
169
  </div>
@@ -25,6 +25,7 @@ import {
25
25
  import {Badge} from '../Badge';
26
26
  import {Button} from '../Button';
27
27
  import {HoverCard} from '../HoverCard';
28
+ import {useTranslator} from '../i18n';
28
29
 
29
30
  // =============================================================================
30
31
  // Types
@@ -88,6 +89,7 @@ export function ChatPastedTextToken({
88
89
  text,
89
90
  onExpand,
90
91
  }: ChatPastedTextTokenProps) {
92
+ const t = useTranslator();
91
93
  const label = formatLabel(text);
92
94
 
93
95
  const cardContent = (
@@ -97,7 +99,7 @@ export function ChatPastedTextToken({
97
99
  <span {...stylex.props(styles.meta)}>{label}</span>
98
100
  {onExpand && (
99
101
  <Button
100
- label="Expand"
102
+ label={t('@astryx.chat.pastedText.expand')}
101
103
  variant="ghost"
102
104
  size="sm"
103
105
  onClick={onExpand}
@@ -25,6 +25,7 @@ import {useChatComposerContext} from './ChatContext';
25
25
 
26
26
  import type {BaseProps} from '../BaseProps';
27
27
  import {themeProps} from '../utils/themeProps';
28
+ import {useTranslator} from '../i18n';
28
29
 
29
30
  // =============================================================================
30
31
  // Types
@@ -75,6 +76,7 @@ const styles = stylex.create({
75
76
  * ```
76
77
  */
77
78
  export function ChatSendButton(props: ChatSendButtonProps): ReactNode {
79
+ const t = useTranslator();
78
80
  const context = useChatComposerContext();
79
81
 
80
82
  const {
@@ -94,7 +96,7 @@ export function ChatSendButton(props: ChatSendButtonProps): ReactNode {
94
96
  return (
95
97
  <Button
96
98
  ref={ref}
97
- label={isStopShown ? 'Stop' : 'Send'}
99
+ label={isStopShown ? t('@astryx.chatSendButton.stop') : t('@astryx.chatSendButton.send')}
98
100
  variant={isStopShown ? 'secondary' : 'primary'}
99
101
  size={size}
100
102
  icon={
@@ -38,7 +38,7 @@ export const docs = {
38
38
  name: 'calls',
39
39
  type: 'ChatToolCallItem[]',
40
40
  description:
41
- 'Array of tool call data. Each item has name, status, target, duration, node, additions, deletions, stats, errorMessage, resultDetail, key, and data.',
41
+ "Array of tool call data. Each item has name, status, target, duration, node, additions, deletions, stats, errorMessage, resultDetail, key, and data. status is one of 'pending', 'running', 'complete', or 'error' (defaults to 'complete').",
42
42
  required: true,
43
43
  },
44
44
  {
@@ -14,6 +14,7 @@
14
14
  */
15
15
 
16
16
  import {useState, useCallback, useEffect, useMemo, useRef} from 'react';
17
+ import {useTranslator} from '../i18n';
17
18
 
18
19
  // =============================================================================
19
20
  // Types
@@ -258,6 +259,7 @@ export function getDefaultAudioContext(): AudioContext {
258
259
  export function useSpeechRecognition(
259
260
  options: UseSpeechRecognitionOptions = {},
260
261
  ): UseSpeechRecognitionReturn {
262
+ const t = useTranslator();
261
263
  const {
262
264
  lang,
263
265
  continuous = true,
@@ -408,13 +410,20 @@ export function useSpeechRecognition(
408
410
  recognition.onnomatch = () => {
409
411
  callbacksRef.current.onError?.({
410
412
  error: 'no-speech',
411
- message: 'No speech was detected.',
413
+ message: t('@astryx.chat.speechRecognition.noSpeechDetected'),
412
414
  });
413
415
  };
414
416
 
415
417
  recognitionRef.current = recognition;
416
418
  recognition.start();
417
- }, [lang, continuous, interimResults, startVolumePolling, stopVolumePolling]);
419
+ }, [
420
+ lang,
421
+ continuous,
422
+ interimResults,
423
+ startVolumePolling,
424
+ stopVolumePolling,
425
+ t,
426
+ ]);
418
427
 
419
428
  const stop = useCallback(() => {
420
429
  recognitionRef.current?.stop();