@astryxdesign/core 0.1.6 → 0.1.7-canary.04cd8f7

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 (571) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +25 -14
  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 +11 -1
  75. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  76. package/dist/Collapsible/Collapsible.js +36 -4
  77. package/dist/CommandPalette/CommandPalette.d.ts +1 -1
  78. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  79. package/dist/CommandPalette/CommandPalette.js +8 -3
  80. package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
  81. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  82. package/dist/CommandPalette/CommandPaletteInput.js +4 -1
  83. package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
  84. package/dist/CommandPalette/CommandPaletteList.d.ts.map +1 -1
  85. package/dist/CommandPalette/CommandPaletteList.js +4 -1
  86. package/dist/ContextMenu/ContextMenu.d.ts +1 -1
  87. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  88. package/dist/ContextMenu/ContextMenu.js +8 -4
  89. package/dist/ContextMenu/index.d.ts +3 -0
  90. package/dist/ContextMenu/index.d.ts.map +1 -1
  91. package/dist/ContextMenu/index.js +7 -1
  92. package/dist/DateInput/DateInput.d.ts +1 -1
  93. package/dist/DateInput/DateInput.d.ts.map +1 -1
  94. package/dist/DateInput/DateInput.js +10 -5
  95. package/dist/DateRangeInput/DateRangeInput.d.ts +1 -1
  96. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  97. package/dist/DateRangeInput/DateRangeInput.js +11 -6
  98. package/dist/DateTimeInput/DateTimeInput.d.ts +1 -1
  99. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  100. package/dist/DateTimeInput/DateTimeInput.js +15 -7
  101. package/dist/Dialog/Dialog.d.ts.map +1 -1
  102. package/dist/Dialog/Dialog.js +15 -12
  103. package/dist/Dialog/DialogHeader.d.ts +1 -1
  104. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  105. package/dist/Dialog/DialogHeader.js +7 -3
  106. package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
  107. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  108. package/dist/DropdownMenu/DropdownMenu.js +19 -9
  109. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +89 -0
  110. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -0
  111. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +170 -0
  112. package/dist/DropdownMenu/DropdownMenuContext.d.ts +17 -1
  113. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  114. package/dist/DropdownMenu/DropdownMenuContext.js +18 -0
  115. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +69 -0
  116. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -0
  117. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +70 -0
  118. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +69 -0
  119. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -0
  120. package/dist/DropdownMenu/DropdownMenuRadioItem.js +178 -0
  121. package/dist/DropdownMenu/index.d.ts +5 -1
  122. package/dist/DropdownMenu/index.d.ts.map +1 -1
  123. package/dist/DropdownMenu/index.js +10 -1
  124. package/dist/DropdownMenu/menuItemRoles.d.ts +13 -0
  125. package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -0
  126. package/dist/DropdownMenu/menuItemRoles.js +15 -0
  127. package/dist/EmptyState/EmptyState.d.ts +4 -1
  128. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  129. package/dist/FileInput/FileInput.d.ts.map +1 -1
  130. package/dist/FileInput/FileInput.js +11 -1
  131. package/dist/Icon/Icon.d.ts +17 -12
  132. package/dist/Icon/Icon.d.ts.map +1 -1
  133. package/dist/Icon/Icon.js +28 -20
  134. package/dist/Kbd/Kbd.js +1 -1
  135. package/dist/Layer/useLayer.d.ts +10 -0
  136. package/dist/Layer/useLayer.d.ts.map +1 -1
  137. package/dist/Layer/useLayer.js +23 -1
  138. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  139. package/dist/Lightbox/Lightbox.js +6 -4
  140. package/dist/Link/Link.d.ts +5 -1
  141. package/dist/Link/Link.d.ts.map +1 -1
  142. package/dist/Link/Link.js +32 -1
  143. package/dist/Markdown/Markdown.d.ts.map +1 -1
  144. package/dist/Markdown/Markdown.js +10 -8
  145. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  146. package/dist/MobileNav/MobileNav.js +4 -2
  147. package/dist/MobileNav/MobileNavToggle.d.ts +1 -1
  148. package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
  149. package/dist/MobileNav/MobileNavToggle.js +4 -1
  150. package/dist/MoreMenu/MoreMenu.d.ts +1 -1
  151. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  152. package/dist/MoreMenu/MoreMenu.js +4 -1
  153. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  154. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  155. package/dist/MultiSelector/MultiSelector.js +13 -6
  156. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  157. package/dist/NumberInput/NumberInput.js +5 -1
  158. package/dist/Outline/Outline.d.ts +1 -1
  159. package/dist/Outline/Outline.d.ts.map +1 -1
  160. package/dist/Outline/Outline.js +4 -1
  161. package/dist/Pagination/Pagination.d.ts +1 -1
  162. package/dist/Pagination/Pagination.d.ts.map +1 -1
  163. package/dist/Pagination/Pagination.js +38 -11
  164. package/dist/Popover/usePopover.d.ts.map +1 -1
  165. package/dist/Popover/usePopover.js +4 -1
  166. package/dist/PowerSearch/PowerSearch.d.ts +1 -1
  167. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  168. package/dist/PowerSearch/PowerSearch.js +22 -12
  169. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +1 -1
  170. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  171. package/dist/PowerSearch/PowerSearchEditPopover.js +26 -20
  172. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  173. package/dist/PowerSearch/PowerSearchToken.js +7 -3
  174. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  175. package/dist/PowerSearch/PowerSearchValueEditor.js +34 -21
  176. package/dist/PowerSearch/formatFilterValue.d.ts +2 -1
  177. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  178. package/dist/PowerSearch/formatFilterValue.js +19 -9
  179. package/dist/PowerSearch/index.d.ts +2 -1
  180. package/dist/PowerSearch/index.d.ts.map +1 -1
  181. package/dist/PowerSearch/index.js +1 -0
  182. package/dist/PowerSearch/resolveOperatorLabel.d.ts +23 -0
  183. package/dist/PowerSearch/resolveOperatorLabel.d.ts.map +1 -0
  184. package/dist/PowerSearch/resolveOperatorLabel.js +28 -0
  185. package/dist/PowerSearch/types.d.ts +28 -2
  186. package/dist/PowerSearch/types.d.ts.map +1 -1
  187. package/dist/PowerSearch/usePowerSearchConfig.d.ts.map +1 -1
  188. package/dist/PowerSearch/usePowerSearchConfig.js +27 -27
  189. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  190. package/dist/PowerSearch/usePowerSearchSource.js +15 -8
  191. package/dist/Resizable/ResizeHandle.d.ts +1 -1
  192. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  193. package/dist/Resizable/ResizeHandle.js +4 -1
  194. package/dist/Selector/Selector.d.ts.map +1 -1
  195. package/dist/Selector/Selector.js +52 -14
  196. package/dist/SideNav/SideNav.d.ts.map +1 -1
  197. package/dist/SideNav/SideNav.js +4 -2
  198. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  199. package/dist/SideNav/SideNavCollapseButton.js +3 -1
  200. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  201. package/dist/SideNav/SideNavHeading.js +5 -3
  202. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  203. package/dist/SideNav/SideNavItem.js +7 -1
  204. package/dist/Switch/Switch.d.ts.map +1 -1
  205. package/dist/Switch/Switch.js +4 -2
  206. package/dist/TabList/Tab.d.ts.map +1 -1
  207. package/dist/TabList/Tab.js +2 -2
  208. package/dist/TabList/TabList.d.ts +1 -1
  209. package/dist/TabList/TabList.d.ts.map +1 -1
  210. package/dist/TabList/TabList.js +6 -1
  211. package/dist/TabList/TabMenu.d.ts.map +1 -1
  212. package/dist/TabList/TabMenu.js +1 -1
  213. package/dist/Table/BaseTable.d.ts.map +1 -1
  214. package/dist/Table/BaseTable.js +29 -16
  215. package/dist/Table/Table.d.ts.map +1 -1
  216. package/dist/Table/Table.js +5 -3
  217. package/dist/Table/index.d.ts +2 -0
  218. package/dist/Table/index.d.ts.map +1 -1
  219. package/dist/Table/index.js +1 -0
  220. package/dist/Table/plugins/columnResize/useTableColumnResize.js +1 -1
  221. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  222. package/dist/Table/plugins/filtering/useTableFiltering.js +56 -19
  223. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  224. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  225. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +12 -5
  226. package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
  227. package/dist/Table/plugins/pagination/useTablePagination.js +6 -3
  228. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  229. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +8 -6
  230. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
  231. package/dist/Table/plugins/rowIndex/useTableRowIndex.js +1 -1
  232. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  233. package/dist/Table/plugins/selection/useTableSelection.js +5 -2
  234. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  235. package/dist/Table/plugins/sortable/useTableSortable.js +6 -4
  236. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -2
  237. package/dist/Table/plugins/tree/index.d.ts +5 -0
  238. package/dist/Table/plugins/tree/index.d.ts.map +1 -0
  239. package/dist/Table/plugins/tree/index.js +4 -0
  240. package/dist/Table/plugins/tree/useTableTreeData.d.ts +38 -0
  241. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -0
  242. package/dist/Table/plugins/tree/useTableTreeData.js +358 -0
  243. package/dist/Table/plugins/tree/useTableTreeState.d.ts +51 -0
  244. package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -0
  245. package/dist/Table/plugins/tree/useTableTreeState.js +175 -0
  246. package/dist/Table/types.d.ts +17 -10
  247. package/dist/Table/types.d.ts.map +1 -1
  248. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  249. package/dist/Table/useBaseTablePlugins.js +6 -3
  250. package/dist/TextInput/TextInput.d.ts.map +1 -1
  251. package/dist/TextInput/TextInput.js +5 -1
  252. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  253. package/dist/Thumbnail/Thumbnail.js +8 -2
  254. package/dist/TimeInput/TimeInput.d.ts +1 -1
  255. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  256. package/dist/TimeInput/TimeInput.js +7 -2
  257. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  258. package/dist/Timestamp/Timestamp.js +18 -3
  259. package/dist/Toast/Toast.d.ts.map +1 -1
  260. package/dist/Toast/Toast.js +3 -1
  261. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  262. package/dist/Toast/ToastViewport.js +3 -1
  263. package/dist/Token/Token.d.ts.map +1 -1
  264. package/dist/Token/Token.js +8 -2
  265. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  266. package/dist/Tokenizer/Tokenizer.js +3 -1
  267. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  268. package/dist/Toolbar/Toolbar.js +8 -1
  269. package/dist/TopNav/TopNav.d.ts +2 -1
  270. package/dist/TopNav/TopNav.d.ts.map +1 -1
  271. package/dist/TopNav/TopNav.js +4 -1
  272. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  273. package/dist/TopNav/TopNavHeading.js +5 -3
  274. package/dist/TreeList/TreeList.d.ts.map +1 -1
  275. package/dist/TreeList/TreeList.js +5 -1
  276. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  277. package/dist/TreeList/TreeListItem.js +7 -1
  278. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  279. package/dist/Typeahead/BaseTypeahead.js +8 -4
  280. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  281. package/dist/Typeahead/Typeahead.js +3 -1
  282. package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -0
  283. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  284. package/dist/VisuallyHidden/VisuallyHidden.js +1 -0
  285. package/dist/astryx.css +38 -4
  286. package/dist/astryx.umd.js +62 -60
  287. package/dist/astryx.umd.js.map +4 -4
  288. package/dist/authoring/doc.d.ts +145 -0
  289. package/dist/authoring/doc.d.ts.map +1 -0
  290. package/dist/authoring/doc.js +100 -0
  291. package/dist/authoring/index.d.ts +29 -0
  292. package/dist/authoring/index.d.ts.map +1 -0
  293. package/dist/authoring/index.js +28 -0
  294. package/dist/authoring/integration.d.ts +35 -0
  295. package/dist/authoring/integration.d.ts.map +1 -0
  296. package/dist/authoring/integration.js +30 -0
  297. package/dist/authoring/template.d.ts +66 -0
  298. package/dist/authoring/template.d.ts.map +1 -0
  299. package/dist/authoring/template.js +55 -0
  300. package/dist/config.d.ts +80 -0
  301. package/dist/config.d.ts.map +1 -0
  302. package/dist/config.js +40 -0
  303. package/dist/docs-types.d.ts +13 -4
  304. package/dist/docs-types.d.ts.map +1 -1
  305. package/dist/i18n/InternationalizationContext.d.ts +12 -0
  306. package/dist/i18n/InternationalizationContext.d.ts.map +1 -0
  307. package/dist/i18n/InternationalizationContext.js +29 -0
  308. package/dist/i18n/InternationalizationProvider.d.ts +61 -0
  309. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -0
  310. package/dist/i18n/InternationalizationProvider.js +44 -0
  311. package/dist/i18n/index.d.ts +24 -0
  312. package/dist/i18n/index.d.ts.map +1 -0
  313. package/dist/i18n/index.js +21 -0
  314. package/dist/i18n/resolve.d.ts +22 -0
  315. package/dist/i18n/resolve.d.ts.map +1 -0
  316. package/dist/i18n/resolve.js +141 -0
  317. package/dist/i18n/translator.d.ts +25 -0
  318. package/dist/i18n/translator.d.ts.map +1 -0
  319. package/dist/i18n/translator.js +1 -0
  320. package/dist/i18n/types.d.ts +47 -0
  321. package/dist/i18n/types.d.ts.map +1 -0
  322. package/dist/i18n/types.js +1 -0
  323. package/dist/i18n/useTranslator.d.ts +15 -0
  324. package/dist/i18n/useTranslator.d.ts.map +1 -0
  325. package/dist/i18n/useTranslator.js +39 -0
  326. package/dist/index.d.ts +1 -0
  327. package/dist/index.d.ts.map +1 -1
  328. package/dist/index.js +3 -0
  329. package/dist/theme/Theme.js +1 -1
  330. package/dist/theme/defineTheme.d.ts +1 -1
  331. package/dist/theme/defineTheme.js +1 -1
  332. package/dist/theme/hct.d.ts +0 -1
  333. package/dist/theme/hct.d.ts.map +1 -1
  334. package/dist/theme/hct.js +0 -3
  335. package/dist/utils/color.d.ts +13 -1
  336. package/dist/utils/color.d.ts.map +1 -1
  337. package/dist/utils/color.js +23 -1
  338. package/dist/utils/index.d.ts +1 -1
  339. package/dist/utils/index.d.ts.map +1 -1
  340. package/dist/utils/index.js +1 -1
  341. package/locales/en.json +754 -0
  342. package/locales/pseudo.json +566 -0
  343. package/package.json +23 -2
  344. package/src/AlertDialog/AlertDialog.doc.mjs +5 -0
  345. package/src/AlertDialog/AlertDialog.tsx +4 -1
  346. package/src/AppShell/AppShell.doc.mjs +8 -2
  347. package/src/AppShell/AppShell.tsx +3 -1
  348. package/src/AvatarGroup/AvatarGroup.tsx +4 -1
  349. package/src/Banner/Banner.tsx +10 -5
  350. package/src/Breadcrumbs/Breadcrumbs.tsx +4 -1
  351. package/src/Button/Button.doc.mjs +8 -0
  352. package/src/Button/Button.test.tsx +27 -0
  353. package/src/Button/Button.tsx +51 -5
  354. package/src/ButtonGroup/ButtonGroup.test.tsx +386 -2
  355. package/src/ButtonGroup/ButtonGroup.tsx +27 -11
  356. package/src/Calendar/Calendar.test.tsx +103 -2
  357. package/src/Calendar/Calendar.tsx +29 -6
  358. package/src/Card/Card.doc.mjs +3 -3
  359. package/src/Carousel/Carousel.tsx +10 -7
  360. package/src/Chat/ChatComposer.tsx +5 -1
  361. package/src/Chat/ChatComposerDrawer.tsx +9 -2
  362. package/src/Chat/ChatComposerInput.tsx +10 -4
  363. package/src/Chat/ChatLayout.test.tsx +127 -2
  364. package/src/Chat/ChatLayout.tsx +5 -12
  365. package/src/Chat/ChatLayoutScrollButton.tsx +4 -2
  366. package/src/Chat/ChatMessage.tsx +5 -1
  367. package/src/Chat/ChatMessageBubble.tsx +2 -0
  368. package/src/Chat/ChatMessageList.doc.mjs +1 -1
  369. package/src/Chat/ChatMessageList.tsx +2 -0
  370. package/src/Chat/ChatMessageMetadata.tsx +15 -9
  371. package/src/Chat/ChatPastedTextToken.tsx +3 -1
  372. package/src/Chat/ChatSendButton.tsx +3 -1
  373. package/src/Chat/ChatToolCalls.doc.mjs +1 -1
  374. package/src/Chat/index.ts +1 -0
  375. package/src/Chat/useChatStreamScroll.test.tsx +168 -0
  376. package/src/Chat/useChatStreamScroll.ts +67 -11
  377. package/src/Chat/useSpeechRecognition.ts +11 -2
  378. package/src/Chat/useTriggerMenu.tsx +4 -2
  379. package/src/CheckboxInput/CheckboxInput.doc.mjs +1 -1
  380. package/src/CheckboxInput/CheckboxInput.test.tsx +16 -0
  381. package/src/CheckboxInput/CheckboxInput.tsx +4 -2
  382. package/src/CheckboxList/CheckboxList.doc.mjs +6 -1
  383. package/src/CheckboxList/CheckboxList.tsx +2 -0
  384. package/src/CheckboxList/CheckboxListItem.tsx +7 -1
  385. package/src/Citation/Citation.tsx +4 -2
  386. package/src/ClickableCard/ClickableCard.doc.mjs +1 -1
  387. package/src/CodeBlock/CodeBlock.tsx +91 -40
  388. package/src/Collapsible/Collapsible.doc.mjs +7 -0
  389. package/src/Collapsible/Collapsible.test.tsx +80 -0
  390. package/src/Collapsible/Collapsible.tsx +58 -5
  391. package/src/CommandPalette/CommandPalette.tsx +10 -3
  392. package/src/CommandPalette/CommandPaletteInput.test.tsx +1 -1
  393. package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
  394. package/src/CommandPalette/CommandPaletteList.tsx +4 -1
  395. package/src/ContextMenu/ContextMenu.test.tsx +75 -1
  396. package/src/ContextMenu/ContextMenu.tsx +14 -6
  397. package/src/ContextMenu/index.ts +15 -0
  398. package/src/DateInput/DateInput.doc.mjs +2 -2
  399. package/src/DateInput/DateInput.test.tsx +17 -5
  400. package/src/DateInput/DateInput.tsx +13 -5
  401. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  402. package/src/DateRangeInput/DateRangeInput.tsx +14 -6
  403. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -2
  404. package/src/DateTimeInput/DateTimeInput.tsx +17 -7
  405. package/src/Dialog/Dialog.tsx +11 -15
  406. package/src/Dialog/DialogHeader.tsx +7 -3
  407. package/src/DropdownMenu/DropdownMenu.doc.mjs +23 -0
  408. package/src/DropdownMenu/DropdownMenu.tsx +23 -14
  409. package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +95 -0
  410. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +237 -0
  411. package/src/DropdownMenu/DropdownMenuContext.tsx +29 -1
  412. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +7 -1
  413. package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +80 -0
  414. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +119 -0
  415. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +80 -0
  416. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +232 -0
  417. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +163 -0
  418. package/src/DropdownMenu/index.ts +23 -3
  419. package/src/DropdownMenu/menuItemRoles.ts +22 -0
  420. package/src/EmptyState/EmptyState.doc.mjs +3 -3
  421. package/src/EmptyState/EmptyState.tsx +4 -1
  422. package/src/Field/Field.doc.mjs +3 -3
  423. package/src/Field/FieldLabel.doc.mjs +1 -1
  424. package/src/FileInput/FileInput.test.tsx +40 -1
  425. package/src/FileInput/FileInput.tsx +12 -1
  426. package/src/Grid/Grid.doc.mjs +5 -5
  427. package/src/Icon/Icon.test.tsx +46 -0
  428. package/src/Icon/Icon.tsx +37 -24
  429. package/src/InputGroup/InputGroup.doc.mjs +1 -1
  430. package/src/Kbd/Kbd.test.tsx +26 -0
  431. package/src/Kbd/Kbd.tsx +1 -1
  432. package/src/Layer/useLayer.doc.mjs +8 -5
  433. package/src/Layer/useLayer.test.tsx +136 -1
  434. package/src/Layer/useLayer.tsx +34 -2
  435. package/src/Lightbox/Lightbox.doc.mjs +7 -2
  436. package/src/Lightbox/Lightbox.tsx +6 -4
  437. package/src/Link/Link.test.tsx +74 -2
  438. package/src/Link/Link.tsx +48 -1
  439. package/src/Markdown/Markdown.tsx +12 -4
  440. package/src/MobileNav/MobileNav.tsx +4 -2
  441. package/src/MobileNav/MobileNavToggle.tsx +5 -3
  442. package/src/MoreMenu/MoreMenu.tsx +4 -1
  443. package/src/MultiSelector/MultiSelector.tsx +14 -5
  444. package/src/NumberInput/NumberInput.doc.mjs +2 -2
  445. package/src/NumberInput/NumberInput.tsx +3 -1
  446. package/src/Outline/Outline.tsx +4 -1
  447. package/src/OverflowList/OverflowList.doc.mjs +2 -2
  448. package/src/Pagination/Pagination.tsx +35 -12
  449. package/src/Popover/usePopover.tsx +6 -1
  450. package/src/PowerSearch/PowerSearch.doc.mjs +9 -4
  451. package/src/PowerSearch/PowerSearch.tsx +22 -10
  452. package/src/PowerSearch/PowerSearchEditPopover.tsx +27 -20
  453. package/src/PowerSearch/PowerSearchToken.tsx +17 -6
  454. package/src/PowerSearch/PowerSearchValueEditor.tsx +34 -21
  455. package/src/PowerSearch/formatFilterValue.test.ts +282 -0
  456. package/src/PowerSearch/formatFilterValue.ts +21 -8
  457. package/src/PowerSearch/index.ts +5 -0
  458. package/src/PowerSearch/resolveOperatorLabel.ts +34 -0
  459. package/src/PowerSearch/types.ts +33 -9
  460. package/src/PowerSearch/usePowerSearchConfig.ts +59 -27
  461. package/src/PowerSearch/usePowerSearchSource.ts +17 -8
  462. package/src/RadioList/RadioList.doc.mjs +1 -1
  463. package/src/Resizable/ResizeHandle.tsx +4 -1
  464. package/src/Section/Section.doc.mjs +4 -4
  465. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  466. package/src/Selector/Selector.doc.mjs +6 -3
  467. package/src/Selector/Selector.test.tsx +114 -6
  468. package/src/Selector/Selector.tsx +68 -17
  469. package/src/Selector/SelectorOption.doc.mjs +1 -1
  470. package/src/SideNav/SideNav.tsx +4 -2
  471. package/src/SideNav/SideNavCollapseButton.tsx +3 -1
  472. package/src/SideNav/SideNavHeading.tsx +5 -3
  473. package/src/SideNav/SideNavItem.doc.mjs +2 -2
  474. package/src/SideNav/SideNavItem.tsx +3 -1
  475. package/src/Slider/Slider.doc.mjs +2 -2
  476. package/src/Stack/Stack.doc.mjs +10 -10
  477. package/src/Switch/Switch.doc.mjs +3 -3
  478. package/src/Switch/Switch.test.tsx +16 -0
  479. package/src/Switch/Switch.tsx +4 -2
  480. package/src/TabList/Tab.tsx +5 -1
  481. package/src/TabList/TabList.doc.mjs +3 -3
  482. package/src/TabList/TabList.test.tsx +66 -0
  483. package/src/TabList/TabList.tsx +12 -1
  484. package/src/TabList/TabMenu.tsx +4 -1
  485. package/src/Table/BaseTable.tsx +36 -19
  486. package/src/Table/Table.doc.mjs +2 -0
  487. package/src/Table/Table.test.tsx +132 -1
  488. package/src/Table/Table.tsx +6 -4
  489. package/src/Table/index.ts +7 -0
  490. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -1
  491. package/src/Table/plugins/filtering/useTableFiltering.tsx +31 -30
  492. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +7 -5
  493. package/src/Table/plugins/pagination/useTablePagination.tsx +4 -1
  494. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -8
  495. package/src/Table/plugins/rowIndex/useTableRowIndex.tsx +1 -1
  496. package/src/Table/plugins/selection/useTableSelection.tsx +6 -7
  497. package/src/Table/plugins/sortable/useTableSortable.tsx +8 -5
  498. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +4 -4
  499. package/src/Table/plugins/tree/index.ts +12 -0
  500. package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +163 -0
  501. package/src/Table/plugins/tree/useTableTreeData.test.tsx +594 -0
  502. package/src/Table/plugins/tree/useTableTreeData.tsx +495 -0
  503. package/src/Table/plugins/tree/useTableTreeState.test.tsx +636 -0
  504. package/src/Table/plugins/tree/useTableTreeState.tsx +253 -0
  505. package/src/Table/types.ts +18 -12
  506. package/src/Table/useBaseTablePlugins.ts +6 -2
  507. package/src/Table/useTableFiltering.doc.mjs +2 -2
  508. package/src/Table/useTableGroupedRows.doc.mjs +3 -3
  509. package/src/Table/useTableSortable.doc.mjs +11 -11
  510. package/src/Table/useTableTreeData.doc.mjs +75 -0
  511. package/src/Table/useTableTreeState.doc.mjs +98 -0
  512. package/src/Text/Text.doc.mjs +2 -2
  513. package/src/TextArea/TextArea.doc.mjs +1 -1
  514. package/src/TextInput/TextInput.doc.mjs +1 -1
  515. package/src/TextInput/TextInput.tsx +3 -1
  516. package/src/Thumbnail/Thumbnail.tsx +4 -2
  517. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  518. package/src/TimeInput/TimeInput.tsx +6 -2
  519. package/src/Timestamp/Timestamp.doc.mjs +4 -4
  520. package/src/Timestamp/Timestamp.test.tsx +120 -7
  521. package/src/Timestamp/Timestamp.tsx +21 -1
  522. package/src/Toast/Toast.tsx +3 -1
  523. package/src/Toast/ToastViewport.tsx +3 -1
  524. package/src/Token/Token.tsx +4 -2
  525. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  526. package/src/Tokenizer/Tokenizer.tsx +4 -4
  527. package/src/Toolbar/Toolbar.doc.mjs +1 -1
  528. package/src/Toolbar/Toolbar.tsx +10 -3
  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 -0
  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 +938 -0
  547. package/src/docs-types.ts +15 -10
  548. package/src/i18n/InternationalizationContext.ts +39 -0
  549. package/src/i18n/InternationalizationProvider.doc.mjs +72 -0
  550. package/src/i18n/InternationalizationProvider.tsx +82 -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/src/theme/Theme.doc.mjs +4 -4
  562. package/src/theme/Theme.tsx +1 -1
  563. package/src/theme/defineTheme.ts +1 -1
  564. package/src/theme/hct.ts +0 -4
  565. package/src/utils/color.test.ts +101 -1
  566. package/src/utils/color.ts +23 -1
  567. package/src/utils/index.ts +8 -1
  568. package/dist/NavItem/index.d.ts +0 -9
  569. package/dist/NavItem/index.d.ts.map +0 -1
  570. package/dist/NavItem/index.js +0 -10
  571. package/src/NavItem/index.ts +0 -11
@@ -39,6 +39,7 @@ import {useListFocus} from '../hooks/useListFocus';
39
39
  import {mergeProps} from '../utils';
40
40
  import type {BaseProps} from '../BaseProps';
41
41
  import {themeProps} from '../utils/themeProps';
42
+ import {useTranslator} from '../i18n/useTranslator';
42
43
 
43
44
  // =============================================================================
44
45
  // Types
@@ -344,7 +345,7 @@ export function Pagination({
344
345
  siblingCount = 1,
345
346
  size = 'md',
346
347
  isDisabled = false,
347
- label = 'Pagination',
348
+ label: labelFromProps,
348
349
  'data-testid': testId,
349
350
  xstyle,
350
351
  className,
@@ -354,6 +355,14 @@ export function Pagination({
354
355
  }: PaginationProps) {
355
356
  const [, startTransition] = useTransition();
356
357
 
358
+ // Resolve system strings once per render. Prop overrides win.
359
+ const t = useTranslator();
360
+ const label = labelFromProps ?? t('@astryx.pagination.label');
361
+ const previousLabel = t('@astryx.pagination.previous');
362
+ const nextLabel = t('@astryx.pagination.next');
363
+ const pageIndicatorsLabel = t('@astryx.pagination.pageIndicators');
364
+ const itemsPerPageLabel = t('@astryx.pagination.itemsPerPage');
365
+
357
366
  // pageSize is typed as number, so 0, NaN, and negatives are valid at the
358
367
  // type level but yield Infinity/NaN page counts, and
359
368
  // Array.from({length: Infinity}) crashes the dots variant. Coerce to a
@@ -418,8 +427,11 @@ export function Pagination({
418
427
  onChange(newPage);
419
428
  announce(
420
429
  computedTotalPages != null
421
- ? `Page ${newPage} of ${computedTotalPages}`
422
- : `Page ${newPage}`,
430
+ ? t('@astryx.pagination.pageOfTotal', {
431
+ current: newPage,
432
+ total: computedTotalPages,
433
+ })
434
+ : t('@astryx.pagination.pageAnnounce', {current: newPage}),
423
435
  );
424
436
  startTransition(async () => {
425
437
  setOptimisticPage(newPage);
@@ -511,8 +523,10 @@ export function Pagination({
511
523
  return (
512
524
  <Button
513
525
  key={item}
514
- label={`Go to page ${item}`}
515
- aria-label={`Go to page ${item}`}
526
+ label={t('@astryx.pagination.goToPage', {page: item})}
527
+ aria-label={t('@astryx.pagination.goToPage', {
528
+ page: item,
529
+ })}
516
530
  variant="ghost"
517
531
  size={buttonSize}
518
532
  onClick={() => handlePageChange(item)}
@@ -534,7 +548,11 @@ export function Pagination({
534
548
  return (
535
549
  <span {...stylex.props(styles.infoText)}>
536
550
  <Text type="body" size="sm" color="secondary">
537
- {`${rangeStart}\u2013${rangeEnd} of ${totalItems}`}
551
+ {t('@astryx.pagination.count', {
552
+ from: rangeStart,
553
+ to: rangeEnd,
554
+ total: totalItems,
555
+ })}
538
556
  </Text>
539
557
  </span>
540
558
  );
@@ -547,7 +565,10 @@ export function Pagination({
547
565
  return (
548
566
  <span {...stylex.props(styles.infoText)}>
549
567
  <Text type="body" size="sm" color="secondary">
550
- {`Page ${optimisticPage} of ${computedTotalPages}`}
568
+ {t('@astryx.pagination.pageOfTotal', {
569
+ current: optimisticPage,
570
+ total: computedTotalPages,
571
+ })}
551
572
  </Text>
552
573
  </span>
553
574
  );
@@ -563,7 +584,7 @@ export function Pagination({
563
584
  ref={dotsListRef}
564
585
  {...stylex.props(styles.dotsContainer)}
565
586
  role="group"
566
- aria-label="Page indicators"
587
+ aria-label={pageIndicatorsLabel}
567
588
  onKeyDown={handleDotsKeyDown}
568
589
  onFocus={handleDotsFocus}>
569
590
  {Array.from({length: computedTotalPages}, (_, i) => {
@@ -573,7 +594,9 @@ export function Pagination({
573
594
  key={i + 1}
574
595
  type="button"
575
596
  data-page={i + 1}
576
- aria-label={`Go to page ${i + 1}`}
597
+ aria-label={t('@astryx.pagination.goToPage', {
598
+ page: i + 1,
599
+ })}
577
600
  aria-current={isActive ? 'page' : undefined}
578
601
  // The active dot is the single roving tab stop; useListFocus
579
602
  // maintains it as focus and the active page move.
@@ -624,7 +647,7 @@ export function Pagination({
624
647
  <div {...stylex.props(styles.pageSizeSelector)}>
625
648
  <div {...stylex.props(styles.pageSizeSelectorControl)}>
626
649
  <Selector
627
- label="Items per page"
650
+ label={itemsPerPageLabel}
628
651
  isLabelHidden
629
652
  options={pageSizeOptions.map(opt => String(opt))}
630
653
  value={String(pageSize)}
@@ -637,7 +660,7 @@ export function Pagination({
637
660
  )}
638
661
  <div {...stylex.props(styles.controls)}>
639
662
  <Button
640
- label="Go to previous page"
663
+ label={previousLabel}
641
664
  variant="ghost"
642
665
  size={buttonSize}
643
666
  icon={<Icon icon="chevronLeft" size={isSm ? 'sm' : 'md'} />}
@@ -649,7 +672,7 @@ export function Pagination({
649
672
  {renderIndicator()}
650
673
 
651
674
  <Button
652
- label="Go to next page"
675
+ label={nextLabel}
653
676
  variant="ghost"
654
677
  size={buttonSize}
655
678
  icon={<Icon icon="chevronRight" size={isSm ? 'sm' : 'md'} />}
@@ -27,6 +27,7 @@ import {
27
27
  shadowVars,
28
28
  } from '../theme/tokens.stylex';
29
29
  import {Button} from '../Button';
30
+ import {useTranslator} from '../i18n';
30
31
 
31
32
  const styles = stylex.create({
32
33
  // Default popover surface — background, radius, shadow.
@@ -309,12 +310,16 @@ export function usePopover(options: UsePopoverOptions = {}): UsePopoverReturn {
309
310
  hasAutoFocus = true,
310
311
  hasSurface = true,
311
312
  hasCloseButton = true,
312
- closeButtonLabel = 'Close popover',
313
+ closeButtonLabel: closeButtonLabelFromProps,
313
314
  dialogLabel,
314
315
  role = 'dialog',
315
316
  isModal = true,
316
317
  } = options;
317
318
 
319
+ const t = useTranslator();
320
+ const closeButtonLabel =
321
+ closeButtonLabelFromProps ?? t('@astryx.popover.close');
322
+
318
323
  // Track the trigger element for returning focus
319
324
  const triggerElementRef = useRef<HTMLElement | null>(null);
320
325
 
@@ -23,7 +23,7 @@ export const docs = {
23
23
  },
24
24
  {
25
25
  name: 'onChange',
26
- type: '(filters: ReadonlyArray<PowerSearchFilter>, changeType: PowerSearchChangeType, index: number) => void',
26
+ type: "(filters: ReadonlyArray<PowerSearchFilter>, changeType: 'add' | 'edit' | 'remove', index: number) => void",
27
27
  description:
28
28
  "Called when filters change. changeType is 'add', 'edit', or 'remove'. index is the affected filter's position.",
29
29
  required: true,
@@ -79,7 +79,7 @@ export const docs = {
79
79
  },
80
80
  {
81
81
  name: 'status',
82
- type: 'InputStatus',
82
+ type: "{type: 'warning' | 'error' | 'success', message?: string}",
83
83
  description:
84
84
  'Validation status object with type and optional message.',
85
85
  },
@@ -145,6 +145,11 @@ export const docs = {
145
145
  { guidance: false, description: 'Wrap a disabled PowerSearch in Tooltip to explain why it is disabled; disabled controls swallow the hover events the wrapper needs. Use the disabledMessage prop instead.' },
146
146
  ],
147
147
  },
148
+ theming: {
149
+ targets: [
150
+ {className: 'astryx-power-search'},
151
+ ],
152
+ },
148
153
  };
149
154
 
150
155
  // -------------------------------------------------------
@@ -172,7 +177,7 @@ export const docsZh = {
172
177
  },
173
178
  {
174
179
  name: 'onChange',
175
- type: '(filters: ReadonlyArray<PowerSearchFilter>, changeType: PowerSearchChangeType, index: number) => void',
180
+ type: "(filters: ReadonlyArray<PowerSearchFilter>, changeType: 'add' | 'edit' | 'remove', index: number) => void",
176
181
  description:
177
182
  "当过滤器变更时调用。changeType 为 'add'、'edit' 或 'remove'。index 为受影响的过滤器位置。",
178
183
  required: true,
@@ -227,7 +232,7 @@ export const docsZh = {
227
232
  },
228
233
  {
229
234
  name: 'status',
230
- type: 'InputStatus',
235
+ type: "{type: 'warning' | 'error' | 'success', message?: string}",
231
236
  description: '带有类型和可选消息的验证状态对象。',
232
237
  },
233
238
  {
@@ -52,7 +52,9 @@ import {useInternalConfig} from './useInternalConfig';
52
52
  import {usePowerSearchSource} from './usePowerSearchSource';
53
53
  import {formatFilterValue} from './formatFilterValue';
54
54
  import {PowerSearchEditPopover} from './PowerSearchEditPopover';
55
+ import {resolveOperatorLabel} from './resolveOperatorLabel';
55
56
  import {themeProps} from '../utils/themeProps';
57
+ import {useTranslator} from '../i18n';
56
58
  import type {
57
59
  PowerSearchConfig,
58
60
  PowerSearchFilter,
@@ -513,9 +515,9 @@ export function PowerSearch({
513
515
  config: configProp,
514
516
  filters,
515
517
  onChange,
516
- label = 'Search',
518
+ label: labelFromProps,
517
519
  isLabelHidden = true,
518
- placeholder = 'Search...',
520
+ placeholder: placeholderFromProps,
519
521
  hasAutoFocus = false,
520
522
  hasClear = true,
521
523
  isReadOnly = false,
@@ -526,7 +528,7 @@ export function PowerSearch({
526
528
  onBlur,
527
529
  status,
528
530
  maxTokenLength = 40,
529
- popoverSaveButtonLabel = 'Apply',
531
+ popoverSaveButtonLabel: popoverSaveButtonLabelFromProps,
530
532
  timezoneID,
531
533
  tokenOverflowBehavior,
532
534
  endContent,
@@ -543,6 +545,12 @@ export function PowerSearch({
543
545
  const size = useSize(sizeProp, 'md');
544
546
  const config = useInternalConfig(configProp);
545
547
  const searchSource = usePowerSearchSource(config);
548
+ const t = useTranslator();
549
+ const label = labelFromProps ?? t('@astryx.powersearch.label');
550
+ const placeholder =
551
+ placeholderFromProps ?? t('@astryx.powersearch.placeholder');
552
+ const popoverSaveButtonLabel =
553
+ popoverSaveButtonLabelFromProps ?? t('@astryx.powersearch.editor.apply');
546
554
  const tokenizerRef = useRef<TokenizerHandle>(null);
547
555
 
548
556
  const [popoverState, setPopoverStateRaw] = useState<PopoverState>({
@@ -598,13 +606,15 @@ export function PowerSearch({
598
606
  return filters.map((filter, index) => {
599
607
  const field = config.getField(filter.field);
600
608
  const operator = config.getOperator(filter.field, filter.operator);
601
- const operatorLabel = operator?.label ? `: ${operator.label}` : '';
609
+ const resolvedOp = operator ? resolveOperatorLabel(operator, t) : '';
610
+ const operatorLabel = resolvedOp ? `: ${resolvedOp}` : '';
602
611
  const valueStr = operator
603
612
  ? formatFilterValue(
604
613
  config,
605
614
  operator.value,
606
615
  filter.value,
607
616
  maxTokenLength,
617
+ t,
608
618
  timezoneID,
609
619
  )
610
620
  : '';
@@ -624,7 +634,7 @@ export function PowerSearch({
624
634
  },
625
635
  };
626
636
  });
627
- }, [filters, config, maxTokenLength, timezoneID]);
637
+ }, [filters, config, maxTokenLength, timezoneID, t]);
628
638
 
629
639
  // Handle tokenizer onChange (field selected from typeahead)
630
640
  const handleTokenizerChange = useCallback(
@@ -787,7 +797,7 @@ export function PowerSearch({
787
797
 
788
798
  // Default token rendering
789
799
  const fieldLabel = field?.label ?? '';
790
- const operatorLabel = operator?.label ?? '';
800
+ const operatorLabel = operator ? resolveOperatorLabel(operator, t) : '';
791
801
  const tokenLabel = `${fieldLabel}: ${operatorLabel}`.trim();
792
802
  const adjustedMaxLength = Math.max(
793
803
  maxTokenLength - fieldLabel.length - operatorLabel.length,
@@ -843,6 +853,7 @@ export function PowerSearch({
843
853
  isDisabled,
844
854
  handleTokenClick,
845
855
  componentOverrides,
856
+ t,
846
857
  ],
847
858
  );
848
859
 
@@ -948,17 +959,18 @@ export function PowerSearch({
948
959
  ]);
949
960
 
950
961
  // Plain-text form of the result count, shared by the visible label and the
951
- // screen-reader announcement so the two never drift.
962
+ // screen-reader announcement so the two never drift. The ICU plural handles
963
+ // the number formatting + `result` vs `results` in one message so translators
964
+ // can match the locale's plural rules.
952
965
  const resultCountText = useMemo((): string | null => {
953
966
  if (resultCount == null) {
954
967
  return null;
955
968
  }
956
969
  if (typeof resultCount === 'number') {
957
- const formatted = new Intl.NumberFormat().format(resultCount);
958
- return `${formatted} ${resultCount === 1 ? 'result' : 'results'}`;
970
+ return t('@astryx.powersearch.resultCount', {count: resultCount});
959
971
  }
960
972
  return resultCount;
961
- }, [resultCount]);
973
+ }, [resultCount, t]);
962
974
 
963
975
  // Announce result-count changes to screen readers through a polite live
964
976
  // region, mirroring the way Typeahead announces its dropdown result count.
@@ -19,8 +19,10 @@ import {Selector} from '../Selector';
19
19
  import {HStack, VStack} from '../Stack';
20
20
  import {Icon} from '../Icon';
21
21
  import {TreeList, type TreeListItemData} from '../TreeList';
22
+ import {useTranslator} from '../i18n';
22
23
  import {spacingVars, typeScaleVars} from '../theme/tokens.stylex';
23
24
  import {PowerSearchValueEditor} from './PowerSearchValueEditor';
25
+ import {resolveOperatorLabel} from './resolveOperatorLabel';
24
26
  import type {InternalConfig} from './useInternalConfig';
25
27
  import type {
26
28
  PowerSearchFilter,
@@ -238,6 +240,7 @@ function NestedSubFilterRow({
238
240
  onChange,
239
241
  isReadOnly,
240
242
  }: NestedSubFilterRowProps) {
243
+ const t = useTranslator();
241
244
  const fieldOptions = useMemo(
242
245
  () =>
243
246
  config.getVisibleFields().map(field => ({
@@ -251,9 +254,9 @@ function NestedSubFilterRow({
251
254
  const operators = config.getVisibleOperators(subFilter.field);
252
255
  return operators.map(op => ({
253
256
  value: op.key,
254
- label: op.label,
257
+ label: resolveOperatorLabel(op, t),
255
258
  }));
256
- }, [config, subFilter.field]);
259
+ }, [config, subFilter.field, t]);
257
260
 
258
261
  const currentOperator = subFilter.operator
259
262
  ? config.getOperator(subFilter.field, subFilter.operator)
@@ -308,7 +311,7 @@ function NestedSubFilterRow({
308
311
  <HStack gap={2} vAlign="center">
309
312
  <div {...stylex.props(styles.nestedFieldSelector)}>
310
313
  <Selector
311
- label="Field"
314
+ label={t('@astryx.powersearch.editor.field')}
312
315
  isLabelHidden
313
316
  options={fieldOptions}
314
317
  value={subFilter.field}
@@ -320,7 +323,7 @@ function NestedSubFilterRow({
320
323
  {operatorOptions.length > 0 && (
321
324
  <div {...stylex.props(styles.nestedOperatorSelector)}>
322
325
  <Selector
323
- label="Operator"
326
+ label={t('@astryx.powersearch.editor.operator')}
324
327
  isLabelHidden
325
328
  options={operatorOptions}
326
329
  value={subFilter.operator}
@@ -366,6 +369,7 @@ function NestedEditor({
366
369
  onPartialFilterChange,
367
370
  isReadOnly,
368
371
  }: NestedEditorProps) {
372
+ const t = useTranslator();
369
373
  const [subFilters, setSubFilters] = useState<EditablePartialFilter[]>(() => {
370
374
  if (partialFilter.value && partialFilter.value.type === 'nested') {
371
375
  return partialFilter.value.value.map(f => initEditableFilter(config, f));
@@ -468,7 +472,7 @@ function NestedEditor({
468
472
  id: `${itemPath.join('-')}-add`,
469
473
  label: (
470
474
  <Button
471
- label="+ Add filter"
475
+ label={t('@astryx.powersearch.editor.addFilter')}
472
476
  onClick={() => handleAdd(itemPath)}
473
477
  variant="ghost"
474
478
  size="sm"
@@ -491,7 +495,7 @@ function NestedEditor({
491
495
  children,
492
496
  endContent: !isReadOnly ? (
493
497
  <Button
494
- label="Remove filter"
498
+ label={t('@astryx.powersearch.editor.removeFilter')}
495
499
  icon={<Icon icon="close" size="sm" />}
496
500
  variant="ghost"
497
501
  size="sm"
@@ -515,7 +519,7 @@ function NestedEditor({
515
519
  ),
516
520
  endContent: !isReadOnly ? (
517
521
  <Button
518
- label="Remove filter"
522
+ label={t('@astryx.powersearch.editor.removeFilter')}
519
523
  icon={<Icon icon="close" size="sm" />}
520
524
  variant="ghost"
521
525
  size="sm"
@@ -536,7 +540,7 @@ function NestedEditor({
536
540
  id: 'add-filter',
537
541
  label: (
538
542
  <Button
539
- label="+ Add filter"
543
+ label={t('@astryx.powersearch.editor.addFilter')}
540
544
  onClick={() => handleAdd([])}
541
545
  variant="ghost"
542
546
  size="sm"
@@ -550,7 +554,7 @@ function NestedEditor({
550
554
  {operatorOptions.length > 1 ? (
551
555
  <div {...stylex.props(styles.operatorSelector)}>
552
556
  <Selector
553
- label="Group operator"
557
+ label={t('@astryx.powersearch.editor.groupOperator')}
554
558
  isLabelHidden
555
559
  options={operatorOptions}
556
560
  value={partialFilter.operator}
@@ -560,7 +564,7 @@ function NestedEditor({
560
564
  />
561
565
  </div>
562
566
  ) : (
563
- (operatorOptions[0]?.label ?? 'Group')
567
+ (operatorOptions[0]?.label ?? t('@astryx.powersearch.editor.group'))
564
568
  )}
565
569
  </div>
566
570
  );
@@ -587,9 +591,12 @@ export function PowerSearchEditPopover({
587
591
  mode,
588
592
  onSave,
589
593
  onCancel,
590
- saveButtonLabel = 'Apply',
594
+ saveButtonLabel: saveButtonLabelFromProps,
591
595
  isReadOnly = false,
592
596
  }: PowerSearchEditPopoverProps) {
597
+ const t = useTranslator();
598
+ const saveButtonLabel =
599
+ saveButtonLabelFromProps ?? t('@astryx.powersearch.editor.apply');
593
600
  const [partialFilter, setPartialFilter] =
594
601
  useState<PartialFilter>(initialFilter);
595
602
  const valueEditorRef = useRef<HTMLDivElement>(null);
@@ -628,9 +635,9 @@ export function PowerSearchEditPopover({
628
635
  const operators = config.getVisibleOperators(partialFilter.field);
629
636
  return operators.map(op => ({
630
637
  value: op.key,
631
- label: op.label,
638
+ label: resolveOperatorLabel(op, t),
632
639
  }));
633
- }, [config, partialFilter.field]);
640
+ }, [config, partialFilter.field, t]);
634
641
 
635
642
  const handleFieldChange = useCallback(
636
643
  (fieldKey: string) => {
@@ -732,7 +739,7 @@ export function PowerSearchEditPopover({
732
739
  <HStack gap={2}>
733
740
  <div {...stylex.props(styles.fieldSelector)}>
734
741
  <Selector
735
- label="Field"
742
+ label={t('@astryx.powersearch.editor.field')}
736
743
  isLabelHidden
737
744
  options={fieldOptions}
738
745
  value={partialFilter.field}
@@ -756,7 +763,7 @@ export function PowerSearchEditPopover({
756
763
  <HStack gap={2} hAlign="between">
757
764
  {!isReadOnly && mode === 'edit' ? (
758
765
  <Button
759
- label="Delete"
766
+ label={t('@astryx.powersearch.editor.delete')}
760
767
  onClick={handleDelete}
761
768
  variant="ghost"
762
769
  size="sm"
@@ -766,7 +773,7 @@ export function PowerSearchEditPopover({
766
773
  )}
767
774
  <HStack gap={2}>
768
775
  <Button
769
- label="Cancel"
776
+ label={t('@astryx.powersearch.editor.cancel')}
770
777
  onClick={onCancel}
771
778
  variant="ghost"
772
779
  size="sm"
@@ -791,7 +798,7 @@ export function PowerSearchEditPopover({
791
798
  <HStack gap={2}>
792
799
  <div {...stylex.props(styles.fieldSelector)}>
793
800
  <Selector
794
- label="Field"
801
+ label={t('@astryx.powersearch.editor.field')}
795
802
  isLabelHidden
796
803
  options={fieldOptions}
797
804
  value={partialFilter.field}
@@ -803,7 +810,7 @@ export function PowerSearchEditPopover({
803
810
  {showOperatorSelector && operatorOptions.length > 0 && (
804
811
  <div {...stylex.props(styles.operatorSelector)}>
805
812
  <Selector
806
- label="Operator"
813
+ label={t('@astryx.powersearch.editor.operator')}
807
814
  isLabelHidden
808
815
  options={operatorOptions}
809
816
  value={partialFilter.operator}
@@ -832,7 +839,7 @@ export function PowerSearchEditPopover({
832
839
  <HStack gap={2} hAlign="between">
833
840
  {!isReadOnly && mode === 'edit' ? (
834
841
  <Button
835
- label="Delete"
842
+ label={t('@astryx.powersearch.editor.delete')}
836
843
  onClick={handleDelete}
837
844
  variant="ghost"
838
845
  size="sm"
@@ -842,7 +849,7 @@ export function PowerSearchEditPopover({
842
849
  )}
843
850
  <HStack gap={2}>
844
851
  <Button
845
- label="Cancel"
852
+ label={t('@astryx.powersearch.editor.cancel')}
846
853
  onClick={onCancel}
847
854
  variant="ghost"
848
855
  size="sm"
@@ -12,8 +12,10 @@
12
12
  import React from 'react';
13
13
  import * as stylex from '@stylexjs/stylex';
14
14
  import {Token} from '../Token';
15
+ import {useTranslator} from '../i18n';
15
16
  import {fontWeightVars} from '../theme/tokens.stylex';
16
17
  import {formatFilterValue} from './formatFilterValue';
18
+ import {resolveOperatorLabel} from './resolveOperatorLabel';
17
19
  import {useInternalConfig} from './useInternalConfig';
18
20
  import type {PowerSearchTokenProps} from './types';
19
21
 
@@ -41,13 +43,17 @@ export function PowerSearchToken({
41
43
  isDisabled,
42
44
  }: PowerSearchTokenProps) {
43
45
  const config = useInternalConfig(configProp);
46
+ const t = useTranslator();
44
47
 
45
48
  const fieldLabel = field.label;
46
- const operatorLabel = operator.label ? `: ${operator.label}` : '';
49
+ const resolvedOperatorLabel = resolveOperatorLabel(operator, t);
50
+ const operatorLabel = resolvedOperatorLabel
51
+ ? `: ${resolvedOperatorLabel}`
52
+ : '';
47
53
  const tokenLabel = `${fieldLabel}${operatorLabel}`;
48
54
 
49
55
  const adjustedMaxLength = Math.max(
50
- maxLength - fieldLabel.length - (operator.label?.length ?? 0),
56
+ maxLength - fieldLabel.length - resolvedOperatorLabel.length,
51
57
  10,
52
58
  );
53
59
 
@@ -56,6 +62,7 @@ export function PowerSearchToken({
56
62
  operator.value,
57
63
  filter.value,
58
64
  adjustedMaxLength,
65
+ t,
59
66
  );
60
67
 
61
68
  const valueContent = valueStr ? (
@@ -66,10 +73,14 @@ export function PowerSearchToken({
66
73
  <Token
67
74
  label={tokenLabel}
68
75
  endContent={valueContent}
69
- onClick={onClick ? (e: React.MouseEvent) => {
70
- e.stopPropagation();
71
- onClick();
72
- } : undefined}
76
+ onClick={
77
+ onClick
78
+ ? (e: React.MouseEvent) => {
79
+ e.stopPropagation();
80
+ onClick();
81
+ }
82
+ : undefined
83
+ }
73
84
  onRemove={onRemove}
74
85
  isDisabled={isDisabled}
75
86
  />