@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3

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 (730) hide show
  1. package/CHANGELOG.md +161 -1
  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/AppShell/AppShell.d.ts.map +1 -1
  6. package/dist/AppShell/AppShell.js +3 -2
  7. package/dist/AspectRatio/AspectRatio.d.ts +24 -0
  8. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  9. package/dist/AspectRatio/AspectRatio.js +23 -4
  10. package/dist/Avatar/Avatar.d.ts +25 -1
  11. package/dist/Avatar/Avatar.d.ts.map +1 -1
  12. package/dist/Avatar/Avatar.js +58 -19
  13. package/dist/Avatar/index.d.ts +2 -2
  14. package/dist/Avatar/index.d.ts.map +1 -1
  15. package/dist/Avatar/index.js +1 -1
  16. package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
  17. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  18. package/dist/AvatarGroup/AvatarGroup.js +8 -4
  19. package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
  20. package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
  21. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  22. package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
  23. package/dist/Banner/Banner.d.ts +49 -15
  24. package/dist/Banner/Banner.d.ts.map +1 -1
  25. package/dist/Banner/Banner.js +62 -20
  26. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  27. package/dist/BottomSheet/BottomSheet.js +17 -4
  28. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  29. package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
  30. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  31. package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
  32. package/dist/Button/Button.d.ts.map +1 -1
  33. package/dist/Button/Button.js +11 -6
  34. package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
  35. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  36. package/dist/ButtonGroup/ButtonGroup.js +26 -7
  37. package/dist/Calendar/Calendar.d.ts +7 -3
  38. package/dist/Calendar/Calendar.d.ts.map +1 -1
  39. package/dist/Calendar/Calendar.js +21 -23
  40. package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
  41. package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
  42. package/dist/Calendar/getInitialFocusDate.js +62 -0
  43. package/dist/Calendar/styles.d.ts +5 -14
  44. package/dist/Calendar/styles.d.ts.map +1 -1
  45. package/dist/Calendar/styles.js +15 -15
  46. package/dist/Card/Card.d.ts +12 -12
  47. package/dist/Card/Card.d.ts.map +1 -1
  48. package/dist/Card/Card.js +17 -9
  49. package/dist/Card/index.d.ts +35 -1
  50. package/dist/Card/index.d.ts.map +1 -1
  51. package/dist/Card/index.js +21 -1
  52. package/dist/Carousel/Carousel.d.ts.map +1 -1
  53. package/dist/Carousel/Carousel.js +3 -3
  54. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  55. package/dist/Chat/ChatComposerInput.js +2 -3
  56. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  57. package/dist/Chat/ChatLayout.js +3 -3
  58. package/dist/Chat/ChatMessageList.d.ts +22 -3
  59. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  60. package/dist/Chat/ChatMessageList.js +6 -3
  61. package/dist/Chat/ChatTokenizedText.d.ts +2 -0
  62. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  63. package/dist/Chat/ChatTokenizedText.js +11 -6
  64. package/dist/Chat/useChatComposerTokens.js +1 -1
  65. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  66. package/dist/CheckboxInput/CheckboxInput.js +10 -3
  67. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  68. package/dist/ClickableCard/ClickableCard.js +3 -3
  69. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  70. package/dist/CodeBlock/CodeBlock.js +15 -4
  71. package/dist/CodeBlock/highlightRanges.js +1 -1
  72. package/dist/CodeBlock/highlightStyles.js +13 -13
  73. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  74. package/dist/CommandPalette/CommandPaletteInput.js +3 -2
  75. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  76. package/dist/CommandPalette/CommandPaletteItem.js +3 -2
  77. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  78. package/dist/ComplexSelector/ComplexSelector.js +1 -3
  79. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  80. package/dist/ContextMenu/ContextMenu.js +4 -3
  81. package/dist/DateInput/DateInput.d.ts +43 -0
  82. package/dist/DateInput/DateInput.d.ts.map +1 -1
  83. package/dist/DateInput/DateInput.js +22 -2
  84. package/dist/DateInput/NativeDateField.d.ts +10 -0
  85. package/dist/DateInput/NativeDateField.d.ts.map +1 -0
  86. package/dist/DateInput/NativeDateField.js +494 -0
  87. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  88. package/dist/DateInput/TouchDateField.js +82 -23
  89. package/dist/DateInput/index.d.ts +1 -1
  90. package/dist/DateInput/index.d.ts.map +1 -1
  91. package/dist/DateInput/nativeDateSegments.d.ts +22 -0
  92. package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
  93. package/dist/DateInput/nativeDateSegments.js +111 -0
  94. package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
  95. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  96. package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
  97. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  98. package/dist/DateTimeInput/DateTimeInput.js +406 -12
  99. package/dist/DateTimeInput/index.d.ts +1 -1
  100. package/dist/DateTimeInput/index.d.ts.map +1 -1
  101. package/dist/Dialog/Dialog.d.ts +21 -1
  102. package/dist/Dialog/Dialog.d.ts.map +1 -1
  103. package/dist/Dialog/Dialog.js +110 -58
  104. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  105. package/dist/DropdownMenu/DropdownMenu.js +4 -13
  106. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  107. package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
  108. package/dist/Field/FieldLabel.d.ts.map +1 -1
  109. package/dist/Field/FieldLabel.js +9 -1
  110. package/dist/Field/InputClearButton.d.ts +9 -3
  111. package/dist/Field/InputClearButton.d.ts.map +1 -1
  112. package/dist/Field/InputClearButton.js +14 -3
  113. package/dist/FileInput/FileInput.d.ts.map +1 -1
  114. package/dist/FileInput/FileInput.js +3 -2
  115. package/dist/Heading/Heading.d.ts.map +1 -1
  116. package/dist/Heading/Heading.js +6 -3
  117. package/dist/HoverCard/HoverCard.d.ts +6 -0
  118. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  119. package/dist/HoverCard/HoverCard.js +104 -3
  120. package/dist/HoverCard/useHoverCard.d.ts +19 -2
  121. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  122. package/dist/HoverCard/useHoverCard.js +74 -26
  123. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  124. package/dist/Indicator/CheckboxIndicator.js +6 -2
  125. package/dist/Item/Item.d.ts.map +1 -1
  126. package/dist/Item/Item.js +4 -2
  127. package/dist/Kbd/Kbd.d.ts.map +1 -1
  128. package/dist/Kbd/Kbd.js +2 -19
  129. package/dist/Layer/LayerDepthContext.d.ts +52 -0
  130. package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
  131. package/dist/Layer/LayerDepthContext.js +66 -0
  132. package/dist/Layer/gestureCounter.d.ts +8 -0
  133. package/dist/Layer/gestureCounter.d.ts.map +1 -0
  134. package/dist/Layer/gestureCounter.js +53 -0
  135. package/dist/Layer/index.d.ts +3 -0
  136. package/dist/Layer/index.d.ts.map +1 -1
  137. package/dist/Layer/index.js +4 -0
  138. package/dist/Layer/layerStack.d.ts +98 -0
  139. package/dist/Layer/layerStack.d.ts.map +1 -0
  140. package/dist/Layer/layerStack.js +306 -0
  141. package/dist/Layer/useLayer.d.ts +23 -13
  142. package/dist/Layer/useLayer.d.ts.map +1 -1
  143. package/dist/Layer/useLayer.js +128 -8
  144. package/dist/Layer/useLayerDismissal.d.ts +93 -0
  145. package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
  146. package/dist/Layer/useLayerDismissal.js +91 -0
  147. package/dist/Lightbox/Lightbox.d.ts +1 -0
  148. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  149. package/dist/Lightbox/Lightbox.js +103 -81
  150. package/dist/List/List.d.ts +1 -1
  151. package/dist/List/List.d.ts.map +1 -1
  152. package/dist/List/List.js +15 -4
  153. package/dist/Markdown/Markdown.d.ts +1 -1
  154. package/dist/Markdown/Markdown.d.ts.map +1 -1
  155. package/dist/Markdown/Markdown.js +20 -7
  156. package/dist/Markdown/index.d.ts +1 -1
  157. package/dist/Markdown/index.d.ts.map +1 -1
  158. package/dist/Markdown/parser.d.ts +38 -1
  159. package/dist/Markdown/parser.d.ts.map +1 -1
  160. package/dist/Markdown/parser.js +182 -32
  161. package/dist/MetadataList/MetadataListItem.d.ts +1 -1
  162. package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
  163. package/dist/MetadataList/MetadataListItem.js +4 -1
  164. package/dist/MobileNav/MobileNav.d.ts +6 -1
  165. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  166. package/dist/MobileNav/MobileNav.js +61 -36
  167. package/dist/MultiSelector/MultiSelector.d.ts +32 -1
  168. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  169. package/dist/MultiSelector/MultiSelector.js +73 -15
  170. package/dist/MultiSelector/hooks.d.ts +7 -1
  171. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  172. package/dist/MultiSelector/hooks.js +3 -2
  173. package/dist/MultiSelector/index.d.ts +1 -1
  174. package/dist/MultiSelector/index.d.ts.map +1 -1
  175. package/dist/NavIcon/NavIcon.d.ts.map +1 -1
  176. package/dist/NavIcon/NavIcon.js +5 -1
  177. package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
  178. package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
  179. package/dist/NavMenu/NavHeadingMenu.js +9 -5
  180. package/dist/NumberInput/NumberInput.d.ts +6 -1
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +54 -104
  183. package/dist/NumberInput/numberInputCommit.d.ts +34 -0
  184. package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
  185. package/dist/NumberInput/numberInputCommit.js +71 -0
  186. package/dist/NumberInput/numberParser.d.ts +64 -0
  187. package/dist/NumberInput/numberParser.d.ts.map +1 -0
  188. package/dist/NumberInput/numberParser.js +350 -0
  189. package/dist/Outline/Outline.d.ts.map +1 -1
  190. package/dist/Outline/Outline.js +3 -2
  191. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  192. package/dist/OverflowList/OverflowList.js +3 -2
  193. package/dist/Overlay/Overlay.d.ts.map +1 -1
  194. package/dist/Overlay/Overlay.js +3 -2
  195. package/dist/Popover/Popover.d.ts.map +1 -1
  196. package/dist/Popover/Popover.js +1 -9
  197. package/dist/Popover/usePopover.d.ts +7 -41
  198. package/dist/Popover/usePopover.d.ts.map +1 -1
  199. package/dist/Popover/usePopover.js +40 -21
  200. package/dist/PowerSearch/PowerSearch.d.ts +8 -2
  201. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  202. package/dist/PowerSearch/PowerSearch.js +19 -6
  203. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
  204. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  205. package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
  206. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
  207. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  208. package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
  209. package/dist/PowerSearch/types.d.ts +2 -0
  210. package/dist/PowerSearch/types.d.ts.map +1 -1
  211. package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
  212. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  213. package/dist/PowerSearch/usePowerSearchSource.js +14 -5
  214. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  215. package/dist/ProgressBar/ProgressBar.js +18 -5
  216. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  217. package/dist/Resizable/ResizeHandle.js +3 -2
  218. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  219. package/dist/SegmentedControl/SegmentedControl.js +3 -2
  220. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  221. package/dist/SelectableCard/SelectableCard.js +12 -3
  222. package/dist/Selector/Selector.d.ts +18 -1
  223. package/dist/Selector/Selector.d.ts.map +1 -1
  224. package/dist/Selector/Selector.js +91 -18
  225. package/dist/Selector/hooks.d.ts +7 -1
  226. package/dist/Selector/hooks.d.ts.map +1 -1
  227. package/dist/Selector/hooks.js +3 -2
  228. package/dist/SideNav/SideNav.d.ts.map +1 -1
  229. package/dist/SideNav/SideNav.js +4 -3
  230. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  231. package/dist/SideNav/SideNavHeading.js +8 -7
  232. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  233. package/dist/SideNav/SideNavItem.js +4 -3
  234. package/dist/Slider/Slider.d.ts.map +1 -1
  235. package/dist/Slider/Slider.js +37 -5
  236. package/dist/Spinner/Spinner.d.ts +3 -3
  237. package/dist/Spinner/Spinner.d.ts.map +1 -1
  238. package/dist/Spinner/Spinner.js +130 -78
  239. package/dist/StatusDot/StatusDot.d.ts.map +1 -1
  240. package/dist/StatusDot/StatusDot.js +6 -1
  241. package/dist/Stepper/Step.d.ts +140 -0
  242. package/dist/Stepper/Step.d.ts.map +1 -0
  243. package/dist/Stepper/Step.js +1045 -0
  244. package/dist/Stepper/StepStatus.d.ts +24 -0
  245. package/dist/Stepper/StepStatus.d.ts.map +1 -0
  246. package/dist/Stepper/StepStatus.js +1 -0
  247. package/dist/Stepper/Stepper.d.ts +93 -0
  248. package/dist/Stepper/Stepper.d.ts.map +1 -0
  249. package/dist/Stepper/Stepper.js +184 -0
  250. package/dist/Stepper/StepperContext.d.ts +41 -0
  251. package/dist/Stepper/StepperContext.d.ts.map +1 -0
  252. package/dist/Stepper/StepperContext.js +34 -0
  253. package/dist/Stepper/index.d.ts +8 -0
  254. package/dist/Stepper/index.d.ts.map +1 -0
  255. package/dist/Stepper/index.js +7 -0
  256. package/dist/Stepper/stepper.stylex.d.ts +15 -0
  257. package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
  258. package/dist/Stepper/stepper.stylex.js +20 -0
  259. package/dist/Switch/Switch.d.ts.map +1 -1
  260. package/dist/Switch/Switch.js +8 -3
  261. package/dist/TabList/Tab.d.ts +15 -2
  262. package/dist/TabList/Tab.d.ts.map +1 -1
  263. package/dist/TabList/Tab.js +32 -7
  264. package/dist/TabList/TabList.d.ts +46 -7
  265. package/dist/TabList/TabList.d.ts.map +1 -1
  266. package/dist/TabList/TabList.js +353 -23
  267. package/dist/TabList/TabListContext.d.ts +11 -1
  268. package/dist/TabList/TabListContext.d.ts.map +1 -1
  269. package/dist/TabList/TabListContext.js +11 -2
  270. package/dist/TabList/TabMenu.d.ts.map +1 -1
  271. package/dist/TabList/TabMenu.js +3 -2
  272. package/dist/TabList/index.d.ts +2 -2
  273. package/dist/TabList/index.d.ts.map +1 -1
  274. package/dist/Table/BaseTable.d.ts.map +1 -1
  275. package/dist/Table/BaseTable.js +10 -2
  276. package/dist/Table/Table.d.ts.map +1 -1
  277. package/dist/Table/Table.js +3 -6
  278. package/dist/Table/TableRow.d.ts +16 -5
  279. package/dist/Table/TableRow.d.ts.map +1 -1
  280. package/dist/Table/TableRow.js +16 -5
  281. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  282. package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
  283. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
  284. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  285. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
  286. package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
  287. package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
  288. package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
  289. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  290. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
  291. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
  292. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
  293. package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
  294. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  295. package/dist/Table/plugins/selection/useTableSelection.js +43 -5
  296. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  297. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
  298. package/dist/Table/types.d.ts +22 -4
  299. package/dist/Table/types.d.ts.map +1 -1
  300. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  301. package/dist/Table/useBaseTablePlugins.js +5 -0
  302. package/dist/Text/Text.d.ts.map +1 -1
  303. package/dist/Text/Text.js +6 -3
  304. package/dist/TextArea/TextArea.d.ts.map +1 -1
  305. package/dist/TextArea/TextArea.js +16 -10
  306. package/dist/TextInput/TextInput.d.ts.map +1 -1
  307. package/dist/TextInput/TextInput.js +3 -2
  308. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  309. package/dist/TimeInput/TimeInput.js +3 -2
  310. package/dist/Timestamp/Timestamp.d.ts +1 -1
  311. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  312. package/dist/Timestamp/Timestamp.js +15 -21
  313. package/dist/Toast/Toast.d.ts.map +1 -1
  314. package/dist/Toast/Toast.js +22 -7
  315. package/dist/Toast/ToastViewport.d.ts +1 -0
  316. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  317. package/dist/Toast/ToastViewport.js +71 -18
  318. package/dist/Token/Token.d.ts +1 -1
  319. package/dist/Token/Token.d.ts.map +1 -1
  320. package/dist/Token/Token.js +20 -9
  321. package/dist/Token/TokenLink.d.ts +1 -1
  322. package/dist/Token/TokenLink.d.ts.map +1 -1
  323. package/dist/Token/TokenLink.js +7 -4
  324. package/dist/Tokenizer/Tokenizer.d.ts +14 -1
  325. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  326. package/dist/Tokenizer/Tokenizer.js +33 -21
  327. package/dist/Tooltip/Tooltip.d.ts +5 -0
  328. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  329. package/dist/Tooltip/useTooltip.d.ts +5 -0
  330. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  331. package/dist/Tooltip/useTooltip.js +39 -24
  332. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  333. package/dist/TopNav/TopNavHeading.js +5 -4
  334. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  335. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  336. package/dist/TopNav/TopNavMegaMenu.js +31 -11
  337. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  338. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  339. package/dist/TopNav/TopNavMenu.js +22 -7
  340. package/dist/TreeList/TreeList.d.ts +1 -1
  341. package/dist/TreeList/TreeList.d.ts.map +1 -1
  342. package/dist/TreeList/TreeList.js +7 -2
  343. package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
  344. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  345. package/dist/Typeahead/BaseTypeahead.js +119 -37
  346. package/dist/Typeahead/Typeahead.d.ts +8 -1
  347. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  348. package/dist/Typeahead/Typeahead.js +5 -2
  349. package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
  350. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  351. package/dist/Typeahead/TypeaheadItem.js +7 -2
  352. package/dist/astryx.css +113 -11
  353. package/dist/hooks/index.d.ts +1 -0
  354. package/dist/hooks/index.d.ts.map +1 -1
  355. package/dist/hooks/index.js +1 -0
  356. package/dist/hooks/useFocusTrap.d.ts +7 -4
  357. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  358. package/dist/hooks/useFocusTrap.js +60 -95
  359. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  360. package/dist/hooks/useHotkeys.js +3 -18
  361. package/dist/hooks/useMergedRefs.d.ts +18 -0
  362. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  363. package/dist/hooks/useMergedRefs.js +25 -0
  364. package/dist/index.d.ts +1 -0
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +1 -0
  367. package/dist/theme/Theme.d.ts.map +1 -1
  368. package/dist/theme/Theme.js +46 -10
  369. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  370. package/dist/theme/derivedVarRegistry.js +24 -4
  371. package/dist/theme/generateThemeRules.d.ts +21 -0
  372. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  373. package/dist/theme/generateThemeRules.js +26 -0
  374. package/dist/theme/syntax/tokens.d.ts +1 -1
  375. package/dist/theme/syntax/tokens.d.ts.map +1 -1
  376. package/dist/theme/syntax/tokens.js +5 -2
  377. package/dist/utils/groupItems.d.ts +5 -1
  378. package/dist/utils/groupItems.d.ts.map +1 -1
  379. package/dist/utils/groupItems.js +9 -9
  380. package/dist/utils/index.d.ts +1 -1
  381. package/dist/utils/index.d.ts.map +1 -1
  382. package/dist/utils/isApplePlatform.d.ts +18 -0
  383. package/dist/utils/isApplePlatform.d.ts.map +1 -0
  384. package/dist/utils/isApplePlatform.js +37 -0
  385. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  386. package/dist/utils/sharedResizeObserver.js +10 -1
  387. package/dist/utils/timeParser.d.ts +1 -1
  388. package/dist/utils/timeParser.d.ts.map +1 -1
  389. package/dist/utils/timeParser.js +26 -12
  390. package/locales/af-ZA.json +6 -6
  391. package/locales/ar-SA.json +6 -6
  392. package/locales/ca-ES.json +5 -5
  393. package/locales/cs-CZ.json +6 -6
  394. package/locales/da-DK.json +6 -6
  395. package/locales/de-DE.json +6 -6
  396. package/locales/el-GR.json +6 -6
  397. package/locales/en.json +163 -11
  398. package/locales/es-ES.json +5 -5
  399. package/locales/fi-FI.json +6 -6
  400. package/locales/fr-FR.json +6 -6
  401. package/locales/he-IL.json +6 -6
  402. package/locales/hu-HU.json +6 -6
  403. package/locales/it-IT.json +6 -6
  404. package/locales/ja-JP.json +6 -6
  405. package/locales/ko-KR.json +6 -6
  406. package/locales/nl-NL.json +6 -6
  407. package/locales/no-NO.json +6 -6
  408. package/locales/pl-PL.json +6 -6
  409. package/locales/pseudo.json +114 -0
  410. package/locales/pt-BR.json +6 -6
  411. package/locales/pt-PT.json +6 -6
  412. package/locales/ro-RO.json +6 -6
  413. package/locales/ru-RU.json +6 -6
  414. package/locales/sr-SP.json +6 -6
  415. package/locales/sv-SE.json +6 -6
  416. package/locales/tr-TR.json +6 -6
  417. package/locales/uk-UA.json +6 -6
  418. package/locales/vi-VN.json +6 -6
  419. package/locales/zh-CN.json +6 -6
  420. package/locales/zh-TW.json +6 -6
  421. package/package.json +8 -3
  422. package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
  423. package/src/AlertDialog/AlertDialog.test.tsx +211 -2
  424. package/src/AlertDialog/AlertDialog.tsx +62 -20
  425. package/src/AppShell/AppShell.tsx +3 -2
  426. package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
  427. package/src/AspectRatio/AspectRatio.test.tsx +57 -10
  428. package/src/AspectRatio/AspectRatio.tsx +40 -1
  429. package/src/Avatar/Avatar.doc.mjs +14 -3
  430. package/src/Avatar/Avatar.test.tsx +97 -0
  431. package/src/Avatar/Avatar.tsx +125 -52
  432. package/src/Avatar/index.ts +2 -2
  433. package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
  434. package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
  435. package/src/AvatarGroup/AvatarGroup.tsx +15 -6
  436. package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
  437. package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
  438. package/src/Banner/Banner.doc.mjs +22 -11
  439. package/src/Banner/Banner.test.tsx +177 -25
  440. package/src/Banner/Banner.tsx +93 -27
  441. package/src/BottomSheet/BottomSheet.test.tsx +123 -0
  442. package/src/BottomSheet/BottomSheet.tsx +17 -4
  443. package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
  444. package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
  445. package/src/Button/Button.doc.mjs +24 -1
  446. package/src/Button/Button.test.tsx +32 -4
  447. package/src/Button/Button.tsx +12 -5
  448. package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
  449. package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
  450. package/src/ButtonGroup/ButtonGroup.tsx +23 -5
  451. package/src/Calendar/Calendar.doc.mjs +7 -6
  452. package/src/Calendar/Calendar.test.tsx +143 -0
  453. package/src/Calendar/Calendar.tsx +30 -26
  454. package/src/Calendar/getInitialFocusDate.test.ts +94 -0
  455. package/src/Calendar/getInitialFocusDate.ts +93 -0
  456. package/src/Calendar/styles.ts +49 -31
  457. package/src/Card/Card.doc.mjs +10 -7
  458. package/src/Card/Card.test.tsx +113 -19
  459. package/src/Card/Card.tsx +67 -89
  460. package/src/Card/index.ts +36 -1
  461. package/src/Carousel/Carousel.tsx +3 -2
  462. package/src/Chat/ChatComposerInput.tsx +5 -1
  463. package/src/Chat/ChatLayout.tsx +3 -2
  464. package/src/Chat/ChatMessageList.doc.mjs +9 -1
  465. package/src/Chat/ChatMessageList.test.tsx +46 -0
  466. package/src/Chat/ChatMessageList.tsx +28 -4
  467. package/src/Chat/ChatTokenizedText.tsx +17 -10
  468. package/src/Chat/useChatComposerTokens.ts +1 -1
  469. package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
  470. package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
  471. package/src/CheckboxInput/CheckboxInput.tsx +8 -2
  472. package/src/ClickableCard/ClickableCard.tsx +3 -2
  473. package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
  474. package/src/CodeBlock/CodeBlock.test.tsx +37 -0
  475. package/src/CodeBlock/CodeBlock.tsx +20 -4
  476. package/src/CodeBlock/highlightRanges.ts +1 -1
  477. package/src/CodeBlock/highlightStyles.ts +13 -13
  478. package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
  479. package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
  480. package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
  481. package/src/ComplexSelector/ComplexSelector.tsx +1 -3
  482. package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
  483. package/src/ContextMenu/ContextMenu.tsx +4 -3
  484. package/src/DateInput/DateInput.doc.mjs +16 -0
  485. package/src/DateInput/DateInput.tsx +55 -2
  486. package/src/DateInput/DateInputTouch.test.tsx +146 -32
  487. package/src/DateInput/NativeDateField.test.tsx +635 -0
  488. package/src/DateInput/NativeDateField.tsx +641 -0
  489. package/src/DateInput/TouchDateField.tsx +108 -24
  490. package/src/DateInput/index.ts +1 -0
  491. package/src/DateInput/nativeDateSegments.ts +127 -0
  492. package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
  493. package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
  494. package/src/DateRangeInput/DateRangeInput.tsx +4 -2
  495. package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
  496. package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
  497. package/src/DateTimeInput/DateTimeInput.tsx +556 -24
  498. package/src/DateTimeInput/index.ts +1 -0
  499. package/src/Dialog/Dialog.doc.mjs +8 -3
  500. package/src/Dialog/Dialog.test.tsx +429 -2
  501. package/src/Dialog/Dialog.tsx +133 -58
  502. package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
  503. package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
  504. package/src/DropdownMenu/DropdownMenu.tsx +4 -13
  505. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
  506. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
  507. package/src/Field/Field.doc.mjs +13 -2
  508. package/src/Field/FieldLabel.test.tsx +29 -0
  509. package/src/Field/FieldLabel.tsx +7 -0
  510. package/src/Field/InputClearButton.test.tsx +15 -1
  511. package/src/Field/InputClearButton.tsx +28 -4
  512. package/src/FileInput/FileInput.tsx +3 -2
  513. package/src/Heading/Heading.test.tsx +23 -1
  514. package/src/Heading/Heading.tsx +6 -3
  515. package/src/HoverCard/HoverCard.doc.mjs +13 -2
  516. package/src/HoverCard/HoverCard.test.tsx +154 -4
  517. package/src/HoverCard/HoverCard.tsx +143 -3
  518. package/src/HoverCard/useHoverCard.tsx +104 -33
  519. package/src/Indicator/CheckboxIndicator.tsx +14 -8
  520. package/src/Indicator/Indicator.doc.mjs +2 -0
  521. package/src/Item/Item.tsx +5 -4
  522. package/src/Kbd/Kbd.tsx +2 -19
  523. package/src/Layer/LayerDepthContext.tsx +62 -0
  524. package/src/Layer/gestureCounter.ts +57 -0
  525. package/src/Layer/index.ts +9 -0
  526. package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
  527. package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
  528. package/src/Layer/layerStack.ts +362 -0
  529. package/src/Layer/useLayer.test.tsx +324 -15
  530. package/src/Layer/useLayer.tsx +164 -8
  531. package/src/Layer/useLayerDismissal.test.tsx +469 -0
  532. package/src/Layer/useLayerDismissal.ts +173 -0
  533. package/src/Layout/Layout.doc.mjs +2 -2
  534. package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
  535. package/src/Lightbox/Lightbox.doc.mjs +12 -0
  536. package/src/Lightbox/Lightbox.tsx +124 -102
  537. package/src/Link/Link.doc.mjs +39 -0
  538. package/src/List/List.test.tsx +38 -0
  539. package/src/List/List.tsx +8 -1
  540. package/src/Markdown/Markdown.doc.mjs +5 -0
  541. package/src/Markdown/Markdown.test.tsx +37 -0
  542. package/src/Markdown/Markdown.tsx +16 -5
  543. package/src/Markdown/incremental.test.ts +16 -2
  544. package/src/Markdown/index.ts +1 -0
  545. package/src/Markdown/parser.perf.test.ts +96 -1
  546. package/src/Markdown/parser.test.ts +178 -2
  547. package/src/Markdown/parser.ts +253 -32
  548. package/src/MetadataList/MetadataList.test.tsx +75 -2
  549. package/src/MetadataList/MetadataListItem.tsx +5 -2
  550. package/src/MobileNav/MobileNav.tsx +62 -36
  551. package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
  552. package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
  553. package/src/MultiSelector/MultiSelector.test.tsx +311 -0
  554. package/src/MultiSelector/MultiSelector.tsx +151 -15
  555. package/src/MultiSelector/hooks.ts +9 -2
  556. package/src/MultiSelector/index.ts +1 -0
  557. package/src/NavIcon/NavIcon.doc.mjs +8 -2
  558. package/src/NavIcon/NavIcon.test.tsx +9 -0
  559. package/src/NavIcon/NavIcon.tsx +5 -1
  560. package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
  561. package/src/NavMenu/NavHeadingMenu.tsx +9 -5
  562. package/src/NumberInput/NumberInput.doc.mjs +31 -7
  563. package/src/NumberInput/NumberInput.test.tsx +436 -8
  564. package/src/NumberInput/NumberInput.tsx +62 -114
  565. package/src/NumberInput/numberInputCommit.test.ts +72 -0
  566. package/src/NumberInput/numberInputCommit.ts +103 -0
  567. package/src/NumberInput/numberParser.docblock.test.ts +234 -0
  568. package/src/NumberInput/numberParser.test.ts +222 -0
  569. package/src/NumberInput/numberParser.ts +403 -0
  570. package/src/Outline/Outline.tsx +3 -2
  571. package/src/OverflowList/OverflowList.tsx +3 -2
  572. package/src/Overlay/Overlay.tsx +3 -2
  573. package/src/Pagination/Pagination.test.tsx +3 -2
  574. package/src/Popover/Popover.test.tsx +14 -0
  575. package/src/Popover/Popover.tsx +1 -9
  576. package/src/Popover/usePopover.tsx +57 -32
  577. package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
  578. package/src/PowerSearch/PowerSearch.test.tsx +240 -1
  579. package/src/PowerSearch/PowerSearch.tsx +34 -5
  580. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
  581. package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
  582. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
  583. package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
  584. package/src/PowerSearch/types.ts +2 -0
  585. package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
  586. package/src/PowerSearch/usePowerSearchSource.ts +13 -3
  587. package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
  588. package/src/ProgressBar/ProgressBar.test.tsx +24 -0
  589. package/src/ProgressBar/ProgressBar.tsx +28 -8
  590. package/src/Resizable/ResizeHandle.tsx +3 -2
  591. package/src/SegmentedControl/SegmentedControl.tsx +3 -2
  592. package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
  593. package/src/SelectableCard/SelectableCard.tsx +19 -2
  594. package/src/Selector/Selector.doc.mjs +26 -1
  595. package/src/Selector/Selector.test.tsx +346 -1
  596. package/src/Selector/Selector.tsx +148 -21
  597. package/src/Selector/hooks.ts +17 -2
  598. package/src/SideNav/SideNav.doc.mjs +6 -6
  599. package/src/SideNav/SideNav.tsx +4 -2
  600. package/src/SideNav/SideNavHeading.tsx +12 -12
  601. package/src/SideNav/SideNavItem.tsx +4 -2
  602. package/src/Slider/Slider.test.tsx +106 -1
  603. package/src/Slider/Slider.tsx +55 -3
  604. package/src/Spinner/Spinner.test.tsx +147 -1
  605. package/src/Spinner/Spinner.tsx +120 -101
  606. package/src/StatusDot/StatusDot.doc.mjs +8 -2
  607. package/src/StatusDot/StatusDot.test.tsx +9 -0
  608. package/src/StatusDot/StatusDot.tsx +7 -1
  609. package/src/Stepper/Step.doc.mjs +98 -0
  610. package/src/Stepper/Step.tsx +1638 -0
  611. package/src/Stepper/StepStatus.ts +26 -0
  612. package/src/Stepper/Stepper.doc.mjs +370 -0
  613. package/src/Stepper/Stepper.test.tsx +1024 -0
  614. package/src/Stepper/Stepper.tsx +258 -0
  615. package/src/Stepper/StepperContext.ts +71 -0
  616. package/src/Stepper/index.ts +18 -0
  617. package/src/Stepper/stepper.stylex.ts +19 -0
  618. package/src/Switch/Switch.doc.mjs +2 -0
  619. package/src/Switch/Switch.test.tsx +10 -0
  620. package/src/Switch/Switch.tsx +6 -2
  621. package/src/TabList/Tab.doc.mjs +13 -1
  622. package/src/TabList/Tab.tsx +67 -7
  623. package/src/TabList/TabList.doc.mjs +22 -6
  624. package/src/TabList/TabList.test.tsx +559 -0
  625. package/src/TabList/TabList.tsx +490 -22
  626. package/src/TabList/TabListContext.ts +13 -2
  627. package/src/TabList/TabMenu.tsx +3 -2
  628. package/src/TabList/index.ts +6 -2
  629. package/src/Table/BaseTable.tsx +12 -4
  630. package/src/Table/Table.doc.mjs +9 -2
  631. package/src/Table/Table.test.tsx +132 -14
  632. package/src/Table/Table.tsx +3 -8
  633. package/src/Table/TableBody.doc.mjs +40 -0
  634. package/src/Table/TableFooter.doc.mjs +40 -0
  635. package/src/Table/TableHeader.doc.mjs +40 -0
  636. package/src/Table/TableRow.tsx +16 -5
  637. package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
  638. package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
  639. package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
  640. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
  641. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
  642. package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
  643. package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
  644. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
  645. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
  646. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
  647. package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
  648. package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
  649. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
  650. package/src/Table/types.ts +22 -4
  651. package/src/Table/useBaseTablePlugins.ts +5 -0
  652. package/src/Table/useTableGroupedRows.doc.mjs +5 -4
  653. package/src/Table/useTablePagination.doc.mjs +7 -0
  654. package/src/Table/useTableRowStatus.doc.mjs +1 -1
  655. package/src/Table/useTableSelection.doc.mjs +31 -0
  656. package/src/Text/Text.test.tsx +67 -1
  657. package/src/Text/Text.tsx +6 -3
  658. package/src/TextArea/TextArea.doc.mjs +12 -2
  659. package/src/TextArea/TextArea.test.tsx +11 -0
  660. package/src/TextArea/TextArea.tsx +37 -24
  661. package/src/TextInput/TextInput.doc.mjs +10 -0
  662. package/src/TextInput/TextInput.tsx +3 -2
  663. package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
  664. package/src/TimeInput/TimeInput.tsx +2 -2
  665. package/src/Timestamp/Timestamp.test.tsx +58 -0
  666. package/src/Timestamp/Timestamp.tsx +12 -10
  667. package/src/Toast/Toast.doc.mjs +26 -12
  668. package/src/Toast/Toast.tsx +28 -4
  669. package/src/Toast/ToastViewport.test.tsx +536 -8
  670. package/src/Toast/ToastViewport.tsx +81 -12
  671. package/src/Token/Token.test.tsx +95 -0
  672. package/src/Token/Token.tsx +15 -10
  673. package/src/Token/TokenLink.tsx +14 -5
  674. package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
  675. package/src/Tokenizer/Tokenizer.test.tsx +161 -0
  676. package/src/Tokenizer/Tokenizer.tsx +53 -24
  677. package/src/Toolbar/Toolbar.doc.mjs +5 -0
  678. package/src/Tooltip/Tooltip.doc.mjs +5 -0
  679. package/src/Tooltip/Tooltip.test.tsx +32 -0
  680. package/src/Tooltip/Tooltip.tsx +5 -0
  681. package/src/Tooltip/useTooltip.tsx +47 -24
  682. package/src/TopNav/TopNavHeading.tsx +5 -4
  683. package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
  684. package/src/TopNav/TopNavMegaMenu.tsx +47 -5
  685. package/src/TopNav/TopNavMenu.test.tsx +133 -1
  686. package/src/TopNav/TopNavMenu.tsx +38 -7
  687. package/src/TreeList/TreeList.test.tsx +49 -0
  688. package/src/TreeList/TreeList.tsx +7 -2
  689. package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
  690. package/src/Typeahead/BaseTypeahead.tsx +181 -39
  691. package/src/Typeahead/Typeahead.doc.mjs +11 -0
  692. package/src/Typeahead/Typeahead.test.tsx +203 -0
  693. package/src/Typeahead/Typeahead.tsx +12 -2
  694. package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
  695. package/src/Typeahead/TypeaheadItem.tsx +8 -1
  696. package/src/hooks/index.ts +2 -0
  697. package/src/hooks/useAnnounce.doc.mjs +96 -0
  698. package/src/hooks/useContainerReveal.doc.mjs +2 -2
  699. package/src/hooks/useDevWarning.doc.mjs +96 -0
  700. package/src/hooks/useFocusTrap.test.tsx +14 -0
  701. package/src/hooks/useFocusTrap.ts +62 -111
  702. package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
  703. package/src/hooks/useHotkeys.ts +3 -18
  704. package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
  705. package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
  706. package/src/hooks/useInteractiveRole.doc.mjs +119 -0
  707. package/src/hooks/useLongPress.doc.mjs +123 -0
  708. package/src/hooks/useMergedRefs.doc.mjs +79 -0
  709. package/src/hooks/useMergedRefs.test.tsx +62 -0
  710. package/src/hooks/useMergedRefs.ts +36 -0
  711. package/src/hooks/useTypeahead.doc.mjs +153 -0
  712. package/src/index.ts +1 -0
  713. package/src/raw-import.d.ts +14 -0
  714. package/src/theme/MediaTheme.doc.mjs +5 -5
  715. package/src/theme/Theme.test.tsx +104 -2
  716. package/src/theme/Theme.tsx +49 -14
  717. package/src/theme/defineTheme.test.ts +23 -0
  718. package/src/theme/derivedVarRegistry.test.ts +26 -3
  719. package/src/theme/derivedVarRegistry.ts +23 -4
  720. package/src/theme/generateThemeRules.test.ts +99 -1
  721. package/src/theme/generateThemeRules.ts +28 -0
  722. package/src/theme/syntax/tokens.ts +5 -2
  723. package/src/utils/groupItems.ts +12 -6
  724. package/src/utils/index.ts +1 -1
  725. package/src/utils/isApplePlatform.test.ts +61 -0
  726. package/src/utils/isApplePlatform.ts +37 -0
  727. package/src/utils/sharedResizeObserver.ts +10 -2
  728. package/src/utils/timeParser.test.ts +6 -1
  729. package/src/utils/timeParser.ts +35 -13
  730. package/src/__tests__/inputWidthContract.test.tsx +0 -69
@@ -13,6 +13,10 @@ import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
13
13
  import {act, render, screen, within, waitFor} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
15
  import {getButton} from '../__tests__/fastRoleQueries';
16
+ import {
17
+ getForcedColorsRules,
18
+ getAllInjectedCss,
19
+ } from '../__tests__/forcedColors';
16
20
  import * as stylex from '@stylexjs/stylex';
17
21
  import {Calendar} from './Calendar';
18
22
  import type {CalendarHandle} from './Calendar';
@@ -263,6 +267,58 @@ describe('Calendar', () => {
263
267
  expect(day15).not.toBeDisabled();
264
268
  });
265
269
 
270
+ // ─── Initial Visible Month ───────────────────────────────────
271
+
272
+ describe('opens on a month inside the min/max window', () => {
273
+ beforeEach(() => {
274
+ vi.useFakeTimers({toFake: ['Date']});
275
+ vi.setSystemTime(new Date(2026, 7, 21, 12, 0, 0));
276
+ });
277
+ afterEach(() => {
278
+ vi.useRealTimers();
279
+ });
280
+
281
+ it('opens on today when today is inside the window', () => {
282
+ render(<Calendar min="2026-01-01" max="2026-12-31" />);
283
+
284
+ expect(screen.getByText('August 2026')).toBeInTheDocument();
285
+ });
286
+
287
+ it('opens on min when the window is entirely in the future', () => {
288
+ render(<Calendar min="2027-03-04" max="2027-06-30" />);
289
+
290
+ expect(screen.getByText('March 2027')).toBeInTheDocument();
291
+ expect(getDayButton(4, 'March', 2027)).not.toBeDisabled();
292
+ });
293
+
294
+ it('opens on max when the window is entirely in the past', () => {
295
+ render(<Calendar min="2019-01-01" max="2019-04-30" />);
296
+
297
+ expect(screen.getByText('April 2019')).toBeInTheDocument();
298
+ expect(getDayButton(30, 'April', 2019)).not.toBeDisabled();
299
+ });
300
+
301
+ it('keeps max in the last pane in the two-month layout', () => {
302
+ render(<Calendar numberOfMonths={2} min="2019-01-01" max="2019-04-30" />);
303
+
304
+ expect(screen.getByText('March 2019 – April 2019')).toBeInTheDocument();
305
+ });
306
+
307
+ it('still honors an explicit focusDate outside the window', () => {
308
+ render(
309
+ <Calendar focusDate="2026-01-01" min="2027-03-04" max="2027-06-30" />,
310
+ );
311
+
312
+ expect(screen.getByText('January 2026')).toBeInTheDocument();
313
+ });
314
+
315
+ it('still opens on the selected value outside the window', () => {
316
+ render(<Calendar defaultValue="2031-07-04" min="2019-01-01" />);
317
+
318
+ expect(screen.getByText('July 2031')).toBeInTheDocument();
319
+ });
320
+ });
321
+
266
322
  it('respects custom dateConstraints', () => {
267
323
  // Only allow weekdays
268
324
  const isWeekday = (date: Date) => {
@@ -311,6 +367,46 @@ describe('Calendar', () => {
311
367
  expect(getDayButton(9)).toBeDisabled(); // 2-day span — too short
312
368
  });
313
369
 
370
+ it('commits a same-day range with the default minimum', async () => {
371
+ const user = userEvent.setup();
372
+ const handleChange = vi.fn();
373
+
374
+ render(
375
+ <Calendar mode="range" focusDate="2026-01-01" onChange={handleChange} />,
376
+ );
377
+
378
+ await user.click(getDayButton(10));
379
+ await user.click(getDayButton(10));
380
+
381
+ expect(handleChange).toHaveBeenCalledWith({
382
+ start: '2026-01-10',
383
+ end: '2026-01-10',
384
+ });
385
+ });
386
+
387
+ it('commits a same-day range when the minimum permits it, including with a maximum', async () => {
388
+ const user = userEvent.setup();
389
+ const handleChange = vi.fn();
390
+
391
+ render(
392
+ <Calendar
393
+ mode="range"
394
+ focusDate="2026-01-01"
395
+ onChange={handleChange}
396
+ minRangeSpan={1}
397
+ maxRangeSpan={7}
398
+ />,
399
+ );
400
+
401
+ await user.click(getDayButton(10));
402
+ await user.click(getDayButton(10));
403
+
404
+ expect(handleChange).toHaveBeenCalledWith({
405
+ start: '2026-01-10',
406
+ end: '2026-01-10',
407
+ });
408
+ });
409
+
314
410
  it('clears the in-progress start when the anchor is clicked again', async () => {
315
411
  const user = userEvent.setup();
316
412
  const handleChange = vi.fn();
@@ -337,6 +433,33 @@ describe('Calendar', () => {
337
433
  expect(getDayButton(9)).not.toBeDisabled();
338
434
  });
339
435
 
436
+ it('announces the cleared range in the provider locale', async () => {
437
+ const user = userEvent.setup();
438
+
439
+ render(
440
+ <InternationalizationProvider locale="ja-JP">
441
+ <Calendar mode="range" focusDate="2026-01-01" />
442
+ </InternationalizationProvider>,
443
+ );
444
+
445
+ // The day button's own accessible name is already localized through the
446
+ // provider. The announcement has to use the same date string: formatting
447
+ // it without the locale silently falls back to the host locale, so a
448
+ // Japanese user hears an English date.
449
+ const anchor = document.querySelector<HTMLButtonElement>(
450
+ 'button[data-date="2026-01-10"]',
451
+ );
452
+ const localizedDate = anchor?.getAttribute('aria-label');
453
+ expect(localizedDate).toBeTruthy();
454
+
455
+ await user.click(anchor as HTMLButtonElement);
456
+ await user.click(anchor as HTMLButtonElement);
457
+
458
+ await waitFor(() => {
459
+ expect(politeRegion()?.textContent).toContain(localizedDate);
460
+ });
461
+ });
462
+
340
463
  it('does not apply range-span constraints in single mode', async () => {
341
464
  const user = userEvent.setup();
342
465
 
@@ -1378,3 +1501,23 @@ describe('Calendar', () => {
1378
1501
  });
1379
1502
  });
1380
1503
  });
1504
+
1505
+ // jsdom cannot emulate forced-colors rendering, so this asserts that the
1506
+ // compiled output includes the forced-colors rules; visual behavior needs
1507
+ // manual verification under Windows High Contrast.
1508
+ describe('forced colors (WCAG 1.4.11)', () => {
1509
+ it('compiles a forced-colors fill so the selected date survives Windows High Contrast', () => {
1510
+ render(
1511
+ <Calendar mode="single" value="2026-01-15" focusDate="2026-01-01" />,
1512
+ );
1513
+
1514
+ const css = getForcedColorsRules();
1515
+ // Without these the accent fill is stripped and the selected date renders
1516
+ // identically to every other day in the month.
1517
+ expect(css).toContain('background-color: highlight;');
1518
+ expect(css).toContain('color: highlighttext;');
1519
+ // A <button> keeps the native ButtonFace surface and ignores the authored
1520
+ // Highlight fill unless it opts out of UA remapping.
1521
+ expect(getAllInjectedCss()).toContain('forced-color-adjust: none;');
1522
+ });
1523
+ });
@@ -11,6 +11,7 @@
11
11
  *
12
12
  * SYNC: When modified, update these files to stay in sync:
13
13
  * - /packages/core/src/Calendar/Calendar.doc.mjs (props table, features, implementation notes)
14
+ * - /packages/core/src/Calendar/getInitialFocusDate.ts (which month the calendar opens on)
14
15
  * - /packages/core/src/Calendar/Calendar.test.tsx (tests for new/changed behavior)
15
16
  * - /packages/core/src/Calendar/index.ts (exports if types change)
16
17
  * - /apps/storybook/stories/Calendar.stories.tsx (storybook stories)
@@ -60,6 +61,7 @@ import {
60
61
  } from '../utils/plainDate';
61
62
  import {mergeProps, composeEventHandlers, rtlStyles} from '../utils';
62
63
  import {focusOutlineProps} from '../utils/focusOutline.stylex';
64
+ import {getInitialFocusDate} from './getInitialFocusDate';
63
65
  import {
64
66
  computeDayCellState,
65
67
  computeRangeRounding,
@@ -135,14 +137,18 @@ interface CalendarBaseProps extends Omit<
135
137
  * Range mode only. Minimum number of days a selected range must span,
136
138
  * counting both endpoints — `minRangeSpan={2}` forbids a single-day range.
137
139
  * Once a start date is picked, days closer than this to it are disabled —
138
- * except the start itself, which stays selectable as the active anchor.
139
- * Defaults to 1 (a same-day start and end is allowed).
140
+ * except the start itself, which stays selectable. Clicking the start again
141
+ * commits a one-day range when the minimum allows it; otherwise it cancels
142
+ * the in-progress selection so the start can be moved. Defaults to 1 (a
143
+ * same-day start and end is allowed).
140
144
  */
141
145
  minRangeSpan?: number;
142
146
 
143
147
  /**
144
148
  * Controlled focus date (which month is visible).
145
- * If not provided, defaults to selected date or today.
149
+ * If not provided, defaults to the selected date, else today clamped into
150
+ * the `min`/`max` window (so a window that excludes today opens on the
151
+ * bound nearest to it, not on an all-disabled month).
146
152
  */
147
153
  focusDate?: ISODateString;
148
154
 
@@ -277,20 +283,19 @@ export function Calendar({ref, ...props}: CalendarProps) {
277
283
  // Determine effective value
278
284
  const effectiveValue = value !== undefined ? value : internalValue;
279
285
 
280
- // Focus date state (which month is visible)
281
- const [internalFocusDate, setInternalFocusDate] = useState<PlainDate>(() => {
282
- if (focusDateProp) {
283
- return plainDateFromISO(focusDateProp);
284
- }
285
- if (effectiveValue) {
286
- if (typeof effectiveValue === 'string') {
287
- return plainDateFromISO(effectiveValue);
288
- } else {
289
- return plainDateFromISO(effectiveValue.start);
290
- }
291
- }
292
- return plainDateToday();
293
- });
286
+ // Focus date state (which month is visible). Falls back to today, clamped
287
+ // into the min/max window so a window that doesn't contain today doesn't
288
+ // open on an all-disabled month.
289
+ const [internalFocusDate, setInternalFocusDate] = useState<PlainDate>(() =>
290
+ getInitialFocusDate({
291
+ focusDate: focusDateProp,
292
+ value: effectiveValue,
293
+ min,
294
+ max,
295
+ numberOfMonths,
296
+ today,
297
+ }),
298
+ );
294
299
 
295
300
  // Use controlled focusDate if callback is provided, otherwise use internal state
296
301
  const isControlledFocus =
@@ -449,17 +454,16 @@ export function Calendar({ref, ...props}: CalendarProps) {
449
454
  // Second click - complete the range
450
455
  const startPd = plainDateFromISO(rangeSelectionStart);
451
456
 
452
- // Clicking the anchor again clears the in-progress start rather than
453
- // committing a zero-length range. This is also the escape hatch when
454
- // `minRangeSpan` disables the days around the anchor: without it the
455
- // anchor would be the only clickable day left and the start could
456
- // never be moved. `minRangeSpan` leaves the anchor itself enabled
457
- // precisely so this toggle stays reachable.
458
- if (plainDateIsEqual(date, startPd)) {
457
+ // Clicking the anchor again commits a one-day range when the minimum
458
+ // span allows it. For longer minimum spans, the repeated click clears
459
+ // the in-progress start instead: the anchor is the only nearby day
460
+ // that remains enabled, so this preserves an escape hatch for moving
461
+ // the start without violating the configured minimum.
462
+ if (plainDateIsEqual(date, startPd) && (minRangeSpan ?? 1) > 1) {
459
463
  setRangeSelectionStart(null);
460
464
  announce(
461
465
  t('@astryx.calendar.rangeClearedAnnounce', {
462
- date: plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY),
466
+ date: plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY, locale),
463
467
  }),
464
468
  );
465
469
  return;
@@ -500,7 +504,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
500
504
  }
501
505
  }
502
506
  },
503
- [mode, onChange, rangeSelectionStart, announce, t, locale],
507
+ [mode, onChange, rangeSelectionStart, minRangeSpan, announce, t, locale],
504
508
  );
505
509
 
506
510
  return (
@@ -0,0 +1,94 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file getInitialFocusDate.test.ts
5
+ * @input Uses vitest
6
+ * @output Test suite for getInitialFocusDate
7
+ * @position Tests for getInitialFocusDate.ts
8
+ *
9
+ * SYNC: When getInitialFocusDate.ts changes, update tests accordingly
10
+ */
11
+
12
+ import {describe, it, expect} from 'vitest';
13
+ import {getInitialFocusDate} from './getInitialFocusDate';
14
+ import {plainDateFromISO, plainDateToISO} from '../utils/plainDate';
15
+
16
+ const TODAY = plainDateFromISO('2026-08-21');
17
+
18
+ function focusISO(options: Partial<Parameters<typeof getInitialFocusDate>[0]>) {
19
+ return plainDateToISO(
20
+ getInitialFocusDate({numberOfMonths: 1, today: TODAY, ...options}),
21
+ );
22
+ }
23
+
24
+ describe('getInitialFocusDate', () => {
25
+ it('opens on today when there are no bounds', () => {
26
+ expect(focusISO({})).toBe('2026-08-21');
27
+ });
28
+
29
+ it('opens on today when today is inside the min/max window', () => {
30
+ expect(focusISO({min: '2026-01-01', max: '2026-12-31'})).toBe('2026-08-21');
31
+ });
32
+
33
+ it('treats the bounds as inclusive', () => {
34
+ expect(focusISO({min: '2026-08-21'})).toBe('2026-08-21');
35
+ expect(focusISO({max: '2026-08-21'})).toBe('2026-08-21');
36
+ });
37
+
38
+ it('opens on min when the whole window is in the future', () => {
39
+ expect(focusISO({min: '2027-03-04', max: '2027-06-30'})).toBe('2027-03-04');
40
+ });
41
+
42
+ it('opens on max when the whole window is in the past', () => {
43
+ expect(focusISO({min: '2019-01-01', max: '2019-04-30'})).toBe('2019-04-01');
44
+ });
45
+
46
+ it('clamps against a one-sided min', () => {
47
+ expect(focusISO({min: '2030-05-17'})).toBe('2030-05-17');
48
+ });
49
+
50
+ it('clamps against a one-sided max', () => {
51
+ expect(focusISO({max: '2020-02-09'})).toBe('2020-02-01');
52
+ });
53
+
54
+ it('lands max in the last pane in the two-month layout', () => {
55
+ // Opening on max's month would spend the second pane entirely
56
+ // out of bounds, so the window's end sits on the right instead.
57
+ expect(focusISO({max: '2020-02-09', numberOfMonths: 2})).toBe('2020-01-01');
58
+ });
59
+
60
+ it('does not shift the two-month layout back past min', () => {
61
+ expect(
62
+ focusISO({min: '2020-02-03', max: '2020-02-09', numberOfMonths: 2}),
63
+ ).toBe('2020-02-03');
64
+ });
65
+
66
+ it('prefers the selected value over the bounds', () => {
67
+ expect(focusISO({value: '2031-07-04', min: '2019-01-01'})).toBe(
68
+ '2031-07-04',
69
+ );
70
+ });
71
+
72
+ it('uses a range value start as the visible month', () => {
73
+ expect(focusISO({value: {start: '2019-03-08', end: '2019-03-19'}})).toBe(
74
+ '2019-03-08',
75
+ );
76
+ });
77
+
78
+ it('prefers an explicit focusDate over everything else', () => {
79
+ expect(
80
+ focusISO({
81
+ focusDate: '2015-11-02',
82
+ value: '2031-07-04',
83
+ min: '2026-01-01',
84
+ max: '2026-12-31',
85
+ }),
86
+ ).toBe('2015-11-02');
87
+ });
88
+
89
+ it('prefers min when the bounds are inverted', () => {
90
+ // Degenerate input (min after max) — resolve it deterministically
91
+ // rather than reading the second bound off a contradiction.
92
+ expect(focusISO({min: '2027-01-01', max: '2020-01-01'})).toBe('2027-01-01');
93
+ });
94
+ });
@@ -0,0 +1,93 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file getInitialFocusDate.ts
5
+ * @input PlainDate utilities, min/max bounds, today
6
+ * @output Exports getInitialFocusDate — the month Calendar opens on
7
+ * @position Calendar-specific helper; used by Calendar.tsx
8
+ *
9
+ * SYNC: When modified, update:
10
+ * - /packages/core/src/Calendar/getInitialFocusDate.test.ts
11
+ * - /packages/core/src/Calendar/Calendar.tsx (the only caller)
12
+ */
13
+
14
+ import type {ISODateString, DateRange} from '../utils/dateTypes';
15
+ import {
16
+ type PlainDate,
17
+ plainDateFromISO,
18
+ plainDateSetFirstOfMonth,
19
+ plainDateAddMonths,
20
+ plainDateIsBefore,
21
+ plainDateIsAfter,
22
+ } from '../utils/plainDate';
23
+
24
+ export interface InitialFocusDateOptions {
25
+ /** Controlled visible month, if the consumer supplied one. */
26
+ focusDate?: ISODateString;
27
+ /** Selected value (single date or range), controlled or uncontrolled. */
28
+ value?: ISODateString | DateRange;
29
+ /** Earliest selectable date. */
30
+ min?: ISODateString;
31
+ /** Latest selectable date. */
32
+ max?: ISODateString;
33
+ /** How many month panes the calendar renders (1 or 2). */
34
+ numberOfMonths: number;
35
+ /** Today, injected so the caller keeps a single memoized source of "now". */
36
+ today: PlainDate;
37
+ }
38
+
39
+ /**
40
+ * Picks the date whose month the calendar opens on.
41
+ *
42
+ * An explicit `focusDate` wins, then the selected value — both are the
43
+ * consumer's own instruction about where to look, so neither is second-guessed
44
+ * against `min`/`max`.
45
+ *
46
+ * Otherwise the calendar opens on today, clamped into the `min`/`max` window.
47
+ * Without the clamp a window that doesn't contain today (a 2019 audit range, a
48
+ * booking window opening next spring) opened on today's month with every day
49
+ * disabled, leaving prev/next clicking as the only way in.
50
+ *
51
+ * When clamping forward to `min`, that month leads: the whole selectable window
52
+ * runs ahead of it. When clamping back to `max`, the last pane lands on `max`'s
53
+ * month instead — with `numberOfMonths={2}` opening on `[max, max + 1]` would
54
+ * spend half the calendar on a month that is entirely out of bounds. That
55
+ * shift never crosses `min`'s month.
56
+ */
57
+ export function getInitialFocusDate(
58
+ options: InitialFocusDateOptions,
59
+ ): PlainDate {
60
+ const {focusDate, value, min, max, numberOfMonths, today} = options;
61
+
62
+ if (focusDate) {
63
+ return plainDateFromISO(focusDate);
64
+ }
65
+
66
+ if (value) {
67
+ return plainDateFromISO(typeof value === 'string' ? value : value.start);
68
+ }
69
+
70
+ const minDate = min ? plainDateFromISO(min) : null;
71
+ const maxDate = max ? plainDateFromISO(max) : null;
72
+
73
+ if (minDate && plainDateIsBefore(today, minDate)) {
74
+ return minDate;
75
+ }
76
+
77
+ if (maxDate && plainDateIsAfter(today, maxDate)) {
78
+ const lastPaneOffset = Math.max(0, numberOfMonths - 1);
79
+ const shifted = plainDateAddMonths(
80
+ plainDateSetFirstOfMonth(maxDate),
81
+ -lastPaneOffset,
82
+ );
83
+ if (
84
+ minDate &&
85
+ plainDateIsBefore(shifted, plainDateSetFirstOfMonth(minDate))
86
+ ) {
87
+ return minDate;
88
+ }
89
+ return shifted;
90
+ }
91
+
92
+ return today;
93
+ }
@@ -51,19 +51,12 @@ export const calendarStyles = stylex.create({
51
51
  },
52
52
  monthsContainer: {
53
53
  display: 'flex',
54
+ // Wraps rather than overflowing: two months side by side need ~488px, so
55
+ // an unwrapped row scrolls the document sideways below that and puts the
56
+ // next-month button off-viewport (WCAG 1.4.10). Above 488px nothing moves.
57
+ flexWrap: 'wrap',
54
58
  gap: spacingVars['--spacing-4'],
55
59
  },
56
- srOnly: {
57
- position: 'absolute',
58
- width: '1px',
59
- height: '1px',
60
- padding: 0,
61
- margin: '-1px',
62
- overflow: 'hidden',
63
- clip: 'rect(0, 0, 0, 0)',
64
- whiteSpace: 'nowrap',
65
- borderWidth: 0,
66
- },
67
60
  /**
68
61
  * Wrapper for the month nav chevrons. RTL mirroring is applied by
69
62
  * composing the shared `rtlStyles.mirror` transform onto this wrapper
@@ -123,6 +116,17 @@ export const monthGridStyles = stylex.create({
123
116
  // Day Cell Styles - Structural (layout, sizing, positioning)
124
117
  // =============================================================================
125
118
 
119
+ // Half the gap between the day button and its cell — (--size-element-md minus
120
+ // --size-element-sm) / 2 — so the band's rounded caps line up with the button
121
+ // and the button's ::before bleeds out to meet its neighbour's. Deliberately a
122
+ // literal and NOT a spacing token: this is a layout value derived from the two
123
+ // size tokens, and pinning it to --spacing-0-5 desynchronises it from them
124
+ // (matcha sets that step to 3px, which overlaps adjacent days' hit targets by
125
+ // 2px). Deriving it with calc() from the size tokens would be better still and
126
+ // would close butter's 4px dead gap; that needs its own measured change.
127
+ const BAND_INSET = '2px';
128
+ const HIT_BLEED = '-2px';
129
+
126
130
  export const dayCellStyles = stylex.create({
127
131
  // Cell container
128
132
  cell: {
@@ -137,53 +141,53 @@ export const dayCellStyles = stylex.create({
137
141
  // Range background - structural positioning
138
142
  rangeBg: {
139
143
  position: 'absolute',
140
- top: '2px',
141
- bottom: '2px',
144
+ top: BAND_INSET,
145
+ bottom: BAND_INSET,
142
146
  insetInlineStart: 0,
143
147
  insetInlineEnd: 0,
144
148
  },
145
149
  rangeBgRadiusStart: {
146
- insetInlineStart: '2px',
150
+ insetInlineStart: BAND_INSET,
147
151
  borderStartStartRadius: radiusVars['--radius-full'],
148
152
  borderEndStartRadius: radiusVars['--radius-full'],
149
153
  },
150
154
  rangeBgRadiusEnd: {
151
- insetInlineEnd: '2px',
155
+ insetInlineEnd: BAND_INSET,
152
156
  borderStartEndRadius: radiusVars['--radius-full'],
153
157
  borderEndEndRadius: radiusVars['--radius-full'],
154
158
  },
155
159
  rangeInsetStart: {
156
- insetInlineStart: '2px',
160
+ insetInlineStart: BAND_INSET,
157
161
  },
158
162
  rangeInsetEnd: {
159
- insetInlineEnd: '2px',
163
+ insetInlineEnd: BAND_INSET,
160
164
  },
161
165
 
162
166
  // Preview background - structural positioning
163
167
  previewBg: {
164
168
  position: 'absolute',
165
- top: '2px',
166
- bottom: '2px',
169
+ top: BAND_INSET,
170
+ bottom: BAND_INSET,
167
171
  insetInlineStart: 0,
168
172
  insetInlineEnd: 0,
169
173
  },
170
174
  previewBgRadiusStart: {
171
- insetInlineStart: '2px',
175
+ insetInlineStart: BAND_INSET,
172
176
  borderStartStartRadius: radiusVars['--radius-full'],
173
177
  borderEndStartRadius: radiusVars['--radius-full'],
174
178
  },
175
179
  previewBgRadiusEnd: {
176
- insetInlineEnd: '2px',
180
+ insetInlineEnd: BAND_INSET,
177
181
  borderStartEndRadius: radiusVars['--radius-full'],
178
182
  borderEndEndRadius: radiusVars['--radius-full'],
179
183
  },
180
184
  previewStart: {
181
- insetInlineStart: '2px',
185
+ insetInlineStart: BAND_INSET,
182
186
  borderStartStartRadius: radiusVars['--radius-full'],
183
187
  borderEndStartRadius: radiusVars['--radius-full'],
184
188
  },
185
189
  previewEnd: {
186
- insetInlineEnd: '2px',
190
+ insetInlineEnd: BAND_INSET,
187
191
  borderStartEndRadius: radiusVars['--radius-full'],
188
192
  borderEndEndRadius: radiusVars['--radius-full'],
189
193
  },
@@ -195,7 +199,7 @@ export const dayCellStyles = stylex.create({
195
199
  display: 'flex',
196
200
  alignItems: 'center',
197
201
  justifyContent: 'center',
198
- borderRadius: '50%',
202
+ borderRadius: radiusVars['--radius-full'],
199
203
  borderWidth: 0,
200
204
  borderStyle: 'none',
201
205
  cursor: {
@@ -213,14 +217,14 @@ export const dayCellStyles = stylex.create({
213
217
  },
214
218
  transitionDuration: durationVars['--duration-fast'],
215
219
  transitionTimingFunction: easeVars['--ease-standard'],
216
- // Expand hit target by 2px on each side to prevent gaps
220
+ // Expand hit target so adjacent days meet with no gap
217
221
  '::before': {
218
222
  content: '""',
219
223
  position: 'absolute',
220
- top: '-2px',
221
- insetInlineEnd: '-2px',
222
- bottom: '-2px',
223
- insetInlineStart: '-2px',
224
+ top: HIT_BLEED,
225
+ insetInlineEnd: HIT_BLEED,
226
+ bottom: HIT_BLEED,
227
+ insetInlineStart: HIT_BLEED,
224
228
  },
225
229
  },
226
230
 
@@ -280,8 +284,22 @@ export const dayCellTheme = stylex.create({
280
284
 
281
285
  // Selected state (single selection or range endpoints)
282
286
  daySelected: {
283
- backgroundColor: colorVars['--color-accent'],
284
- color: colorVars['--color-on-accent'],
287
+ // Forced colors (Windows High Contrast) strips the accent fill, which
288
+ // leaves the selected date looking exactly like every other day.
289
+ // Highlight/HighlightText is the platform convention for a selected
290
+ // control (WCAG 1.4.11), and `forced-color-adjust: none` is required
291
+ // because this is a <button>: the UA otherwise keeps the native
292
+ // ButtonFace surface and ignores the authored fill, the same trap
293
+ // ToggleButton documents.
294
+ forcedColorAdjust: 'none',
295
+ backgroundColor: {
296
+ default: colorVars['--color-accent'],
297
+ '@media (forced-colors: active)': 'Highlight',
298
+ },
299
+ color: {
300
+ default: colorVars['--color-on-accent'],
301
+ '@media (forced-colors: active)': 'HighlightText',
302
+ },
285
303
  backgroundImage: {
286
304
  default: null,
287
305
  ':hover:where(:not(:disabled,[aria-disabled="true"]))': {