@astryxdesign/core 0.1.6 → 0.1.7-canary.0a6de96

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 (521) hide show
  1. package/CHANGELOG.md +68 -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 +4 -1
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +3 -1
  8. package/dist/AvatarGroup/AvatarGroup.d.ts +1 -1
  9. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  10. package/dist/AvatarGroup/AvatarGroup.js +4 -1
  11. package/dist/Banner/Banner.d.ts.map +1 -1
  12. package/dist/Banner/Banner.js +8 -6
  13. package/dist/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  14. package/dist/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  15. package/dist/Breadcrumbs/Breadcrumbs.js +4 -1
  16. package/dist/Button/Button.d.ts +10 -2
  17. package/dist/Button/Button.d.ts.map +1 -1
  18. package/dist/Button/Button.js +49 -6
  19. package/dist/ButtonGroup/ButtonGroup.d.ts +20 -5
  20. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  21. package/dist/ButtonGroup/ButtonGroup.js +27 -11
  22. package/dist/Calendar/Calendar.d.ts.map +1 -1
  23. package/dist/Calendar/Calendar.js +29 -7
  24. package/dist/Carousel/Carousel.d.ts +1 -1
  25. package/dist/Carousel/Carousel.d.ts.map +1 -1
  26. package/dist/Carousel/Carousel.js +8 -5
  27. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  28. package/dist/Chat/ChatComposer.js +4 -1
  29. package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
  30. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  31. package/dist/Chat/ChatComposerDrawer.js +9 -2
  32. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  33. package/dist/Chat/ChatComposerInput.js +6 -2
  34. package/dist/Chat/ChatLayout.d.ts +1 -11
  35. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  36. package/dist/Chat/ChatLayout.js +6 -4
  37. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  38. package/dist/Chat/ChatLayoutScrollButton.js +4 -2
  39. package/dist/Chat/ChatMessage.d.ts +1 -1
  40. package/dist/Chat/ChatMessage.d.ts.map +1 -1
  41. package/dist/Chat/ChatMessage.js +8 -2
  42. package/dist/Chat/ChatMessageBubble.d.ts +1 -1
  43. package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
  44. package/dist/Chat/ChatMessageBubble.js +3 -1
  45. package/dist/Chat/ChatMessageList.d.ts +1 -1
  46. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  47. package/dist/Chat/ChatMessageList.js +3 -1
  48. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  49. package/dist/Chat/ChatMessageMetadata.js +13 -8
  50. package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
  51. package/dist/Chat/ChatPastedTextToken.js +3 -1
  52. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  53. package/dist/Chat/ChatSendButton.js +3 -1
  54. package/dist/Chat/index.d.ts +1 -1
  55. package/dist/Chat/index.d.ts.map +1 -1
  56. package/dist/Chat/useChatStreamScroll.d.ts +12 -1
  57. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  58. package/dist/Chat/useChatStreamScroll.js +43 -6
  59. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  60. package/dist/Chat/useSpeechRecognition.js +4 -2
  61. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  62. package/dist/Chat/useTriggerMenu.js +4 -2
  63. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  64. package/dist/CheckboxInput/CheckboxInput.js +4 -2
  65. package/dist/CheckboxList/CheckboxList.d.ts +1 -1
  66. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  67. package/dist/CheckboxList/CheckboxList.js +3 -1
  68. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  69. package/dist/CheckboxList/CheckboxListItem.js +3 -1
  70. package/dist/Citation/Citation.d.ts.map +1 -1
  71. package/dist/Citation/Citation.js +10 -2
  72. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  73. package/dist/CodeBlock/CodeBlock.js +71 -53
  74. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  75. package/dist/Collapsible/Collapsible.js +8 -1
  76. package/dist/CommandPalette/CommandPalette.d.ts +1 -1
  77. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  78. package/dist/CommandPalette/CommandPalette.js +8 -3
  79. package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
  80. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  81. package/dist/CommandPalette/CommandPaletteInput.js +4 -1
  82. package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
  83. package/dist/CommandPalette/CommandPaletteList.d.ts.map +1 -1
  84. package/dist/CommandPalette/CommandPaletteList.js +4 -1
  85. package/dist/ContextMenu/ContextMenu.d.ts +1 -1
  86. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  87. package/dist/ContextMenu/ContextMenu.js +8 -4
  88. package/dist/ContextMenu/index.d.ts +3 -0
  89. package/dist/ContextMenu/index.d.ts.map +1 -1
  90. package/dist/ContextMenu/index.js +7 -1
  91. package/dist/DateInput/DateInput.d.ts +1 -1
  92. package/dist/DateInput/DateInput.d.ts.map +1 -1
  93. package/dist/DateInput/DateInput.js +10 -5
  94. package/dist/DateRangeInput/DateRangeInput.d.ts +1 -1
  95. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  96. package/dist/DateRangeInput/DateRangeInput.js +11 -6
  97. package/dist/DateTimeInput/DateTimeInput.d.ts +1 -1
  98. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  99. package/dist/DateTimeInput/DateTimeInput.js +15 -7
  100. package/dist/Dialog/Dialog.d.ts.map +1 -1
  101. package/dist/Dialog/Dialog.js +15 -12
  102. package/dist/Dialog/DialogHeader.d.ts +1 -1
  103. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  104. package/dist/Dialog/DialogHeader.js +7 -3
  105. package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
  106. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  107. package/dist/DropdownMenu/DropdownMenu.js +19 -9
  108. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +89 -0
  109. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -0
  110. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +170 -0
  111. package/dist/DropdownMenu/DropdownMenuContext.d.ts +17 -1
  112. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  113. package/dist/DropdownMenu/DropdownMenuContext.js +18 -0
  114. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +69 -0
  115. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -0
  116. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +70 -0
  117. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +69 -0
  118. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -0
  119. package/dist/DropdownMenu/DropdownMenuRadioItem.js +178 -0
  120. package/dist/DropdownMenu/index.d.ts +5 -1
  121. package/dist/DropdownMenu/index.d.ts.map +1 -1
  122. package/dist/DropdownMenu/index.js +10 -1
  123. package/dist/DropdownMenu/menuItemRoles.d.ts +13 -0
  124. package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -0
  125. package/dist/DropdownMenu/menuItemRoles.js +15 -0
  126. package/dist/EmptyState/EmptyState.d.ts +4 -1
  127. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  128. package/dist/FileInput/FileInput.d.ts.map +1 -1
  129. package/dist/FileInput/FileInput.js +11 -1
  130. package/dist/Icon/Icon.d.ts +17 -12
  131. package/dist/Icon/Icon.d.ts.map +1 -1
  132. package/dist/Icon/Icon.js +28 -20
  133. package/dist/Kbd/Kbd.js +1 -1
  134. package/dist/Layer/useLayer.d.ts +10 -0
  135. package/dist/Layer/useLayer.d.ts.map +1 -1
  136. package/dist/Layer/useLayer.js +23 -1
  137. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  138. package/dist/Lightbox/Lightbox.js +6 -4
  139. package/dist/Link/Link.d.ts +5 -1
  140. package/dist/Link/Link.d.ts.map +1 -1
  141. package/dist/Link/Link.js +32 -1
  142. package/dist/Markdown/Markdown.d.ts.map +1 -1
  143. package/dist/Markdown/Markdown.js +10 -8
  144. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  145. package/dist/MobileNav/MobileNav.js +4 -2
  146. package/dist/MobileNav/MobileNavToggle.d.ts +1 -1
  147. package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
  148. package/dist/MobileNav/MobileNavToggle.js +4 -1
  149. package/dist/MoreMenu/MoreMenu.d.ts +1 -1
  150. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  151. package/dist/MoreMenu/MoreMenu.js +4 -1
  152. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  153. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  154. package/dist/MultiSelector/MultiSelector.js +13 -6
  155. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  156. package/dist/NumberInput/NumberInput.js +5 -1
  157. package/dist/Outline/Outline.d.ts +1 -1
  158. package/dist/Outline/Outline.d.ts.map +1 -1
  159. package/dist/Outline/Outline.js +4 -1
  160. package/dist/Pagination/Pagination.d.ts +1 -1
  161. package/dist/Pagination/Pagination.d.ts.map +1 -1
  162. package/dist/Pagination/Pagination.js +38 -11
  163. package/dist/Popover/usePopover.d.ts.map +1 -1
  164. package/dist/Popover/usePopover.js +4 -1
  165. package/dist/PowerSearch/PowerSearch.d.ts +1 -1
  166. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  167. package/dist/PowerSearch/PowerSearch.js +22 -12
  168. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +1 -1
  169. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  170. package/dist/PowerSearch/PowerSearchEditPopover.js +26 -20
  171. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  172. package/dist/PowerSearch/PowerSearchToken.js +7 -3
  173. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  174. package/dist/PowerSearch/PowerSearchValueEditor.js +34 -21
  175. package/dist/PowerSearch/formatFilterValue.d.ts +2 -1
  176. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  177. package/dist/PowerSearch/formatFilterValue.js +19 -9
  178. package/dist/PowerSearch/index.d.ts +2 -1
  179. package/dist/PowerSearch/index.d.ts.map +1 -1
  180. package/dist/PowerSearch/index.js +1 -0
  181. package/dist/PowerSearch/resolveOperatorLabel.d.ts +23 -0
  182. package/dist/PowerSearch/resolveOperatorLabel.d.ts.map +1 -0
  183. package/dist/PowerSearch/resolveOperatorLabel.js +28 -0
  184. package/dist/PowerSearch/types.d.ts +28 -2
  185. package/dist/PowerSearch/types.d.ts.map +1 -1
  186. package/dist/PowerSearch/usePowerSearchConfig.d.ts.map +1 -1
  187. package/dist/PowerSearch/usePowerSearchConfig.js +27 -27
  188. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  189. package/dist/PowerSearch/usePowerSearchSource.js +15 -8
  190. package/dist/Resizable/ResizeHandle.d.ts +1 -1
  191. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  192. package/dist/Resizable/ResizeHandle.js +4 -1
  193. package/dist/Selector/Selector.d.ts.map +1 -1
  194. package/dist/Selector/Selector.js +52 -14
  195. package/dist/SideNav/SideNav.d.ts.map +1 -1
  196. package/dist/SideNav/SideNav.js +4 -2
  197. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  198. package/dist/SideNav/SideNavCollapseButton.js +3 -1
  199. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  200. package/dist/SideNav/SideNavHeading.js +5 -3
  201. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  202. package/dist/SideNav/SideNavItem.js +7 -1
  203. package/dist/Switch/Switch.d.ts.map +1 -1
  204. package/dist/Switch/Switch.js +4 -2
  205. package/dist/TabList/TabList.d.ts +1 -1
  206. package/dist/TabList/TabList.d.ts.map +1 -1
  207. package/dist/TabList/TabList.js +4 -1
  208. package/dist/Table/BaseTable.d.ts.map +1 -1
  209. package/dist/Table/BaseTable.js +29 -16
  210. package/dist/Table/Table.d.ts.map +1 -1
  211. package/dist/Table/Table.js +5 -3
  212. package/dist/Table/plugins/columnResize/useTableColumnResize.js +1 -1
  213. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  214. package/dist/Table/plugins/filtering/useTableFiltering.js +56 -19
  215. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  216. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  217. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +12 -5
  218. package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
  219. package/dist/Table/plugins/pagination/useTablePagination.js +6 -3
  220. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  221. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +8 -6
  222. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
  223. package/dist/Table/plugins/rowIndex/useTableRowIndex.js +1 -1
  224. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  225. package/dist/Table/plugins/selection/useTableSelection.js +5 -2
  226. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  227. package/dist/Table/plugins/sortable/useTableSortable.js +6 -4
  228. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -2
  229. package/dist/Table/types.d.ts +17 -10
  230. package/dist/Table/types.d.ts.map +1 -1
  231. package/dist/TextInput/TextInput.d.ts.map +1 -1
  232. package/dist/TextInput/TextInput.js +5 -1
  233. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  234. package/dist/Thumbnail/Thumbnail.js +8 -2
  235. package/dist/TimeInput/TimeInput.d.ts +1 -1
  236. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  237. package/dist/TimeInput/TimeInput.js +7 -2
  238. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  239. package/dist/Timestamp/Timestamp.js +18 -3
  240. package/dist/Toast/Toast.d.ts.map +1 -1
  241. package/dist/Toast/Toast.js +3 -1
  242. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  243. package/dist/Toast/ToastViewport.js +3 -1
  244. package/dist/Token/Token.d.ts.map +1 -1
  245. package/dist/Token/Token.js +8 -2
  246. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  247. package/dist/Tokenizer/Tokenizer.js +3 -1
  248. package/dist/TopNav/TopNav.d.ts +2 -1
  249. package/dist/TopNav/TopNav.d.ts.map +1 -1
  250. package/dist/TopNav/TopNav.js +4 -1
  251. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  252. package/dist/TopNav/TopNavHeading.js +5 -3
  253. package/dist/TreeList/TreeList.d.ts.map +1 -1
  254. package/dist/TreeList/TreeList.js +5 -1
  255. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  256. package/dist/TreeList/TreeListItem.js +7 -1
  257. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  258. package/dist/Typeahead/BaseTypeahead.js +8 -4
  259. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  260. package/dist/Typeahead/Typeahead.js +3 -1
  261. package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -0
  262. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  263. package/dist/VisuallyHidden/VisuallyHidden.js +1 -0
  264. package/dist/astryx.css +35 -3
  265. package/dist/astryx.umd.js +62 -60
  266. package/dist/astryx.umd.js.map +4 -4
  267. package/dist/authoring/doc.d.ts +145 -0
  268. package/dist/authoring/doc.d.ts.map +1 -0
  269. package/dist/authoring/doc.js +100 -0
  270. package/dist/authoring/index.d.ts +29 -0
  271. package/dist/authoring/index.d.ts.map +1 -0
  272. package/dist/authoring/index.js +28 -0
  273. package/dist/authoring/integration.d.ts +35 -0
  274. package/dist/authoring/integration.d.ts.map +1 -0
  275. package/dist/authoring/integration.js +30 -0
  276. package/dist/authoring/template.d.ts +66 -0
  277. package/dist/authoring/template.d.ts.map +1 -0
  278. package/dist/authoring/template.js +55 -0
  279. package/dist/config.d.ts +80 -0
  280. package/dist/config.d.ts.map +1 -0
  281. package/dist/config.js +40 -0
  282. package/dist/docs-types.d.ts +13 -4
  283. package/dist/docs-types.d.ts.map +1 -1
  284. package/dist/i18n/InternationalizationContext.d.ts +12 -0
  285. package/dist/i18n/InternationalizationContext.d.ts.map +1 -0
  286. package/dist/i18n/InternationalizationContext.js +29 -0
  287. package/dist/i18n/InternationalizationProvider.d.ts +61 -0
  288. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -0
  289. package/dist/i18n/InternationalizationProvider.js +44 -0
  290. package/dist/i18n/index.d.ts +24 -0
  291. package/dist/i18n/index.d.ts.map +1 -0
  292. package/dist/i18n/index.js +21 -0
  293. package/dist/i18n/resolve.d.ts +22 -0
  294. package/dist/i18n/resolve.d.ts.map +1 -0
  295. package/dist/i18n/resolve.js +141 -0
  296. package/dist/i18n/translator.d.ts +25 -0
  297. package/dist/i18n/translator.d.ts.map +1 -0
  298. package/dist/i18n/translator.js +1 -0
  299. package/dist/i18n/types.d.ts +47 -0
  300. package/dist/i18n/types.d.ts.map +1 -0
  301. package/dist/i18n/types.js +1 -0
  302. package/dist/i18n/useTranslator.d.ts +15 -0
  303. package/dist/i18n/useTranslator.d.ts.map +1 -0
  304. package/dist/i18n/useTranslator.js +39 -0
  305. package/dist/index.d.ts +1 -0
  306. package/dist/index.d.ts.map +1 -1
  307. package/dist/index.js +3 -0
  308. package/dist/theme/hct.d.ts +0 -1
  309. package/dist/theme/hct.d.ts.map +1 -1
  310. package/dist/theme/hct.js +0 -3
  311. package/dist/utils/color.d.ts +13 -1
  312. package/dist/utils/color.d.ts.map +1 -1
  313. package/dist/utils/color.js +23 -1
  314. package/dist/utils/index.d.ts +1 -1
  315. package/dist/utils/index.d.ts.map +1 -1
  316. package/dist/utils/index.js +1 -1
  317. package/locales/en.json +746 -0
  318. package/locales/pseudo.json +560 -0
  319. package/package.json +23 -2
  320. package/src/AlertDialog/AlertDialog.doc.mjs +5 -0
  321. package/src/AlertDialog/AlertDialog.tsx +4 -1
  322. package/src/AppShell/AppShell.doc.mjs +8 -2
  323. package/src/AppShell/AppShell.tsx +3 -1
  324. package/src/AvatarGroup/AvatarGroup.tsx +4 -1
  325. package/src/Banner/Banner.tsx +10 -5
  326. package/src/Breadcrumbs/Breadcrumbs.tsx +4 -1
  327. package/src/Button/Button.doc.mjs +8 -0
  328. package/src/Button/Button.test.tsx +27 -0
  329. package/src/Button/Button.tsx +51 -5
  330. package/src/ButtonGroup/ButtonGroup.test.tsx +386 -2
  331. package/src/ButtonGroup/ButtonGroup.tsx +27 -11
  332. package/src/Calendar/Calendar.test.tsx +103 -2
  333. package/src/Calendar/Calendar.tsx +29 -6
  334. package/src/Card/Card.doc.mjs +3 -3
  335. package/src/Carousel/Carousel.tsx +10 -7
  336. package/src/Chat/ChatComposer.tsx +5 -1
  337. package/src/Chat/ChatComposerDrawer.tsx +9 -2
  338. package/src/Chat/ChatComposerInput.tsx +10 -4
  339. package/src/Chat/ChatLayout.test.tsx +127 -2
  340. package/src/Chat/ChatLayout.tsx +5 -12
  341. package/src/Chat/ChatLayoutScrollButton.tsx +4 -2
  342. package/src/Chat/ChatMessage.tsx +5 -1
  343. package/src/Chat/ChatMessageBubble.tsx +2 -0
  344. package/src/Chat/ChatMessageList.doc.mjs +1 -1
  345. package/src/Chat/ChatMessageList.tsx +2 -0
  346. package/src/Chat/ChatMessageMetadata.tsx +15 -9
  347. package/src/Chat/ChatPastedTextToken.tsx +3 -1
  348. package/src/Chat/ChatSendButton.tsx +3 -1
  349. package/src/Chat/ChatToolCalls.doc.mjs +1 -1
  350. package/src/Chat/index.ts +1 -0
  351. package/src/Chat/useChatStreamScroll.test.tsx +168 -0
  352. package/src/Chat/useChatStreamScroll.ts +67 -11
  353. package/src/Chat/useSpeechRecognition.ts +11 -2
  354. package/src/Chat/useTriggerMenu.tsx +4 -2
  355. package/src/CheckboxInput/CheckboxInput.test.tsx +16 -0
  356. package/src/CheckboxInput/CheckboxInput.tsx +4 -2
  357. package/src/CheckboxList/CheckboxList.doc.mjs +6 -1
  358. package/src/CheckboxList/CheckboxList.tsx +2 -0
  359. package/src/CheckboxList/CheckboxListItem.tsx +7 -1
  360. package/src/Citation/Citation.tsx +4 -2
  361. package/src/ClickableCard/ClickableCard.doc.mjs +1 -1
  362. package/src/CodeBlock/CodeBlock.tsx +91 -40
  363. package/src/Collapsible/Collapsible.doc.mjs +1 -0
  364. package/src/Collapsible/Collapsible.test.tsx +6 -0
  365. package/src/Collapsible/Collapsible.tsx +19 -4
  366. package/src/CommandPalette/CommandPalette.tsx +10 -3
  367. package/src/CommandPalette/CommandPaletteInput.test.tsx +1 -1
  368. package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
  369. package/src/CommandPalette/CommandPaletteList.tsx +4 -1
  370. package/src/ContextMenu/ContextMenu.test.tsx +75 -1
  371. package/src/ContextMenu/ContextMenu.tsx +14 -6
  372. package/src/ContextMenu/index.ts +15 -0
  373. package/src/DateInput/DateInput.doc.mjs +2 -2
  374. package/src/DateInput/DateInput.test.tsx +17 -5
  375. package/src/DateInput/DateInput.tsx +13 -5
  376. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  377. package/src/DateRangeInput/DateRangeInput.tsx +14 -6
  378. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -2
  379. package/src/DateTimeInput/DateTimeInput.tsx +17 -7
  380. package/src/Dialog/Dialog.tsx +11 -15
  381. package/src/Dialog/DialogHeader.tsx +7 -3
  382. package/src/DropdownMenu/DropdownMenu.doc.mjs +23 -0
  383. package/src/DropdownMenu/DropdownMenu.tsx +23 -14
  384. package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +95 -0
  385. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +237 -0
  386. package/src/DropdownMenu/DropdownMenuContext.tsx +29 -1
  387. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +6 -0
  388. package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +80 -0
  389. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +119 -0
  390. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +80 -0
  391. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +232 -0
  392. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +163 -0
  393. package/src/DropdownMenu/index.ts +23 -3
  394. package/src/DropdownMenu/menuItemRoles.ts +22 -0
  395. package/src/EmptyState/EmptyState.doc.mjs +3 -3
  396. package/src/EmptyState/EmptyState.tsx +4 -1
  397. package/src/Field/Field.doc.mjs +2 -2
  398. package/src/FileInput/FileInput.test.tsx +40 -1
  399. package/src/FileInput/FileInput.tsx +12 -1
  400. package/src/Grid/Grid.doc.mjs +5 -5
  401. package/src/Icon/Icon.test.tsx +46 -0
  402. package/src/Icon/Icon.tsx +37 -24
  403. package/src/InputGroup/InputGroup.doc.mjs +1 -1
  404. package/src/Kbd/Kbd.test.tsx +26 -0
  405. package/src/Kbd/Kbd.tsx +1 -1
  406. package/src/Layer/useLayer.doc.mjs +8 -5
  407. package/src/Layer/useLayer.test.tsx +136 -1
  408. package/src/Layer/useLayer.tsx +34 -2
  409. package/src/Lightbox/Lightbox.doc.mjs +7 -2
  410. package/src/Lightbox/Lightbox.tsx +6 -4
  411. package/src/Link/Link.test.tsx +74 -2
  412. package/src/Link/Link.tsx +48 -1
  413. package/src/Markdown/Markdown.tsx +12 -4
  414. package/src/MobileNav/MobileNav.tsx +4 -2
  415. package/src/MobileNav/MobileNavToggle.tsx +5 -3
  416. package/src/MoreMenu/MoreMenu.tsx +4 -1
  417. package/src/MultiSelector/MultiSelector.tsx +14 -5
  418. package/src/NumberInput/NumberInput.tsx +3 -1
  419. package/src/Outline/Outline.tsx +4 -1
  420. package/src/OverflowList/OverflowList.doc.mjs +2 -2
  421. package/src/Pagination/Pagination.tsx +35 -12
  422. package/src/Popover/usePopover.tsx +6 -1
  423. package/src/PowerSearch/PowerSearch.doc.mjs +9 -4
  424. package/src/PowerSearch/PowerSearch.tsx +22 -10
  425. package/src/PowerSearch/PowerSearchEditPopover.tsx +27 -20
  426. package/src/PowerSearch/PowerSearchToken.tsx +17 -6
  427. package/src/PowerSearch/PowerSearchValueEditor.tsx +34 -21
  428. package/src/PowerSearch/formatFilterValue.test.ts +282 -0
  429. package/src/PowerSearch/formatFilterValue.ts +21 -8
  430. package/src/PowerSearch/index.ts +5 -0
  431. package/src/PowerSearch/resolveOperatorLabel.ts +34 -0
  432. package/src/PowerSearch/types.ts +33 -9
  433. package/src/PowerSearch/usePowerSearchConfig.ts +59 -27
  434. package/src/PowerSearch/usePowerSearchSource.ts +17 -8
  435. package/src/RadioList/RadioList.doc.mjs +1 -1
  436. package/src/Resizable/ResizeHandle.tsx +4 -1
  437. package/src/Section/Section.doc.mjs +4 -4
  438. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  439. package/src/Selector/Selector.doc.mjs +6 -3
  440. package/src/Selector/Selector.test.tsx +114 -6
  441. package/src/Selector/Selector.tsx +68 -17
  442. package/src/SideNav/SideNav.tsx +4 -2
  443. package/src/SideNav/SideNavCollapseButton.tsx +3 -1
  444. package/src/SideNav/SideNavHeading.tsx +5 -3
  445. package/src/SideNav/SideNavItem.tsx +3 -1
  446. package/src/Slider/Slider.doc.mjs +2 -2
  447. package/src/Stack/Stack.doc.mjs +10 -10
  448. package/src/Switch/Switch.doc.mjs +2 -2
  449. package/src/Switch/Switch.test.tsx +16 -0
  450. package/src/Switch/Switch.tsx +4 -2
  451. package/src/TabList/TabList.tsx +4 -1
  452. package/src/Table/BaseTable.tsx +36 -19
  453. package/src/Table/Table.test.tsx +132 -1
  454. package/src/Table/Table.tsx +6 -4
  455. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -1
  456. package/src/Table/plugins/filtering/useTableFiltering.tsx +31 -30
  457. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +7 -5
  458. package/src/Table/plugins/pagination/useTablePagination.tsx +4 -1
  459. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -8
  460. package/src/Table/plugins/rowIndex/useTableRowIndex.tsx +1 -1
  461. package/src/Table/plugins/selection/useTableSelection.tsx +6 -7
  462. package/src/Table/plugins/sortable/useTableSortable.tsx +8 -5
  463. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +4 -4
  464. package/src/Table/types.ts +18 -12
  465. package/src/Table/useTableFiltering.doc.mjs +2 -2
  466. package/src/Table/useTableGroupedRows.doc.mjs +3 -3
  467. package/src/Table/useTableSortable.doc.mjs +11 -11
  468. package/src/Text/Text.doc.mjs +2 -2
  469. package/src/TextInput/TextInput.tsx +3 -1
  470. package/src/Thumbnail/Thumbnail.tsx +4 -2
  471. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  472. package/src/TimeInput/TimeInput.tsx +6 -2
  473. package/src/Timestamp/Timestamp.doc.mjs +4 -4
  474. package/src/Timestamp/Timestamp.test.tsx +120 -7
  475. package/src/Timestamp/Timestamp.tsx +21 -1
  476. package/src/Toast/Toast.tsx +3 -1
  477. package/src/Toast/ToastViewport.tsx +3 -1
  478. package/src/Token/Token.tsx +4 -2
  479. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  480. package/src/Tokenizer/Tokenizer.tsx +4 -4
  481. package/src/Toolbar/Toolbar.doc.mjs +1 -1
  482. package/src/TopNav/TopNav.doc.mjs +1 -0
  483. package/src/TopNav/TopNav.test.tsx +30 -0
  484. package/src/TopNav/TopNav.tsx +6 -4
  485. package/src/TopNav/TopNavHeading.tsx +5 -3
  486. package/src/TreeList/TreeList.tsx +5 -1
  487. package/src/TreeList/TreeListItem.tsx +6 -1
  488. package/src/Typeahead/BaseTypeahead.tsx +11 -4
  489. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  490. package/src/Typeahead/Typeahead.tsx +3 -1
  491. package/src/VisuallyHidden/VisuallyHidden.tsx +1 -0
  492. package/src/authoring/doc.ts +166 -0
  493. package/src/authoring/index.test.ts +52 -0
  494. package/src/authoring/index.ts +50 -0
  495. package/src/authoring/integration.ts +42 -0
  496. package/src/authoring/template.ts +74 -0
  497. package/src/config.test.ts +16 -0
  498. package/src/config.ts +92 -0
  499. package/src/docPropLiterals.test.ts +938 -0
  500. package/src/docs-types.ts +15 -10
  501. package/src/i18n/InternationalizationContext.ts +39 -0
  502. package/src/i18n/InternationalizationProvider.doc.mjs +72 -0
  503. package/src/i18n/InternationalizationProvider.tsx +82 -0
  504. package/src/i18n/__tests__/e2e-pagination.test.tsx +172 -0
  505. package/src/i18n/__tests__/e2e-powersearch.test.tsx +130 -0
  506. package/src/i18n/__tests__/resolve.test.ts +284 -0
  507. package/src/i18n/index.ts +32 -0
  508. package/src/i18n/resolve.ts +165 -0
  509. package/src/i18n/translator.ts +31 -0
  510. package/src/i18n/types.ts +53 -0
  511. package/src/i18n/useTranslator.doc.mjs +46 -0
  512. package/src/i18n/useTranslator.ts +50 -0
  513. package/src/index.ts +3 -0
  514. package/src/theme/hct.ts +0 -4
  515. package/src/utils/color.test.ts +101 -1
  516. package/src/utils/color.ts +23 -1
  517. package/src/utils/index.ts +8 -1
  518. package/dist/NavItem/index.d.ts +0 -9
  519. package/dist/NavItem/index.d.ts.map +0 -1
  520. package/dist/NavItem/index.js +0 -10
  521. package/src/NavItem/index.ts +0 -11
@@ -42,6 +42,7 @@ import type {
42
42
  HeaderCellRenderProps,
43
43
  } from '../../types';
44
44
  import {proportional} from '../../columnUtils';
45
+ import {useTranslator} from '../../../i18n';
45
46
  import type {
46
47
  PowerSearchConfig,
47
48
  PowerSearchField,
@@ -263,10 +264,7 @@ function tableValueToFilterValue(
263
264
  * };
264
265
  * ```
265
266
  */
266
- export type TableFilterState = Record<
267
- string,
268
- TableFilterValue | undefined
269
- >;
267
+ export type TableFilterState = Record<string, TableFilterValue | undefined>;
270
268
 
271
269
  /**
272
270
  * Display variant for the filter UI.
@@ -299,10 +297,7 @@ export interface UseTableFilteringConfig {
299
297
  /** Current filter state — map from column key to filter value. */
300
298
  filters: TableFilterState;
301
299
  /** Called when the user changes a filter value. `null` clears the filter. */
302
- onFilterChange: (
303
- columnKey: string,
304
- value: TableFilterValue | null,
305
- ) => void;
300
+ onFilterChange: (columnKey: string, value: TableFilterValue | null) => void;
306
301
  /**
307
302
  * Display variant for filter controls.
308
303
  *
@@ -424,6 +419,7 @@ function TextFilterControl({
424
419
  size: 'sm' | 'md';
425
420
  hasClear?: boolean;
426
421
  }) {
422
+ const t = useTranslator();
427
423
  const store = useFilterStore();
428
424
  const config = store.getConfig();
429
425
  const value = config.filters[columnKey];
@@ -431,7 +427,7 @@ function TextFilterControl({
431
427
 
432
428
  return (
433
429
  <TextInput
434
- label={`Filter ${header}`}
430
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
435
431
  isLabelHidden
436
432
  value={strValue}
437
433
  onChange={(newValue: string) => {
@@ -439,7 +435,7 @@ function TextFilterControl({
439
435
  .getConfig()
440
436
  .onFilterChange(columnKey, newValue === '' ? null : newValue);
441
437
  }}
442
- placeholder={`Filter ${header}`}
438
+ placeholder={t('@astryx.tableFiltering.filterByColumn', {header})}
443
439
  size={size}
444
440
  hasClear={hasClear}
445
441
  />
@@ -459,6 +455,7 @@ function NumberFilterControl({
459
455
  size: 'sm' | 'md';
460
456
  hasClear?: boolean;
461
457
  }) {
458
+ const t = useTranslator();
462
459
  const store = useFilterStore();
463
460
  const config = store.getConfig();
464
461
  const value = config.filters[columnKey];
@@ -476,11 +473,11 @@ function NumberFilterControl({
476
473
  if (hasClear) {
477
474
  return (
478
475
  <NumberInput
479
- label={`Filter ${header}`}
476
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
480
477
  isLabelHidden
481
478
  value={numValue}
482
479
  onChange={handleChange}
483
- placeholder={`Filter ${header}`}
480
+ placeholder={t('@astryx.tableFiltering.filterByColumn', {header})}
484
481
  min={operatorValue.minValue ?? null}
485
482
  max={operatorValue.maxValue ?? null}
486
483
  step={step}
@@ -492,11 +489,11 @@ function NumberFilterControl({
492
489
 
493
490
  return (
494
491
  <NumberInput
495
- label={`Filter ${header}`}
492
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
496
493
  isLabelHidden
497
494
  value={numValue}
498
495
  onChange={handleChange}
499
- placeholder={`Filter ${header}`}
496
+ placeholder={t('@astryx.tableFiltering.filterByColumn', {header})}
500
497
  min={operatorValue.minValue ?? null}
501
498
  max={operatorValue.maxValue ?? null}
502
499
  step={step}
@@ -518,6 +515,7 @@ function SelectorFilterControl({
518
515
  size: 'sm' | 'md';
519
516
  hasClear?: boolean;
520
517
  }) {
518
+ const t = useTranslator();
521
519
  const store = useFilterStore();
522
520
  const config = store.getConfig();
523
521
  const value = config.filters[columnKey];
@@ -543,12 +541,12 @@ function SelectorFilterControl({
543
541
  if (hasClear) {
544
542
  return (
545
543
  <Selector
546
- label={`Filter ${header}`}
544
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
547
545
  isLabelHidden
548
546
  options={options}
549
547
  value={strValue || null}
550
548
  onChange={handleChange}
551
- placeholder="All"
549
+ placeholder={t('@astryx.table.filter.allPlaceholder')}
552
550
  size={size}
553
551
  hasClear
554
552
  />
@@ -557,12 +555,12 @@ function SelectorFilterControl({
557
555
 
558
556
  return (
559
557
  <Selector
560
- label={`Filter ${header}`}
558
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
561
559
  isLabelHidden
562
560
  options={options}
563
561
  value={strValue}
564
562
  onChange={handleChange}
565
- placeholder="All"
563
+ placeholder={t('@astryx.table.filter.allPlaceholder')}
566
564
  size={size}
567
565
  />
568
566
  );
@@ -581,6 +579,7 @@ function MultiSelectorFilterControl({
581
579
  size: 'sm' | 'md';
582
580
  hasClear?: boolean;
583
581
  }) {
582
+ const t = useTranslator();
584
583
  const store = useFilterStore();
585
584
  const config = store.getConfig();
586
585
  const value = config.filters[columnKey];
@@ -593,7 +592,7 @@ function MultiSelectorFilterControl({
593
592
 
594
593
  return (
595
594
  <MultiSelector
596
- label={`Filter ${header}`}
595
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
597
596
  isLabelHidden
598
597
  options={options}
599
598
  value={arrValue}
@@ -602,7 +601,7 @@ function MultiSelectorFilterControl({
602
601
  .getConfig()
603
602
  .onFilterChange(columnKey, newValue.length === 0 ? null : newValue);
604
603
  }}
605
- placeholder="All"
604
+ placeholder={t('@astryx.table.filter.allPlaceholder')}
606
605
  size={size}
607
606
  hasSelectAll
608
607
  hasSearch={false}
@@ -622,12 +621,13 @@ function DateFilterControl({
622
621
  size: 'sm' | 'md';
623
622
  hasClear?: boolean;
624
623
  }) {
624
+ const t = useTranslator();
625
625
  const store = useFilterStore();
626
626
  const value = store.getConfig().filters[columnKey] as string | undefined;
627
627
 
628
628
  return (
629
629
  <DateInput
630
- label={`Filter ${header}`}
630
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
631
631
  isLabelHidden
632
632
  value={(value as ISODateString | undefined) ?? undefined}
633
633
  onChange={newValue => {
@@ -650,12 +650,13 @@ function TimeFilterControl({
650
650
  size: 'sm' | 'md';
651
651
  hasClear?: boolean;
652
652
  }) {
653
+ const t = useTranslator();
653
654
  const store = useFilterStore();
654
655
  const value = store.getConfig().filters[columnKey] as string | undefined;
655
656
 
656
657
  return (
657
658
  <TimeInput
658
- label={`Filter ${header}`}
659
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
659
660
  isLabelHidden
660
661
  value={(value as ISOTimeString | undefined) ?? undefined}
661
662
  onChange={newValue => {
@@ -680,6 +681,7 @@ function StringListFilterControl({
680
681
  size: 'sm' | 'md';
681
682
  hasClear?: boolean;
682
683
  }) {
684
+ const t = useTranslator();
683
685
  const store = useFilterStore();
684
686
  const value =
685
687
  (store.getConfig().filters[columnKey] as string[] | undefined) ?? [];
@@ -699,7 +701,7 @@ function StringListFilterControl({
699
701
 
700
702
  return (
701
703
  <Tokenizer
702
- label={`Filter ${header}`}
704
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
703
705
  isLabelHidden
704
706
  searchSource={searchSource}
705
707
  value={value.map(v => ({id: v, label: v}))}
@@ -821,6 +823,7 @@ function PopoverFilterTrigger({
821
823
  header: string;
822
824
  operatorValue: OperatorValue;
823
825
  }) {
826
+ const t = useTranslator();
824
827
  const store = useFilterStore();
825
828
  const config = store.getConfig();
826
829
  const value = config.filters[columnKey];
@@ -876,7 +879,7 @@ function PopoverFilterTrigger({
876
879
  <Popover
877
880
  isOpen={isOpen}
878
881
  onOpenChange={handleOpen}
879
- label={`Filter ${header}`}
882
+ label={t('@astryx.tableFiltering.filterByColumn', {header})}
880
883
  placement="below"
881
884
  alignment="start"
882
885
  content={
@@ -890,14 +893,14 @@ function PopoverFilterTrigger({
890
893
  />
891
894
  <div {...stylex.props(filterStyles.popoverActions)}>
892
895
  <Button
893
- label="Reset"
896
+ label={t('@astryx.table.filter.reset')}
894
897
  variant="ghost"
895
898
  size="sm"
896
899
  onClick={handleClear}
897
900
  />
898
901
  <div {...stylex.props(filterStyles.popoverActionsSpacer)} />
899
902
  <Button
900
- label="Apply"
903
+ label={t('@astryx.table.filter.apply')}
901
904
  variant="primary"
902
905
  size="sm"
903
906
  onClick={handleApply}
@@ -908,7 +911,7 @@ function PopoverFilterTrigger({
908
911
  }>
909
912
  <button
910
913
  type="button"
911
- aria-label={`Filter ${header}`}
914
+ aria-label={t('@astryx.tableFiltering.filterByColumn', {header})}
912
915
  aria-haspopup="dialog"
913
916
  {...stylex.props(
914
917
  filterStyles.triggerButton,
@@ -928,9 +931,7 @@ function PopoverFilterTrigger({
928
931
  // Helper
929
932
  // =============================================================================
930
933
 
931
- function getHeaderString(
932
- column: TableColumn<Record<string, unknown>>,
933
- ): string {
934
+ function getHeaderString(column: TableColumn<Record<string, unknown>>): string {
934
935
  if (typeof column.header === 'string') {
935
936
  return column.header;
936
937
  }
@@ -21,6 +21,7 @@ import {
21
21
  } from '../../../theme/tokens.stylex';
22
22
  import {Icon} from '../../../Icon';
23
23
  import type {TablePlugin} from '../../types';
24
+ import {useTranslator} from '../../../i18n';
24
25
 
25
26
  // A synthetic group-header row injected into the flattened data. Real rows
26
27
  // never carry this marker.
@@ -180,7 +181,7 @@ const styles = stylex.create({
180
181
  * pass all three to `<Table>`.
181
182
  *
182
183
  * @example
183
- * ```tsx
184
+ * ```
184
185
  * const [collapsed, setCollapsed] = useState<Set<string>>(new Set());
185
186
  * const grouped = useTableGroupedRows({
186
187
  * data: rows,
@@ -205,6 +206,7 @@ const styles = stylex.create({
205
206
  export function useTableGroupedRows<T extends Record<string, unknown>>(
206
207
  config: UseTableGroupedRowsConfig<T>,
207
208
  ): UseTableGroupedRowsResult<T> {
209
+ const t = useTranslator();
208
210
  const {
209
211
  data,
210
212
  groupBy,
@@ -305,7 +307,7 @@ export function useTableGroupedRows<T extends Record<string, unknown>>(
305
307
  onClick: toggle,
306
308
  'aria-expanded': !collapsed,
307
309
  },
308
- styles: [...props.styles, styles.headerRow],
310
+ xstyle: [...props.xstyle, styles.headerRow],
309
311
  children: (
310
312
  // colSpan larger than the column count is clamped by the browser
311
313
  // to the actual number of columns, so the header always spans the
@@ -323,8 +325,8 @@ export function useTableGroupedRows<T extends Record<string, unknown>>(
323
325
  }}
324
326
  aria-label={
325
327
  collapsed
326
- ? `Expand group ${header.groupKey}`
327
- : `Collapse group ${header.groupKey}`
328
+ ? t('@astryx.tableGroupedRows.expandGroup', {groupKey: header.groupKey})
329
+ : t('@astryx.tableGroupedRows.collapseGroup', {groupKey: header.groupKey})
328
330
  }
329
331
  aria-expanded={!collapsed}>
330
332
  <span
@@ -342,7 +344,7 @@ export function useTableGroupedRows<T extends Record<string, unknown>>(
342
344
  };
343
345
  },
344
346
  }),
345
- [collapsedGroups, onToggleGroup, renderGroupHeader],
347
+ [collapsedGroups, onToggleGroup, renderGroupHeader, t],
346
348
  );
347
349
 
348
350
  return {plugin, data: flattened, idKey};
@@ -22,6 +22,7 @@ import {spacingVars} from '../../../theme/tokens.stylex';
22
22
  import {Pagination} from '../../../Pagination';
23
23
  import type {PaginationProps} from '../../../Pagination';
24
24
  import type {TablePlugin} from '../../types';
25
+ import {useTranslator} from '../../../i18n';
25
26
 
26
27
  // =============================================================================
27
28
  // Styles
@@ -193,6 +194,7 @@ export interface UseTablePaginationConfig {
193
194
  export function useTablePagination<T extends Record<string, unknown>>(
194
195
  config: UseTablePaginationConfig,
195
196
  ): TablePlugin<T> {
197
+ const t = useTranslator();
196
198
  const {
197
199
  page,
198
200
  onPageChange,
@@ -206,8 +208,9 @@ export function useTablePagination<T extends Record<string, unknown>>(
206
208
  size = 'md',
207
209
  position = 'below',
208
210
  align = 'center',
209
- label = 'Table pagination',
211
+ label: labelFromProps,
210
212
  } = config;
213
+ const label = labelFromProps ?? t('@astryx.table.pagination.label');
211
214
 
212
215
  // Same guard as Pagination itself: 0/NaN/negative pageSize would produce an
213
216
  // Infinity/NaN totalPages here, which bypasses Pagination's own coercion
@@ -17,6 +17,7 @@ import * as stylex from '@stylexjs/stylex';
17
17
  import {spacingVars, colorVars, radiusVars} from '../../../theme/tokens.stylex';
18
18
  import {Icon} from '../../../Icon';
19
19
  import {resolveContextActions} from '../../tableContextMenu';
20
+ import {useTranslator} from '../../../i18n';
20
21
  import type {
21
22
  TablePlugin,
22
23
  TableColumn,
@@ -356,6 +357,7 @@ function ExpansionChevron({
356
357
  export function useTableRowExpansion<T extends Record<string, unknown>>(
357
358
  config: UseTableRowExpansionConfig<T>,
358
359
  ): TablePlugin<T> {
360
+ const t = useTranslator();
359
361
  const {
360
362
  expandedKeys,
361
363
  onToggle,
@@ -397,7 +399,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
397
399
  <ExpansionChevron
398
400
  isExpanded={isExpanded}
399
401
  onToggle={() => onToggle(key)}
400
- ariaLabel={isExpanded ? 'Collapse row' : 'Expand row'}
402
+ ariaLabel={isExpanded ? t('@astryx.tableRowExpansion.collapseRow') : t('@astryx.tableRowExpansion.expandRow')}
401
403
  />
402
404
  );
403
405
  },
@@ -409,6 +411,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
409
411
  getChildren,
410
412
  getIsItemExpandable,
411
413
  getDepth,
414
+ t,
412
415
  ],
413
416
  );
414
417
 
@@ -436,10 +439,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
436
439
  ? originalRenderCell(item)
437
440
  : String(
438
441
  ((item as Record<string, unknown>)[col.key] as
439
- | string
440
- | number
441
- | null
442
- | undefined) ?? '',
442
+ string | number | null | undefined) ?? '',
443
443
  );
444
444
 
445
445
  if (depth === 0) {
@@ -457,7 +457,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
457
457
  <ExpansionChevron
458
458
  isExpanded={isExpanded}
459
459
  onToggle={() => onToggle(key)}
460
- ariaLabel={isExpanded ? 'Collapse row' : 'Expand row'}
460
+ ariaLabel={isExpanded ? t('@astryx.tableRowExpansion.collapseRow') : t('@astryx.tableRowExpansion.expandRow')}
461
461
  />
462
462
  ) : (
463
463
  <span {...stylex.props(expansionStyles.placeholder)} />
@@ -499,7 +499,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
499
499
  {...stylex.props(expansionStyles.chevronButton)}
500
500
  onClick={() => onToggleExpandAll(!allExpanded)}
501
501
  aria-label={
502
- allExpanded ? 'Collapse all rows' : 'Expand all rows'
502
+ allExpanded ? t('@astryx.tableRowExpansion.collapseAllRows') : t('@astryx.tableRowExpansion.expandAllRows')
503
503
  }>
504
504
  <span
505
505
  {...stylex.props(
@@ -570,7 +570,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
570
570
  ...props.htmlProps,
571
571
  onClick: () => onToggle(key),
572
572
  },
573
- styles: [...props.styles, expansionStyles.clickableRow],
573
+ xstyle: [...props.xstyle, expansionStyles.clickableRow],
574
574
  };
575
575
  },
576
576
  }),
@@ -585,6 +585,7 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
585
585
  isAllExpanded,
586
586
  onToggleExpandAll,
587
587
  expansionColumn,
588
+ t,
588
589
  ],
589
590
  );
590
591
  }
@@ -62,7 +62,7 @@ const styles = stylex.create({
62
62
  * so it reflects the current sort / filter / pagination view.
63
63
  *
64
64
  * @example
65
- * ```tsx
65
+ * ```
66
66
  * const rowIndex = useTableRowIndex({data});
67
67
  * <Table data={data} columns={columns} idKey="id" plugins={{rowIndex}} />;
68
68
  * ```
@@ -45,12 +45,9 @@ import * as stylex from '@stylexjs/stylex';
45
45
  import {colorVars} from '../../../theme/tokens.stylex';
46
46
  import {CheckboxInput} from '../../../CheckboxInput';
47
47
  import {mergeRefs} from '../../../utils';
48
- import type {
49
- TablePlugin,
50
- TableColumn,
51
- BodyRowRenderProps,
52
- } from '../../types';
48
+ import type {TablePlugin, TableColumn, BodyRowRenderProps} from '../../types';
53
49
  import {pixel} from '../../columnUtils';
50
+ import {useTranslator} from '../../../i18n';
54
51
 
55
52
  // =============================================================================
56
53
  // Config Type
@@ -181,6 +178,7 @@ function SelectAllCheckboxInner<T extends Record<string, unknown>>({
181
178
  }: {
182
179
  store: SelectionStore<T>;
183
180
  }) {
181
+ const t = useTranslator();
184
182
  const getSnapshot = useCallback(() => {
185
183
  const config = store.getConfig();
186
184
  const allSelected = config.getIsAllSelected();
@@ -197,7 +195,7 @@ function SelectAllCheckboxInner<T extends Record<string, unknown>>({
197
195
 
198
196
  return (
199
197
  <CheckboxInput
200
- label="Select all rows"
198
+ label={t('@astryx.table.selection.selectAllRows')}
201
199
  isLabelHidden
202
200
  value={allSelected ? true : indeterminate ? 'indeterminate' : false}
203
201
  onChange={() =>
@@ -232,6 +230,7 @@ function SelectionCellContentInner<T extends Record<string, unknown>>({
232
230
  store: SelectionStore<T>;
233
231
  item: T;
234
232
  }) {
233
+ const t = useTranslator();
235
234
  const config = store.getConfig();
236
235
  const isSelected = useIsItemSelected(store, item);
237
236
  const selectable = config.getIsItemSelectable?.(item) ?? true;
@@ -243,7 +242,7 @@ function SelectionCellContentInner<T extends Record<string, unknown>>({
243
242
 
244
243
  return (
245
244
  <CheckboxInput
246
- label="Select row"
245
+ label={t('@astryx.table.selection.selectRow')}
247
246
  isLabelHidden
248
247
  value={isSelected}
249
248
  onChange={() =>
@@ -18,6 +18,7 @@ import * as stylex from '@stylexjs/stylex';
18
18
  import {colorVars, spacingVars, radiusVars} from '../../../theme/tokens.stylex';
19
19
  import {Icon} from '../../../Icon';
20
20
  import {resolveContextActions} from '../../tableContextMenu';
21
+ import {useTranslator} from '../../../i18n';
21
22
  import type {
22
23
  TablePlugin,
23
24
  HeaderCellRenderProps,
@@ -344,6 +345,7 @@ export function useTableSortable<
344
345
  T extends Record<string, unknown>,
345
346
  TSortKey extends string = string,
346
347
  >(config: UseTableSortableConfig<TSortKey>): TablePlugin<T> {
348
+ const t = useTranslator();
347
349
  const configRef = useRef(config);
348
350
  configRef.current = config;
349
351
 
@@ -367,12 +369,13 @@ export function useTableSortable<
367
369
  // checked/clear state always reflects the latest sort.
368
370
  const getSortActions = (): TableContextAction[] => {
369
371
  const c = configRef.current;
370
- const dir = c.sort.find(e => e.sortKey === sortKey)?.direction ?? null;
372
+ const dir =
373
+ c.sort.find(e => e.sortKey === sortKey)?.direction ?? null;
371
374
  const actions: TableContextAction[] = [
372
375
  {
373
376
  id: 'sort-asc',
374
377
  group: 'sort',
375
- label: 'Sort ascending',
378
+ label: t('@astryx.table.sort.ascending'),
376
379
  icon: <Icon icon="arrowUp" size="xsm" aria-hidden />,
377
380
  checked: dir === 'ascending',
378
381
  onSelect: () =>
@@ -383,7 +386,7 @@ export function useTableSortable<
383
386
  {
384
387
  id: 'sort-desc',
385
388
  group: 'sort',
386
- label: 'Sort descending',
389
+ label: t('@astryx.table.sort.descending'),
387
390
  icon: <Icon icon="arrowDown" size="xsm" aria-hidden />,
388
391
  checked: dir === 'descending',
389
392
  onSelect: () =>
@@ -396,7 +399,7 @@ export function useTableSortable<
396
399
  actions.push({
397
400
  id: 'sort-clear',
398
401
  group: 'sort-clear',
399
- label: 'Clear sort',
402
+ label: t('@astryx.table.sort.clear'),
400
403
  icon: <Icon icon="close" size="xsm" aria-hidden />,
401
404
  onSelect: () =>
402
405
  c.onSortChange(c.sort.filter(e => e.sortKey !== sortKey)),
@@ -430,6 +433,6 @@ export function useTableSortable<
430
433
  };
431
434
  },
432
435
  }),
433
- [],
436
+ [t],
434
437
  );
435
438
  }
@@ -337,8 +337,8 @@ export function useTableStickyColumns<T extends Record<string, unknown>>(
337
337
  ...props.htmlProps,
338
338
  style: {...props.htmlProps.style, ...offsetStyle},
339
339
  },
340
- styles: [
341
- ...props.styles,
340
+ xstyle: [
341
+ ...props.xstyle,
342
342
  stickyStyles.cell,
343
343
  stickyStyles.headerCell,
344
344
  side.edge === 'start' ? shadowStyles.start : shadowStyles.end,
@@ -365,8 +365,8 @@ export function useTableStickyColumns<T extends Record<string, unknown>>(
365
365
  ...props.htmlProps,
366
366
  style: {...props.htmlProps.style, ...offsetStyle},
367
367
  },
368
- styles: [
369
- ...props.styles,
368
+ xstyle: [
369
+ ...props.xstyle,
370
370
  stickyStyles.cell,
371
371
  stickyStyles.bodyCell,
372
372
  side.edge === 'start' ? shadowStyles.start : shadowStyles.end,
@@ -223,13 +223,13 @@ export interface TableColumn<T extends Record<string, unknown>> {
223
223
  /** Props passed through the plugin pipeline for the `<table>` element */
224
224
  export interface TableRenderProps {
225
225
  htmlProps: HTMLAttributes<HTMLTableElement>;
226
- styles: StyleXStyles[];
226
+ xstyle: StyleXStyles[];
227
227
  }
228
228
 
229
229
  /** Props passed through the plugin pipeline for the header `<tr>` */
230
230
  export interface HeaderRowRenderProps {
231
231
  htmlProps: HTMLAttributes<HTMLTableRowElement>;
232
- styles: StyleXStyles[];
232
+ xstyle: StyleXStyles[];
233
233
  children: ReactNode;
234
234
  }
235
235
 
@@ -250,7 +250,7 @@ export interface HeaderRowRenderProps {
250
250
  */
251
251
  export interface HeaderCellRenderProps {
252
252
  htmlProps: ThHTMLAttributes<HTMLTableCellElement>;
253
- styles: StyleXStyles[];
253
+ xstyle: StyleXStyles[];
254
254
  /** Content rendered before the header label. */
255
255
  before?: ReactNode;
256
256
  /** The header label content. Initialized from `column.header ?? column.key`. Plugins may wrap or replace. */
@@ -286,7 +286,7 @@ export interface HeaderCellRenderProps {
286
286
  /** Props passed through the plugin pipeline for each body `<tr>` */
287
287
  export interface BodyRowRenderProps {
288
288
  htmlProps: HTMLAttributes<HTMLTableRowElement>;
289
- styles: StyleXStyles[];
289
+ xstyle: StyleXStyles[];
290
290
  children: ReactNode;
291
291
  /** Ref for the `<tr>` element. Plugins can set this to access the row DOM node. */
292
292
  ref?: Ref<HTMLTableRowElement>;
@@ -295,7 +295,7 @@ export interface BodyRowRenderProps {
295
295
  /** Props passed through the plugin pipeline for each body `<td>` */
296
296
  export interface BodyCellRenderProps {
297
297
  htmlProps: TdHTMLAttributes<HTMLTableCellElement>;
298
- styles: StyleXStyles[];
298
+ xstyle: StyleXStyles[];
299
299
  /**
300
300
  * Right-click context-menu actions for this body cell. Plugins append their
301
301
  * actions in `transformBodyCell`; BaseTable concatenates the arrays across
@@ -341,7 +341,7 @@ export interface ScrollWrapperRenderProps {
341
341
  htmlProps: HTMLAttributes<HTMLDivElement> & {
342
342
  ref?: Ref<HTMLDivElement>;
343
343
  };
344
- styles: StyleXStyles[];
344
+ xstyle: StyleXStyles[];
345
345
  /** Content rendered before the `<table>`, inside the scroll container. */
346
346
  beforeTable?: ReactNode;
347
347
  /** Content rendered after the `<table>`, inside the scroll container. */
@@ -389,8 +389,7 @@ export interface TableContextAction {
389
389
  * every render.
390
390
  */
391
391
  export type TableContextActions =
392
- | TableContextAction[]
393
- | (() => TableContextAction[]);
392
+ TableContextAction[] | (() => TableContextAction[]);
394
393
 
395
394
  // =============================================================================
396
395
  // Plugin Interface
@@ -543,7 +542,14 @@ export interface BaseTableProps<
543
542
 
544
543
  /** Children mode — render `<tr>`/`<td>` directly instead of data-driven */
545
544
  children?: ReactNode;
546
- /** Additional HTML attributes for the `<table>` element */
545
+ /**
546
+ * Additional HTML attributes for the `<table>` element.
547
+ *
548
+ * @deprecated Pass `className`, `style`, `xstyle`, and other HTML
549
+ * attributes directly on the component instead — they now reach the root
550
+ * `<table>` and win over `tableProps` on conflicts. Migrate with
551
+ * `npx astryx upgrade --codemod migrate-table-tableprops-to-direct-props`.
552
+ */
547
553
  tableProps?: HTMLAttributes<HTMLTableElement>;
548
554
  /**
549
555
  * Optional wrapper rendered around the `<table>` element, inside the
@@ -551,15 +557,15 @@ export interface BaseTableProps<
551
557
  * horizontal scroll container so plugin chrome (pagination, toolbars)
552
558
  * stays outside the scrollable area.
553
559
  *
554
- * Receives `htmlProps` (including an optional `ref`) and `styles` produced
560
+ * Receives `htmlProps` (including an optional `ref`) and `xstyle` produced
555
561
  * by the plugin `transformScrollWrapper` pipeline, plus `beforeTable`/`afterTable`
556
- * chrome. The wrapper must spread `htmlProps` (and apply `styles`) onto its
562
+ * chrome. The wrapper must spread `htmlProps` (and apply `xstyle`) onto its
557
563
  * scroll-container element so plugins can attach refs / scroll listeners.
558
564
  */
559
565
  scrollWrapper?: ComponentType<{
560
566
  children: ReactNode;
561
567
  htmlProps?: HTMLAttributes<HTMLDivElement> & {ref?: Ref<HTMLDivElement>};
562
- styles?: StyleXStyles[];
568
+ xstyle?: StyleXStyles[];
563
569
  beforeTable?: ReactNode;
564
570
  afterTable?: ReactNode;
565
571
  }>;
@@ -23,7 +23,7 @@ export const docs = {
23
23
  },
24
24
  {
25
25
  name: 'variant',
26
- type: "'popover' | 'inline'",
26
+ type: "'popover' | 'inline' | 'inline-compact'",
27
27
  description: 'Display variant for filter controls.',
28
28
  default: "'popover'",
29
29
  },
@@ -50,7 +50,7 @@ export const docsZh = {
50
50
  },
51
51
  {
52
52
  name: 'variant',
53
- type: "'popover' | 'inline'",
53
+ type: "'popover' | 'inline' | 'inline-compact'",
54
54
  description: '筛选控件的显示变体。',
55
55
  default: "'popover'",
56
56
  },