@astryxdesign/core 0.4.5 → 0.4.6-canary.cea9ecd

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 (538) hide show
  1. package/CHANGELOG.md +134 -0
  2. package/dist/Avatar/Avatar.d.ts +10 -5
  3. package/dist/Avatar/Avatar.d.ts.map +1 -1
  4. package/dist/Avatar/Avatar.js +139 -30
  5. package/dist/Avatar/AvatarStatusDot.d.ts +2 -1
  6. package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
  7. package/dist/Avatar/AvatarStatusDot.js +30 -4
  8. package/dist/Avatar/AvatarStatusLabelContext.d.ts +39 -0
  9. package/dist/Avatar/AvatarStatusLabelContext.d.ts.map +1 -0
  10. package/dist/Avatar/AvatarStatusLabelContext.js +41 -0
  11. package/dist/AvatarGroup/AvatarGroup.d.ts +3 -1
  12. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  13. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  14. package/dist/AvatarGroup/AvatarGroupOverflow.js +15 -9
  15. package/dist/Blockquote/Blockquote.d.ts +4 -3
  16. package/dist/Blockquote/Blockquote.d.ts.map +1 -1
  17. package/dist/Blockquote/Blockquote.js +9 -10
  18. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  19. package/dist/BottomSheet/BottomSheetPanel.js +21 -5
  20. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  21. package/dist/Breadcrumbs/BreadcrumbItem.js +47 -34
  22. package/dist/Button/Button.d.ts.map +1 -1
  23. package/dist/Button/Button.js +7 -7
  24. package/dist/Calendar/Calendar.d.ts.map +1 -1
  25. package/dist/Calendar/Calendar.js +21 -12
  26. package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
  27. package/dist/Calendar/hooks/useCalendarNavigation.js +8 -4
  28. package/dist/Calendar/styles.d.ts +2 -2
  29. package/dist/Calendar/styles.d.ts.map +1 -1
  30. package/dist/Calendar/styles.js +5 -5
  31. package/dist/Center/Center.d.ts +23 -1
  32. package/dist/Center/Center.d.ts.map +1 -1
  33. package/dist/Center/Center.js +12 -6
  34. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  35. package/dist/Chat/ChatComposer.js +3 -3
  36. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  37. package/dist/Chat/ChatComposerDrawer.js +2 -2
  38. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  39. package/dist/Chat/ChatToolCalls.js +2 -2
  40. package/dist/Chat/useChatDictation.d.ts +1 -1
  41. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  42. package/dist/Chat/useSpeechRecognition.d.ts +1 -1
  43. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  44. package/dist/Chat/useSpeechRecognition.js +4 -3
  45. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  46. package/dist/Chat/useTriggerMenu.js +2 -2
  47. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  48. package/dist/CheckboxInput/CheckboxInput.js +2 -2
  49. package/dist/Citation/Citation.d.ts.map +1 -1
  50. package/dist/Citation/Citation.js +5 -5
  51. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  52. package/dist/ClickableCard/ClickableCard.js +4 -4
  53. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  54. package/dist/CodeBlock/CodeBlock.js +1 -1
  55. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  56. package/dist/Collapsible/Collapsible.js +2 -2
  57. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  58. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  59. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  60. package/dist/ComplexSelector/ComplexSelector.js +6 -6
  61. package/dist/DateInput/DateInput.d.ts +31 -2
  62. package/dist/DateInput/DateInput.d.ts.map +1 -1
  63. package/dist/DateInput/DateInput.js +90 -22
  64. package/dist/DateInput/MonthScroller.d.ts +35 -0
  65. package/dist/DateInput/MonthScroller.d.ts.map +1 -0
  66. package/dist/DateInput/MonthScroller.js +658 -0
  67. package/dist/DateInput/MonthYearWheels.d.ts +24 -0
  68. package/dist/DateInput/MonthYearWheels.d.ts.map +1 -0
  69. package/dist/DateInput/MonthYearWheels.js +114 -0
  70. package/dist/DateInput/TouchDateField.d.ts +10 -0
  71. package/dist/DateInput/TouchDateField.d.ts.map +1 -0
  72. package/dist/DateInput/TouchDateField.js +810 -0
  73. package/dist/DateInput/Wheel.d.ts +41 -0
  74. package/dist/DateInput/Wheel.d.ts.map +1 -0
  75. package/dist/DateInput/Wheel.js +315 -0
  76. package/dist/DateInput/monthGeometry.d.ts +65 -0
  77. package/dist/DateInput/monthGeometry.d.ts.map +1 -0
  78. package/dist/DateInput/monthGeometry.js +98 -0
  79. package/dist/DateInput/tokens.stylex.d.ts +63 -0
  80. package/dist/DateInput/tokens.stylex.d.ts.map +1 -0
  81. package/dist/DateInput/tokens.stylex.js +74 -0
  82. package/dist/DateInput/useOwnScrollGesture.d.ts +41 -0
  83. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -0
  84. package/dist/DateInput/useOwnScrollGesture.js +202 -0
  85. package/dist/DateInput/usePointerDragScroll.d.ts +15 -0
  86. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -0
  87. package/dist/DateInput/usePointerDragScroll.js +216 -0
  88. package/dist/DateInput/useScrollSettle.d.ts +26 -0
  89. package/dist/DateInput/useScrollSettle.d.ts.map +1 -0
  90. package/dist/DateInput/useScrollSettle.js +149 -0
  91. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  92. package/dist/DateRangeInput/DateRangeInput.js +17 -14
  93. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  94. package/dist/DateTimeInput/DateTimeInput.js +17 -14
  95. package/dist/Dialog/Dialog.d.ts.map +1 -1
  96. package/dist/Dialog/Dialog.js +3 -3
  97. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  98. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +2 -2
  99. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  100. package/dist/DropdownMenu/DropdownMenuItem.js +2 -2
  101. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  102. package/dist/DropdownMenu/DropdownMenuRadioItem.js +2 -2
  103. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  104. package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -2
  105. package/dist/Field/FieldLabel.d.ts.map +1 -1
  106. package/dist/Field/FieldLabel.js +4 -4
  107. package/dist/Field/InputClearButton.d.ts.map +1 -1
  108. package/dist/Field/InputClearButton.js +6 -0
  109. package/dist/Field/inputStyles.stylex.d.ts +1 -1
  110. package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
  111. package/dist/Field/inputStyles.stylex.js +5 -5
  112. package/dist/FileInput/FileInput.d.ts.map +1 -1
  113. package/dist/FileInput/FileInput.js +6 -6
  114. package/dist/HoverCard/HoverCard.d.ts +13 -3
  115. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  116. package/dist/HoverCard/HoverCard.js +2 -0
  117. package/dist/HoverCard/index.d.ts +1 -1
  118. package/dist/HoverCard/index.d.ts.map +1 -1
  119. package/dist/HoverCard/useHoverCard.d.ts +17 -2
  120. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  121. package/dist/HoverCard/useHoverCard.js +78 -9
  122. package/dist/InputGroup/InputGroup.js +1 -1
  123. package/dist/Item/Item.d.ts +9 -1
  124. package/dist/Item/Item.d.ts.map +1 -1
  125. package/dist/Item/Item.js +52 -14
  126. package/dist/Layer/index.d.ts +4 -2
  127. package/dist/Layer/index.d.ts.map +1 -1
  128. package/dist/Layer/index.js +2 -0
  129. package/dist/Layer/useLayer.d.ts.map +1 -1
  130. package/dist/Layer/useLayer.js +3 -2
  131. package/dist/Layer/useTouchTrigger.d.ts +113 -0
  132. package/dist/Layer/useTouchTrigger.d.ts.map +1 -0
  133. package/dist/Layer/useTouchTrigger.js +241 -0
  134. package/dist/Layout/container.stylex.d.ts +4 -2
  135. package/dist/Layout/container.stylex.d.ts.map +1 -1
  136. package/dist/Layout/container.stylex.js +19 -11
  137. package/dist/Layout/index.d.ts +1 -0
  138. package/dist/Layout/index.d.ts.map +1 -1
  139. package/dist/Layout/index.js +4 -0
  140. package/dist/Layout/padding.stylex.d.ts +315 -12
  141. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  142. package/dist/Layout/padding.stylex.js +389 -12
  143. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  144. package/dist/Lightbox/Lightbox.js +5 -4
  145. package/dist/Link/Link.d.ts.map +1 -1
  146. package/dist/Link/Link.js +6 -6
  147. package/dist/MetadataList/MetadataList.d.ts.map +1 -1
  148. package/dist/MetadataList/MetadataList.js +1 -1
  149. package/dist/MobileNav/MobileNav.d.ts +1 -0
  150. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  151. package/dist/MobileNav/MobileNav.js +24 -6
  152. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  153. package/dist/MultiSelector/MultiSelector.js +8 -8
  154. package/dist/NavItem/navItemStyles.stylex.d.ts +4 -4
  155. package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
  156. package/dist/NavItem/navItemStyles.stylex.js +4 -4
  157. package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
  158. package/dist/NavMenu/NavHeadingMenuItem.js +3 -3
  159. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  160. package/dist/NumberInput/NumberInput.js +36 -8
  161. package/dist/Outline/Outline.d.ts.map +1 -1
  162. package/dist/Outline/Outline.js +3 -3
  163. package/dist/Pagination/Pagination.d.ts.map +1 -1
  164. package/dist/Pagination/Pagination.js +2 -2
  165. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  166. package/dist/PowerSearch/PowerSearch.js +11 -12
  167. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  168. package/dist/PowerSearch/PowerSearchToken.js +3 -1
  169. package/dist/PowerSearch/formatFilterValue.d.ts +11 -2
  170. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  171. package/dist/PowerSearch/formatFilterValue.js +23 -8
  172. package/dist/RadioList/RadioListItem.d.ts +2 -2
  173. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  174. package/dist/RadioList/RadioListItem.js +70 -40
  175. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  176. package/dist/Resizable/ResizeHandle.js +7 -7
  177. package/dist/Section/Section.d.ts +36 -1
  178. package/dist/Section/Section.d.ts.map +1 -1
  179. package/dist/Section/Section.js +12 -2
  180. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  181. package/dist/SegmentedControl/SegmentedControlItem.js +7 -2
  182. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  183. package/dist/SelectableCard/SelectableCard.js +3 -3
  184. package/dist/Selector/Selector.d.ts +26 -1
  185. package/dist/Selector/Selector.d.ts.map +1 -1
  186. package/dist/Selector/Selector.js +93 -20
  187. package/dist/Selector/SelectorOption.d.ts +14 -1
  188. package/dist/Selector/SelectorOption.d.ts.map +1 -1
  189. package/dist/Selector/SelectorOption.js +6 -0
  190. package/dist/Selector/SelectorRowLayoutContext.d.ts +8 -0
  191. package/dist/Selector/SelectorRowLayoutContext.d.ts.map +1 -0
  192. package/dist/Selector/SelectorRowLayoutContext.js +27 -0
  193. package/dist/Selector/types.d.ts +1 -0
  194. package/dist/Selector/types.d.ts.map +1 -1
  195. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  196. package/dist/SideNav/SideNavHeading.js +4 -4
  197. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  198. package/dist/SideNav/SideNavItem.js +3 -3
  199. package/dist/Slider/Slider.d.ts.map +1 -1
  200. package/dist/Slider/Slider.js +7 -7
  201. package/dist/Stack/Stack.d.ts +23 -1
  202. package/dist/Stack/Stack.d.ts.map +1 -1
  203. package/dist/Stack/Stack.js +12 -6
  204. package/dist/Switch/Switch.d.ts.map +1 -1
  205. package/dist/Switch/Switch.js +2 -2
  206. package/dist/TabList/Tab.d.ts.map +1 -1
  207. package/dist/TabList/Tab.js +1 -1
  208. package/dist/TabList/TabMenu.d.ts.map +1 -1
  209. package/dist/TabList/TabMenu.js +3 -3
  210. package/dist/Table/TableRow.js +4 -4
  211. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  212. package/dist/Table/plugins/columnResize/useTableColumnResize.js +1 -1
  213. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  214. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -2
  215. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  216. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +2 -2
  217. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  218. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +2 -2
  219. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  220. package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
  221. package/dist/Table/plugins/sortable/useTableSortableState.d.ts +5 -3
  222. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  223. package/dist/Table/plugins/sortable/useTableSortableState.js +12 -9
  224. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  225. package/dist/Table/plugins/tree/useTableTreeData.js +3 -3
  226. package/dist/TextArea/TextArea.js +1 -1
  227. package/dist/TextInput/TextInput.js +1 -1
  228. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  229. package/dist/Thumbnail/Thumbnail.js +3 -3
  230. package/dist/TimeInput/TimeInput.js +2 -2
  231. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  232. package/dist/Timestamp/Timestamp.js +6 -4
  233. package/dist/Timestamp/formatInstant.d.ts +3 -2
  234. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  235. package/dist/Timestamp/formatInstant.js +8 -8
  236. package/dist/Timestamp/tooltipEntries.d.ts +2 -1
  237. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  238. package/dist/Timestamp/tooltipEntries.js +5 -3
  239. package/dist/Toast/Toast.d.ts +4 -3
  240. package/dist/Toast/Toast.d.ts.map +1 -1
  241. package/dist/Toast/Toast.js +10 -7
  242. package/dist/Token/Token.d.ts.map +1 -1
  243. package/dist/Token/Token.js +6 -6
  244. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  245. package/dist/Tokenizer/Tokenizer.js +1 -1
  246. package/dist/Tooltip/Tooltip.d.ts +16 -3
  247. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  248. package/dist/Tooltip/Tooltip.js +2 -0
  249. package/dist/Tooltip/index.d.ts +1 -1
  250. package/dist/Tooltip/index.d.ts.map +1 -1
  251. package/dist/Tooltip/useTooltip.d.ts +21 -2
  252. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  253. package/dist/Tooltip/useTooltip.js +71 -13
  254. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  255. package/dist/TopNav/TopNavHeading.js +4 -4
  256. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  257. package/dist/TopNav/TopNavItem.js +3 -3
  258. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  259. package/dist/TopNav/TopNavMegaMenu.js +2 -2
  260. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  261. package/dist/TopNav/TopNavMegaMenuItem.js +2 -2
  262. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  263. package/dist/TopNav/TopNavMenu.js +4 -4
  264. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  265. package/dist/TreeList/TreeListItem.js +7 -7
  266. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  267. package/dist/Typeahead/BaseTypeahead.js +2 -2
  268. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  269. package/dist/Typeahead/Typeahead.js +1 -1
  270. package/dist/astryx.css +124 -62
  271. package/dist/hooks/containerReveal.stylex.d.ts.map +1 -1
  272. package/dist/hooks/containerReveal.stylex.js +18 -18
  273. package/dist/hooks/scrollbarGutter.d.ts +28 -0
  274. package/dist/hooks/scrollbarGutter.d.ts.map +1 -0
  275. package/dist/hooks/scrollbarGutter.js +103 -0
  276. package/dist/hooks/useAutoMediaMode.d.ts +31 -0
  277. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -0
  278. package/dist/hooks/useAutoMediaMode.js +201 -0
  279. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  280. package/dist/hooks/useInputStatusIcon.js +1 -1
  281. package/dist/hooks/useListFocus.d.ts +5 -2
  282. package/dist/hooks/useListFocus.d.ts.map +1 -1
  283. package/dist/hooks/useListFocus.js +12 -6
  284. package/dist/hooks/useScrollLock.d.ts +4 -0
  285. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  286. package/dist/hooks/useScrollLock.js +13 -1
  287. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  288. package/dist/i18n/InternationalizationContext.js +2 -0
  289. package/dist/i18n/index.d.ts +6 -0
  290. package/dist/i18n/index.d.ts.map +1 -1
  291. package/dist/i18n/index.js +6 -0
  292. package/dist/i18n/useCollator.d.ts +12 -0
  293. package/dist/i18n/useCollator.d.ts.map +1 -0
  294. package/dist/i18n/useCollator.js +40 -0
  295. package/dist/i18n/useLocale.d.ts +3 -0
  296. package/dist/i18n/useLocale.d.ts.map +1 -0
  297. package/dist/i18n/useLocale.js +31 -0
  298. package/dist/theme/MediaTheme.d.ts +25 -5
  299. package/dist/theme/MediaTheme.d.ts.map +1 -1
  300. package/dist/theme/MediaTheme.js +31 -6
  301. package/dist/theme/defineTheme.d.ts +5 -0
  302. package/dist/theme/defineTheme.d.ts.map +1 -1
  303. package/dist/theme/defineTheme.js +5 -0
  304. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  305. package/dist/theme/derivedVarRegistry.js +7 -0
  306. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  307. package/dist/theme/generateThemeRules.js +66 -5
  308. package/dist/theme/index.d.ts +1 -1
  309. package/dist/theme/index.d.ts.map +1 -1
  310. package/dist/theme/syntax/index.d.ts +6 -0
  311. package/dist/theme/syntax/index.d.ts.map +1 -1
  312. package/dist/theme/syntax/index.js +7 -2
  313. package/dist/utils/dateParser.d.ts +4 -3
  314. package/dist/utils/dateParser.d.ts.map +1 -1
  315. package/dist/utils/dateParser.js +8 -8
  316. package/dist/utils/index.d.ts +1 -1
  317. package/dist/utils/index.d.ts.map +1 -1
  318. package/dist/utils/index.js +1 -1
  319. package/dist/utils/plainDate.d.ts +5 -2
  320. package/dist/utils/plainDate.d.ts.map +1 -1
  321. package/dist/utils/plainDate.js +20 -4
  322. package/locales/en.json +28 -0
  323. package/locales/pseudo.json +21 -0
  324. package/package.json +3 -3
  325. package/src/Avatar/Avatar.doc.mjs +10 -6
  326. package/src/Avatar/Avatar.test.tsx +219 -1
  327. package/src/Avatar/Avatar.tsx +179 -37
  328. package/src/Avatar/AvatarStatusDot.tsx +30 -4
  329. package/src/Avatar/AvatarStatusLabelContext.ts +47 -0
  330. package/src/AvatarGroup/AvatarGroup.doc.mjs +10 -6
  331. package/src/AvatarGroup/AvatarGroup.test.tsx +62 -0
  332. package/src/AvatarGroup/AvatarGroup.tsx +3 -1
  333. package/src/AvatarGroup/AvatarGroupOverflow.tsx +31 -8
  334. package/src/Banner/Banner.doc.mjs +2 -0
  335. package/src/Blockquote/Blockquote.doc.mjs +30 -7
  336. package/src/Blockquote/Blockquote.test.tsx +34 -3
  337. package/src/Blockquote/Blockquote.tsx +11 -9
  338. package/src/BottomSheet/BottomSheet.doc.mjs +3 -3
  339. package/src/BottomSheet/BottomSheet.test.tsx +24 -0
  340. package/src/BottomSheet/BottomSheetPanel.test.tsx +91 -0
  341. package/src/BottomSheet/BottomSheetPanel.tsx +58 -3
  342. package/src/Breadcrumbs/BreadcrumbItem.tsx +36 -23
  343. package/src/Breadcrumbs/Breadcrumbs.doc.mjs +26 -2
  344. package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -0
  345. package/src/Button/Button.tsx +12 -9
  346. package/src/Calendar/Calendar.tsx +15 -9
  347. package/src/Calendar/hooks/useCalendarNavigation.ts +6 -4
  348. package/src/Calendar/styles.ts +8 -5
  349. package/src/Center/Center.doc.mjs +48 -0
  350. package/src/Center/Center.test.tsx +158 -0
  351. package/src/Center/Center.tsx +50 -9
  352. package/src/Chat/ChatComposer.tsx +11 -5
  353. package/src/Chat/ChatComposerDrawer.tsx +4 -1
  354. package/src/Chat/ChatToolCalls.tsx +13 -4
  355. package/src/Chat/{useChatDictation.test.ts → useChatDictation.test.tsx} +29 -14
  356. package/src/Chat/useChatDictation.ts +1 -1
  357. package/src/Chat/useSpeechRecognition.ts +5 -3
  358. package/src/Chat/useTriggerMenu.tsx +4 -1
  359. package/src/CheckboxInput/CheckboxInput.tsx +5 -2
  360. package/src/Citation/Citation.test.tsx +6 -1
  361. package/src/Citation/Citation.tsx +11 -5
  362. package/src/ClickableCard/ClickableCard.tsx +7 -4
  363. package/src/CodeBlock/CodeBlock.tsx +4 -1
  364. package/src/Collapsible/Collapsible.tsx +5 -2
  365. package/src/CommandPalette/CommandPaletteItem.tsx +6 -3
  366. package/src/ComplexSelector/ComplexSelector.doc.mjs +10 -0
  367. package/src/ComplexSelector/ComplexSelector.tsx +14 -7
  368. package/src/DateInput/DateInput.test.tsx +17 -1
  369. package/src/DateInput/DateInput.tsx +93 -21
  370. package/src/DateInput/DateInputTouch.test.tsx +2582 -0
  371. package/src/DateInput/MonthScroller.tsx +878 -0
  372. package/src/DateInput/MonthYearWheels.tsx +147 -0
  373. package/src/DateInput/TouchDateField.tsx +1223 -0
  374. package/src/DateInput/Wheel.tsx +473 -0
  375. package/src/DateInput/monthGeometry.ts +118 -0
  376. package/src/DateInput/tokens.stylex.ts +99 -0
  377. package/src/DateInput/useOwnScrollGesture.ts +227 -0
  378. package/src/DateInput/usePointerDragScroll.ts +220 -0
  379. package/src/DateInput/useScrollSettle.ts +164 -0
  380. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  381. package/src/DateRangeInput/DateRangeInput.tsx +31 -13
  382. package/src/DateTimeInput/DateTimeInput.tsx +25 -9
  383. package/src/Dialog/Dialog.test.tsx +24 -0
  384. package/src/Dialog/Dialog.tsx +3 -0
  385. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -2
  386. package/src/DropdownMenu/DropdownMenuItem.tsx +5 -2
  387. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -2
  388. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -2
  389. package/src/Field/Field.doc.mjs +2 -0
  390. package/src/Field/FieldLabel.tsx +9 -3
  391. package/src/Field/InputClearButton.test.tsx +110 -3
  392. package/src/Field/InputClearButton.tsx +38 -0
  393. package/src/Field/inputStyles.stylex.ts +17 -13
  394. package/src/FileInput/FileInput.tsx +15 -8
  395. package/src/FormLayout/FormLayout.doc.mjs +1 -1
  396. package/src/HoverCard/HoverCard.doc.mjs +18 -0
  397. package/src/HoverCard/HoverCard.test.tsx +189 -0
  398. package/src/HoverCard/HoverCard.tsx +22 -2
  399. package/src/HoverCard/index.ts +1 -0
  400. package/src/HoverCard/useHoverCard.doc.mjs +2 -0
  401. package/src/HoverCard/useHoverCard.tsx +103 -7
  402. package/src/InputGroup/InputGroup.tsx +1 -1
  403. package/src/Item/Item.doc.mjs +1 -0
  404. package/src/Item/Item.test.tsx +50 -0
  405. package/src/Item/Item.tsx +54 -6
  406. package/src/Layer/index.ts +10 -0
  407. package/src/Layer/useLayer.tsx +13 -2
  408. package/src/Layer/useTouchTrigger.test.ts +70 -0
  409. package/src/Layer/useTouchTrigger.ts +366 -0
  410. package/src/Layout/Layout.doc.mjs +18 -0
  411. package/src/Layout/container.stylex.ts +11 -3
  412. package/src/Layout/index.ts +4 -0
  413. package/src/Layout/overlayPaddingReset.test.tsx +222 -0
  414. package/src/Layout/padding.stylex.ts +192 -12
  415. package/src/Lightbox/Lightbox.tsx +11 -3
  416. package/src/Link/Link.tsx +9 -6
  417. package/src/MetadataList/MetadataList.tsx +4 -1
  418. package/src/MobileNav/MobileNav.tsx +61 -5
  419. package/src/MobileNav/MobileNavEntryAnimation.test.tsx +212 -0
  420. package/src/MobileNav/MobileNavScrollbarGutter.test.tsx +109 -0
  421. package/src/MultiSelector/MultiSelector.test.tsx +1 -1
  422. package/src/MultiSelector/MultiSelector.tsx +26 -10
  423. package/src/NavItem/navItemStyles.stylex.ts +7 -4
  424. package/src/NavMenu/NavHeadingMenuItem.tsx +6 -3
  425. package/src/NumberInput/NumberInput.doc.mjs +24 -0
  426. package/src/NumberInput/NumberInput.test.tsx +138 -0
  427. package/src/NumberInput/NumberInput.tsx +47 -8
  428. package/src/Outline/Outline.tsx +5 -2
  429. package/src/Pagination/Pagination.tsx +5 -2
  430. package/src/Popover/Popover.test.tsx +27 -1
  431. package/src/PowerSearch/PowerSearch.tsx +17 -8
  432. package/src/PowerSearch/PowerSearchToken.tsx +3 -0
  433. package/src/PowerSearch/formatFilterValue.test.ts +22 -2
  434. package/src/PowerSearch/formatFilterValue.ts +31 -6
  435. package/src/RadioList/RadioList.doc.mjs +1 -1
  436. package/src/RadioList/RadioList.test.tsx +170 -2
  437. package/src/RadioList/RadioListItem.tsx +88 -53
  438. package/src/Resizable/ResizeHandle.test.tsx +22 -0
  439. package/src/Resizable/ResizeHandle.tsx +25 -7
  440. package/src/Section/Section.doc.mjs +55 -0
  441. package/src/Section/Section.test.tsx +201 -4
  442. package/src/Section/Section.tsx +69 -0
  443. package/src/SegmentedControl/SegmentedControl.test.tsx +31 -0
  444. package/src/SegmentedControl/SegmentedControlItem.tsx +15 -3
  445. package/src/SelectableCard/SelectableCard.tsx +6 -3
  446. package/src/Selector/Selector.doc.mjs +16 -2
  447. package/src/Selector/Selector.test.tsx +525 -1
  448. package/src/Selector/Selector.tsx +180 -25
  449. package/src/Selector/SelectorOption.doc.mjs +7 -0
  450. package/src/Selector/SelectorOption.tsx +21 -0
  451. package/src/Selector/SelectorRowLayoutContext.ts +32 -0
  452. package/src/Selector/types.ts +4 -4
  453. package/src/SideNav/SideNavHeading.tsx +14 -5
  454. package/src/SideNav/SideNavItem.tsx +9 -3
  455. package/src/Slider/Slider.tsx +25 -6
  456. package/src/Stack/Stack.doc.mjs +72 -0
  457. package/src/Stack/Stack.test.tsx +156 -0
  458. package/src/Stack/Stack.tsx +50 -8
  459. package/src/Switch/Switch.tsx +5 -2
  460. package/src/TabList/Tab.tsx +4 -1
  461. package/src/TabList/TabMenu.tsx +9 -3
  462. package/src/Table/TableRow.tsx +4 -4
  463. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +6 -2
  464. package/src/Table/plugins/filtering/useTableFiltering.tsx +4 -1
  465. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +10 -3
  466. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +6 -3
  467. package/src/Table/plugins/sortable/useTableSortable.tsx +4 -1
  468. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +34 -0
  469. package/src/Table/plugins/sortable/useTableSortableState.tsx +26 -23
  470. package/src/Table/plugins/tree/useTableTreeData.tsx +10 -4
  471. package/src/TextArea/TextArea.doc.mjs +1 -1
  472. package/src/TextArea/TextArea.tsx +1 -1
  473. package/src/TextInput/TextInput.tsx +1 -1
  474. package/src/Thumbnail/Thumbnail.tsx +9 -3
  475. package/src/TimeInput/TimeInput.tsx +1 -1
  476. package/src/Timestamp/Timestamp.test.tsx +27 -7
  477. package/src/Timestamp/Timestamp.tsx +8 -4
  478. package/src/Timestamp/formatInstant.ts +9 -7
  479. package/src/Timestamp/tooltipEntries.test.ts +11 -6
  480. package/src/Timestamp/tooltipEntries.ts +6 -2
  481. package/src/Toast/Toast.tsx +9 -7
  482. package/src/Token/Token.tsx +14 -5
  483. package/src/Tokenizer/Tokenizer.tsx +4 -1
  484. package/src/Tooltip/Tooltip.doc.mjs +18 -0
  485. package/src/Tooltip/Tooltip.test.tsx +254 -1
  486. package/src/Tooltip/Tooltip.tsx +22 -2
  487. package/src/Tooltip/index.ts +1 -0
  488. package/src/Tooltip/useTooltip.doc.mjs +2 -0
  489. package/src/Tooltip/useTooltip.tsx +99 -21
  490. package/src/TopNav/TopNavHeading.tsx +13 -4
  491. package/src/TopNav/TopNavItem.tsx +6 -3
  492. package/src/TopNav/TopNavMegaMenu.tsx +5 -2
  493. package/src/TopNav/TopNavMegaMenuItem.tsx +5 -2
  494. package/src/TopNav/TopNavMenu.tsx +10 -4
  495. package/src/TreeList/TreeListItem.tsx +22 -7
  496. package/src/Typeahead/BaseTypeahead.tsx +5 -2
  497. package/src/Typeahead/Typeahead.tsx +4 -1
  498. package/src/hooks/containerReveal.stylex.ts +54 -18
  499. package/src/hooks/scrollbarGutter.test.ts +167 -0
  500. package/src/hooks/scrollbarGutter.ts +121 -0
  501. package/src/hooks/useAutoMediaMode.test.ts +109 -0
  502. package/src/hooks/useAutoMediaMode.ts +233 -0
  503. package/src/hooks/useInputStatusIcon.tsx +4 -1
  504. package/src/hooks/useListFocus.doc.mjs +2 -2
  505. package/src/hooks/useListFocus.test.tsx +65 -3
  506. package/src/hooks/useListFocus.ts +15 -7
  507. package/src/hooks/useScrollLock.doc.mjs +4 -4
  508. package/src/hooks/useScrollLock.test.ts +73 -0
  509. package/src/hooks/useScrollLock.ts +14 -0
  510. package/src/i18n/InternationalizationContext.ts +2 -0
  511. package/src/i18n/__tests__/e2e-powersearch.test.tsx +37 -1
  512. package/src/i18n/__tests__/useCollator.test.tsx +115 -0
  513. package/src/i18n/__tests__/useLocale.test.tsx +52 -0
  514. package/src/i18n/index.ts +6 -0
  515. package/src/i18n/useCollator.doc.mjs +84 -0
  516. package/src/i18n/useCollator.ts +44 -0
  517. package/src/i18n/useLocale.doc.mjs +70 -0
  518. package/src/i18n/useLocale.ts +34 -0
  519. package/src/i18n/useTranslator.doc.mjs +1 -1
  520. package/src/reset.css +9 -2
  521. package/src/reset.test.ts +22 -0
  522. package/src/theme/MediaTheme.doc.mjs +23 -4
  523. package/src/theme/MediaTheme.dom.test.tsx +97 -0
  524. package/src/theme/MediaTheme.tsx +42 -7
  525. package/src/theme/defineTheme.test.ts +9 -3
  526. package/src/theme/defineTheme.ts +5 -0
  527. package/src/theme/derivedVarRegistry.test.ts +19 -5
  528. package/src/theme/derivedVarRegistry.ts +4 -0
  529. package/src/theme/generateThemeRules.test.ts +118 -0
  530. package/src/theme/generateThemeRules.ts +83 -5
  531. package/src/theme/index.ts +1 -1
  532. package/src/theme/syntax/index.ts +6 -2
  533. package/src/theme/syntax/serverSafeSyntax.test.ts +68 -0
  534. package/src/utils/dateParser.test.ts +20 -0
  535. package/src/utils/dateParser.ts +14 -7
  536. package/src/utils/index.ts +2 -0
  537. package/src/utils/plainDate.test.ts +6 -0
  538. package/src/utils/plainDate.ts +21 -4
@@ -46,12 +46,36 @@ export const docs = {
46
46
  description:
47
47
  'Inline (horizontal) padding. Overrides padding on the inline axis when both are set.',
48
48
  },
49
+ {
50
+ name: 'paddingInlineStart',
51
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
52
+ description:
53
+ 'Inline-start padding, using the spacing scale (left in LTR, right in RTL). Overrides paddingInline and padding on that edge only.',
54
+ },
55
+ {
56
+ name: 'paddingInlineEnd',
57
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
58
+ description:
59
+ 'Inline-end padding, using the spacing scale (right in LTR, left in RTL). Overrides paddingInline and padding on that edge only.',
60
+ },
49
61
  {
50
62
  name: 'paddingBlock',
51
63
  type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
52
64
  description:
53
65
  'Block (vertical) padding. Overrides padding on the block axis when both are set.',
54
66
  },
67
+ {
68
+ name: 'paddingBlockStart',
69
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
70
+ description:
71
+ 'Block-start (top) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
72
+ },
73
+ {
74
+ name: 'paddingBlockEnd',
75
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
76
+ description:
77
+ 'Block-end (bottom) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
78
+ },
55
79
  {
56
80
  name: 'isScrollable',
57
81
  type: 'boolean',
@@ -150,12 +174,36 @@ export const docs = {
150
174
  description:
151
175
  'Inline (horizontal) padding, using the spacing scale. Overrides padding on the inline axis when both are set.',
152
176
  },
177
+ {
178
+ name: 'paddingInlineStart',
179
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
180
+ description:
181
+ 'Inline-start padding, using the spacing scale (left in LTR, right in RTL). Overrides paddingInline and padding on that edge only.',
182
+ },
183
+ {
184
+ name: 'paddingInlineEnd',
185
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
186
+ description:
187
+ 'Inline-end padding, using the spacing scale (right in LTR, left in RTL). Overrides paddingInline and padding on that edge only.',
188
+ },
153
189
  {
154
190
  name: 'paddingBlock',
155
191
  type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
156
192
  description:
157
193
  'Block (vertical) padding, using the spacing scale. Overrides padding on the block axis when both are set.',
158
194
  },
195
+ {
196
+ name: 'paddingBlockStart',
197
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
198
+ description:
199
+ 'Block-start (top) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
200
+ },
201
+ {
202
+ name: 'paddingBlockEnd',
203
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
204
+ description:
205
+ 'Block-end (bottom) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
206
+ },
159
207
  {
160
208
  name: 'isScrollable',
161
209
  type: 'boolean',
@@ -253,12 +301,36 @@ export const docs = {
253
301
  description:
254
302
  'Inline (horizontal) padding, using the spacing scale. Overrides padding on the inline axis when both are set.',
255
303
  },
304
+ {
305
+ name: 'paddingInlineStart',
306
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
307
+ description:
308
+ 'Inline-start padding, using the spacing scale (left in LTR, right in RTL). Overrides paddingInline and padding on that edge only.',
309
+ },
310
+ {
311
+ name: 'paddingInlineEnd',
312
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
313
+ description:
314
+ 'Inline-end padding, using the spacing scale (right in LTR, left in RTL). Overrides paddingInline and padding on that edge only.',
315
+ },
256
316
  {
257
317
  name: 'paddingBlock',
258
318
  type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
259
319
  description:
260
320
  'Block (vertical) padding, using the spacing scale. Overrides padding on the block axis when both are set.',
261
321
  },
322
+ {
323
+ name: 'paddingBlockStart',
324
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
325
+ description:
326
+ 'Block-start (top) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
327
+ },
328
+ {
329
+ name: 'paddingBlockEnd',
330
+ type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
331
+ description:
332
+ 'Block-end (bottom) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
333
+ },
262
334
  {
263
335
  name: 'isScrollable',
264
336
  type: 'boolean',
@@ -13,6 +13,22 @@ import {describe, it, expect, vi} from 'vitest';
13
13
  import {render, screen} from '@testing-library/react';
14
14
  import {Stack} from './Stack';
15
15
 
16
+ /**
17
+ * The functional class output, as an order-insensitive set. StyleX's dev
18
+ * runtime also emits readable debug classes naming the style object a
19
+ * declaration came from ("padding__paddingBlockStyles.2"); those record
20
+ * provenance rather than applied CSS and survive even when the declaration
21
+ * they name loses a merge, so they are dropped here.
22
+ */
23
+ function classSet(el: HTMLElement): Set<string> {
24
+ return new Set(
25
+ el.className
26
+ .split(' ')
27
+ .filter(Boolean)
28
+ .filter(c => !c.includes('__') && !c.includes('.')),
29
+ );
30
+ }
31
+
16
32
  describe('Stack', () => {
17
33
  it('defaults to vertical direction', () => {
18
34
  render(
@@ -314,4 +330,144 @@ describe('Stack', () => {
314
330
  const withScroll = screen.getByTestId('stack').className;
315
331
  expect(withScroll).not.toBe(withoutScroll);
316
332
  });
333
+
334
+ it('applies a class when paddingBlockStart is set on its own', () => {
335
+ const {rerender} = render(
336
+ <Stack data-testid="stack">
337
+ <div>Content</div>
338
+ </Stack>,
339
+ );
340
+ const baseline = screen.getByTestId('stack').className;
341
+ rerender(
342
+ <Stack paddingBlockStart={2} data-testid="stack">
343
+ <div>Content</div>
344
+ </Stack>,
345
+ );
346
+ expect(screen.getByTestId('stack').className).not.toBe(baseline);
347
+ });
348
+
349
+ it('lets paddingBlockStart/paddingBlockEnd override only their own edge', () => {
350
+ const {rerender} = render(
351
+ <Stack padding={4} paddingBlockStart={2} data-testid="stack">
352
+ <div>Content</div>
353
+ </Stack>,
354
+ );
355
+ const perEdge = classSet(screen.getByTestId('stack'));
356
+ rerender(
357
+ <Stack
358
+ paddingInline={4}
359
+ paddingBlockStart={2}
360
+ paddingBlockEnd={4}
361
+ data-testid="stack">
362
+ <div>Content</div>
363
+ </Stack>,
364
+ );
365
+ expect(perEdge).toEqual(classSet(screen.getByTestId('stack')));
366
+ });
367
+
368
+ it('gives paddingBlockEnd precedence over paddingBlock', () => {
369
+ const {rerender} = render(
370
+ <Stack paddingBlock={6} paddingBlockEnd={0} data-testid="stack">
371
+ <div>Content</div>
372
+ </Stack>,
373
+ );
374
+ const overridden = classSet(screen.getByTestId('stack'));
375
+ rerender(
376
+ <Stack paddingBlockStart={6} paddingBlockEnd={0} data-testid="stack">
377
+ <div>Content</div>
378
+ </Stack>,
379
+ );
380
+ expect(overridden).toEqual(classSet(screen.getByTestId('stack')));
381
+ });
382
+
383
+ it('leaves padding/paddingBlock output unchanged when no edge prop is set', () => {
384
+ const {rerender} = render(
385
+ <Stack padding={3} data-testid="stack">
386
+ <div>Content</div>
387
+ </Stack>,
388
+ );
389
+ const uniform = classSet(screen.getByTestId('stack'));
390
+ rerender(
391
+ <Stack paddingInline={3} paddingBlock={3} data-testid="stack">
392
+ <div>Content</div>
393
+ </Stack>,
394
+ );
395
+ expect(uniform).toEqual(classSet(screen.getByTestId('stack')));
396
+ });
397
+
398
+ it('applies a class when paddingInlineStart is set on its own', () => {
399
+ const {rerender} = render(
400
+ <Stack data-testid="stack">
401
+ <div>Content</div>
402
+ </Stack>,
403
+ );
404
+ const baseline = screen.getByTestId('stack').className;
405
+ rerender(
406
+ <Stack paddingInlineStart={2} data-testid="stack">
407
+ <div>Content</div>
408
+ </Stack>,
409
+ );
410
+ expect(screen.getByTestId('stack').className).not.toBe(baseline);
411
+ });
412
+
413
+ it('lets paddingInlineStart/paddingInlineEnd override only their own edge', () => {
414
+ const {rerender} = render(
415
+ <Stack padding={4} paddingInlineStart={2} data-testid="stack">
416
+ <div>Content</div>
417
+ </Stack>,
418
+ );
419
+ const perEdge = classSet(screen.getByTestId('stack'));
420
+ rerender(
421
+ <Stack
422
+ paddingInlineStart={2}
423
+ paddingInlineEnd={4}
424
+ paddingBlock={4}
425
+ data-testid="stack">
426
+ <div>Content</div>
427
+ </Stack>,
428
+ );
429
+ expect(perEdge).toEqual(classSet(screen.getByTestId('stack')));
430
+ });
431
+
432
+ it('gives paddingInlineEnd precedence over paddingInline', () => {
433
+ const {rerender} = render(
434
+ <Stack paddingInline={6} paddingInlineEnd={0} data-testid="stack">
435
+ <div>Content</div>
436
+ </Stack>,
437
+ );
438
+ const overridden = classSet(screen.getByTestId('stack'));
439
+ rerender(
440
+ <Stack paddingInlineStart={6} paddingInlineEnd={0} data-testid="stack">
441
+ <div>Content</div>
442
+ </Stack>,
443
+ );
444
+ expect(overridden).toEqual(classSet(screen.getByTestId('stack')));
445
+ });
446
+
447
+ it('resolves all four edges independently', () => {
448
+ // One prop per edge, each a different step: the four-edge spelling and the
449
+ // shorthand-plus-overrides spelling must agree.
450
+ const {rerender} = render(
451
+ <Stack
452
+ paddingInlineStart={1}
453
+ paddingInlineEnd={2}
454
+ paddingBlockStart={3}
455
+ paddingBlockEnd={4}
456
+ data-testid="stack">
457
+ <div>Content</div>
458
+ </Stack>,
459
+ );
460
+ const explicit = classSet(screen.getByTestId('stack'));
461
+ rerender(
462
+ <Stack
463
+ padding={4}
464
+ paddingInlineStart={1}
465
+ paddingInlineEnd={2}
466
+ paddingBlockStart={3}
467
+ data-testid="stack">
468
+ <div>Content</div>
469
+ </Stack>,
470
+ );
471
+ expect(explicit).toEqual(classSet(screen.getByTestId('stack')));
472
+ });
317
473
  });
@@ -25,8 +25,10 @@ import {
25
25
  } from './stack.stylex';
26
26
  import type {SizeValue} from '../utils/types';
27
27
  import {
28
- paddingInlineStyles,
29
- paddingBlockStyles,
28
+ paddingInlineStartStyles,
29
+ paddingInlineEndStyles,
30
+ paddingBlockStartStyles,
31
+ paddingBlockEndStyles,
30
32
  } from '../Layout/padding.stylex';
31
33
  import {mergeProps} from '../utils';
32
34
  import {themeProps} from '../utils/themeProps';
@@ -140,12 +142,38 @@ export interface StackProps extends BaseProps<HTMLElement> {
140
142
  */
141
143
  paddingInline?: SpacingStep;
142
144
 
145
+ /**
146
+ * Inline-start padding, using the spacing scale. Logical: the left edge in
147
+ * LTR, the right edge in RTL.
148
+ * Overrides `paddingInline` and `padding` on that edge only.
149
+ */
150
+ paddingInlineStart?: SpacingStep;
151
+
152
+ /**
153
+ * Inline-end padding, using the spacing scale. Logical: the right edge in
154
+ * LTR, the left edge in RTL.
155
+ * Overrides `paddingInline` and `padding` on that edge only.
156
+ */
157
+ paddingInlineEnd?: SpacingStep;
158
+
143
159
  /**
144
160
  * Block (vertical) padding, using the spacing scale.
145
161
  * Overrides `padding` on the block axis when both are set.
146
162
  */
147
163
  paddingBlock?: SpacingStep;
148
164
 
165
+ /**
166
+ * Block-start (top) padding, using the spacing scale.
167
+ * Overrides `paddingBlock` and `padding` on that edge only.
168
+ */
169
+ paddingBlockStart?: SpacingStep;
170
+
171
+ /**
172
+ * Block-end (bottom) padding, using the spacing scale.
173
+ * Overrides `paddingBlock` and `padding` on that edge only.
174
+ */
175
+ paddingBlockEnd?: SpacingStep;
176
+
149
177
  /**
150
178
  * Enables scrollable overflow (`overflow: auto`) for the stack.
151
179
  *
@@ -211,7 +239,11 @@ export function Stack({
211
239
  gap,
212
240
  padding,
213
241
  paddingInline,
242
+ paddingInlineStart,
243
+ paddingInlineEnd,
214
244
  paddingBlock,
245
+ paddingBlockStart,
246
+ paddingBlockEnd,
215
247
  isScrollable,
216
248
  width,
217
249
  height,
@@ -242,10 +274,14 @@ export function Stack({
242
274
  ? (resolvedVAlign as StackCrossAlignment | undefined)
243
275
  : (resolvedHAlign as StackCrossAlignment | undefined);
244
276
 
245
- // Resolve padding to per-axis values: `padding` sets both axes; `paddingInline`
246
- // / `paddingBlock` take precedence on their own axis when provided.
247
- const resolvedPaddingInline = paddingInline ?? padding;
248
- const resolvedPaddingBlock = paddingBlock ?? padding;
277
+ // Resolve padding to per-edge values. Most specific wins, per edge:
278
+ // edge prop -> axis prop -> `padding`.
279
+ const resolvedPaddingInlineStart =
280
+ paddingInlineStart ?? paddingInline ?? padding;
281
+ const resolvedPaddingInlineEnd = paddingInlineEnd ?? paddingInline ?? padding;
282
+ const resolvedPaddingBlockStart =
283
+ paddingBlockStart ?? paddingBlock ?? padding;
284
+ const resolvedPaddingBlockEnd = paddingBlockEnd ?? paddingBlock ?? padding;
249
285
 
250
286
  const stylexProps = stylex.props(
251
287
  ...stack({
@@ -255,8 +291,14 @@ export function Stack({
255
291
  gap,
256
292
  wrap,
257
293
  }),
258
- resolvedPaddingInline != null && paddingInlineStyles[resolvedPaddingInline],
259
- resolvedPaddingBlock != null && paddingBlockStyles[resolvedPaddingBlock],
294
+ resolvedPaddingInlineStart != null &&
295
+ paddingInlineStartStyles[resolvedPaddingInlineStart],
296
+ resolvedPaddingInlineEnd != null &&
297
+ paddingInlineEndStyles[resolvedPaddingInlineEnd],
298
+ resolvedPaddingBlockStart != null &&
299
+ paddingBlockStartStyles[resolvedPaddingBlockStart],
300
+ resolvedPaddingBlockEnd != null &&
301
+ paddingBlockEndStyles[resolvedPaddingBlockEnd],
260
302
  isScrollable && overflowStyles.scrollable,
261
303
  xstyle,
262
304
  );
@@ -161,7 +161,10 @@ const styles = stylex.create({
161
161
  margin: 0,
162
162
  padding: 0,
163
163
  opacity: 0,
164
- cursor: 'pointer',
164
+ cursor: {
165
+ default: 'pointer',
166
+ ':is(:disabled,[aria-disabled="true"])': 'default',
167
+ },
165
168
  zIndex: 1,
166
169
  minInlineSize: {
167
170
  default: null,
@@ -185,7 +188,7 @@ const styles = stylex.create({
185
188
  },
186
189
  },
187
190
  inputDisabled: {
188
- cursor: 'not-allowed',
191
+ cursor: 'default',
189
192
  },
190
193
  inputBusy: {
191
194
  pointerEvents: 'none',
@@ -101,7 +101,10 @@ const styles = stylex.create({
101
101
  lineHeight: typeScaleVars['--text-label-leading'],
102
102
  fontWeight: fontWeightVars['--font-weight-normal'],
103
103
  color: colorVars['--color-text-secondary'],
104
- cursor: 'pointer',
104
+ cursor: {
105
+ default: 'pointer',
106
+ ':is(:disabled,[aria-disabled="true"])': 'default',
107
+ },
105
108
  textDecoration: 'none',
106
109
  whiteSpace: 'nowrap',
107
110
  transitionProperty: 'color',
@@ -87,7 +87,10 @@ const styles = stylex.create({
87
87
  lineHeight: typeScaleVars['--text-label-leading'],
88
88
  fontWeight: fontWeightVars['--font-weight-normal'],
89
89
  color: colorVars['--color-text-secondary'],
90
- cursor: 'pointer',
90
+ cursor: {
91
+ default: 'pointer',
92
+ ':is(:disabled,[aria-disabled="true"])': 'default',
93
+ },
91
94
  textDecoration: 'none',
92
95
  transitionProperty: 'color',
93
96
  transitionDuration: durationVars['--duration-fast'],
@@ -185,13 +188,16 @@ const styles = stylex.create({
185
188
  lineHeight: typeScaleVars['--text-label-leading'],
186
189
  fontWeight: fontWeightVars['--font-weight-normal'],
187
190
  color: colorVars['--color-text-primary'],
188
- cursor: 'pointer',
191
+ cursor: {
192
+ default: 'pointer',
193
+ ':is(:disabled,[aria-disabled="true"])': 'default',
194
+ },
189
195
  transitionProperty: 'background-color',
190
196
  transitionDuration: durationVars['--duration-fast'],
191
197
  transitionTimingFunction: easeVars['--ease-standard'],
192
198
  backgroundColor: {
193
199
  default: 'transparent',
194
- ':hover': {
200
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
195
201
  '@media (hover: hover)': colorVars['--color-overlay-hover'],
196
202
  },
197
203
  },
@@ -61,13 +61,13 @@ const hoverRowStyles = stylex.create({
61
61
  row: {
62
62
  backgroundColor: {
63
63
  default: null,
64
- ':hover': {
64
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
65
65
  '@media (hover: hover)': colorVars['--color-overlay-hover'],
66
66
  },
67
67
  },
68
68
  '--table-row-overlay': {
69
69
  default: null,
70
- ':hover': {
70
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
71
71
  '@media (hover: hover)': colorVars['--color-overlay-hover'],
72
72
  },
73
73
  },
@@ -82,14 +82,14 @@ const stripedHoverRowStyles = stylex.create({
82
82
  backgroundColor: {
83
83
  default: null,
84
84
  ':nth-child(even)': colorVars['--color-background-muted'],
85
- ':hover': {
85
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
86
86
  '@media (hover: hover)': colorVars['--color-overlay-hover'],
87
87
  },
88
88
  },
89
89
  '--table-row-overlay': {
90
90
  default: null,
91
91
  ':nth-child(even)': colorVars['--color-background-muted'],
92
- ':hover': {
92
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
93
93
  '@media (hover: hover)': colorVars['--color-overlay-hover'],
94
94
  },
95
95
  },
@@ -207,7 +207,10 @@ const handleStyles = stylex.create({
207
207
  // Wide transparent hit area; the visible indicator uses ::after to span
208
208
  // the full handle height independently of the border box.
209
209
  width: '8px',
210
- cursor: 'ew-resize',
210
+ cursor: {
211
+ default: 'ew-resize',
212
+ ':is(:disabled,[aria-disabled="true"])': 'default',
213
+ },
211
214
  zIndex: 1,
212
215
  touchAction: 'none',
213
216
  userSelect: 'none',
@@ -216,7 +219,8 @@ const handleStyles = stylex.create({
216
219
  // can't receive :hover directly.
217
220
  '--indicator-color': {
218
221
  default: 'transparent',
219
- ':hover': colorVars['--color-accent'],
222
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))':
223
+ colorVars['--color-accent'],
220
224
  ':focus-visible': colorVars['--color-accent'],
221
225
  },
222
226
  '@media (pointer: coarse)': {
@@ -362,7 +362,10 @@ const filterStyles = stylex.create({
362
362
  triggerButton: {
363
363
  background: 'none',
364
364
  border: 'none',
365
- cursor: 'pointer',
365
+ cursor: {
366
+ default: 'pointer',
367
+ ':is(:disabled,[aria-disabled="true"])': 'default',
368
+ },
366
369
  display: 'inline-flex',
367
370
  alignItems: 'center',
368
371
  justifyContent: 'center',
@@ -113,7 +113,10 @@ export interface UseTableGroupedRowsResult<T extends Record<string, unknown>> {
113
113
 
114
114
  const styles = stylex.create({
115
115
  headerRow: {
116
- cursor: 'pointer',
116
+ cursor: {
117
+ default: 'pointer',
118
+ ':is(:disabled,[aria-disabled="true"])': 'default',
119
+ },
117
120
  userSelect: 'none',
118
121
  backgroundColor: colorVars['--color-background-muted'],
119
122
  // Divider beneath each group header row (Ernest review #2).
@@ -145,10 +148,14 @@ const styles = stylex.create({
145
148
  margin: 0,
146
149
  background: 'transparent',
147
150
  border: 'none',
148
- cursor: 'pointer',
151
+ cursor: {
152
+ default: 'pointer',
153
+ ':is(:disabled,[aria-disabled="true"])': 'default',
154
+ },
149
155
  color: {
150
156
  default: colorVars['--color-icon-secondary'],
151
- ':hover': colorVars['--color-icon-primary'],
157
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))':
158
+ colorVars['--color-icon-primary'],
152
159
  },
153
160
  },
154
161
  chevronIcon: {
@@ -77,7 +77,10 @@ const expansionStyles = stylex.create({
77
77
  background: 'transparent',
78
78
  border: 'none',
79
79
  borderRadius: radiusVars['--radius-inner'],
80
- cursor: 'pointer',
80
+ cursor: {
81
+ default: 'pointer',
82
+ ':is(:disabled,[aria-disabled="true"])': 'default',
83
+ },
81
84
  color: colorVars['--color-icon-secondary'],
82
85
  transitionProperty: 'transform, color',
83
86
  transitionDuration: '150ms',
@@ -85,11 +88,11 @@ const expansionStyles = stylex.create({
85
88
  // Match IconButton ghost hover: subtle overlay background.
86
89
  backgroundImage: {
87
90
  default: null,
88
- ':hover': {
91
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
89
92
  '@media (hover: hover)': `linear-gradient(${colorVars['--color-overlay-hover']}, ${colorVars['--color-overlay-hover']})`,
90
93
  },
91
94
  },
92
- ':hover': {
95
+ ':hover:where(:not(:disabled,[aria-disabled="true"]))': {
93
96
  color: colorVars['--color-icon-primary'],
94
97
  },
95
98
  },
@@ -125,7 +125,10 @@ const sortStyles = stylex.create({
125
125
  border: 'none',
126
126
  padding: 0,
127
127
  margin: 0,
128
- cursor: 'pointer',
128
+ cursor: {
129
+ default: 'pointer',
130
+ ':is(:disabled,[aria-disabled="true"])': 'default',
131
+ },
129
132
  font: 'inherit',
130
133
  color: 'inherit',
131
134
  width: '100%',
@@ -17,6 +17,7 @@ import {useTableSortable} from './useTableSortable';
17
17
  import type {TableSortState} from './useTableSortable';
18
18
  import {useTableSortableState} from './useTableSortableState';
19
19
  import type {UseTableSortableStateConfig} from './useTableSortableState';
20
+ import {InternationalizationProvider} from '../../../i18n';
20
21
 
21
22
  // =============================================================================
22
23
  // Test Data
@@ -119,6 +120,39 @@ describe('useTableSortableState', () => {
119
120
  ]);
120
121
  });
121
122
 
123
+ it('re-sorts strings when the provider locale changes', () => {
124
+ const localeData: Employee[] = [
125
+ {
126
+ id: '1',
127
+ name: 'z',
128
+ age: 1,
129
+ department: 'Test',
130
+ salary: 1,
131
+ },
132
+ {
133
+ id: '2',
134
+ name: 'ä',
135
+ age: 2,
136
+ department: 'Test',
137
+ salary: 2,
138
+ },
139
+ ];
140
+ const table = (locale: string) => (
141
+ <InternationalizationProvider locale={locale}>
142
+ <SortableStateTable
143
+ data={localeData}
144
+ defaultSort={[{sortKey: 'name', direction: 'ascending'}]}
145
+ />
146
+ </InternationalizationProvider>
147
+ );
148
+
149
+ const {rerender} = render(table('sv-SE'));
150
+ expect(getNameColumnValues()).toEqual(['z', 'ä']);
151
+
152
+ rerender(table('de-DE'));
153
+ expect(getNameColumnValues()).toEqual(['ä', 'z']);
154
+ });
155
+
122
156
  it('renders unsorted when no defaultSort', () => {
123
157
  render(<SortableStateTable />);
124
158