@astryxdesign/core 0.5.0 → 0.5.1-canary.046f6ea

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 (622) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  3. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +45 -20
  5. package/dist/AspectRatio/AspectRatio.d.ts +6 -6
  6. package/dist/Avatar/Avatar.d.ts +25 -1
  7. package/dist/Avatar/Avatar.d.ts.map +1 -1
  8. package/dist/Avatar/Avatar.js +43 -9
  9. package/dist/Avatar/index.d.ts +2 -2
  10. package/dist/Avatar/index.d.ts.map +1 -1
  11. package/dist/Avatar/index.js +1 -1
  12. package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
  13. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  14. package/dist/AvatarGroup/AvatarGroup.js +5 -2
  15. package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
  16. package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
  17. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  18. package/dist/AvatarGroup/AvatarGroupOverflow.js +11 -7
  19. package/dist/Badge/Badge.d.ts.map +1 -1
  20. package/dist/Badge/Badge.js +26 -2
  21. package/dist/Banner/Banner.d.ts +10 -1
  22. package/dist/Banner/Banner.d.ts.map +1 -1
  23. package/dist/Banner/Banner.js +11 -2
  24. package/dist/Button/Button.d.ts.map +1 -1
  25. package/dist/Button/Button.js +8 -7
  26. package/dist/Calendar/Calendar.d.ts +4 -2
  27. package/dist/Calendar/Calendar.d.ts.map +1 -1
  28. package/dist/Calendar/Calendar.js +15 -21
  29. package/dist/Calendar/hooks/useCalendarDays.js +4 -6
  30. package/dist/Calendar/hooks/useCalendarNavigation.js +4 -6
  31. package/dist/Calendar/styles.d.ts +5 -20
  32. package/dist/Calendar/styles.d.ts.map +1 -1
  33. package/dist/Calendar/styles.js +15 -17
  34. package/dist/Card/Card.d.ts +12 -12
  35. package/dist/Card/Card.d.ts.map +1 -1
  36. package/dist/Card/Card.js +17 -9
  37. package/dist/Card/index.d.ts +35 -1
  38. package/dist/Card/index.d.ts.map +1 -1
  39. package/dist/Card/index.js +21 -1
  40. package/dist/Carousel/Carousel.d.ts.map +1 -1
  41. package/dist/Carousel/Carousel.js +108 -7
  42. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.js +7 -1
  44. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  45. package/dist/CodeBlock/CodeBlock.js +15 -4
  46. package/dist/CodeBlock/highlightRanges.js +1 -1
  47. package/dist/CodeBlock/highlightStyles.js +13 -13
  48. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  49. package/dist/CommandPalette/CommandPaletteItem.js +2 -7
  50. package/dist/ComplexSelector/ComplexSelector.d.ts +10 -2
  51. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  52. package/dist/ComplexSelector/ComplexSelector.js +14 -7
  53. package/dist/DateInput/DateInput.d.ts +43 -0
  54. package/dist/DateInput/DateInput.d.ts.map +1 -1
  55. package/dist/DateInput/DateInput.js +22 -5
  56. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  57. package/dist/DateInput/MonthScroller.js +5 -3
  58. package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
  59. package/dist/DateInput/MonthYearWheels.js +6 -4
  60. package/dist/DateInput/NativeDateField.d.ts +10 -0
  61. package/dist/DateInput/NativeDateField.d.ts.map +1 -0
  62. package/dist/DateInput/NativeDateField.js +494 -0
  63. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  64. package/dist/DateInput/TouchDateField.js +52 -25
  65. package/dist/DateInput/Wheel.d.ts.map +1 -1
  66. package/dist/DateInput/Wheel.js +1 -0
  67. package/dist/DateInput/index.d.ts +1 -1
  68. package/dist/DateInput/index.d.ts.map +1 -1
  69. package/dist/DateInput/nativeDateSegments.d.ts +22 -0
  70. package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
  71. package/dist/DateInput/nativeDateSegments.js +111 -0
  72. package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
  73. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  74. package/dist/DateRangeInput/DateRangeInput.js +3 -5
  75. package/dist/DateTimeInput/DateTimeInput.d.ts +23 -24
  76. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  77. package/dist/DateTimeInput/DateTimeInput.js +35 -10
  78. package/dist/DateTimeInput/TouchDateTimeField.d.ts +6 -0
  79. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -0
  80. package/dist/DateTimeInput/TouchDateTimeField.js +1021 -0
  81. package/dist/Dialog/Dialog.d.ts +16 -2
  82. package/dist/Dialog/Dialog.d.ts.map +1 -1
  83. package/dist/Dialog/Dialog.js +28 -7
  84. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  85. package/dist/DropdownMenu/DropdownMenu.js +4 -13
  86. package/dist/Field/FieldLabel.d.ts.map +1 -1
  87. package/dist/Field/FieldLabel.js +9 -1
  88. package/dist/Field/InputClearButton.d.ts +9 -3
  89. package/dist/Field/InputClearButton.d.ts.map +1 -1
  90. package/dist/Field/InputClearButton.js +14 -3
  91. package/dist/Heading/Heading.d.ts.map +1 -1
  92. package/dist/Heading/Heading.js +0 -1
  93. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  94. package/dist/HoverCard/HoverCard.js +104 -3
  95. package/dist/HoverCard/useHoverCard.d.ts +14 -2
  96. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  97. package/dist/HoverCard/useHoverCard.js +7 -1
  98. package/dist/Icon/Icon.d.ts +4 -2
  99. package/dist/Icon/Icon.d.ts.map +1 -1
  100. package/dist/Icon/defaultIcons.d.ts +3 -2
  101. package/dist/Icon/defaultIcons.d.ts.map +1 -1
  102. package/dist/Icon/defaultIcons.js +7 -0
  103. package/dist/Icon/globalIconRegistry.d.ts +13 -0
  104. package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
  105. package/dist/Icon/globalIconRegistry.js +34 -6
  106. package/dist/Icon/index.d.ts +1 -1
  107. package/dist/Icon/index.d.ts.map +1 -1
  108. package/dist/Icon/useIcon.d.ts +5 -2
  109. package/dist/Icon/useIcon.d.ts.map +1 -1
  110. package/dist/Icon/useIcon.js +3 -0
  111. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  112. package/dist/Indicator/CheckboxIndicator.js +6 -2
  113. package/dist/Item/Item.d.ts.map +1 -1
  114. package/dist/Item/Item.js +2 -2
  115. package/dist/Kbd/Kbd.d.ts.map +1 -1
  116. package/dist/Kbd/Kbd.js +2 -26
  117. package/dist/Layer/gestureCounter.d.ts +8 -0
  118. package/dist/Layer/gestureCounter.d.ts.map +1 -0
  119. package/dist/Layer/gestureCounter.js +53 -0
  120. package/dist/Layer/useLayer.d.ts +23 -13
  121. package/dist/Layer/useLayer.d.ts.map +1 -1
  122. package/dist/Layer/useLayer.js +146 -24
  123. package/dist/List/List.d.ts +1 -1
  124. package/dist/List/List.d.ts.map +1 -1
  125. package/dist/List/List.js +15 -4
  126. package/dist/Markdown/Markdown.d.ts +1 -1
  127. package/dist/Markdown/Markdown.d.ts.map +1 -1
  128. package/dist/Markdown/Markdown.js +20 -7
  129. package/dist/Markdown/parser.d.ts.map +1 -1
  130. package/dist/Markdown/parser.js +5 -3
  131. package/dist/MetadataList/MetadataListItem.d.ts +1 -1
  132. package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
  133. package/dist/MetadataList/MetadataListItem.js +4 -1
  134. package/dist/MultiSelector/MultiSelector.d.ts +18 -1
  135. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  136. package/dist/MultiSelector/MultiSelector.js +58 -11
  137. package/dist/MultiSelector/hooks.d.ts +7 -1
  138. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  139. package/dist/MultiSelector/hooks.js +3 -2
  140. package/dist/NavIcon/NavIcon.d.ts.map +1 -1
  141. package/dist/NavIcon/NavIcon.js +5 -1
  142. package/dist/NavItem/navItemStyles.stylex.d.ts +0 -8
  143. package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
  144. package/dist/NavItem/navItemStyles.stylex.js +0 -2
  145. package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
  146. package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
  147. package/dist/NavMenu/NavHeadingMenu.js +7 -4
  148. package/dist/NumberInput/NumberInput.d.ts +6 -1
  149. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  150. package/dist/NumberInput/NumberInput.js +95 -126
  151. package/dist/NumberInput/numberInputCommit.d.ts +34 -0
  152. package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
  153. package/dist/NumberInput/numberInputCommit.js +71 -0
  154. package/dist/NumberInput/numberParser.d.ts +64 -0
  155. package/dist/NumberInput/numberParser.d.ts.map +1 -0
  156. package/dist/NumberInput/numberParser.js +350 -0
  157. package/dist/Outline/Outline.d.ts.map +1 -1
  158. package/dist/Outline/Outline.js +2 -3
  159. package/dist/OverflowList/OverflowList.d.ts +41 -1
  160. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  161. package/dist/OverflowList/OverflowList.js +43 -2
  162. package/dist/Popover/Popover.d.ts.map +1 -1
  163. package/dist/Popover/Popover.js +8 -14
  164. package/dist/Popover/usePopover.d.ts +15 -41
  165. package/dist/Popover/usePopover.d.ts.map +1 -1
  166. package/dist/Popover/usePopover.js +26 -7
  167. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  168. package/dist/PowerSearch/PowerSearchValueEditor.js +91 -18
  169. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  170. package/dist/PowerSearch/formatFilterValue.js +4 -2
  171. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  172. package/dist/ProgressBar/ProgressBar.js +18 -5
  173. package/dist/Resizable/useResizable.d.ts +19 -1
  174. package/dist/Resizable/useResizable.d.ts.map +1 -1
  175. package/dist/Resizable/useResizable.js +104 -38
  176. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  177. package/dist/SelectableCard/SelectableCard.js +9 -0
  178. package/dist/Selector/Selector.d.ts +18 -1
  179. package/dist/Selector/Selector.d.ts.map +1 -1
  180. package/dist/Selector/Selector.js +92 -21
  181. package/dist/Selector/hooks.d.ts +7 -1
  182. package/dist/Selector/hooks.d.ts.map +1 -1
  183. package/dist/Selector/hooks.js +3 -2
  184. package/dist/SideNav/SideNav.d.ts +6 -1
  185. package/dist/SideNav/SideNav.d.ts.map +1 -1
  186. package/dist/SideNav/SideNav.js +57 -27
  187. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  188. package/dist/SideNav/SideNavHeading.js +5 -4
  189. package/dist/SideNav/SideNavItem.d.ts +29 -4
  190. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  191. package/dist/SideNav/SideNavItem.js +75 -20
  192. package/dist/Slider/Slider.d.ts.map +1 -1
  193. package/dist/Slider/Slider.js +34 -2
  194. package/dist/Spinner/Spinner.d.ts +3 -1
  195. package/dist/Spinner/Spinner.d.ts.map +1 -1
  196. package/dist/Spinner/Spinner.js +199 -20
  197. package/dist/StatusDot/StatusDot.d.ts.map +1 -1
  198. package/dist/StatusDot/StatusDot.js +6 -1
  199. package/dist/Stepper/Step.d.ts.map +1 -1
  200. package/dist/Stepper/Step.js +7 -6
  201. package/dist/Switch/Switch.d.ts.map +1 -1
  202. package/dist/Switch/Switch.js +5 -1
  203. package/dist/Table/BaseTable.d.ts.map +1 -1
  204. package/dist/Table/BaseTable.js +6 -1
  205. package/dist/Table/Table.d.ts.map +1 -1
  206. package/dist/Table/Table.js +3 -6
  207. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  208. package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
  209. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
  210. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  211. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +34 -3
  212. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  213. package/dist/Table/plugins/selection/useTableSelection.js +25 -1
  214. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  215. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
  216. package/dist/Text/Text.d.ts.map +1 -1
  217. package/dist/Text/Text.js +0 -1
  218. package/dist/TextArea/TextArea.d.ts.map +1 -1
  219. package/dist/TextArea/TextArea.js +13 -8
  220. package/dist/Timestamp/Timestamp.d.ts +1 -1
  221. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  222. package/dist/Timestamp/Timestamp.js +10 -18
  223. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  224. package/dist/Timestamp/formatInstant.js +10 -5
  225. package/dist/Toast/Toast.d.ts +17 -2
  226. package/dist/Toast/Toast.d.ts.map +1 -1
  227. package/dist/Toast/Toast.js +77 -11
  228. package/dist/Toast/ToastViewport.d.ts +1 -0
  229. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  230. package/dist/Toast/ToastViewport.js +76 -21
  231. package/dist/Toast/index.d.ts +1 -1
  232. package/dist/Toast/index.d.ts.map +1 -1
  233. package/dist/Toast/types.d.ts +38 -0
  234. package/dist/Toast/types.d.ts.map +1 -1
  235. package/dist/Toast/useToastGesture.d.ts +26 -0
  236. package/dist/Toast/useToastGesture.d.ts.map +1 -0
  237. package/dist/Toast/useToastGesture.js +223 -0
  238. package/dist/Token/Token.d.ts +1 -1
  239. package/dist/Token/Token.d.ts.map +1 -1
  240. package/dist/Token/Token.js +23 -12
  241. package/dist/Token/TokenLink.d.ts +1 -1
  242. package/dist/Token/TokenLink.d.ts.map +1 -1
  243. package/dist/Token/TokenLink.js +5 -2
  244. package/dist/Tokenizer/Tokenizer.d.ts +12 -1
  245. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  246. package/dist/Tokenizer/Tokenizer.js +31 -21
  247. package/dist/TopNav/TopNavHeading.js +2 -2
  248. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  249. package/dist/TopNav/TopNavItem.js +3 -3
  250. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  251. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  252. package/dist/TopNav/TopNavMegaMenu.js +30 -9
  253. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  254. package/dist/TopNav/TopNavMegaMenuItem.js +3 -3
  255. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  256. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  257. package/dist/TopNav/TopNavMenu.js +21 -6
  258. package/dist/TreeList/TreeList.d.ts +1 -1
  259. package/dist/TreeList/TreeList.d.ts.map +1 -1
  260. package/dist/TreeList/TreeList.js +7 -2
  261. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  262. package/dist/TreeList/TreeListItem.js +2 -2
  263. package/dist/Typeahead/BaseTypeahead.d.ts +33 -0
  264. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  265. package/dist/Typeahead/BaseTypeahead.js +51 -8
  266. package/dist/Typeahead/Typeahead.d.ts +8 -1
  267. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  268. package/dist/Typeahead/Typeahead.js +2 -0
  269. package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
  270. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  271. package/dist/Typeahead/TypeaheadItem.js +7 -2
  272. package/dist/astryx.css +87 -22
  273. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  274. package/dist/hooks/useHotkeys.js +3 -25
  275. package/dist/hooks/useOverflow.d.ts.map +1 -1
  276. package/dist/hooks/useOverflow.js +14 -4
  277. package/dist/i18n/InternationalizationContext.d.ts +2 -0
  278. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  279. package/dist/i18n/InternationalizationContext.js +3 -1
  280. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  281. package/dist/i18n/InternationalizationProvider.js +3 -1
  282. package/dist/i18n/resolve.d.ts +1 -1
  283. package/dist/i18n/resolve.d.ts.map +1 -1
  284. package/dist/i18n/resolve.js +37 -38
  285. package/dist/i18n/useTranslator.d.ts.map +1 -1
  286. package/dist/i18n/useTranslator.js +2 -3
  287. package/dist/index.d.ts +1 -1
  288. package/dist/index.d.ts.map +1 -1
  289. package/dist/theme/Theme.d.ts.map +1 -1
  290. package/dist/theme/Theme.js +46 -10
  291. package/dist/theme/defineTheme.d.ts +9 -3
  292. package/dist/theme/defineTheme.d.ts.map +1 -1
  293. package/dist/theme/defineTheme.js +5 -0
  294. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  295. package/dist/theme/derivedVarRegistry.js +24 -4
  296. package/dist/theme/generateThemeRules.d.ts +21 -0
  297. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  298. package/dist/theme/generateThemeRules.js +26 -0
  299. package/dist/theme/syntax/tokens.d.ts +1 -1
  300. package/dist/theme/syntax/tokens.d.ts.map +1 -1
  301. package/dist/theme/syntax/tokens.js +5 -2
  302. package/dist/theme/useTheme.d.ts.map +1 -1
  303. package/dist/theme/useTheme.js +6 -7
  304. package/dist/utils/dateParser.d.ts +5 -8
  305. package/dist/utils/dateParser.d.ts.map +1 -1
  306. package/dist/utils/dateParser.js +10 -11
  307. package/dist/utils/focusOutline.stylex.d.ts +25 -0
  308. package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
  309. package/dist/utils/focusOutline.stylex.js +15 -0
  310. package/dist/utils/interactionOverlay.stylex.d.ts +26 -0
  311. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -0
  312. package/dist/utils/interactionOverlay.stylex.js +42 -0
  313. package/dist/utils/isApplePlatform.d.ts +18 -0
  314. package/dist/utils/isApplePlatform.d.ts.map +1 -0
  315. package/dist/utils/isApplePlatform.js +37 -0
  316. package/dist/utils/plainDate.d.ts +11 -0
  317. package/dist/utils/plainDate.d.ts.map +1 -1
  318. package/dist/utils/plainDate.js +20 -4
  319. package/locales/af-ZA.json +7 -7
  320. package/locales/ar-SA.json +7 -7
  321. package/locales/ca-ES.json +6 -6
  322. package/locales/cs-CZ.json +7 -7
  323. package/locales/da-DK.json +7 -7
  324. package/locales/de-DE.json +7 -7
  325. package/locales/el-GR.json +7 -7
  326. package/locales/en.json +178 -6
  327. package/locales/es-ES.json +6 -6
  328. package/locales/fi-FI.json +7 -7
  329. package/locales/fr-FR.json +7 -7
  330. package/locales/he-IL.json +7 -7
  331. package/locales/hu-HU.json +7 -7
  332. package/locales/it-IT.json +7 -7
  333. package/locales/ja-JP.json +7 -7
  334. package/locales/ko-KR.json +7 -7
  335. package/locales/nl-NL.json +7 -7
  336. package/locales/no-NO.json +7 -7
  337. package/locales/pl-PL.json +7 -7
  338. package/locales/pseudo.json +130 -1
  339. package/locales/pt-BR.json +7 -7
  340. package/locales/pt-PT.json +7 -7
  341. package/locales/ro-RO.json +7 -7
  342. package/locales/ru-RU.json +7 -7
  343. package/locales/sr-SP.json +7 -7
  344. package/locales/sv-SE.json +7 -7
  345. package/locales/tr-TR.json +7 -7
  346. package/locales/uk-UA.json +7 -7
  347. package/locales/vi-VN.json +7 -7
  348. package/locales/zh-CN.json +7 -7
  349. package/locales/zh-TW.json +7 -7
  350. package/package.json +4 -5
  351. package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
  352. package/src/AlertDialog/AlertDialog.test.tsx +211 -2
  353. package/src/AlertDialog/AlertDialog.tsx +62 -20
  354. package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
  355. package/src/AspectRatio/AspectRatio.tsx +6 -6
  356. package/src/Avatar/Avatar.doc.mjs +12 -2
  357. package/src/Avatar/Avatar.test.tsx +80 -0
  358. package/src/Avatar/Avatar.tsx +64 -14
  359. package/src/Avatar/index.ts +2 -2
  360. package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
  361. package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
  362. package/src/AvatarGroup/AvatarGroup.tsx +12 -4
  363. package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
  364. package/src/AvatarGroup/AvatarGroupOverflow.tsx +12 -12
  365. package/src/Badge/Badge.doc.mjs +3 -2
  366. package/src/Badge/Badge.test.tsx +32 -3
  367. package/src/Badge/Badge.tsx +42 -1
  368. package/src/Banner/Banner.doc.mjs +9 -0
  369. package/src/Banner/Banner.test.tsx +76 -11
  370. package/src/Banner/Banner.tsx +21 -2
  371. package/src/Button/Button.doc.mjs +2 -1
  372. package/src/Button/Button.test.tsx +19 -4
  373. package/src/Button/Button.tsx +9 -29
  374. package/src/ButtonGroup/ButtonGroup.doc.mjs +2 -2
  375. package/src/ButtonGroup/ButtonGroup.test.tsx +13 -0
  376. package/src/Calendar/Calendar.doc.mjs +4 -4
  377. package/src/Calendar/Calendar.test.tsx +112 -0
  378. package/src/Calendar/Calendar.tsx +18 -16
  379. package/src/Calendar/hooks/useCalendarDays.ts +4 -4
  380. package/src/Calendar/hooks/useCalendarNavigation.ts +4 -4
  381. package/src/Calendar/styles.ts +48 -42
  382. package/src/Card/Card.doc.mjs +10 -7
  383. package/src/Card/Card.test.tsx +113 -19
  384. package/src/Card/Card.tsx +67 -89
  385. package/src/Card/index.ts +36 -1
  386. package/src/Carousel/Carousel.doc.mjs +3 -0
  387. package/src/Carousel/Carousel.test.tsx +360 -0
  388. package/src/Carousel/Carousel.tsx +116 -15
  389. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -1
  390. package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
  391. package/src/CheckboxInput/CheckboxInput.tsx +5 -0
  392. package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
  393. package/src/CodeBlock/CodeBlock.doc.mjs +10 -4
  394. package/src/CodeBlock/CodeBlock.test.tsx +37 -0
  395. package/src/CodeBlock/CodeBlock.tsx +20 -4
  396. package/src/CodeBlock/highlightRanges.ts +1 -1
  397. package/src/CodeBlock/highlightStyles.ts +13 -13
  398. package/src/CommandPalette/CommandPaletteItem.tsx +2 -12
  399. package/src/ComplexSelector/ComplexSelector.doc.mjs +9 -2
  400. package/src/ComplexSelector/ComplexSelector.test.tsx +183 -0
  401. package/src/ComplexSelector/ComplexSelector.tsx +22 -12
  402. package/src/DateInput/DateInput.doc.mjs +17 -1
  403. package/src/DateInput/DateInput.test.tsx +9 -4
  404. package/src/DateInput/DateInput.tsx +54 -3
  405. package/src/DateInput/DateInputTouch.test.tsx +146 -32
  406. package/src/DateInput/MonthScroller.tsx +5 -1
  407. package/src/DateInput/MonthYearWheels.tsx +7 -4
  408. package/src/DateInput/NativeDateField.test.tsx +635 -0
  409. package/src/DateInput/NativeDateField.tsx +641 -0
  410. package/src/DateInput/TouchDateField.tsx +83 -33
  411. package/src/DateInput/Wheel.tsx +1 -0
  412. package/src/DateInput/index.ts +1 -0
  413. package/src/DateInput/nativeDateSegments.ts +127 -0
  414. package/src/DateRangeInput/DateRangeInput.doc.mjs +3 -3
  415. package/src/DateRangeInput/DateRangeInput.test.tsx +46 -0
  416. package/src/DateRangeInput/DateRangeInput.tsx +8 -13
  417. package/src/DateTimeInput/DateTimeInput.doc.mjs +39 -22
  418. package/src/DateTimeInput/DateTimeInput.test.tsx +76 -0
  419. package/src/DateTimeInput/DateTimeInput.tsx +54 -20
  420. package/src/DateTimeInput/DateTimeInputTouch.test.tsx +980 -0
  421. package/src/DateTimeInput/TouchDateTimeField.tsx +1437 -0
  422. package/src/Dialog/Dialog.test.tsx +185 -18
  423. package/src/Dialog/Dialog.tsx +35 -11
  424. package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
  425. package/src/DropdownMenu/DropdownMenu.tsx +4 -13
  426. package/src/Field/Field.doc.mjs +1 -1
  427. package/src/Field/FieldLabel.test.tsx +29 -0
  428. package/src/Field/FieldLabel.tsx +7 -0
  429. package/src/Field/InputClearButton.test.tsx +15 -1
  430. package/src/Field/InputClearButton.tsx +28 -4
  431. package/src/FieldStatus/FieldStatus.doc.mjs +1 -1
  432. package/src/FileInput/FileInput.doc.mjs +1 -1
  433. package/src/Heading/Heading.tsx +0 -1
  434. package/src/HoverCard/HoverCard.doc.mjs +8 -2
  435. package/src/HoverCard/HoverCard.test.tsx +154 -4
  436. package/src/HoverCard/HoverCard.tsx +137 -3
  437. package/src/HoverCard/useHoverCard.tsx +23 -3
  438. package/src/Icon/Icon.test.tsx +55 -1
  439. package/src/Icon/Icon.tsx +5 -3
  440. package/src/Icon/defaultIcons.tsx +11 -2
  441. package/src/Icon/globalIconRegistry.test.tsx +16 -3
  442. package/src/Icon/globalIconRegistry.tsx +37 -6
  443. package/src/Icon/index.ts +1 -0
  444. package/src/Icon/useIcon.ts +9 -2
  445. package/src/Indicator/CheckboxIndicator.tsx +14 -8
  446. package/src/Indicator/Indicator.doc.mjs +3 -1
  447. package/src/InputGroup/InputGroup.doc.mjs +1 -1
  448. package/src/Item/Item.tsx +2 -7
  449. package/src/Kbd/Kbd.test.tsx +0 -17
  450. package/src/Kbd/Kbd.tsx +2 -26
  451. package/src/Layer/gestureCounter.ts +57 -0
  452. package/src/Layer/useLayer.test.tsx +368 -16
  453. package/src/Layer/useLayer.tsx +208 -35
  454. package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
  455. package/src/List/List.test.tsx +38 -0
  456. package/src/List/List.tsx +8 -1
  457. package/src/Markdown/Markdown.test.tsx +37 -0
  458. package/src/Markdown/Markdown.tsx +16 -5
  459. package/src/Markdown/parser.test.ts +33 -0
  460. package/src/Markdown/parser.ts +9 -3
  461. package/src/MetadataList/MetadataList.test.tsx +75 -2
  462. package/src/MetadataList/MetadataListItem.tsx +5 -2
  463. package/src/MultiSelector/MultiSelector.doc.mjs +23 -2
  464. package/src/MultiSelector/MultiSelector.test.tsx +205 -0
  465. package/src/MultiSelector/MultiSelector.tsx +103 -16
  466. package/src/MultiSelector/hooks.ts +9 -2
  467. package/src/NavIcon/NavIcon.doc.mjs +8 -2
  468. package/src/NavIcon/NavIcon.test.tsx +9 -0
  469. package/src/NavIcon/NavIcon.tsx +5 -1
  470. package/src/NavItem/navItemStyles.stylex.ts +0 -8
  471. package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
  472. package/src/NavMenu/NavHeadingMenu.tsx +7 -4
  473. package/src/NumberInput/NumberInput.doc.mjs +27 -8
  474. package/src/NumberInput/NumberInput.test.tsx +563 -8
  475. package/src/NumberInput/NumberInput.tsx +77 -131
  476. package/src/NumberInput/numberInputCommit.test.ts +72 -0
  477. package/src/NumberInput/numberInputCommit.ts +103 -0
  478. package/src/NumberInput/numberParser.docblock.test.ts +234 -0
  479. package/src/NumberInput/numberParser.test.ts +222 -0
  480. package/src/NumberInput/numberParser.ts +403 -0
  481. package/src/Outline/Outline.tsx +2 -4
  482. package/src/OverflowList/OverflowList.doc.mjs +102 -21
  483. package/src/OverflowList/OverflowList.test.tsx +550 -4
  484. package/src/OverflowList/OverflowList.tsx +100 -2
  485. package/src/Pagination/Pagination.test.tsx +3 -2
  486. package/src/Popover/Popover.doc.mjs +2 -2
  487. package/src/Popover/Popover.test.tsx +38 -0
  488. package/src/Popover/Popover.tsx +28 -66
  489. package/src/Popover/usePopover.tsx +44 -5
  490. package/src/PowerSearch/PowerSearch.doc.mjs +1 -1
  491. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +87 -0
  492. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +64 -0
  493. package/src/PowerSearch/PowerSearchValueEditor.tsx +109 -10
  494. package/src/PowerSearch/formatFilterValue.test.ts +16 -1
  495. package/src/PowerSearch/formatFilterValue.ts +2 -0
  496. package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
  497. package/src/ProgressBar/ProgressBar.test.tsx +24 -0
  498. package/src/ProgressBar/ProgressBar.tsx +28 -8
  499. package/src/RadioList/RadioList.doc.mjs +1 -1
  500. package/src/Resizable/Resizable.doc.mjs +2 -2
  501. package/src/Resizable/useResizable.doc.mjs +21 -2
  502. package/src/Resizable/useResizable.test.ts +421 -0
  503. package/src/Resizable/useResizable.ts +133 -48
  504. package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
  505. package/src/SelectableCard/SelectableCard.tsx +16 -0
  506. package/src/Selector/Selector.doc.mjs +15 -1
  507. package/src/Selector/Selector.source-build.test.mjs +65 -0
  508. package/src/Selector/Selector.test.tsx +301 -0
  509. package/src/Selector/Selector.tsx +145 -32
  510. package/src/Selector/hooks.ts +17 -2
  511. package/src/SideNav/SideNav.doc.mjs +2 -2
  512. package/src/SideNav/SideNav.test.tsx +1069 -6
  513. package/src/SideNav/SideNav.tsx +109 -38
  514. package/src/SideNav/SideNavHeading.tsx +5 -2
  515. package/src/SideNav/SideNavItem.doc.mjs +24 -3
  516. package/src/SideNav/SideNavItem.tsx +134 -44
  517. package/src/Slider/Slider.doc.mjs +2 -2
  518. package/src/Slider/Slider.test.tsx +106 -1
  519. package/src/Slider/Slider.tsx +52 -1
  520. package/src/Spinner/Spinner.doc.mjs +17 -5
  521. package/src/Spinner/Spinner.test.tsx +164 -0
  522. package/src/Spinner/Spinner.tsx +252 -22
  523. package/src/StatusDot/StatusDot.doc.mjs +8 -2
  524. package/src/StatusDot/StatusDot.test.tsx +9 -0
  525. package/src/StatusDot/StatusDot.tsx +7 -1
  526. package/src/Stepper/Step.doc.mjs +1 -1
  527. package/src/Stepper/Step.tsx +7 -14
  528. package/src/Switch/Switch.doc.mjs +3 -1
  529. package/src/Switch/Switch.test.tsx +10 -0
  530. package/src/Switch/Switch.tsx +3 -0
  531. package/src/Table/BaseTable.tsx +6 -1
  532. package/src/Table/Table.doc.mjs +5 -3
  533. package/src/Table/Table.tsx +3 -8
  534. package/src/Table/TableBody.doc.mjs +2 -2
  535. package/src/Table/TableFooter.doc.mjs +1 -1
  536. package/src/Table/TableHeader.doc.mjs +1 -1
  537. package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
  538. package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
  539. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +50 -4
  540. package/src/Table/plugins/selection/useTableSelection.test.tsx +62 -0
  541. package/src/Table/plugins/selection/useTableSelection.tsx +25 -2
  542. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
  543. package/src/Table/useTableGroupedRows.doc.mjs +3 -3
  544. package/src/Table/useTablePagination.doc.mjs +1 -1
  545. package/src/Table/useTableSelection.doc.mjs +1 -1
  546. package/src/Text/Text.test.tsx +44 -0
  547. package/src/Text/Text.tsx +0 -1
  548. package/src/TextArea/TextArea.doc.mjs +13 -3
  549. package/src/TextArea/TextArea.test.tsx +11 -0
  550. package/src/TextArea/TextArea.tsx +34 -22
  551. package/src/TextInput/TextInput.doc.mjs +1 -1
  552. package/src/TimeInput/TimeInput.doc.mjs +1 -1
  553. package/src/Timestamp/Timestamp.test.tsx +89 -0
  554. package/src/Timestamp/Timestamp.tsx +8 -8
  555. package/src/Timestamp/formatInstant.ts +5 -0
  556. package/src/Toast/Toast.doc.mjs +213 -44
  557. package/src/Toast/Toast.tsx +118 -23
  558. package/src/Toast/ToastViewport.test.tsx +1434 -8
  559. package/src/Toast/ToastViewport.tsx +85 -14
  560. package/src/Toast/index.ts +2 -0
  561. package/src/Toast/types.ts +43 -5
  562. package/src/Toast/useToastGesture.ts +361 -0
  563. package/src/Token/Token.test.tsx +95 -0
  564. package/src/Token/Token.tsx +19 -17
  565. package/src/Token/TokenLink.tsx +12 -3
  566. package/src/Tokenizer/Tokenizer.doc.mjs +17 -4
  567. package/src/Tokenizer/Tokenizer.test.tsx +161 -0
  568. package/src/Tokenizer/Tokenizer.tsx +49 -24
  569. package/src/TopNav/TopNavHeading.tsx +2 -2
  570. package/src/TopNav/TopNavItem.tsx +3 -7
  571. package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
  572. package/src/TopNav/TopNavMegaMenu.tsx +47 -4
  573. package/src/TopNav/TopNavMegaMenuItem.tsx +10 -9
  574. package/src/TopNav/TopNavMenu.test.tsx +133 -1
  575. package/src/TopNav/TopNavMenu.tsx +38 -5
  576. package/src/TreeList/TreeList.test.tsx +49 -0
  577. package/src/TreeList/TreeList.tsx +7 -2
  578. package/src/TreeList/TreeListItem.tsx +2 -7
  579. package/src/Typeahead/BaseTypeahead.doc.mjs +13 -0
  580. package/src/Typeahead/BaseTypeahead.tsx +96 -6
  581. package/src/Typeahead/Typeahead.doc.mjs +7 -1
  582. package/src/Typeahead/Typeahead.test.tsx +154 -0
  583. package/src/Typeahead/Typeahead.tsx +9 -0
  584. package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
  585. package/src/Typeahead/TypeaheadItem.tsx +8 -1
  586. package/src/hooks/useAnnounce.doc.mjs +96 -0
  587. package/src/hooks/useDevWarning.doc.mjs +96 -0
  588. package/src/hooks/useHotkeys.test.ts +0 -18
  589. package/src/hooks/useHotkeys.ts +3 -25
  590. package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
  591. package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
  592. package/src/hooks/useInteractiveRole.doc.mjs +119 -0
  593. package/src/hooks/useLongPress.doc.mjs +123 -0
  594. package/src/hooks/useOverflow.doc.mjs +58 -17
  595. package/src/hooks/useOverflow.ts +16 -4
  596. package/src/hooks/useTypeahead.doc.mjs +153 -0
  597. package/src/i18n/InternationalizationContext.ts +3 -0
  598. package/src/i18n/InternationalizationProvider.tsx +8 -1
  599. package/src/i18n/__tests__/resolve.test.ts +23 -1
  600. package/src/i18n/resolve.ts +46 -49
  601. package/src/i18n/useTranslator.ts +2 -7
  602. package/src/index.ts +2 -0
  603. package/src/raw-import.d.ts +14 -0
  604. package/src/theme/Theme.test.tsx +104 -2
  605. package/src/theme/Theme.tsx +49 -14
  606. package/src/theme/defineTheme.test.ts +23 -0
  607. package/src/theme/defineTheme.ts +12 -3
  608. package/src/theme/derivedVarRegistry.test.ts +87 -3
  609. package/src/theme/derivedVarRegistry.ts +23 -4
  610. package/src/theme/generateThemeRules.test.ts +99 -1
  611. package/src/theme/generateThemeRules.ts +28 -0
  612. package/src/theme/syntax/tokens.ts +5 -2
  613. package/src/theme/useTheme.test.tsx +10 -0
  614. package/src/theme/useTheme.ts +16 -10
  615. package/src/utils/dateParser.test.ts +34 -2
  616. package/src/utils/dateParser.ts +11 -14
  617. package/src/utils/focusOutline.stylex.ts +50 -0
  618. package/src/utils/interactionOverlay.stylex.ts +74 -0
  619. package/src/utils/isApplePlatform.test.ts +61 -0
  620. package/src/utils/isApplePlatform.ts +37 -0
  621. package/src/utils/plainDate.test.ts +46 -0
  622. package/src/utils/plainDate.ts +18 -3
@@ -182,6 +182,70 @@ describe('StringEditor (#1103)', () => {
182
182
  });
183
183
  });
184
184
 
185
+ describe('numeric editor commit timing', () => {
186
+ it('saves the committed number when Enter finishes the edit', () => {
187
+ const onChange = vi.fn();
188
+ const onEnter = vi.fn();
189
+ render(
190
+ <PowerSearchValueEditor
191
+ operatorValue={{type: 'integer'}}
192
+ filterValue={{type: 'integer', value: 5}}
193
+ onChange={onChange}
194
+ onEnter={onEnter}
195
+ config={stubConfig}
196
+ />,
197
+ );
198
+ const input = screen.getByRole('spinbutton');
199
+ fireEvent.focus(input);
200
+ fireEvent.input(input, {target: {value: '42'}});
201
+ fireEvent.keyDown(input, {key: 'Enter'});
202
+
203
+ expect(onChange).toHaveBeenLastCalledWith(
204
+ {type: 'integer', value: 42},
205
+ true,
206
+ );
207
+ expect(onEnter).not.toHaveBeenCalled();
208
+ });
209
+
210
+ it('does not save an invalid numeric draft on Enter', () => {
211
+ const onChange = vi.fn();
212
+ const onEnter = vi.fn();
213
+ render(
214
+ <PowerSearchValueEditor
215
+ operatorValue={{type: 'integer'}}
216
+ filterValue={{type: 'integer', value: 5}}
217
+ onChange={onChange}
218
+ onEnter={onEnter}
219
+ config={stubConfig}
220
+ />,
221
+ );
222
+ const input = screen.getByRole('spinbutton');
223
+ fireEvent.focus(input);
224
+ fireEvent.input(input, {target: {value: '1·234'}});
225
+ fireEvent.keyDown(input, {key: 'Enter'});
226
+
227
+ expect(onChange).not.toHaveBeenCalled();
228
+ expect(onEnter).not.toHaveBeenCalled();
229
+ expect(input).toHaveValue('1·234');
230
+ });
231
+
232
+ it('keeps the existing Enter callback when there is no pending edit', () => {
233
+ const onEnter = vi.fn();
234
+ render(
235
+ <PowerSearchValueEditor
236
+ operatorValue={{type: 'float'}}
237
+ filterValue={{type: 'float', value: 1.5}}
238
+ onChange={() => {}}
239
+ onEnter={onEnter}
240
+ config={stubConfig}
241
+ />,
242
+ );
243
+
244
+ fireEvent.keyDown(screen.getByRole('spinbutton'), {key: 'Enter'});
245
+ expect(onEnter).toHaveBeenCalledTimes(1);
246
+ });
247
+ });
248
+
185
249
  // =============================================================================
186
250
  // #1106 — EntityListEditor drops photo, no renderItem
187
251
  // =============================================================================
@@ -12,7 +12,13 @@
12
12
  * - /packages/core/src/PowerSearch/index.ts
13
13
  */
14
14
 
15
- import React, {useCallback, useMemo} from 'react';
15
+ import React, {
16
+ useCallback,
17
+ useMemo,
18
+ useRef,
19
+ type FormEvent,
20
+ type KeyboardEvent,
21
+ } from 'react';
16
22
  import type {
17
23
  OperatorValue,
18
24
  FilterValue,
@@ -27,12 +33,16 @@ import type {ISOTimeString} from '../utils';
27
33
  // Lazy import to avoid circular deps — these are all from the same package
28
34
  import {TextInput} from '../TextInput';
29
35
  import {NumberInput} from '../NumberInput';
36
+ import {
37
+ resolveNumberInputCommit,
38
+ type NumberInputCommitDecision,
39
+ } from '../NumberInput/numberInputCommit';
30
40
  import {DateInput} from '../DateInput';
31
41
  import {TimeInput} from '../TimeInput';
32
42
  import {Selector} from '../Selector';
33
43
  import {Tokenizer} from '../Tokenizer';
34
44
  import {Typeahead} from '../Typeahead';
35
- import {useTranslator} from '../i18n';
45
+ import {useLocale, useTranslator} from '../i18n';
36
46
 
37
47
  export interface PowerSearchValueEditorProps {
38
48
  operatorValue: OperatorValue;
@@ -188,27 +198,102 @@ function StringListEditor({
188
198
  );
189
199
  }
190
200
 
201
+ function useNumberEditorHandlers({
202
+ valueType,
203
+ min,
204
+ max,
205
+ isIntegerOnly,
206
+ onChange,
207
+ onEnter,
208
+ }: {
209
+ valueType: 'integer' | 'float';
210
+ min?: number;
211
+ max?: number;
212
+ isIntegerOnly: boolean;
213
+ onChange: (value: FilterValue, shouldSave?: boolean) => void;
214
+ onEnter?: () => void;
215
+ }) {
216
+ const locale = useLocale();
217
+ const pendingDecisionRef = useRef<NumberInputCommitDecision | null>(null);
218
+ const toFilterValue = useCallback(
219
+ (value: number): FilterValue =>
220
+ valueType === 'integer'
221
+ ? {type: 'integer', value}
222
+ : {type: 'float', value},
223
+ [valueType],
224
+ );
225
+ const handleChange = useCallback(
226
+ (value: number) => {
227
+ onChange(toFilterValue(value));
228
+ },
229
+ [onChange, toFilterValue],
230
+ );
231
+ const handleFocus = useCallback(() => {
232
+ pendingDecisionRef.current = null;
233
+ }, []);
234
+ const handleInput = useCallback(
235
+ (event: FormEvent<HTMLElement>) => {
236
+ pendingDecisionRef.current = resolveNumberInputCommit(
237
+ (event.currentTarget as HTMLInputElement).value,
238
+ {min, max, isIntegerOnly, locale, hasClear: false},
239
+ );
240
+ },
241
+ [isIntegerOnly, locale, max, min],
242
+ );
243
+ const handleEnter = useCallback(() => {
244
+ const decision = pendingDecisionRef.current;
245
+ pendingDecisionRef.current = null;
246
+ if (decision === null) {
247
+ onEnter?.();
248
+ } else if (decision.type === 'commit') {
249
+ onChange(toFilterValue(decision.value), true);
250
+ }
251
+ }, [onChange, onEnter, toFilterValue]);
252
+ const handleKeyDown = useCallback(
253
+ (event: KeyboardEvent<HTMLInputElement>) => {
254
+ if (event.key === 'Enter') {
255
+ event.stopPropagation();
256
+ }
257
+ },
258
+ [],
259
+ );
260
+
261
+ return {handleChange, handleEnter, handleFocus, handleInput, handleKeyDown};
262
+ }
263
+
191
264
  function IntegerEditor({
192
265
  operatorValue,
193
266
  filterValue,
194
267
  onChange,
268
+ onEnter,
195
269
  }: {
196
270
  operatorValue: OperatorValue & {type: 'integer'};
197
271
  filterValue: FilterValue | undefined;
198
- onChange: (value: FilterValue) => void;
272
+ onChange: (value: FilterValue, shouldSave?: boolean) => void;
273
+ onEnter?: () => void;
199
274
  }) {
200
275
  const t = useTranslator();
201
276
  const currentValue =
202
277
  filterValue?.type === 'integer' ? filterValue.value : undefined;
278
+ const handlers = useNumberEditorHandlers({
279
+ valueType: 'integer',
280
+ min: operatorValue.minValue,
281
+ max: operatorValue.maxValue,
282
+ isIntegerOnly: true,
283
+ onChange,
284
+ onEnter,
285
+ });
203
286
 
204
287
  return (
205
288
  <NumberInput
206
289
  label={t('@astryx.powersearch.valueEditor.value')}
207
290
  isLabelHidden
208
291
  value={currentValue ?? null}
209
- onChange={(value: number) => {
210
- onChange({type: 'integer', value});
211
- }}
292
+ onChange={handlers.handleChange}
293
+ onFocus={handlers.handleFocus}
294
+ onInput={handlers.handleInput}
295
+ onEnter={handlers.handleEnter}
296
+ onKeyDown={handlers.handleKeyDown}
212
297
  min={operatorValue.minValue}
213
298
  max={operatorValue.maxValue}
214
299
  units={operatorValue.units}
@@ -222,23 +307,35 @@ function FloatEditor({
222
307
  operatorValue,
223
308
  filterValue,
224
309
  onChange,
310
+ onEnter,
225
311
  }: {
226
312
  operatorValue: OperatorValue & {type: 'float'};
227
313
  filterValue: FilterValue | undefined;
228
- onChange: (value: FilterValue) => void;
314
+ onChange: (value: FilterValue, shouldSave?: boolean) => void;
315
+ onEnter?: () => void;
229
316
  }) {
230
317
  const t = useTranslator();
231
318
  const currentValue =
232
319
  filterValue?.type === 'float' ? filterValue.value : undefined;
320
+ const handlers = useNumberEditorHandlers({
321
+ valueType: 'float',
322
+ min: operatorValue.minValue,
323
+ max: operatorValue.maxValue,
324
+ isIntegerOnly: false,
325
+ onChange,
326
+ onEnter,
327
+ });
233
328
 
234
329
  return (
235
330
  <NumberInput
236
331
  label={t('@astryx.powersearch.valueEditor.value')}
237
332
  isLabelHidden
238
333
  value={currentValue ?? null}
239
- onChange={(value: number) => {
240
- onChange({type: 'float', value});
241
- }}
334
+ onChange={handlers.handleChange}
335
+ onFocus={handlers.handleFocus}
336
+ onInput={handlers.handleInput}
337
+ onEnter={handlers.handleEnter}
338
+ onKeyDown={handlers.handleKeyDown}
242
339
  min={operatorValue.minValue}
243
340
  max={operatorValue.maxValue}
244
341
  units={operatorValue.units}
@@ -676,6 +773,7 @@ export function PowerSearchValueEditor({
676
773
  operatorValue={operatorValue}
677
774
  filterValue={filterValue}
678
775
  onChange={onChange}
776
+ onEnter={onEnter}
679
777
  />
680
778
  );
681
779
 
@@ -685,6 +783,7 @@ export function PowerSearchValueEditor({
685
783
  operatorValue={operatorValue}
686
784
  filterValue={filterValue}
687
785
  onChange={onChange}
786
+ onEnter={onEnter}
688
787
  />
689
788
  );
690
789
 
@@ -1,7 +1,11 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  import {describe, expect, it} from 'vitest';
4
- import {formatFilterValue} from './formatFilterValue';
4
+ import {
5
+ formatDateAbsolute,
6
+ formatDateAbsoluteCompact,
7
+ formatFilterValue,
8
+ } from './formatFilterValue';
5
9
  import type {TranslatorFn} from '../i18n';
6
10
  import type {OperatorValue, FilterValue} from './types';
7
11
 
@@ -270,6 +274,17 @@ describe('formatFilterValue', () => {
270
274
  ),
271
275
  ).toBe('date range');
272
276
  });
277
+ it('keeps Gregorian years for locales that default to another calendar', () => {
278
+ const unixSeconds = Date.parse('2026-08-22T12:00:00Z') / 1000;
279
+ for (const value of [
280
+ formatDateAbsolute(unixSeconds, 'th-TH', 'UTC'),
281
+ formatDateAbsoluteCompact(unixSeconds, 'th-TH'),
282
+ ]) {
283
+ expect(value).toContain('2026');
284
+ expect(value).not.toContain('2569');
285
+ }
286
+ });
287
+
273
288
  it('formats an absolute date and truncates to maxLength', () => {
274
289
  const full = fmt(
275
290
  {type: 'date_absolute'},
@@ -44,6 +44,7 @@ export function formatDateAbsolute(
44
44
  hour: 'numeric',
45
45
  minute: '2-digit',
46
46
  ...(timezoneID ? {timeZone: timezoneID} : {}),
47
+ calendar: 'gregory',
47
48
  };
48
49
  return new Intl.DateTimeFormat(locale, options).format(unixSeconds * 1000);
49
50
  }
@@ -63,6 +64,7 @@ export function formatDateAbsoluteCompact(
63
64
  year: 'numeric',
64
65
  month: 'short',
65
66
  day: 'numeric',
67
+ calendar: 'gregory',
66
68
  }).format(unixSeconds * 1000);
67
69
  }
68
70
 
@@ -77,12 +77,30 @@ export const docs = {
77
77
  ],
78
78
  theming: {
79
79
  targets: [
80
- {className: 'astryx-progressbar', visualProps: ['variant']},
81
- {className: 'astryx-progressbar-fill', visualProps: ['variant']},
82
- {className: 'astryx-progressbar-track'},
80
+ {className: 'astryx-progress-bar', visualProps: ['variant']},
81
+ {className: 'astryx-progress-bar-fill', visualProps: ['variant']},
82
+ {className: 'astryx-progress-bar-track'},
83
+ {
84
+ className: 'astryx-progress-bar-mark',
85
+ visualProps: ['variant', 'placement'],
86
+ },
87
+ // Still emitted beside the names above, so themes written against
88
+ // them keep working. Drop in the next major.
89
+ {
90
+ className: 'astryx-progressbar',
91
+ visualProps: ['variant'],
92
+ deprecatedFor: 'progress-bar',
93
+ },
94
+ {
95
+ className: 'astryx-progressbar-fill',
96
+ visualProps: ['variant'],
97
+ deprecatedFor: 'progress-bar-fill',
98
+ },
99
+ {className: 'astryx-progressbar-track', deprecatedFor: 'progress-bar-track'},
83
100
  {
84
101
  className: 'astryx-progressbar-mark',
85
102
  visualProps: ['variant', 'placement'],
103
+ deprecatedFor: 'progress-bar-mark',
86
104
  },
87
105
  ],
88
106
  vars: [
@@ -182,12 +200,30 @@ export const docsZh = {
182
200
  ],
183
201
  theming: {
184
202
  targets: [
185
- {className: 'astryx-progressbar', visualProps: ['variant']},
186
- {className: 'astryx-progressbar-fill', visualProps: ['variant']},
187
- {className: 'astryx-progressbar-track'},
203
+ {className: 'astryx-progress-bar', visualProps: ['variant']},
204
+ {className: 'astryx-progress-bar-fill', visualProps: ['variant']},
205
+ {className: 'astryx-progress-bar-track'},
206
+ {
207
+ className: 'astryx-progress-bar-mark',
208
+ visualProps: ['variant', 'placement'],
209
+ },
210
+ // Still emitted beside the names above, so themes written against
211
+ // them keep working. Drop in the next major.
212
+ {
213
+ className: 'astryx-progressbar',
214
+ visualProps: ['variant'],
215
+ deprecatedFor: 'progress-bar',
216
+ },
217
+ {
218
+ className: 'astryx-progressbar-fill',
219
+ visualProps: ['variant'],
220
+ deprecatedFor: 'progress-bar-fill',
221
+ },
222
+ {className: 'astryx-progressbar-track', deprecatedFor: 'progress-bar-track'},
188
223
  {
189
224
  className: 'astryx-progressbar-mark',
190
225
  visualProps: ['variant', 'placement'],
226
+ deprecatedFor: 'progress-bar-mark',
191
227
  },
192
228
  ],
193
229
  vars: [
@@ -839,3 +839,27 @@ describe('ProgressBar', () => {
839
839
  });
840
840
  });
841
841
  });
842
+
843
+ describe('ProgressBar theme target names', () => {
844
+ it('renders the deprecated classes beside the current ones', () => {
845
+ const {container} = render(
846
+ <ProgressBar
847
+ value={50}
848
+ label="Progress"
849
+ marks={[{value: 80, label: 'M'}]}
850
+ />,
851
+ );
852
+ expect(container.querySelector('.astryx-progress-bar')).toHaveClass(
853
+ 'astryx-progressbar',
854
+ );
855
+ expect(container.querySelector('.astryx-progress-bar-track')).toHaveClass(
856
+ 'astryx-progressbar-track',
857
+ );
858
+ expect(container.querySelector('.astryx-progress-bar-fill')).toHaveClass(
859
+ 'astryx-progressbar-fill',
860
+ );
861
+ expect(container.querySelector('.astryx-progress-bar-mark')).toHaveClass(
862
+ 'astryx-progressbar-mark',
863
+ );
864
+ });
865
+ });
@@ -479,7 +479,13 @@ export function ProgressBar({
479
479
  <div
480
480
  ref={ref}
481
481
  {...mergeProps(
482
- themeProps('progressbar', {variant}),
482
+ themeProps(
483
+ 'progress-bar',
484
+ {variant},
485
+ // `progressbar` ran the compound name together; themes styling it
486
+ // keep working until the next major.
487
+ {legacyNames: ['progressbar']},
488
+ ),
483
489
  stylex.props(styles.container, xstyle),
484
490
  className,
485
491
  style,
@@ -524,13 +530,19 @@ export function ProgressBar({
524
530
  aria-labelledby={labelId}
525
531
  aria-valuetext={isIndeterminate ? undefined : valueText}
526
532
  {...mergeProps(
527
- themeProps('progressbar-track'),
533
+ themeProps('progress-bar-track', undefined, {
534
+ legacyNames: ['progressbar-track'],
535
+ }),
528
536
  stylex.props(styles.track, isIndeterminate && styles.trackClipped),
529
537
  )}>
530
538
  {isIndeterminate ? (
531
539
  <div
532
540
  {...mergeProps(
533
- themeProps('progressbar-fill', {variant: fillVariant}),
541
+ themeProps(
542
+ 'progress-bar-fill',
543
+ {variant: fillVariant},
544
+ {legacyNames: ['progressbar-fill']},
545
+ ),
534
546
  stylex.props(
535
547
  styles.indeterminateFill,
536
548
  variantStyles[fillVariant],
@@ -540,7 +552,11 @@ export function ProgressBar({
540
552
  ) : (
541
553
  <div
542
554
  {...mergeProps(
543
- themeProps('progressbar-fill', {variant: fillVariant}),
555
+ themeProps(
556
+ 'progress-bar-fill',
557
+ {variant: fillVariant},
558
+ {legacyNames: ['progressbar-fill']},
559
+ ),
544
560
  stylex.props(styles.fill, variantStyles[fillVariant]),
545
561
  )}
546
562
  style={{width: `${percentage}%`}}
@@ -569,10 +585,14 @@ export function ProgressBar({
569
585
  <span
570
586
  tabIndex={0}
571
587
  {...mergeProps(
572
- themeProps('progressbar-mark', {
573
- variant: fillVariant,
574
- placement: mark.isOnFill ? 'fill' : 'track',
575
- }),
588
+ themeProps(
589
+ 'progress-bar-mark',
590
+ {
591
+ variant: fillVariant,
592
+ placement: mark.isOnFill ? 'fill' : 'track',
593
+ },
594
+ {legacyNames: ['progressbar-mark']},
595
+ ),
576
596
  stylex.props(
577
597
  focusOutlineStyles.focusVisible,
578
598
  styles.mark,
@@ -6,7 +6,7 @@ export const docs = {
6
6
  name: 'RadioList',
7
7
  displayName: 'Radio List',
8
8
  group: 'Radio',
9
- category: 'Data Input',
9
+ category: 'Form Controls',
10
10
  keywords: ["radiolist","radio","radiogroup","radiobutton","optionlist","singlechoice","choicelist"],
11
11
  theming: {
12
12
  targets: [
@@ -104,7 +104,7 @@ export const docs = {
104
104
  {
105
105
  name: 'autoSaveId',
106
106
  type: 'string',
107
- description: 'Key for persisting sizes to localStorage.',
107
+ description: 'Key for persisting sizes and collapse state to localStorage.',
108
108
  },
109
109
  ],
110
110
  },
@@ -212,7 +212,7 @@ export const docsDense = {
212
212
  collapsedSize: 'px threshold triggering collapse during drag',
213
213
  snaps: 'px values to snap to during resize',
214
214
  shrinkOrder: 'cascade priority: lower number shrinks first',
215
- autoSaveId: 'key for persisting sizes to localStorage',
215
+ autoSaveId: 'key for persisting sizes + collapse state to localStorage',
216
216
  },
217
217
  },
218
218
  {
@@ -38,7 +38,23 @@ export const docs = {
38
38
  {
39
39
  name: 'autoSaveId',
40
40
  type: 'string',
41
- description: 'Key for localStorage persistence of size across sessions.',
41
+ description: 'Key for localStorage persistence of size and collapse state across sessions.',
42
+ },
43
+ {
44
+ name: 'defaultIsCollapsed',
45
+ type: 'boolean',
46
+ description: 'Initial collapse state (uncontrolled). A persisted entry wins over it.',
47
+ default: 'false',
48
+ },
49
+ {
50
+ name: 'isCollapsed',
51
+ type: 'boolean',
52
+ description: 'Controlled collapse state. collapse(), expand() and a drag past the threshold then report through onCollapseChange instead of changing state internally.',
53
+ },
54
+ {
55
+ name: 'onCollapseChange',
56
+ type: '(isCollapsed: boolean) => void',
57
+ description: 'Called once per collapse state change, via drag or programmatically.',
42
58
  },
43
59
  ],
44
60
  returns: [
@@ -96,7 +112,10 @@ export const docsDense = {
96
112
  maxSizePx: 'max size in px.',
97
113
  collapsible: 'whether dragging below collapsed threshold collapses region to zero.',
98
114
  snaps: 'px values to snap to during drag.',
99
- autoSaveId: 'key for localStorage persistence of size across sessions.',
115
+ autoSaveId: 'key for localStorage persistence of size + collapse state across sessions.',
116
+ defaultIsCollapsed: 'initial collapse state (uncontrolled); persisted entry wins.',
117
+ isCollapsed: 'controlled collapse state; collapse()/expand()/drag report instead of mutating.',
118
+ onCollapseChange: 'called once per collapse state change.',
100
119
  },
101
120
  returnDescriptions: {
102
121
  size: 'current size in px.',