@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
@@ -0,0 +1,1045 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file Step.tsx
7
+ * @input Uses React, stylex, theme tokens (including the motion duration token
8
+ * the connector fill animates on), StepperContext
9
+ * @output Exports Step component and StepProps
10
+ * @position Individual step item; used inside Stepper
11
+ *
12
+ * Every connector this file draws — the separated progress bars and the
13
+ * on-track segments alike — paints its accent fill as a scaled ::before rather
14
+ * than by swapping a background color, so a step the flow advances into grows
15
+ * its line along the track. See the CONNECTOR FILL block in the styles below
16
+ * for the axis/RTL/reduced-motion rules that go with it.
17
+ *
18
+ * Exactly one change animates: advancing a single step. Going back, jumping
19
+ * forward by more than one, and mounting mid-flow all land at once. The rule
20
+ * and the reasoning behind it sit above the styles; the arithmetic that keeps
21
+ * the one animated span reading as a single front — an on-track span is drawn
22
+ * by two steps, three where a content slot splits it — is in the component.
23
+ * Nothing about it is public API: Stepper hands each Step the step it came
24
+ * from through context, and the rest is derived.
25
+ *
26
+ * SYNC: When modified, update these files to stay in sync:
27
+ * - /packages/core/src/Stepper/Stepper.doc.mjs
28
+ * - /packages/core/src/Stepper/Stepper.test.tsx
29
+ * - /packages/core/src/Stepper/index.ts
30
+ * - /apps/storybook/stories/Stepper.stories.tsx
31
+ * - /packages/cli/assets/templates/blocks/components/Stepper/ (showcase blocks)
32
+ * - /packages/cli/assets/templates/blocks/components/Step/ (showcase blocks)
33
+ */
34
+ import { useEffect } from 'react';
35
+ import * as stylex from '@stylexjs/stylex';
36
+ import "../theme/tokens.stylex.js";
37
+ import { colorVars, spacingVars, radiusVars, fontWeightVars, typeScaleVars, textSizeVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
38
+ import { focusOutlineStyles, mergeProps, isRenderable, themeProps } from "../utils/index.js";
39
+ import { Icon } from "../Icon/index.js";
40
+ import { VisuallyHidden } from "../VisuallyHidden/index.js";
41
+ import { useTranslator } from "../i18n/index.js";
42
+ import { useStepperContext } from "./StepperContext.js";
43
+ import "./stepper.stylex.js";
44
+ import { stepMarker } from "./stepper.stylex.js";
45
+
46
+ /**
47
+ * Built-in indicator presets. Anything other than these strings passed to
48
+ * `indicator` is treated as a custom ReactNode (e.g. an `<Icon />`).
49
+ * - 'auto': numbered badge for not-yet-reached steps, a check once completed
50
+ * (default)
51
+ * - 'number': always a numbered badge
52
+ * - 'none': no indicator — just the progress bar and label
53
+ */
54
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
55
+ // --- Default progress icons (16px) ---
56
+ //
57
+ // The `completed` progress state and the current-step ring are drawn as local
58
+ // <svg> glyphs rather than sourced from the Icon registry. This is a deliberate
59
+ // exception to the "glyphs come from the registry" convention (audit rule T17),
60
+ // for two reasons:
61
+ //
62
+ // 1. `CurrentIcon` (a dot inside a ring) has no registry equivalent — it is a
63
+ // progress affordance, not a general-purpose icon.
64
+ // 2. `CheckCircleIcon` (a filled circle with a check) is intentionally NOT the
65
+ // registry `success` glyph, even though the two look similar. They mean
66
+ // different things and must stay independently restyleable: `completed`
67
+ // marks *progress through the sequence* (every step you've passed), while
68
+ // the semantic `success` status marks a step's *outcome*. A stepper can
69
+ // show a completed step that also carries a `warning`/`error` status, so
70
+ // collapsing the two glyphs would conflate progress with outcome. The
71
+ // semantic `success`/`warning`/`error` STATUS glyphs DO defer to the themed
72
+ // registry (see the status branch below), so those share one visual
73
+ // language; only the progress marks are local.
74
+ //
75
+ // Both glyphs paint via `currentColor`, so the indicator's color is still
76
+ // controlled by tokens on the wrapper (never hardcoded), and the wrapper
77
+ // carries the `astryx-step-indicator` theme target.
78
+
79
+ /** Filled circle with a check — shown for a completed step in 'auto' mode. */
80
+ function CheckCircleIcon() {
81
+ return /*#__PURE__*/_jsxs("svg", {
82
+ width: "16",
83
+ height: "16",
84
+ viewBox: "0 0 16 16",
85
+ fill: "none",
86
+ children: [/*#__PURE__*/_jsx("circle", {
87
+ cx: "8",
88
+ cy: "8",
89
+ r: "8",
90
+ fill: "currentColor"
91
+ }), /*#__PURE__*/_jsx("path", {
92
+ d: "M4.75 8.25 7 10.5l4.25-4.5",
93
+ stroke: colorVars['--color-background-surface'],
94
+ strokeWidth: "1.75",
95
+ strokeLinecap: "round",
96
+ strokeLinejoin: "round"
97
+ })]
98
+ });
99
+ }
100
+
101
+ /** Filled dot in a ring — shown for the active step in 'auto' mode. */
102
+ function CurrentIcon() {
103
+ return /*#__PURE__*/_jsxs("svg", {
104
+ width: "16",
105
+ height: "16",
106
+ viewBox: "0 0 16 16",
107
+ fill: "none",
108
+ children: [/*#__PURE__*/_jsx("circle", {
109
+ cx: "8",
110
+ cy: "8",
111
+ r: "7",
112
+ stroke: "currentColor",
113
+ strokeWidth: "2"
114
+ }), /*#__PURE__*/_jsx("circle", {
115
+ cx: "8",
116
+ cy: "8",
117
+ r: "4",
118
+ fill: "currentColor"
119
+ })]
120
+ });
121
+ }
122
+
123
+ // --- Styles ---
124
+
125
+ const BAR_WIDTH = spacingVars['--spacing-1'];
126
+ // Every indicator — check, ring, custom icon, number badge — occupies the same
127
+ // box, so the `auto` mode swapping a number for a check as a step completes
128
+ // never nudges the label or the track.
129
+ const INDICATOR_SIZE = spacingVars['--spacing-4'];
130
+ // Indicator (16px) + the label-row gap (8px). The indent that lines a
131
+ // description or a content slot up with the label above it.
132
+ const INDICATOR_GUTTER = spacingVars['--spacing-6'];
133
+
134
+ // --- Connector fill motion ---
135
+ //
136
+ // One change animates: advancing exactly one step. Going back, jumping
137
+ // forward by more than one, and mounting mid-flow all apply at once.
138
+ //
139
+ // Animating the others was tried and read worse than not animating them. A
140
+ // retreat is the clearest case: run forward, the transition ends with a bar
141
+ // that is nearly full, and nearly full is indistinguishable from full, so the
142
+ // eye calls it arrived well before it settles. Run backward, the same curve
143
+ // ends with a shrinking stub of accent still on the track, and a remnant that
144
+ // is still there reads unmistakably as not finished. Identical arithmetic in
145
+ // both directions — measurably so — and the backward one still feels slow,
146
+ // because the tail is what is visible rather than what is hidden. No easing
147
+ // fixes that; only not animating it does. A multi-step jump fails differently:
148
+ // it is a navigation rather than a progression, and sweeping a front across
149
+ // four segments makes the user sit through a journey they asked to skip.
150
+ //
151
+ // What is left is the one gesture where the movement carries the meaning: the
152
+ // flow went forward one step, and the line grows to show it. That span takes
153
+ // the medium band — a fill crossing a whole segment is a spatial change, not a
154
+ // micro-interaction, so per `astryx docs motion` it sits above the fast band
155
+ // reserved for high-frequency states like hover.
156
+ const FILL_SPAN_TIME = durationVars['--duration-medium'];
157
+
158
+ // Share of one node-to-node span owned by the segment *arriving* at the far
159
+ // node; the segment leaving the near node takes the rest. On-track spans are
160
+ // drawn by two steps (see the ON-TRACK section), and the time has to be split
161
+ // the way the length is or the two halves sweep at visibly different speeds.
162
+ //
163
+ // Horizontal: both halves are `flex: 1` inside equal-width steps, so an even
164
+ // split is the proportional one.
165
+ //
166
+ // Vertical: the halves are nothing like equal, and no constant can be right
167
+ // for all of them. The arriving half is otSegLeadV, a cap fixed at one density
168
+ // space; the leaving half is otSegFlexV, grown to whatever is left of the step
169
+ // row, so its length turns on label and description lengths this file cannot
170
+ // see. Measured in the browser the cap is 40% of a plain balanced span (8 of
171
+ // 20px) but 21% once the step carries a description (8 of 38px). 0.3 is the
172
+ // value that minimises the worse of those two: it leaves the cap ~1.6x off the
173
+ // rail's speed either way, where tuning to one case puts the other past 2x.
174
+ // Matching each case exactly would mean measuring the rendered rail, a layout
175
+ // read this system avoids.
176
+ const OT_ARRIVAL_SHARE_H = 0.5;
177
+ const OT_ARRIVAL_SHARE_V = 0.3;
178
+ // A vertical step carrying a content slot draws a third segment down the side
179
+ // of it (otContentSegV) which continues the leaving half past the row, so the
180
+ // leaving half's time splits again. A slot runs several times the rail left
181
+ // above it — 34px of rail to 108px of slot in the spacious content story — and
182
+ // this is the middle of that range. Matching it exactly would mean measuring
183
+ // the rendered slot; the ordering is what keeps the front contiguous, and this
184
+ // keeps its speed in the right neighbourhood.
185
+ const OT_RAIL_SHARE_OF_LEAVING = 0.25;
186
+
187
+ /** Scale a CSS `<time>` by a unitless factor, collapsing the trivial cases. */
188
+ function fillTimeSlice(time, factor) {
189
+ if (factor <= 0) {
190
+ return '0s';
191
+ }
192
+ if (factor === 1) {
193
+ return time;
194
+ }
195
+ // Rounded because the factors are sums of shares, and float noise would
196
+ // otherwise reach the emitted custom property as `calc(... * 0.7000000001)`.
197
+ return `calc(${time} * ${Number(factor.toFixed(4))})`;
198
+ }
199
+ const _temp = {
200
+ kKXxxB: "x196sc62 " + "x13sdc92",
201
+ k5BDGz: "xizoc3 " + "xhhm9v0",
202
+ "$$css": true
203
+ };
204
+ const _temp2 = {
205
+ kZCmMZ: "xnvo3vl",
206
+ "$$css": true
207
+ };
208
+ const _temp3 = {
209
+ kVAEAm: "x10l6tqk",
210
+ kYYq5F: "x10no89f",
211
+ kLqNvP: "x1lxsm33",
212
+ kzqmXN: "xx9zwd3",
213
+ "$$css": true
214
+ };
215
+ const _temp4 = {
216
+ kqGvvJ: "x1oqu0vw",
217
+ "$$css": true
218
+ };
219
+ const _temp5 = {
220
+ keoZOQ: "x1vhfslr",
221
+ "$$css": true
222
+ };
223
+ const styles = {
224
+ verticalRoot: {
225
+ k1xSpc: "x78zum5",
226
+ kXwgrk: "x1q0g3np",
227
+ kGNEyG: "x1qjc9v5",
228
+ kVAEAm: "x1n2onr6",
229
+ kOIVth: "x1lsbc85",
230
+ $$css: true
231
+ },
232
+ verticalBar: {
233
+ kzqmXN: "xx9zwd3",
234
+ kaIpWk: "xjspbzw",
235
+ kmuXW: "x2lah0s",
236
+ kSGwAc: "xkh2ocl",
237
+ $$css: true
238
+ },
239
+ horizontalStep: {
240
+ k1xSpc: "x78zum5",
241
+ kXwgrk: "xdt5ytf",
242
+ kGNEyG: "x1qjc9v5",
243
+ kUk6DE: "x98rzlu",
244
+ k7Eaqz: "xeuugli",
245
+ $$css: true
246
+ },
247
+ horizontalBar: {
248
+ kzqmXN: "xh8yej3",
249
+ kZKoxP: "x11c6zpc",
250
+ kaIpWk: "xjspbzw",
251
+ kmuXW: "x2lah0s",
252
+ k1K539: "xlstkdb",
253
+ $$css: true
254
+ },
255
+ connectorTrack: {
256
+ kVAEAm: "x1n2onr6",
257
+ kWkggS: "x1m4xfpy",
258
+ kgeoSG: "x1cpjm7i",
259
+ kEoFBp: "x1hmns74",
260
+ kFcpXp: "xxx281p",
261
+ kPB484: "xxyica1",
262
+ kLkRvE: "x1tzqye7",
263
+ k7KCAZ: "x1hu8v7x",
264
+ kKXxxB: "xuhr57t x13sdc92",
265
+ kqUdNP: "xyt8op7",
266
+ $$css: true
267
+ },
268
+ connectorTiming: (duration, delay) => [_temp, {
269
+ "--x-1dd27dc": (val => typeof val === "number" ? val + "ms" : val != null ? val : undefined)(duration),
270
+ "--x-owu7oy": (val => typeof val === "number" ? val + "ms" : val != null ? val : undefined)(delay)
271
+ }],
272
+ connectorFillV: {
273
+ kEdqc7: "x1fgylwi",
274
+ kcTAPf: "xd30wvy",
275
+ $$css: true
276
+ },
277
+ connectorEmptyV: {
278
+ kEdqc7: "x1fgylwi",
279
+ kcTAPf: "xb5f74o",
280
+ $$css: true
281
+ },
282
+ connectorFillH: {
283
+ kEdqc7: "xgu12d xdq8fwl",
284
+ kcTAPf: "xp1ps4y",
285
+ $$css: true
286
+ },
287
+ connectorEmptyH: {
288
+ kEdqc7: "xgu12d xdq8fwl",
289
+ kcTAPf: "x1e8txe",
290
+ $$css: true
291
+ },
292
+ icon: {
293
+ k1xSpc: "x78zum5",
294
+ kGNEyG: "x6s0dn4",
295
+ kjj79g: "xl56j7k",
296
+ kzqmXN: "x12xnipv",
297
+ kZKoxP: "x6b6gus",
298
+ kmuXW: "x2lah0s",
299
+ $$css: true
300
+ },
301
+ iconCompleted: {
302
+ kMwMTN: "xqwr325",
303
+ $$css: true
304
+ },
305
+ iconInProgress: {
306
+ kMwMTN: "xqwr325",
307
+ $$css: true
308
+ },
309
+ iconNotStarted: {
310
+ kMwMTN: "xv9yike",
311
+ $$css: true
312
+ },
313
+ iconDisabled: {
314
+ kMwMTN: "xqa6c3m",
315
+ kSiTet: "xbyyjgo",
316
+ $$css: true
317
+ },
318
+ iconAccent: {
319
+ kMwMTN: "xqwr325",
320
+ $$css: true
321
+ },
322
+ iconSuccess: {
323
+ kMwMTN: "xtjic6",
324
+ $$css: true
325
+ },
326
+ iconWarning: {
327
+ kMwMTN: "xs3pv69",
328
+ $$css: true
329
+ },
330
+ iconError: {
331
+ kMwMTN: "xjt36v0",
332
+ $$css: true
333
+ },
334
+ numberBadge: {
335
+ k1xSpc: "xrvj5dj",
336
+ kgQiWS: "x1ku5rj1",
337
+ kzqmXN: "x12xnipv",
338
+ kZKoxP: "x6b6gus",
339
+ kaIpWk: "xjspbzw",
340
+ kGuDYH: "x51wmvv",
341
+ k63SB2: "x2mo6ok",
342
+ kmuXW: "x2lah0s",
343
+ k9WMMc: "x2b8uid",
344
+ $$css: true
345
+ },
346
+ numberCompleted: {
347
+ kWkggS: "x1ewilqj",
348
+ kMwMTN: "xrkvqaz",
349
+ $$css: true
350
+ },
351
+ numberInProgress: {
352
+ kWkggS: "x1ewilqj",
353
+ kMwMTN: "xrkvqaz",
354
+ $$css: true
355
+ },
356
+ numberNotStarted: {
357
+ kWkggS: "xwmxj5m",
358
+ kMwMTN: "xv1l7n4",
359
+ $$css: true
360
+ },
361
+ numberDisabled: {
362
+ kWkggS: "xwmxj5m",
363
+ kMwMTN: "xnbbluu",
364
+ kSiTet: "xbyyjgo",
365
+ $$css: true
366
+ },
367
+ numberAccent: {
368
+ kWkggS: "x1ewilqj",
369
+ kMwMTN: "x17wrial",
370
+ $$css: true
371
+ },
372
+ numberSuccess: {
373
+ kWkggS: "xdsz4j9",
374
+ kMwMTN: "xri61p4",
375
+ $$css: true
376
+ },
377
+ numberWarning: {
378
+ kWkggS: "x1q8g9m5",
379
+ kMwMTN: "xrebv38",
380
+ $$css: true
381
+ },
382
+ numberError: {
383
+ kWkggS: "x1pjz0fi",
384
+ kMwMTN: "x1m024r3",
385
+ $$css: true
386
+ },
387
+ label: {
388
+ kGuDYH: "xjm74w1",
389
+ kLWn49: "xw6l6zx",
390
+ k63SB2: "x1sodnla",
391
+ kMwMTN: "x1tgivj0",
392
+ k7Eaqz: "xeuugli",
393
+ kHjlTd: "x1mzt3pk",
394
+ $$css: true
395
+ },
396
+ labelInProgress: {
397
+ k63SB2: "x2mo6ok",
398
+ $$css: true
399
+ },
400
+ labelNotStarted: {
401
+ kMwMTN: "xv1l7n4",
402
+ $$css: true
403
+ },
404
+ labelDisabled: {
405
+ kMwMTN: "xnbbluu",
406
+ $$css: true
407
+ },
408
+ stepContent: {
409
+ kLKAdn: "x1xye8es",
410
+ $$css: true
411
+ },
412
+ contentIndent: (inlinePad, gutter) => [_temp2, {
413
+ kwRFfy: inlinePad != null ? "x120eax6" : inlinePad,
414
+ $$css: true
415
+ }, {
416
+ "--x-paddingInlineStart": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(`calc(${inlinePad} + ${gutter})`),
417
+ "--x-paddingInlineEnd": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(inlinePad)
418
+ }],
419
+ densityCompact: {
420
+ k8WAf4: "xu0wf1k",
421
+ $$css: true
422
+ },
423
+ densityBalanced: {
424
+ k8WAf4: "xce4md1",
425
+ $$css: true
426
+ },
427
+ densitySpacious: {
428
+ k8WAf4: "x8o8v82",
429
+ $$css: true
430
+ },
431
+ densityInline: value => [{
432
+ kg3NbH: value != null ? "x30g6up" : value,
433
+ $$css: true
434
+ }, {
435
+ "--x-paddingInline": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value)
436
+ }],
437
+ buttonReset: {
438
+ k9WMMc: "x1yc453h",
439
+ kGNEyG: "x1qjc9v5",
440
+ k1xSpc: "x78zum5",
441
+ kXwgrk: "xdt5ytf",
442
+ kzqmXN: "xh8yej3",
443
+ kkrTdU: "x1ypdohk x16khyan",
444
+ kaIpWk: "xh6dtrn",
445
+ k1ekBW: "x15406qy",
446
+ kIyJzY: "xkvfbh3 x12w9bfk",
447
+ kAMwcw: "xlr8y92",
448
+ kWkggS: "xjbqb8w xoevpu5 xyxi2l3",
449
+ $$css: true
450
+ },
451
+ otVerticalRoot: {
452
+ k1xSpc: "x78zum5",
453
+ kXwgrk: "xdt5ytf",
454
+ kVAEAm: "x1n2onr6",
455
+ $$css: true
456
+ },
457
+ otHorizontalRoot: {
458
+ k1xSpc: "x78zum5",
459
+ kXwgrk: "xdt5ytf",
460
+ kUk6DE: "x98rzlu",
461
+ k7Eaqz: "xeuugli",
462
+ $$css: true
463
+ },
464
+ otInteractive: {
465
+ kB7OPa: "x9f619",
466
+ k9WMMc: "x1yc453h",
467
+ kkrTdU: "x1ypdohk x16khyan",
468
+ kaIpWk: "xh6dtrn",
469
+ k1ekBW: "x15406qy",
470
+ kIyJzY: "xkvfbh3 x12w9bfk",
471
+ kAMwcw: "xlr8y92",
472
+ kWkggS: "xjbqb8w xoevpu5 xyxi2l3",
473
+ $$css: true
474
+ },
475
+ otRowWrap: {
476
+ k1xSpc: "x78zum5",
477
+ kXwgrk: "x1q0g3np",
478
+ kGNEyG: "x1qjc9v5",
479
+ kOIVth: "x1txdalj",
480
+ kzqmXN: "xh8yej3",
481
+ $$css: true
482
+ },
483
+ otColWrap: {
484
+ k1xSpc: "x78zum5",
485
+ kXwgrk: "xdt5ytf",
486
+ kGNEyG: "x1qjc9v5",
487
+ kzqmXN: "xh8yej3",
488
+ $$css: true
489
+ },
490
+ otIndicatorColV: {
491
+ k1xSpc: "x78zum5",
492
+ kXwgrk: "xdt5ytf",
493
+ kGNEyG: "x6s0dn4",
494
+ kzqmXN: "x12xnipv",
495
+ kmuXW: "x2lah0s",
496
+ kSGwAc: "xkh2ocl",
497
+ $$css: true
498
+ },
499
+ otSegBaseV: {
500
+ kzqmXN: "xx9zwd3",
501
+ kmuXW: "x2lah0s",
502
+ kaIpWk: "x2u8bby",
503
+ $$css: true
504
+ },
505
+ otSegFlexV: {
506
+ kUk6DE: "x98rzlu",
507
+ kAzted: "x175cymr",
508
+ $$css: true
509
+ },
510
+ otSegLeadV: value => [{
511
+ kZKoxP: value != null ? "x16ye13r" : value,
512
+ $$css: true
513
+ }, {
514
+ "--x-height": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value)
515
+ }],
516
+ otSegH: {
517
+ kZKoxP: "x11c6zpc",
518
+ kUk6DE: "x98rzlu",
519
+ k7Eaqz: "x18ki04u",
520
+ kaIpWk: "x2u8bby",
521
+ $$css: true
522
+ },
523
+ otSegHiddenIfFirst: {
524
+ k33iCy: "xnpuxes x5um2zc",
525
+ $$css: true
526
+ },
527
+ otSegHiddenIfLast: {
528
+ k33iCy: "xnpuxes x1se5z8o",
529
+ $$css: true
530
+ },
531
+ otLabelWrapH: {
532
+ k1xSpc: "x78zum5",
533
+ kXwgrk: "xdt5ytf",
534
+ kGNEyG: "x1qjc9v5",
535
+ kOIVth: "x1lsbc85",
536
+ k9WMMc: "x2b8uid",
537
+ $$css: true
538
+ },
539
+ otContent: {
540
+ kLKAdn: "x1xye8es",
541
+ $$css: true
542
+ },
543
+ otContentSegV: inlinePad => [_temp3, {
544
+ "--x-insetInlineStart": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(`calc(${inlinePad} + (${INDICATOR_SIZE} - ${BAR_WIDTH}) / 2)`)
545
+ }],
546
+ otRowPadV: value => [{
547
+ k8WAf4: value != null ? "x1giekp1" : value,
548
+ kg3NbH: value != null ? "x30g6up" : value,
549
+ $$css: true
550
+ }, {
551
+ "--x-paddingBlock": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value),
552
+ "--x-paddingInline": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value)
553
+ }],
554
+ otRailBridgeV: value => [_temp4, {
555
+ "--x-marginBlock": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(`calc(-1 * ${value})`)
556
+ }],
557
+ otPadBlock: value => [{
558
+ k8WAf4: value != null ? "x1giekp1" : value,
559
+ $$css: true
560
+ }, {
561
+ "--x-paddingBlock": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value)
562
+ }],
563
+ otMarginTop: value => [_temp5, {
564
+ "--x-marginBlockStart": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(value)
565
+ }]
566
+ };
567
+
568
+ /**
569
+ * An individual step within an Stepper. Renders a 4px progress-bar segment,
570
+ * an indicator (numbered badge, check, or any custom icon), a label with
571
+ * optional description, and an optional content slot.
572
+ *
573
+ * Progress (completed / active / not-started) is derived from the parent's
574
+ * `activeStep` and this step's `step` prop. The optional `status` prop layers a
575
+ * semantic meaning on top: in the default `auto` indicator mode it recolors the
576
+ * indicator and swaps in a matching glyph (`success` → green check-circle,
577
+ * `warning`/`error` → the shared Input status icons). The current step always
578
+ * keeps its current-step ring. `status` never recolors the connector/track.
579
+ *
580
+ * @example
581
+ * ```
582
+ * <Step step={0} label="Account details" description="Enter your email" />
583
+ * ```
584
+ *
585
+ * @example
586
+ * ```
587
+ * <Step step={1} label="Payment" status="error" />
588
+ * ```
589
+ */
590
+ export function Step({
591
+ step,
592
+ label,
593
+ description,
594
+ children,
595
+ status,
596
+ isDisabled = false,
597
+ isOptional = false,
598
+ endContent,
599
+ indicator: indicatorProp,
600
+ density: densityProp,
601
+ xstyle,
602
+ className,
603
+ style,
604
+ ref,
605
+ 'data-testid': dataTestId,
606
+ ...rest
607
+ }) {
608
+ const t = useTranslator();
609
+ const ctx = useStepperContext();
610
+ const {
611
+ activeStep,
612
+ previousActiveStep,
613
+ orientation,
614
+ onStepClick,
615
+ density: ctxDensity,
616
+ indicatorPosition,
617
+ registerStep
618
+ } = ctx;
619
+
620
+ // Register this step index with the parent Stepper for duplicate detection.
621
+ useEffect(() => registerStep(step), [registerStep, step]);
622
+ const density = densityProp ?? ctxDensity;
623
+ // Inline padding of a separated step's hover target. Density varies the block
624
+ // padding freely, but the inline value has to be readable from out here: the
625
+ // content slot renders outside that target and re-applies it to stay aligned
626
+ // (see contentIndent), so keeping it in one place is what stops the two
627
+ // drifting apart.
628
+ const separatedDensityInline = density === 'spacious' ? spacingVars['--spacing-3'] : spacingVars['--spacing-2'];
629
+
630
+ // Resolve indicator prop — may be a preset string or a custom ReactNode.
631
+ const isCustomIndicator = indicatorProp != null && typeof indicatorProp !== 'string';
632
+ const indicator = isCustomIndicator ? 'auto' : indicatorProp ?? 'auto';
633
+
634
+ // Internal progress, derived from the parent's activeStep. This is NOT the
635
+ // public `status` prop — `status` controls semantic color only.
636
+ const progress = step === activeStep ? 'in-progress' : step < activeStep ? 'completed' : 'not-started';
637
+ const isVertical = orientation === 'vertical';
638
+ const isActive = progress === 'in-progress';
639
+ // Any non-disabled step is navigable when an onStepClick handler is provided,
640
+ // including not-started steps (free navigation across the flow).
641
+ const isClickable = !isDisabled && onStepClick != null;
642
+ const handleClick = () => {
643
+ if (isClickable && onStepClick) {
644
+ onStepClick(step);
645
+ }
646
+ };
647
+
648
+ // Bar fill is purely progress-based. `status` never recolors the bar — it
649
+ // only recolors the indicator (icon / number badge) below.
650
+ const isBarFilled = progress === 'completed' || progress === 'in-progress';
651
+
652
+ // --- This step's slice of the animated span ---
653
+ // Both layouts are measured in the same unit, the node-to-node span: on-track
654
+ // span k runs from node k to node k+1, and a separated step's lone bar is the
655
+ // span arriving at it (bar s fills on exactly the condition span s-1 does).
656
+ // So one rule serves both, and neither needs to know the step count.
657
+ //
658
+ // Only a single forward step animates, and the span it crosses is the one
659
+ // leaving the step the flow came from. Every other segment — the untouched
660
+ // ones, and every segment of a jump or a retreat — is handed a zero
661
+ // duration, so it lands at once and carries no stale delay into a later
662
+ // change.
663
+ const isSingleAdvance = activeStep === previousActiveStep + 1;
664
+ const animatedSpan = previousActiveStep;
665
+
666
+ /**
667
+ * Timing for the segment covering `[offset, offset + share)` of span
668
+ * `spanIndex`, both expressed as fractions of that span.
669
+ */
670
+ const fillTiming = (spanIndex, offset, share) => {
671
+ if (!isSingleAdvance || spanIndex !== animatedSpan) {
672
+ return styles.connectorTiming('0s', '0s');
673
+ }
674
+ return styles.connectorTiming(fillTimeSlice(FILL_SPAN_TIME, share), fillTimeSlice(FILL_SPAN_TIME, offset));
675
+ };
676
+
677
+ // A separated step draws the whole span arriving at it, so it fills for the
678
+ // span's entire slice with nothing to sequence against.
679
+ const barTiming = fillTiming(step - 1, 0, 1);
680
+
681
+ // --- Build indicator node ---
682
+ // 'auto': number for not-started, check/dot icon once reached
683
+ // 'number': always number badge
684
+ // 'none': nothing
685
+ // custom ReactNode (or `icon` prop): render as-is
686
+ let indicatorNode = null;
687
+ const customIcon = isCustomIndicator ? indicatorProp : null;
688
+
689
+ // Semantic `status` drives a distinct indicator glyph (default 'auto' mode,
690
+ // no custom icon), all sourced from the themed Icon registry so a step reads
691
+ // the same as the rest of the system:
692
+ // - success → the themed `success` glyph (same check-circle as a completed
693
+ // step), tinted success — i.e. a green check
694
+ // - warning → the themed `warning` glyph
695
+ // - error → the themed `error` glyph
696
+ // The current (in-progress) step always shows the current-step ring — its
697
+ // indicator "replaces" any status glyph. `accent` has no distinct glyph and
698
+ // falls through to the progress-derived default.
699
+ const statusGlyph = indicator === 'auto' && customIcon == null && !isActive && (status === 'success' || status === 'warning' || status === 'error') ? status : null;
700
+ if (indicator !== 'none') {
701
+ const showNumber = customIcon == null && statusGlyph == null && (indicator === 'number' || indicator === 'auto' && progress === 'not-started');
702
+ if (showNumber) {
703
+ // Status only fills the badge once the step is reached. A not-started
704
+ // step stays neutral — otherwise `accent` (which has no glyph to swap in)
705
+ // would paint an inverted accent badge on an upcoming step, making it
706
+ // read as active/completed.
707
+ const isReached = progress === 'completed' || progress === 'in-progress';
708
+ const numberColorStyle = isDisabled ? styles.numberDisabled : isReached && status === 'accent' ? styles.numberAccent : isReached && status === 'success' ? styles.numberSuccess : isReached && status === 'warning' ? styles.numberWarning : isReached && status === 'error' ? styles.numberError : progress === 'completed' ? styles.numberCompleted : progress === 'in-progress' ? styles.numberInProgress : styles.numberNotStarted;
709
+ indicatorNode = /*#__PURE__*/_jsx("div", {
710
+ "aria-hidden": "true",
711
+ ...mergeProps(themeProps('step-indicator', {
712
+ progress,
713
+ status: status ?? undefined
714
+ }), stylex.props(styles.numberBadge, numberColorStyle)),
715
+ children: step + 1
716
+ });
717
+ } else {
718
+ // Priority: explicit custom icon → status glyph (non-current steps) →
719
+ // progress-derived default (check when completed, ring when current).
720
+ const iconContent = customIcon != null ? customIcon : statusGlyph === 'success' ? /*#__PURE__*/_jsx(Icon, {
721
+ icon: "success",
722
+ size: "sm",
723
+ color: isDisabled ? 'disabled' : 'success'
724
+ }) : statusGlyph === 'warning' ? /*#__PURE__*/_jsx(Icon, {
725
+ icon: "warning",
726
+ size: "sm",
727
+ color: isDisabled ? 'disabled' : 'warning'
728
+ }) : statusGlyph === 'error' ? /*#__PURE__*/_jsx(Icon, {
729
+ icon: "error",
730
+ size: "sm",
731
+ color: isDisabled ? 'disabled' : 'error'
732
+ }) : progress === 'completed' ? /*#__PURE__*/_jsx(CheckCircleIcon, {}) : /*#__PURE__*/_jsx(CurrentIcon, {});
733
+
734
+ // Wrapper tint drives the currentColor glyphs (check-circle / ring /
735
+ // custom icon). The <Icon> status glyphs set their own color, but we tint
736
+ // the wrapper to match so the indicator's color reflects `status` too.
737
+ const iconColorStyle = isDisabled ? styles.iconDisabled : customIcon != null ? status === 'accent' ? styles.iconAccent : status === 'success' ? styles.iconSuccess : status === 'warning' ? styles.iconWarning : status === 'error' ? styles.iconError : progress === 'completed' ? styles.iconCompleted : progress === 'in-progress' ? styles.iconInProgress : styles.iconNotStarted : statusGlyph === 'success' ? styles.iconSuccess : statusGlyph === 'warning' ? styles.iconWarning : statusGlyph === 'error' ? styles.iconError : progress === 'completed' ? styles.iconCompleted : progress === 'in-progress' ? styles.iconInProgress : styles.iconNotStarted;
738
+ indicatorNode = /*#__PURE__*/_jsx("div", {
739
+ "aria-hidden": "true",
740
+ ...mergeProps(themeProps('step-indicator', {
741
+ progress,
742
+ status: status ?? undefined
743
+ }), stylex.props(styles.icon, iconColorStyle)),
744
+ children: iconContent
745
+ });
746
+ }
747
+ }
748
+
749
+ // Every indicator glyph above is aria-hidden (pure decoration), so the
750
+ // step's progress/status must also reach assistive tech as text
751
+ // (WCAG 1.4.1 / 1.3.1). `error`/`warning` announce the semantic status;
752
+ // `success` and a completed step both announce "completed". The current
753
+ // step is announced via aria-current="step" instead, and not-started steps
754
+ // stay silent (the default state needs no qualifier).
755
+ const statusText = status === 'error' ? t('@astryx.step.status.error') : status === 'warning' ? t('@astryx.step.status.warning') : status === 'success' || progress === 'completed' ? t('@astryx.step.status.completed') : null;
756
+
757
+ // Rendered next to the label: hidden text for static steps, and composed
758
+ // into the button's accessible name for clickable ones (an aria-label on
759
+ // the button would otherwise override the hidden text). Two separate keys
760
+ // rather than string concatenation so translations control the joiner.
761
+ const statusTextNode = isRenderable(statusText) ? /*#__PURE__*/_jsx(VisuallyHidden, {
762
+ children: statusText
763
+ }) : null;
764
+ const stepAriaLabel = statusText != null ? t('@astryx.step.goToStepWithStatus', {
765
+ stepNumber: step + 1,
766
+ label,
767
+ status: statusText
768
+ }) : t('@astryx.step.goToStep', {
769
+ stepNumber: step + 1,
770
+ label
771
+ });
772
+ const hasIndicator = indicator !== 'none';
773
+ const labelColorStyle = isDisabled ? styles.labelDisabled : progress === 'not-started' ? styles.labelNotStarted : isActive ? styles.labelInProgress : undefined;
774
+
775
+ // Indicator + Label row
776
+ const iconLabelNode = /*#__PURE__*/_jsxs("div", {
777
+ ...{
778
+ className: "x78zum5 x1q0g3np x6s0dn4 x1txdalj"
779
+ },
780
+ children: [indicatorNode, /*#__PURE__*/_jsx("span", {
781
+ ...stylex.props(styles.label, labelColorStyle),
782
+ children: label
783
+ }), statusTextNode, isOptional && /*#__PURE__*/_jsxs(_Fragment, {
784
+ children: [/*#__PURE__*/_jsx("span", {
785
+ ...{
786
+ className: "xjm74w1 xv1l7n4"
787
+ },
788
+ children: "\u2022"
789
+ }), /*#__PURE__*/_jsx("span", {
790
+ ...{
791
+ className: "xjm74w1 xv1l7n4"
792
+ },
793
+ children: t('@astryx.step.optional')
794
+ })]
795
+ }), endContent]
796
+ });
797
+ const descriptionNode = isRenderable(description) ? /*#__PURE__*/_jsx("div", {
798
+ ...{
799
+ 0: {
800
+ className: "x18gyask"
801
+ },
802
+ 1: {
803
+ className: "x31w388"
804
+ }
805
+ }[!!hasIndicator << 0],
806
+ children: /*#__PURE__*/_jsx("span", {
807
+ ...{
808
+ className: "x1lliihq x141an7d x1ojctns xv1l7n4"
809
+ },
810
+ children: description
811
+ })
812
+ }) : null;
813
+ const contentNode = isRenderable(children) ? /*#__PURE__*/_jsx("div", {
814
+ ...stylex.props(styles.stepContent, styles.contentIndent(separatedDensityInline, hasIndicator ? INDICATOR_GUTTER : '0px')),
815
+ children: children
816
+ }) : null;
817
+
818
+ // Theme data attributes reflect progress + optional semantic status.
819
+ const stepThemeProps = themeProps('step', {
820
+ progress,
821
+ status: status ?? undefined
822
+ });
823
+
824
+ // ======= ON-TRACK: indicator is a node on the connector =======
825
+ if (indicatorPosition === 'on-track') {
826
+ // Connector fill is purely progress-based (matches the separated bar):
827
+ // the segment before the indicator is "reached" once we're at/past this
828
+ // step; the segment after is filled only once this step is completed.
829
+ // `status` never recolors the connector — only the indicator.
830
+ const beforeFilled = step <= activeStep;
831
+ const afterFilled = step < activeStep;
832
+ // Both segments animate their fill along the track (see connectorTrack), so
833
+ // the pair is picked by orientation: the vertical column scales down its
834
+ // block axis, the horizontal row along the reading direction.
835
+ const segFilledStyle = isVertical ? styles.connectorFillV : styles.connectorFillH;
836
+ const segEmptyStyle = isVertical ? styles.connectorEmptyV : styles.connectorEmptyH;
837
+ const beforeSegStyle = beforeFilled ? segFilledStyle : segEmptyStyle;
838
+ const afterSegStyle = afterFilled ? segFilledStyle : segEmptyStyle;
839
+ // First/last connector visibility is decided structurally from the step's
840
+ // own <li> position (see otSegHiddenIfFirst/Last), not by counting children
841
+ // in the parent — so grouping steps in a fragment can't break it.
842
+
843
+ // A node-to-node span is drawn by two steps: this one's trailing segments
844
+ // leave its own node, the next one's leading cap arrives at the next node.
845
+ // Both flip on the same condition, so left to themselves they fill together
846
+ // and one gap between two nodes reads as two dashes converging on the space
847
+ // between them. Handing each its own slice of the span's time, in track
848
+ // order — the leaving half first, then the arriving one — is what closes
849
+ // that into a single line growing.
850
+ const arrivalShare = isVertical ? OT_ARRIVAL_SHARE_V : OT_ARRIVAL_SHARE_H;
851
+ const leavingShare = 1 - arrivalShare;
852
+ // A content slot's segment continues the leaving half below the row, so the
853
+ // two divide the leaving time between them; with no slot the rail segment
854
+ // takes all of it. Each step can work this out for its own trailing side
855
+ // alone: the arriving cap always takes the span's last `arrivalShare`, so
856
+ // the step drawing it never has to know whether the step before it carries
857
+ // a slot.
858
+ const hasContentSeg = isVertical && isRenderable(children);
859
+ const railShare = leavingShare * (hasContentSeg ? OT_RAIL_SHARE_OF_LEAVING : 1);
860
+ const contentShare = leavingShare - railShare;
861
+ const beforeTiming = fillTiming(step - 1, leavingShare, arrivalShare);
862
+ const railTiming = fillTiming(step, 0, railShare);
863
+ const contentTiming = fillTiming(step, railShare, contentShare);
864
+ const densitySpace = density === 'compact' ? spacingVars['--spacing-1'] : density === 'spacious' ? spacingVars['--spacing-3'] : spacingVars['--spacing-2'];
865
+ const labelLineNode = /*#__PURE__*/_jsxs("div", {
866
+ ...{
867
+ 0: {
868
+ className: "x78zum5 x1q0g3np x6s0dn4 xl56j7k x1a02dak xzye2dw"
869
+ },
870
+ 1: {
871
+ className: "x78zum5 x1q0g3np x6s0dn4 x1txdalj"
872
+ }
873
+ }[!!isVertical << 0],
874
+ children: [/*#__PURE__*/_jsx("span", {
875
+ ...stylex.props(styles.label, labelColorStyle),
876
+ children: label
877
+ }), statusTextNode, isOptional && /*#__PURE__*/_jsxs(_Fragment, {
878
+ children: [/*#__PURE__*/_jsx("span", {
879
+ ...{
880
+ className: "xjm74w1 xv1l7n4"
881
+ },
882
+ children: "\u2022"
883
+ }), /*#__PURE__*/_jsx("span", {
884
+ ...{
885
+ className: "xjm74w1 xv1l7n4"
886
+ },
887
+ children: t('@astryx.step.optional')
888
+ })]
889
+ }), endContent]
890
+ });
891
+ const otDescriptionNode = isRenderable(description) ? /*#__PURE__*/_jsx("span", {
892
+ ...{
893
+ className: "x1lliihq x141an7d x1ojctns xv1l7n4"
894
+ },
895
+ children: description
896
+ }) : null;
897
+ const otContentNode = !isRenderable(children) ? null : isVertical ? /*#__PURE__*/_jsxs("div", {
898
+ ...{
899
+ className: "x1n2onr6"
900
+ },
901
+ children: [/*#__PURE__*/_jsx("div", {
902
+ "aria-hidden": "true",
903
+ ...mergeProps(themeProps('step-connector'), stylex.props(
904
+ // connectorTrack first: it declares `position: relative` to
905
+ // anchor its fill layer, but this segment is absolutely placed
906
+ // on the rail beside the content slot and must keep that. An
907
+ // absolute box is a containing block too, so the fill still
908
+ // pins to it.
909
+ styles.connectorTrack, styles.otContentSegV(densitySpace), afterSegStyle, contentTiming, styles.otSegHiddenIfLast))
910
+ }), /*#__PURE__*/_jsx("div", {
911
+ ...stylex.props(styles.otContent, styles.contentIndent(densitySpace, INDICATOR_GUTTER)),
912
+ children: children
913
+ })]
914
+ }) : /*#__PURE__*/_jsx("div", {
915
+ ...{
916
+ className: "x1xye8es"
917
+ },
918
+ children: children
919
+ });
920
+ if (isVertical) {
921
+ const inner = /*#__PURE__*/_jsxs(_Fragment, {
922
+ children: [/*#__PURE__*/_jsxs("div", {
923
+ ...stylex.props(styles.otIndicatorColV, styles.otRailBridgeV(densitySpace)),
924
+ children: [/*#__PURE__*/_jsx("div", {
925
+ "aria-hidden": "true",
926
+ ...mergeProps(themeProps('step-connector'), stylex.props(styles.otSegBaseV, styles.otSegLeadV(densitySpace), styles.connectorTrack, beforeSegStyle, beforeTiming, styles.otSegHiddenIfFirst))
927
+ }), indicatorNode, /*#__PURE__*/_jsx("div", {
928
+ "aria-hidden": "true",
929
+ ...mergeProps(themeProps('step-connector'), stylex.props(styles.otSegBaseV, styles.otSegFlexV, styles.connectorTrack, afterSegStyle, railTiming, styles.otSegHiddenIfLast))
930
+ })]
931
+ }), /*#__PURE__*/_jsxs("div", {
932
+ ...{
933
+ className: "x78zum5 xdt5ytf x1nhvcw1 x98rzlu x1lsbc85 xeuugli"
934
+ },
935
+ children: [labelLineNode, otDescriptionNode]
936
+ })]
937
+ });
938
+ return /*#__PURE__*/_jsxs("li", {
939
+ ref: ref,
940
+ ...mergeProps(stepThemeProps, stylex.props(stepMarker, styles.otVerticalRoot, xstyle), className, style),
941
+ "aria-current": isActive ? 'step' : undefined,
942
+ "data-testid": dataTestId,
943
+ ...rest,
944
+ children: [isClickable ? /*#__PURE__*/_jsx("button", {
945
+ type: "button",
946
+ onClick: handleClick,
947
+ "aria-label": stepAriaLabel,
948
+ ...stylex.props(styles.otInteractive, styles.otRowWrap, styles.otRowPadV(densitySpace), focusOutlineStyles.focusVisible),
949
+ children: inner
950
+ }) : /*#__PURE__*/_jsx("div", {
951
+ ...stylex.props(styles.otRowWrap, styles.otRowPadV(densitySpace)),
952
+ children: inner
953
+ }), otContentNode]
954
+ });
955
+ }
956
+
957
+ // Horizontal on-track
958
+ const innerH = /*#__PURE__*/_jsxs(_Fragment, {
959
+ children: [/*#__PURE__*/_jsxs("div", {
960
+ ...{
961
+ className: "x78zum5 x1q0g3np x6s0dn4 xh8yej3"
962
+ },
963
+ children: [/*#__PURE__*/_jsx("div", {
964
+ "aria-hidden": "true",
965
+ ...mergeProps(themeProps('step-connector'), stylex.props(styles.otSegH, styles.connectorTrack, beforeSegStyle, beforeTiming, styles.otSegHiddenIfFirst))
966
+ }), indicatorNode, /*#__PURE__*/_jsx("div", {
967
+ "aria-hidden": "true",
968
+ ...mergeProps(themeProps('step-connector'), stylex.props(styles.otSegH, styles.connectorTrack, afterSegStyle, railTiming, styles.otSegHiddenIfLast))
969
+ })]
970
+ }), /*#__PURE__*/_jsxs("div", {
971
+ ...stylex.props(styles.otLabelWrapH, styles.otMarginTop(densitySpace)),
972
+ children: [labelLineNode, otDescriptionNode]
973
+ })]
974
+ });
975
+ return /*#__PURE__*/_jsxs("li", {
976
+ ref: ref,
977
+ ...mergeProps(stepThemeProps, stylex.props(stepMarker, styles.otHorizontalRoot, xstyle), className, style),
978
+ "aria-current": isActive ? 'step' : undefined,
979
+ "data-testid": dataTestId,
980
+ ...rest,
981
+ children: [isClickable ? /*#__PURE__*/_jsx("button", {
982
+ type: "button",
983
+ onClick: handleClick,
984
+ "aria-label": stepAriaLabel,
985
+ ...stylex.props(styles.otInteractive, styles.otColWrap, styles.otPadBlock(densitySpace), focusOutlineStyles.focusVisible),
986
+ children: innerH
987
+ }) : /*#__PURE__*/_jsx("div", {
988
+ ...stylex.props(styles.otColWrap, styles.otPadBlock(densitySpace)),
989
+ children: innerH
990
+ }), otContentNode]
991
+ });
992
+ }
993
+
994
+ // ======= VERTICAL =======
995
+ if (isVertical) {
996
+ return /*#__PURE__*/_jsxs("li", {
997
+ ref: ref,
998
+ ...mergeProps(stepThemeProps, stylex.props(stepMarker, styles.verticalRoot, xstyle), className, style),
999
+ "aria-current": isActive ? 'step' : undefined,
1000
+ "data-testid": dataTestId,
1001
+ ...rest,
1002
+ children: [/*#__PURE__*/_jsx("div", {
1003
+ ...mergeProps(themeProps('step-bar'), stylex.props(styles.verticalBar, styles.connectorTrack, isBarFilled ? styles.connectorFillV : styles.connectorEmptyV, barTiming)),
1004
+ "aria-hidden": "true"
1005
+ }), /*#__PURE__*/_jsxs("div", {
1006
+ ...{
1007
+ className: "x78zum5 xdt5ytf x98rzlu"
1008
+ },
1009
+ children: [isClickable ? /*#__PURE__*/_jsxs("button", {
1010
+ type: "button",
1011
+ onClick: handleClick,
1012
+ "aria-label": stepAriaLabel,
1013
+ ...stylex.props(styles.buttonReset, focusOutlineStyles.focusVisible, density === 'compact' && styles.densityCompact, density === 'balanced' && styles.densityBalanced, density === 'spacious' && styles.densitySpacious, styles.densityInline(separatedDensityInline)),
1014
+ children: [iconLabelNode, descriptionNode]
1015
+ }) : /*#__PURE__*/_jsxs("div", {
1016
+ ...stylex.props(density === 'compact' && styles.densityCompact, density === 'balanced' && styles.densityBalanced, density === 'spacious' && styles.densitySpacious, styles.densityInline(separatedDensityInline)),
1017
+ children: [iconLabelNode, descriptionNode]
1018
+ }), contentNode]
1019
+ })]
1020
+ });
1021
+ }
1022
+
1023
+ // ======= HORIZONTAL =======
1024
+ return /*#__PURE__*/_jsxs("li", {
1025
+ ref: ref,
1026
+ ...mergeProps(stepThemeProps, stylex.props(stepMarker, styles.horizontalStep, xstyle), className, style),
1027
+ "aria-current": isActive ? 'step' : undefined,
1028
+ "data-testid": dataTestId,
1029
+ ...rest,
1030
+ children: [/*#__PURE__*/_jsx("div", {
1031
+ ...mergeProps(themeProps('step-bar'), stylex.props(styles.horizontalBar, styles.connectorTrack, isBarFilled ? styles.connectorFillH : styles.connectorEmptyH, barTiming)),
1032
+ "aria-hidden": "true"
1033
+ }), isClickable ? /*#__PURE__*/_jsxs("button", {
1034
+ type: "button",
1035
+ onClick: handleClick,
1036
+ "aria-label": stepAriaLabel,
1037
+ ...stylex.props(styles.buttonReset, focusOutlineStyles.focusVisible, density === 'compact' && styles.densityCompact, density === 'balanced' && styles.densityBalanced, density === 'spacious' && styles.densitySpacious, styles.densityInline(separatedDensityInline)),
1038
+ children: [iconLabelNode, descriptionNode]
1039
+ }) : /*#__PURE__*/_jsxs("div", {
1040
+ ...stylex.props(density === 'compact' && styles.densityCompact, density === 'balanced' && styles.densityBalanced, density === 'spacious' && styles.densitySpacious, styles.densityInline(separatedDensityInline)),
1041
+ children: [iconLabelNode, descriptionNode]
1042
+ }), contentNode]
1043
+ });
1044
+ }
1045
+ Step.displayName = 'Step';