@astryxdesign/core 0.5.2-canary.11abdc7 → 0.5.2-canary.1252020

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 (520) hide show
  1. package/dist/AppShell/AppShell.d.ts +2 -2
  2. package/dist/AppShell/AppShell.d.ts.map +1 -1
  3. package/dist/AppShell/AppShell.js +10 -7
  4. package/dist/Banner/Banner.d.ts +5 -0
  5. package/dist/Banner/Banner.d.ts.map +1 -1
  6. package/dist/Banner/Banner.js +7 -2
  7. package/dist/BottomSheet/BottomSheet.d.ts +3 -1
  8. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  9. package/dist/BottomSheet/BottomSheet.js +4 -3
  10. package/dist/BottomSheet/BottomSheetEdgeTint.d.ts +2 -2
  11. package/dist/BottomSheet/BottomSheetEdgeTint.d.ts.map +1 -1
  12. package/dist/BottomSheet/BottomSheetEdgeTint.js +7 -10
  13. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  14. package/dist/BottomSheet/BottomSheetSwitcher.js +1 -1
  15. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +3 -2
  16. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  17. package/dist/Breadcrumbs/BreadcrumbItem.js +22 -15
  18. package/dist/Button/Button.d.ts +2 -1
  19. package/dist/Button/Button.d.ts.map +1 -1
  20. package/dist/Button/Button.js +11 -4
  21. package/dist/Carousel/Carousel.d.ts.map +1 -1
  22. package/dist/Carousel/Carousel.js +2 -2
  23. package/dist/Chat/ChatComposer.d.ts +2 -2
  24. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  25. package/dist/Chat/ChatComposer.js +21 -2
  26. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  27. package/dist/Chat/ChatComposerInput.js +20 -3
  28. package/dist/Chat/ChatToolCalls.d.ts +1 -1
  29. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  30. package/dist/Chat/ChatToolCalls.js +46 -51
  31. package/dist/Chat/chatComposerSelection.d.ts +25 -0
  32. package/dist/Chat/chatComposerSelection.d.ts.map +1 -1
  33. package/dist/Chat/chatComposerSelection.js +78 -0
  34. package/dist/Chat/useChatNewMessages.js +3 -3
  35. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  36. package/dist/CheckboxInput/CheckboxInput.js +8 -7
  37. package/dist/CheckboxList/CheckboxListItem.d.ts +5 -3
  38. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  39. package/dist/ContextMenu/ContextMenu.d.ts +14 -3
  40. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  41. package/dist/ContextMenu/ContextMenu.js +149 -26
  42. package/dist/ContextMenu/index.d.ts +1 -0
  43. package/dist/ContextMenu/index.d.ts.map +1 -1
  44. package/dist/DateTimeInput/DateTimeInput.d.ts +47 -13
  45. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  46. package/dist/DateTimeInput/DateTimeInput.js +269 -162
  47. package/dist/DateTimeInput/NativeDateSegment.d.ts +24 -0
  48. package/dist/DateTimeInput/NativeDateSegment.d.ts.map +1 -0
  49. package/dist/DateTimeInput/NativeDateSegment.js +235 -0
  50. package/dist/DateTimeInput/NativeTimeSegment.d.ts +30 -0
  51. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -0
  52. package/dist/DateTimeInput/NativeTimeSegment.js +248 -0
  53. package/dist/DateTimeInput/index.d.ts +1 -1
  54. package/dist/DateTimeInput/index.d.ts.map +1 -1
  55. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +95 -0
  56. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -0
  57. package/dist/DateTimeInput/nativePickerSegmentStyles.js +103 -0
  58. package/dist/DropdownMenu/DropdownMenu.d.ts +24 -5
  59. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  60. package/dist/DropdownMenu/DropdownMenu.js +338 -26
  61. package/dist/DropdownMenu/DropdownMenuContext.d.ts +1 -1
  62. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  63. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  64. package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
  65. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +6 -2
  66. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  67. package/dist/DropdownMenu/DropdownMenuSubMenu.js +43 -14
  68. package/dist/DropdownMenu/MenuBottomSheet.d.ts +20 -0
  69. package/dist/DropdownMenu/MenuBottomSheet.d.ts.map +1 -0
  70. package/dist/DropdownMenu/MenuBottomSheet.js +36 -0
  71. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts +10 -0
  72. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -0
  73. package/dist/DropdownMenu/MenuBottomSheetActionList.js +111 -0
  74. package/dist/DropdownMenu/index.d.ts +2 -1
  75. package/dist/DropdownMenu/index.d.ts.map +1 -1
  76. package/dist/DropdownMenu/menuWidth.d.ts +14 -0
  77. package/dist/DropdownMenu/menuWidth.d.ts.map +1 -0
  78. package/dist/DropdownMenu/menuWidth.js +35 -0
  79. package/dist/DropdownMenu/useMenuOverflow.d.ts +10 -0
  80. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -0
  81. package/dist/DropdownMenu/useMenuOverflow.js +60 -0
  82. package/dist/Field/Field.d.ts.map +1 -1
  83. package/dist/Field/Field.js +10 -4
  84. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  85. package/dist/Field/PanelSearchInput.js +3 -5
  86. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  87. package/dist/FieldStatus/FieldStatus.js +4 -2
  88. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  89. package/dist/Layer/useTouchTrigger.js +2 -4
  90. package/dist/Layout/Layout.d.ts +7 -8
  91. package/dist/Layout/Layout.d.ts.map +1 -1
  92. package/dist/Layout/Layout.js +7 -8
  93. package/dist/Markdown/parser.d.ts +26 -0
  94. package/dist/Markdown/parser.d.ts.map +1 -1
  95. package/dist/Markdown/parser.js +210 -56
  96. package/dist/MoreMenu/MoreMenu.d.ts +8 -2
  97. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  98. package/dist/MoreMenu/MoreMenu.js +2 -0
  99. package/dist/MultiSelector/MultiSelector.d.ts +21 -1
  100. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  101. package/dist/MultiSelector/MultiSelector.js +165 -92
  102. package/dist/MultiSelector/index.d.ts +1 -1
  103. package/dist/MultiSelector/index.d.ts.map +1 -1
  104. package/dist/Popover/Popover.d.ts +10 -6
  105. package/dist/Popover/Popover.d.ts.map +1 -1
  106. package/dist/Popover/Popover.js +141 -16
  107. package/dist/Popover/usePopover.d.ts +4 -0
  108. package/dist/Popover/usePopover.d.ts.map +1 -1
  109. package/dist/Popover/usePopover.js +52 -5
  110. package/dist/RadioList/RadioListItem.d.ts +30 -5
  111. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  112. package/dist/RadioList/RadioListItem.js +25 -11
  113. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  114. package/dist/Resizable/ResizeHandle.js +102 -44
  115. package/dist/Resizable/index.d.ts +2 -0
  116. package/dist/Resizable/index.d.ts.map +1 -1
  117. package/dist/Resizable/index.js +1 -0
  118. package/dist/Resizable/useResizable.d.ts +89 -8
  119. package/dist/Resizable/useResizable.d.ts.map +1 -1
  120. package/dist/Resizable/useResizable.js +521 -38
  121. package/dist/Resizable/utils.d.ts +35 -0
  122. package/dist/Resizable/utils.d.ts.map +1 -0
  123. package/dist/Resizable/utils.js +27 -0
  124. package/dist/Selector/Selector.d.ts +20 -0
  125. package/dist/Selector/Selector.d.ts.map +1 -1
  126. package/dist/Selector/Selector.js +186 -112
  127. package/dist/Selector/SelectorBottomSheet.d.ts +21 -0
  128. package/dist/Selector/SelectorBottomSheet.d.ts.map +1 -0
  129. package/dist/Selector/SelectorBottomSheet.js +83 -0
  130. package/dist/Selector/index.d.ts +1 -1
  131. package/dist/Selector/index.d.ts.map +1 -1
  132. package/dist/Selector/selectorPresentation.stylex.d.ts +16 -0
  133. package/dist/Selector/selectorPresentation.stylex.d.ts.map +1 -0
  134. package/dist/Selector/selectorPresentation.stylex.js +21 -0
  135. package/dist/Selector/useSelectorPresentation.d.ts +33 -0
  136. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -0
  137. package/dist/Selector/useSelectorPresentation.js +105 -0
  138. package/dist/Slider/Slider.d.ts.map +1 -1
  139. package/dist/Slider/Slider.js +3 -5
  140. package/dist/Spinner/Spinner.d.ts.map +1 -1
  141. package/dist/Spinner/Spinner.js +9 -10
  142. package/dist/Stepper/Step.d.ts +2 -1
  143. package/dist/Stepper/Step.d.ts.map +1 -1
  144. package/dist/Stepper/Step.js +75 -11
  145. package/dist/Stepper/Stepper.d.ts.map +1 -1
  146. package/dist/Stepper/Stepper.js +1 -0
  147. package/dist/Switch/Switch.d.ts.map +1 -1
  148. package/dist/Switch/Switch.js +8 -7
  149. package/dist/TabList/TabList.d.ts.map +1 -1
  150. package/dist/TabList/TabList.js +2 -3
  151. package/dist/Table/index.d.ts +16 -1
  152. package/dist/Table/index.d.ts.map +1 -1
  153. package/dist/Table/index.js +4 -0
  154. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  155. package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
  156. package/dist/Table/plugins/rowStatus/index.d.ts +1 -1
  157. package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -1
  158. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +11 -30
  159. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
  160. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +108 -62
  161. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  162. package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
  163. package/dist/Text/useTruncation.d.ts +1 -1
  164. package/dist/Text/useTruncation.d.ts.map +1 -1
  165. package/dist/Text/useTruncation.js +8 -7
  166. package/dist/TimeInput/TimeInput.d.ts +16 -1
  167. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  168. package/dist/TimeInput/TimeInput.js +98 -60
  169. package/dist/TimeInput/index.d.ts +1 -1
  170. package/dist/TimeInput/index.d.ts.map +1 -1
  171. package/dist/Timestamp/Timestamp.d.ts +2 -2
  172. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  173. package/dist/Timestamp/Timestamp.js +4 -145
  174. package/dist/Timestamp/formatRelativeTime.d.ts +20 -0
  175. package/dist/Timestamp/formatRelativeTime.d.ts.map +1 -0
  176. package/dist/Timestamp/formatRelativeTime.js +81 -0
  177. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  178. package/dist/Toast/ToastViewport.js +125 -77
  179. package/dist/Tokenizer/Tokenizer.d.ts +0 -38
  180. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  181. package/dist/Tokenizer/Tokenizer.js +94 -26
  182. package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
  183. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
  184. package/dist/Tokenizer/useEndLaneReserve.js +136 -0
  185. package/dist/Tooltip/useTooltip.d.ts +1 -1
  186. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  187. package/dist/Tooltip/useTooltip.js +53 -42
  188. package/dist/TreeList/TreeList.d.ts +1 -1
  189. package/dist/TreeList/TreeList.d.ts.map +1 -1
  190. package/dist/TreeList/TreeList.js +11 -1
  191. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  192. package/dist/Typeahead/BaseTypeahead.js +85 -30
  193. package/dist/Typeahead/Typeahead.d.ts +0 -21
  194. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  195. package/dist/Typeahead/Typeahead.js +108 -67
  196. package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
  197. package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
  198. package/dist/Typeahead/busyIndicatorLane.js +98 -0
  199. package/dist/astryx.css +42 -11
  200. package/dist/hooks/useAdaptivePresentation.d.ts +5 -0
  201. package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -0
  202. package/dist/hooks/useAdaptivePresentation.js +19 -0
  203. package/dist/hooks/useFocusReturnVisibility.d.ts +7 -0
  204. package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -0
  205. package/dist/hooks/useFocusReturnVisibility.js +33 -0
  206. package/dist/hooks/useFocusTrap.d.ts +3 -1
  207. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  208. package/dist/hooks/useFocusTrap.js +43 -1
  209. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  210. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  211. package/dist/hooks/useOverflow.js +11 -11
  212. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  213. package/dist/hooks/useScrollOverflow.js +7 -4
  214. package/dist/theme/defineTheme.d.ts +13 -0
  215. package/dist/theme/defineTheme.d.ts.map +1 -1
  216. package/dist/theme/defineTheme.js +7 -0
  217. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  218. package/dist/theme/generateThemeRules.js +1 -1
  219. package/dist/theme/localTokens.d.ts +18 -0
  220. package/dist/theme/localTokens.d.ts.map +1 -0
  221. package/dist/theme/localTokens.js +162 -0
  222. package/dist/utils/interactionModality.d.ts +6 -28
  223. package/dist/utils/interactionModality.d.ts.map +1 -1
  224. package/dist/utils/interactionModality.js +72 -37
  225. package/dist/utils/sharedResizeObserver.d.ts +17 -9
  226. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  227. package/dist/utils/sharedResizeObserver.js +54 -12
  228. package/locales/en.json +28 -0
  229. package/locales/fr-FR.json +8 -0
  230. package/locales/pseudo.json +21 -0
  231. package/package.json +8 -2
  232. package/scripts/agent-doc-state.mjs +137 -0
  233. package/scripts/postinstall.mjs +28 -60
  234. package/src/AlertDialog/useImperativeAlertDialog.test.tsx +163 -0
  235. package/src/AppShell/AppShell.doc.mjs +4 -3
  236. package/src/AppShell/AppShell.test.tsx +21 -0
  237. package/src/AppShell/AppShell.tsx +12 -7
  238. package/src/Banner/Banner.doc.mjs +5 -1
  239. package/src/Banner/Banner.tsx +12 -1
  240. package/src/BottomSheet/BottomSheet.doc.mjs +37 -0
  241. package/src/BottomSheet/BottomSheet.spec.md +178 -0
  242. package/src/BottomSheet/BottomSheet.test.tsx +29 -0
  243. package/src/BottomSheet/BottomSheet.tsx +7 -4
  244. package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +4 -6
  245. package/src/BottomSheet/BottomSheetEdgeTint.tsx +7 -10
  246. package/src/BottomSheet/BottomSheetSwitcher.tsx +1 -2
  247. package/src/Breadcrumbs/BreadcrumbItem.tsx +18 -9
  248. package/src/Breadcrumbs/Breadcrumbs.doc.mjs +4 -1
  249. package/src/Breadcrumbs/Breadcrumbs.test.tsx +12 -0
  250. package/src/Button/Button.doc.mjs +56 -0
  251. package/src/Button/Button.test.tsx +10 -0
  252. package/src/Button/Button.tsx +13 -5
  253. package/src/ButtonGroup/ButtonGroup.doc.mjs +47 -0
  254. package/src/Calendar/hooks/useCalendarConstraints.test.ts +153 -0
  255. package/src/Calendar/hooks/useCalendarDays.test.ts +265 -0
  256. package/src/Calendar/hooks/useCalendarNavigation.test.ts +252 -0
  257. package/src/Carousel/Carousel.test.tsx +83 -0
  258. package/src/Carousel/Carousel.tsx +8 -2
  259. package/src/Center/Center.doc.mjs +7 -0
  260. package/src/Chat/ChatComposer.doc.mjs +7 -4
  261. package/src/Chat/ChatComposer.test.tsx +84 -2
  262. package/src/Chat/ChatComposer.tsx +45 -3
  263. package/src/Chat/ChatComposerInput.test.tsx +188 -0
  264. package/src/Chat/ChatComposerInput.tsx +26 -3
  265. package/src/Chat/ChatComposerTokenElement.doc.mjs +5 -0
  266. package/src/Chat/ChatMessage.doc.mjs +17 -0
  267. package/src/Chat/ChatMessageList.doc.mjs +33 -0
  268. package/src/Chat/ChatSendButton.test.tsx +189 -0
  269. package/src/Chat/ChatToolCalls.doc.mjs +10 -1
  270. package/src/Chat/ChatToolCalls.test.tsx +77 -1
  271. package/src/Chat/ChatToolCalls.tsx +49 -49
  272. package/src/Chat/chatComposerSelection.ts +114 -0
  273. package/src/Chat/useChatNewMessages.ts +3 -3
  274. package/src/Chat/useChatPasteAsToken.test.ts +191 -0
  275. package/src/CheckboxInput/CheckboxInput.test.tsx +53 -0
  276. package/src/CheckboxInput/CheckboxInput.tsx +9 -20
  277. package/src/CheckboxList/CheckboxList.doc.mjs +172 -31
  278. package/src/CheckboxList/CheckboxList.spec.md +215 -0
  279. package/src/CheckboxList/CheckboxList.test.tsx +45 -0
  280. package/src/CheckboxList/CheckboxListItem.doc.mjs +11 -9
  281. package/src/CheckboxList/CheckboxListItem.tsx +5 -3
  282. package/src/Collapsible/useCollapsible.test.tsx +236 -0
  283. package/src/CommandPalette/CommandPalette.doc.mjs +72 -0
  284. package/src/CommandPalette/CommandPalette.spec.md +224 -0
  285. package/src/CommandPalette/CommandPaletteEmpty.test.tsx +101 -0
  286. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  287. package/src/ComplexSelector/ComplexSelector.spec.md +190 -0
  288. package/src/ContextMenu/ContextMenu.doc.mjs +61 -1
  289. package/src/ContextMenu/ContextMenu.spec.md +207 -0
  290. package/src/ContextMenu/ContextMenu.test.tsx +131 -1
  291. package/src/ContextMenu/ContextMenu.tsx +199 -32
  292. package/src/ContextMenu/index.ts +1 -0
  293. package/src/DateTimeInput/DateTimeInput.doc.mjs +43 -23
  294. package/src/DateTimeInput/DateTimeInput.tsx +388 -181
  295. package/src/DateTimeInput/DateTimeInputTouch.test.tsx +10 -2
  296. package/src/DateTimeInput/NativeDateSegment.tsx +308 -0
  297. package/src/DateTimeInput/NativePickerSegments.test.tsx +626 -0
  298. package/src/DateTimeInput/NativeTimeSegment.tsx +331 -0
  299. package/src/DateTimeInput/index.ts +1 -0
  300. package/src/DateTimeInput/nativePickerSegmentStyles.ts +120 -0
  301. package/src/Divider/Divider.doc.mjs +24 -0
  302. package/src/Divider/Divider.spec.md +157 -0
  303. package/src/DropdownMenu/DropdownMenu.doc.mjs +305 -40
  304. package/src/DropdownMenu/DropdownMenu.spec.md +246 -0
  305. package/src/DropdownMenu/DropdownMenu.test.tsx +518 -7
  306. package/src/DropdownMenu/DropdownMenu.tsx +457 -28
  307. package/src/DropdownMenu/DropdownMenuContext.tsx +1 -1
  308. package/src/DropdownMenu/DropdownMenuItem.tsx +2 -0
  309. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +13 -0
  310. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +31 -0
  311. package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +4 -2
  312. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +124 -0
  313. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +72 -17
  314. package/src/DropdownMenu/MenuBottomSheet.tsx +46 -0
  315. package/src/DropdownMenu/MenuBottomSheetActionList.tsx +141 -0
  316. package/src/DropdownMenu/index.ts +2 -0
  317. package/src/DropdownMenu/menuWidth.ts +51 -0
  318. package/src/DropdownMenu/useMenuOverflow.ts +77 -0
  319. package/src/Field/Field.doc.mjs +1 -0
  320. package/src/Field/Field.test.tsx +39 -0
  321. package/src/Field/Field.tsx +18 -1
  322. package/src/Field/InputClearButton.test.tsx +68 -6
  323. package/src/Field/PanelSearchInput.tsx +3 -5
  324. package/src/FieldStatus/FieldStatus.doc.mjs +21 -0
  325. package/src/FieldStatus/FieldStatus.spec.md +213 -0
  326. package/src/FieldStatus/FieldStatus.test.tsx +17 -0
  327. package/src/FieldStatus/FieldStatus.tsx +7 -2
  328. package/src/Grid/Grid.doc.mjs +30 -0
  329. package/src/Grid/Grid.spec.md +162 -0
  330. package/src/Grid/GridSpan.doc.mjs +7 -0
  331. package/src/Icon/Icon.doc.mjs +196 -48
  332. package/src/Icon/Icon.spec.md +192 -0
  333. package/src/IconButton/IconButton.doc.mjs +38 -0
  334. package/src/Indicator/Indicator.doc.mjs +3 -0
  335. package/src/Kbd/Kbd.doc.mjs +18 -0
  336. package/src/Kbd/Kbd.spec.md +142 -0
  337. package/src/Layer/useTouchTrigger.ts +2 -4
  338. package/src/Layout/Layout.doc.mjs +57 -17
  339. package/src/Layout/Layout.spec.md +235 -0
  340. package/src/Layout/Layout.test.tsx +1 -1
  341. package/src/Layout/Layout.tsx +7 -8
  342. package/src/Layout/LayoutHeader.doc.mjs +9 -0
  343. package/src/Layout/LayoutPanel.doc.mjs +4 -3
  344. package/src/Lightbox/Lightbox.doc.mjs +149 -33
  345. package/src/Lightbox/Lightbox.spec.md +198 -0
  346. package/src/Lightbox/useLightbox.test.tsx +263 -0
  347. package/src/Markdown/Markdown.doc.mjs +60 -0
  348. package/src/Markdown/Markdown.spec.md +207 -0
  349. package/src/Markdown/incremental.test.ts +83 -0
  350. package/src/Markdown/parser.perf.test.ts +93 -0
  351. package/src/Markdown/parser.ts +256 -55
  352. package/src/MobileNav/MobileNav.doc.mjs +140 -32
  353. package/src/MobileNav/MobileNav.spec.md +209 -0
  354. package/src/MoreMenu/MoreMenu.doc.mjs +59 -0
  355. package/src/MoreMenu/MoreMenu.spec.md +222 -0
  356. package/src/MoreMenu/MoreMenu.test.tsx +47 -0
  357. package/src/MoreMenu/MoreMenu.tsx +13 -1
  358. package/src/MultiSelector/MultiSelector.doc.mjs +151 -1
  359. package/src/MultiSelector/MultiSelector.spec.md +293 -0
  360. package/src/MultiSelector/MultiSelector.test.tsx +432 -2
  361. package/src/MultiSelector/MultiSelector.tsx +220 -103
  362. package/src/MultiSelector/index.ts +1 -0
  363. package/src/NavIcon/NavIcon.doc.mjs +17 -0
  364. package/src/NavIcon/NavIcon.spec.md +134 -0
  365. package/src/NavMenu/NavHeadingMenu.spec.md +210 -0
  366. package/src/NavMenu/NavMenu.doc.mjs +37 -0
  367. package/src/Outline/Outline.doc.mjs +35 -0
  368. package/src/Outline/Outline.spec.md +162 -0
  369. package/src/OverflowList/OverflowList.doc.mjs +24 -0
  370. package/src/OverflowList/OverflowList.spec.md +157 -0
  371. package/src/Pagination/Pagination.doc.mjs +74 -0
  372. package/src/Pagination/Pagination.spec.md +226 -0
  373. package/src/Popover/Popover.doc.mjs +264 -65
  374. package/src/Popover/Popover.spec.md +421 -0
  375. package/src/Popover/Popover.test.tsx +397 -2
  376. package/src/Popover/Popover.tsx +228 -21
  377. package/src/Popover/usePopover.doc.mjs +208 -33
  378. package/src/Popover/usePopover.tsx +92 -15
  379. package/src/PowerSearch/PowerSearch.doc.mjs +45 -0
  380. package/src/PowerSearch/PowerSearch.spec.md +291 -0
  381. package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +253 -0
  382. package/src/PowerSearch/PowerSearchToken.test.tsx +228 -0
  383. package/src/ProgressBar/ProgressBar.doc.mjs +198 -38
  384. package/src/ProgressBar/ProgressBar.spec.md +261 -0
  385. package/src/RadioList/RadioList.test.tsx +185 -2
  386. package/src/RadioList/RadioListItem.doc.mjs +30 -11
  387. package/src/RadioList/RadioListItem.tsx +53 -28
  388. package/src/Resizable/Resizable.doc.mjs +130 -24
  389. package/src/Resizable/Resizable.spec.md +246 -0
  390. package/src/Resizable/ResizeHandle.test.tsx +177 -56
  391. package/src/Resizable/ResizeHandle.tsx +128 -45
  392. package/src/Resizable/index.ts +2 -0
  393. package/src/Resizable/shippedDirections.test.ts +462 -0
  394. package/src/Resizable/useResizable.doc.mjs +124 -29
  395. package/src/Resizable/useResizable.test.ts +1277 -3
  396. package/src/Resizable/useResizable.ts +760 -48
  397. package/src/Resizable/utils.test.ts +74 -0
  398. package/src/Resizable/utils.ts +35 -0
  399. package/src/Section/Section.doc.mjs +17 -0
  400. package/src/Section/Section.spec.md +139 -0
  401. package/src/SegmentedControl/SegmentedControl.doc.mjs +83 -0
  402. package/src/SegmentedControl/SegmentedControl.spec.md +152 -0
  403. package/src/Selector/Selector.doc.mjs +155 -97
  404. package/src/Selector/Selector.spec.md +300 -0
  405. package/src/Selector/Selector.test.tsx +453 -1
  406. package/src/Selector/Selector.tsx +237 -111
  407. package/src/Selector/SelectorBottomSheet.tsx +97 -0
  408. package/src/Selector/index.ts +1 -0
  409. package/src/Selector/selectorPresentation.stylex.ts +20 -0
  410. package/src/Selector/useSelectorPresentation.ts +167 -0
  411. package/src/SideNav/SideNav.test.tsx +3 -3
  412. package/src/SideNav/SideNavCollapseButton.doc.mjs +8 -0
  413. package/src/SideNav/SideNavHeading.doc.mjs +3 -0
  414. package/src/SideNav/SideNavItem.doc.mjs +4 -1
  415. package/src/SideNav/SideNavSection.doc.mjs +10 -0
  416. package/src/Skeleton/Skeleton.doc.mjs +12 -0
  417. package/src/Skeleton/Skeleton.spec.md +127 -0
  418. package/src/Slider/Slider.doc.mjs +184 -30
  419. package/src/Slider/Slider.spec.md +224 -0
  420. package/src/Slider/Slider.tsx +2 -5
  421. package/src/Spinner/Spinner.doc.mjs +5 -5
  422. package/src/Spinner/Spinner.test.tsx +32 -7
  423. package/src/Spinner/Spinner.tsx +46 -14
  424. package/src/Stack/Stack.doc.mjs +60 -0
  425. package/src/Stack/Stack.spec.md +155 -0
  426. package/src/StatusDot/StatusDot.doc.mjs +17 -0
  427. package/src/StatusDot/StatusDot.spec.md +138 -0
  428. package/src/Stepper/Step.doc.mjs +1 -1
  429. package/src/Stepper/Step.tsx +118 -5
  430. package/src/Stepper/Stepper.doc.mjs +51 -1
  431. package/src/Stepper/Stepper.spec.md +245 -0
  432. package/src/Stepper/Stepper.test.tsx +315 -0
  433. package/src/Stepper/Stepper.tsx +8 -0
  434. package/src/Switch/Switch.doc.mjs +40 -0
  435. package/src/Switch/Switch.spec.md +175 -0
  436. package/src/Switch/Switch.test.tsx +53 -0
  437. package/src/Switch/Switch.tsx +9 -20
  438. package/src/TabList/TabList.tsx +2 -3
  439. package/src/TabList/TabMenu.doc.mjs +14 -0
  440. package/src/Table/Table.doc.mjs +102 -24
  441. package/src/Table/Table.perf.test.tsx +51 -1
  442. package/src/Table/Table.spec.md +325 -0
  443. package/src/Table/TableHeaderCell.test.tsx +291 -0
  444. package/src/Table/index.ts +19 -4
  445. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
  446. package/src/Table/plugins/filtering/useTableFilterState.test.tsx +143 -0
  447. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +2 -1
  448. package/src/Table/plugins/rowStatus/index.ts +1 -4
  449. package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +92 -0
  450. package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +354 -0
  451. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +431 -56
  452. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +155 -84
  453. package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
  454. package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
  455. package/src/Table/useTableGroupedRows.doc.mjs +2 -2
  456. package/src/Table/useTableRowStatus.doc.mjs +5 -5
  457. package/src/Text/Text.doc.mjs +190 -43
  458. package/src/Text/Text.spec.md +206 -0
  459. package/src/Text/useTruncation.ts +8 -7
  460. package/src/TextArea/TextArea.doc.mjs +255 -45
  461. package/src/TextArea/TextArea.spec.md +205 -0
  462. package/src/TimeInput/NativeTimeInput.test.tsx +269 -0
  463. package/src/TimeInput/TimeInput.doc.mjs +47 -23
  464. package/src/TimeInput/TimeInput.tsx +109 -50
  465. package/src/TimeInput/index.ts +1 -0
  466. package/src/Timestamp/Timestamp.doc.mjs +2 -2
  467. package/src/Timestamp/Timestamp.test.tsx +75 -3
  468. package/src/Timestamp/Timestamp.tsx +7 -153
  469. package/src/Timestamp/formatRelativeTime.ts +96 -0
  470. package/src/Toast/Toast.doc.mjs +4 -0
  471. package/src/Toast/ToastViewport.test.tsx +194 -0
  472. package/src/Toast/ToastViewport.tsx +136 -58
  473. package/src/ToggleButton/ToggleButton.doc.mjs +56 -0
  474. package/src/Tokenizer/Tokenizer.doc.mjs +2 -0
  475. package/src/Tokenizer/Tokenizer.spec.md +293 -0
  476. package/src/Tokenizer/Tokenizer.test.tsx +335 -1
  477. package/src/Tokenizer/Tokenizer.tsx +129 -46
  478. package/src/Tokenizer/useEndLaneReserve.ts +146 -0
  479. package/src/Toolbar/Toolbar.doc.mjs +19 -0
  480. package/src/Toolbar/Toolbar.spec.md +174 -0
  481. package/src/Tooltip/Tooltip.doc.mjs +17 -0
  482. package/src/Tooltip/Tooltip.spec.md +142 -0
  483. package/src/Tooltip/Tooltip.test.tsx +21 -1
  484. package/src/Tooltip/useTooltip.test.tsx +318 -0
  485. package/src/Tooltip/useTooltip.tsx +60 -39
  486. package/src/TopNav/TopNavHeading.doc.mjs +3 -0
  487. package/src/TopNav/TopNavItem.doc.mjs +3 -0
  488. package/src/TopNav/TopNavMenu.doc.mjs +10 -0
  489. package/src/TreeList/TreeList.doc.mjs +58 -0
  490. package/src/TreeList/TreeList.spec.md +224 -0
  491. package/src/TreeList/TreeList.test.tsx +94 -0
  492. package/src/TreeList/TreeList.tsx +19 -1
  493. package/src/Typeahead/BaseTypeahead.tsx +96 -25
  494. package/src/Typeahead/Typeahead.doc.mjs +89 -1
  495. package/src/Typeahead/Typeahead.spec.md +257 -0
  496. package/src/Typeahead/Typeahead.test.tsx +502 -1
  497. package/src/Typeahead/Typeahead.tsx +187 -69
  498. package/src/Typeahead/TypeaheadItem.test.tsx +93 -2
  499. package/src/Typeahead/busyIndicatorLane.tsx +109 -0
  500. package/src/__tests__/stylexDeclarations.ts +51 -0
  501. package/src/hooks/useAdaptivePresentation.ts +35 -0
  502. package/src/hooks/useFocusReturnVisibility.ts +43 -0
  503. package/src/hooks/useFocusTrap.doc.mjs +2 -2
  504. package/src/hooks/useFocusTrap.test.tsx +88 -0
  505. package/src/hooks/useFocusTrap.ts +48 -1
  506. package/src/hooks/useOverflow.ts +11 -11
  507. package/src/hooks/useScrollLock.test.ts +103 -0
  508. package/src/hooks/useScrollOverflow.ts +7 -4
  509. package/src/i18n/useTranslator.test.tsx +197 -0
  510. package/src/postinstall.test.mjs +71 -5
  511. package/src/theme/defineTheme.test.ts +227 -0
  512. package/src/theme/defineTheme.ts +30 -0
  513. package/src/theme/derivedVarRegistry.test.ts +6 -0
  514. package/src/theme/generateThemeRules.ts +4 -1
  515. package/src/theme/localTokens.ts +272 -0
  516. package/src/theme/themingTargets.test.ts +126 -28
  517. package/src/utils/interactionModality.test.ts +83 -0
  518. package/src/utils/interactionModality.ts +88 -36
  519. package/src/utils/sharedResizeObserver.test.ts +124 -5
  520. package/src/utils/sharedResizeObserver.ts +60 -14
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  * @file AppShell.tsx
4
4
  * @input Uses React, Layout, LayoutHeader, LayoutPanel, LayoutContent, StyleX
5
5
  * @output Exports AppShell component and AppShellProps type
6
- * @position Application-level layout shell — the top-level wrapper for any app.
6
+ * @position Page shell for an application — the top-level wrapper for any app.
7
7
  * Composes Layout internally to provide header, sideNav, and main content areas.
8
8
  * Use for any app that needs a top nav, side navigation, and scrollable content.
9
9
  *
@@ -175,7 +175,7 @@ export interface AppShellProps extends BaseProps<HTMLDivElement> {
175
175
  topNav?: ReactNode;
176
176
  }
177
177
  /**
178
- * Application-level layout shell. Provides the structural frame for an app:
178
+ * Page shell for an application. Provides the structural frame for an app:
179
179
  * top navigation, side navigation, and main content area.
180
180
  *
181
181
  * Slot-based API with `topNav`, `sideNav`, `banner`, and `children`.
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA2KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBA6Yf;yBA5Ze,QAAQ"}
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA4KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBAiZf;yBAhae,QAAQ"}
@@ -8,7 +8,7 @@ import React from 'react';
8
8
  * @file AppShell.tsx
9
9
  * @input Uses React, Layout, LayoutHeader, LayoutPanel, LayoutContent, StyleX
10
10
  * @output Exports AppShell component and AppShellProps type
11
- * @position Application-level layout shell — the top-level wrapper for any app.
11
+ * @position Page shell for an application — the top-level wrapper for any app.
12
12
  * Composes Layout internally to provide header, sideNav, and main content areas.
13
13
  * Use for any app that needs a top nav, side navigation, and scrollable content.
14
14
  *
@@ -36,7 +36,7 @@ import { AppShellMobileContext } from "./AppShellMobileContext.js";
36
36
  import { mergeProps, isRenderable } from "../utils/index.js";
37
37
  import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
38
38
  import { useMediaQuery } from "../hooks/useMediaQuery.js";
39
- import { observeResize, unobserveResize } from "../utils/sharedResizeObserver.js";
39
+ import { observeResize } from "../utils/sharedResizeObserver.js";
40
40
  import { themeProps } from "../utils/themeProps.js";
41
41
  import { useTranslator } from "../i18n/index.js";
42
42
  import { useMergedRefs } from "../hooks/useMergedRefs.js";
@@ -105,6 +105,7 @@ const styles = {
105
105
  k1xSpc: "x78zum5",
106
106
  kXwgrk: "xdt5ytf",
107
107
  kVAEAm: "x1n2onr6",
108
+ kVQacm: "x7giv3",
108
109
  $$css: true
109
110
  },
110
111
  variantWash: {
@@ -199,7 +200,7 @@ const styles = {
199
200
  // =============================================================================
200
201
 
201
202
  /**
202
- * Application-level layout shell. Provides the structural frame for an app:
203
+ * Page shell for an application. Provides the structural frame for an app:
203
204
  * top navigation, side navigation, and main content area.
204
205
  *
205
206
  * Slot-based API with `topNav`, `sideNav`, `banner`, and `children`.
@@ -294,6 +295,9 @@ export function AppShell({
294
295
  const navHasDividers = variant === 'section';
295
296
  const isElevated = variant === 'elevated';
296
297
  const navAreaStyle = variant === 'wash' || variant === 'elevated' ? styles.navAreaWash : variant === 'surface' ? styles.navAreaSurface : undefined;
298
+ // Section normally inherits the shell's surface background. Its auto-height
299
+ // header needs to paint that surface itself while content scrolls beneath it.
300
+ const headerAreaStyle = navAreaStyle ?? (isAuto && variant === 'section' ? styles.navAreaSurface : undefined);
297
301
  const contentAreaStyle = variant === 'wash' ? styles.contentBgWash : variant === 'elevated' && hasTopNav && hasSideNav && !isBelowBreakpoint ? styles.contentBgTransparent : variant === 'surface' || variant === 'elevated' ? styles.contentBgSurface : undefined;
298
302
 
299
303
  // Background for sticky elements in auto mode — must be opaque so content
@@ -316,8 +320,7 @@ export function AppShell({
316
320
  const height = headerEl.getBoundingClientRect().height;
317
321
  shellEl.style.setProperty('--_app-shell-header-height', `${height}px`);
318
322
  };
319
- observeResize(headerEl, () => updateHeight());
320
- return () => unobserveResize(headerEl);
323
+ return observeResize(headerEl, () => updateHeight());
321
324
  }, [isAuto]);
322
325
 
323
326
  // =========================================================================
@@ -395,7 +398,7 @@ export function AppShell({
395
398
  role: "banner",
396
399
  ...mergeProps(themeProps('app-shell-header', {
397
400
  variant
398
- }), stylex.props(navAreaStyle, isAuto && styles.headerSticky)),
401
+ }), stylex.props(headerAreaStyle, isAuto && styles.headerSticky)),
399
402
  children: headerInner
400
403
  }) : undefined;
401
404
 
@@ -473,7 +476,7 @@ export function AppShell({
473
476
  role: headerContent == null ? 'banner' : undefined,
474
477
  ...mergeProps(themeProps('app-shell-header', {
475
478
  variant
476
- }), stylex.props(navAreaStyle, isAuto && styles.headerSticky)),
479
+ }), stylex.props(headerAreaStyle, isAuto && styles.headerSticky)),
477
480
  children: /*#__PURE__*/_jsx(LayoutHeader, {
478
481
  padding: 0,
479
482
  hasDivider: navHasDividers,
@@ -11,6 +11,11 @@
11
11
  * - Status icon (themeProps 'banner-icon'): the target rides on the default
12
12
  * <Icon> itself — the element that paints — so 'status:X' overrides reach
13
13
  * the glyph (#4166); for a custom `icon` node it stays on the layout wrapper
14
+ * - Description (themeProps 'banner-description'): the supporting line owns its
15
+ * own colour and type, and the space between it and the title
16
+ * - The end area carries no target: it is a layout row (flex, wrap, edge
17
+ * compensation) rather than a painted surface, and a theme that wants the
18
+ * header to grow around its buttons sets `padding-block` on 'banner'
14
19
  * - No left border accent — color is expressed through the full header background
15
20
  * - Each visual area owns its own border-radius (no overflow:clip on the container)
16
21
  * - Children are collapsible by default: a toggle appears in the header end
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAA0B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgB5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,KAAK,EACL,WAAW,EACX,IAAI,EACJ,aAAqB,EACrB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAkB,EAClB,SAAkB,EAClB,WAAkB,EAClB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,cAAc,EACd,oBAAoB,EACpB,GAAG,IAAI,EACR,EAAE,WAAW,sCA6Ob;yBAjQe,MAAM"}
1
+ {"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAA0B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgB5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,KAAK,EACL,WAAW,EACX,IAAI,EACJ,aAAqB,EACrB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAkB,EAClB,SAAkB,EAClB,WAAkB,EAClB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,cAAc,EACd,oBAAoB,EACpB,GAAG,IAAI,EACR,EAAE,WAAW,sCAmPb;yBAvQe,MAAM"}
@@ -15,6 +15,11 @@
15
15
  * - Status icon (themeProps 'banner-icon'): the target rides on the default
16
16
  * <Icon> itself — the element that paints — so 'status:X' overrides reach
17
17
  * the glyph (#4166); for a custom `icon` node it stays on the layout wrapper
18
+ * - Description (themeProps 'banner-description'): the supporting line owns its
19
+ * own colour and type, and the space between it and the title
20
+ * - The end area carries no target: it is a layout row (flex, wrap, edge
21
+ * compensation) rather than a painted surface, and a theme that wants the
22
+ * header to grow around its buttons sets `padding-block` on 'banner'
18
23
  * - No left border accent — color is expressed through the full header background
19
24
  * - Each visual area owns its own border-radius (no overflow:clip on the container)
20
25
  * - Children are collapsible by default: a toggle appears in the header end
@@ -429,9 +434,9 @@ export function Banner({
429
434
  },
430
435
  children: title
431
436
  }), isRenderable(description) && /*#__PURE__*/_jsx("div", {
432
- ...{
437
+ ...mergeProps(themeProps('banner-description'), {
433
438
  className: "x1ghz6dp xjb2p0i x141an7d x1sodnla x1ltkj2j xv1l7n4 xj0a0fe"
434
- },
439
+ }),
435
440
  children: description
436
441
  })]
437
442
  }), showEndArea && /*#__PURE__*/_jsxs("div", {
@@ -20,7 +20,7 @@
20
20
  * - /apps/storybook/stories/BottomSheet.stories.tsx
21
21
  * - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetShowcase.tsx
22
22
  */
23
- import { type ReactNode } from 'react';
23
+ import { type RefObject, type ReactNode } from 'react';
24
24
  import type { BaseProps } from '../BaseProps';
25
25
  import type { DialogPurpose } from '../Dialog';
26
26
  export type { BottomSheetHeight, BottomSheetSnapPoint } from './BottomSheetPanel';
@@ -56,6 +56,8 @@ interface StandaloneBottomSheetProps extends BottomSheetSharedProps {
56
56
  isOpen: boolean;
57
57
  onOpenChange: (isOpen: boolean) => void;
58
58
  hasScrim?: boolean;
59
+ /** Element that receives focus after the sheet closes. */
60
+ finalFocusRef?: RefObject<HTMLElement | null>;
59
61
  sheetId?: never;
60
62
  }
61
63
  interface SwitcherBottomSheetProps extends BottomSheetSharedProps {
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAe7C,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAyEhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AA4XxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
1
+ {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAe7C,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAyEhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AA4XxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
@@ -93,6 +93,7 @@ function StandaloneBottomSheet({
93
93
  height = 'capped',
94
94
  snapPoints,
95
95
  hasScrim = true,
96
+ finalFocusRef,
96
97
  purpose = 'info',
97
98
  xstyle,
98
99
  ...props
@@ -162,9 +163,9 @@ function StandaloneBottomSheet({
162
163
  dialog.close();
163
164
  }
164
165
  setIsPresented(false);
165
- triggerRef.current?.focus();
166
+ (finalFocusRef?.current ?? triggerRef.current)?.focus();
166
167
  triggerRef.current = null;
167
- }, [isOpen]);
168
+ }, [finalFocusRef, isOpen]);
168
169
  useScrollLock(shouldPresent && hasScrim);
169
170
  useDevWarning('BottomSheet', 'requires a non-empty `label` for an accessible name; the open sheet ' + 'has no built-in heading to derive one from.', isOpen && !label);
170
171
  const handleCancel = useCallback(event => {
@@ -274,7 +275,7 @@ function StandaloneBottomSheet({
274
275
  onMotionComplete: handleMotionComplete,
275
276
  children: children
276
277
  })
277
- }), hasScrim ? null : /*#__PURE__*/_jsx(BottomSheetEdgeTint, {})]
278
+ }), /*#__PURE__*/_jsx(BottomSheetEdgeTint, {})]
278
279
  });
279
280
  }
280
281
  function SwitcherBottomSheetItem({
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Colours the iOS Safari toolbar strip below a non-modal sheet. Renders
3
- * nothing visible; see the file header for why it exists.
2
+ * Colours the iOS Safari toolbar strip below a sheet. Renders nothing visible;
3
+ * see the file header for why it exists.
4
4
  */
5
5
  export declare function BottomSheetEdgeTint(): import("react").JSX.Element;
6
6
  //# sourceMappingURL=BottomSheetEdgeTint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetEdgeTint.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetEdgeTint.tsx"],"names":[],"mappings":"AAqEA;;;GAGG;AACH,wBAAgB,mBAAmB,gCAQlC"}
1
+ {"version":3,"file":"BottomSheetEdgeTint.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetEdgeTint.tsx"],"names":[],"mappings":"AAkEA;;;GAGG;AACH,wBAAgB,mBAAmB,gCAQlC"}
@@ -6,7 +6,7 @@
6
6
  * @file BottomSheetEdgeTint.tsx
7
7
  * @input Uses StyleX and core color tokens
8
8
  * @output Exports BottomSheetEdgeTint, an internal decorative element
9
- * @position Private helper rendered inside a non-modal BottomSheet dialog
9
+ * @position Private helper rendered inside every BottomSheet dialog
10
10
  *
11
11
  * iOS 26 Safari dropped `<meta name="theme-color">` and instead derives the
12
12
  * colour it paints behind its translucent toolbars by sampling the page: it
@@ -14,13 +14,10 @@
14
14
  * `fixed`/`sticky` ancestor, and extends that element's declared
15
15
  * `background-color` into the browser chrome.
16
16
  *
17
- * A modal sheet is served by that heuristic already — WebKit has a dedicated
18
- * branch for a dialog's `::backdrop`. A non-modal sheet is not: the nearest
19
- * fixed ancestor of the panel is the sheet's own full-viewport `<dialog>`,
20
- * which is transparent and viewport-sized, and WebKit answers a viewport-sized
21
- * candidate by *keeping the colour it already had* — the host page's. The page
22
- * then shows through behind the address bar while the sheet covers the screen
23
- * above it.
17
+ * WebKit may otherwise extend either the dialog backdrop or the host page into
18
+ * the browser chrome. Which one wins varies with dialog mode and the page's
19
+ * own fixed or sticky edge content, so relying on the backdrop makes otherwise
20
+ * identical BottomSheets produce different toolbar colours.
24
21
  *
25
22
  * This element gives the heuristic something unambiguous to sample: fixed,
26
23
  * full width, flush with the bottom edge, taller than WebKit's 10px minimum
@@ -48,8 +45,8 @@ import { colorVars } from "../theme/tokens.stylex.js";
48
45
  import { jsx as _jsx } from "react/jsx-runtime";
49
46
  const SAMPLE_HEIGHT_PX = 12;
50
47
  /**
51
- * Colours the iOS Safari toolbar strip below a non-modal sheet. Renders
52
- * nothing visible; see the file header for why it exists.
48
+ * Colours the iOS Safari toolbar strip below a sheet. Renders nothing visible;
49
+ * see the file header for why it exists.
53
50
  */
54
51
  export function BottomSheetEdgeTint() {
55
52
  return /*#__PURE__*/_jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetSwitcher.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetSwitcher.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAqI5C,MAAM,WAAW,wBAAyB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5E,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,iEAAiE;IACjE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,mBAAmB,EACnB,QAAe,EACf,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,wBAAwB,+BA+Z1B;yBA5ae,mBAAmB"}
1
+ {"version":3,"file":"BottomSheetSwitcher.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetSwitcher.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAqI5C,MAAM,WAAW,wBAAyB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5E,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,iEAAiE;IACjE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,mBAAmB,EACnB,QAAe,EACf,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,wBAAwB,+BA8Z1B;yBA3ae,mBAAmB"}
@@ -410,7 +410,7 @@ export function BottomSheetSwitcher({
410
410
  ...(activeSheetPurpose === 'required' ? {
411
411
  role: 'alertdialog'
412
412
  } : undefined),
413
- children: [children, hasScrim ? null : /*#__PURE__*/_jsx(BottomSheetEdgeTint, {})]
413
+ children: [children, /*#__PURE__*/_jsx(BottomSheetEdgeTint, {})]
414
414
  })
415
415
  });
416
416
  }
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * @file BreadcrumbItem.tsx
3
3
  * @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
4
- * and (for the menu trigger) usePopover + the shared DropdownMenu item API
5
- * (renderDropdownItems, DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
4
+ * rtlStyles for the contextual default slash, and (for the menu trigger)
5
+ * usePopover + the shared DropdownMenu item API (renderDropdownItems,
6
+ * DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
6
7
  * @output Exports BreadcrumbItem component and BreadcrumbItemProps
7
8
  * @position Individual breadcrumb item; used inside Breadcrumbs
8
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAyHD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAsMrB;yBArNe,cAAc"}
1
+ {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAqID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAkMrB;yBAjNe,cAAc"}
@@ -5,8 +5,9 @@
5
5
  /**
6
6
  * @file BreadcrumbItem.tsx
7
7
  * @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
8
- * and (for the menu trigger) usePopover + the shared DropdownMenu item API
9
- * (renderDropdownItems, DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
8
+ * rtlStyles for the contextual default slash, and (for the menu trigger)
9
+ * usePopover + the shared DropdownMenu item API (renderDropdownItems,
10
+ * DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
10
11
  * @output Exports BreadcrumbItem component and BreadcrumbItemProps
11
12
  * @position Individual breadcrumb item; used inside Breadcrumbs
12
13
  *
@@ -27,7 +28,7 @@ import "../theme/tokens.stylex.js";
27
28
  import { colorVars, spacingVars, typeScaleVars, radiusVars, fontWeightVars } from "../theme/tokens.stylex.js";
28
29
  import { BreadcrumbContext } from "./Breadcrumbs.js";
29
30
  import { useLinkComponent } from "../Link/useLinkComponent.js";
30
- import { mergeProps } from "../utils/index.js";
31
+ import { mergeProps, rtlStyles } from "../utils/index.js";
31
32
  import { themeProps } from "../utils/themeProps.js";
32
33
  import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
33
34
  import { Icon } from "../Icon/index.js";
@@ -99,6 +100,20 @@ const itemStyles = {
99
100
  $$css: true
100
101
  }
101
102
  };
103
+ function BreadcrumbSeparator({
104
+ separator
105
+ }) {
106
+ return /*#__PURE__*/_jsx("span", {
107
+ "aria-hidden": "true",
108
+ ...{
109
+ className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
110
+ },
111
+ children: separator === '/' ? /*#__PURE__*/_jsx("span", {
112
+ ...stylex.props(rtlStyles.mirror),
113
+ children: "/"
114
+ }) : separator
115
+ });
116
+ }
102
117
  const menuStyles = {
103
118
  popover: {
104
119
  k7Eaqz: "x5w4yej",
@@ -220,12 +235,8 @@ export function BreadcrumbItem({
220
235
  }), stylex.props(itemStyles.root, isSupporting ? itemStyles.supportingSize : itemStyles.defaultSize, xstyle), className, style),
221
236
  "data-testid": testId,
222
237
  ...rest,
223
- children: [/*#__PURE__*/_jsx("span", {
224
- "aria-hidden": "true",
225
- ...{
226
- className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
227
- },
228
- children: ctx.separator
238
+ children: [/*#__PURE__*/_jsx(BreadcrumbSeparator, {
239
+ separator: ctx.separator
229
240
  }), hasMenu ?
230
241
  /*#__PURE__*/
231
242
  // A current crumb can also open a sibling menu — the trigger keeps
@@ -262,12 +273,8 @@ export function BreadcrumbItem({
262
273
  }), stylex.props(itemStyles.root, isSupporting ? itemStyles.supportingSize : itemStyles.defaultSize, xstyle), className, style),
263
274
  "data-testid": testId,
264
275
  ...rest,
265
- children: [/*#__PURE__*/_jsx("span", {
266
- "aria-hidden": "true",
267
- ...{
268
- className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
269
- },
270
- children: ctx.separator
276
+ children: [/*#__PURE__*/_jsx(BreadcrumbSeparator, {
277
+ separator: ctx.separator
271
278
  }), hasMenu ? /*#__PURE__*/_jsx(BreadcrumbMenuTrigger, {
272
279
  ref: contentRef,
273
280
  menu: menu,
@@ -78,7 +78,8 @@ export interface ButtonProps extends BaseProps<HTMLButtonElement> {
78
78
  */
79
79
  isDisabled?: boolean;
80
80
  /**
81
- * Whether the button is in a loading state.
81
+ * Whether the button is in a loading state. Loading prevents interaction
82
+ * without dimming the spinner; explicit disabled states remain dimmed.
82
83
  * @default false
83
84
  */
84
85
  isLoading?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAwB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAwB3C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AA0G9C,QAAA,MAAM,UAAU;;;;;;;;;;EAUd,CAAC;AAsDH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAC;AAEjD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC,oDAAoD;IACpD,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACrD;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KACnC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAuJD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,OAAqB,EACrB,IAAI,EAAE,QAAQ,EACd,IAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,eAAuB,EACvB,WAAW,EACX,IAAI,EACJ,UAAkB,EAClB,KAAK,EACL,SAAkB,EAClB,QAAQ,EACR,UAAU,EACV,OAAO,EACP,IAAI,EACJ,EAAE,EACF,MAAM,EACN,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,SAAS,CAoPzB;yBA7Qe,MAAM"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"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"}
@@ -66,16 +66,19 @@ const styles = {
66
66
  $$css: true
67
67
  },
68
68
  pressable: {
69
- k3aq6I: "x3oybdh xk4oym4",
69
+ k3aq6I: "x3oybdh x8ppqj",
70
70
  $$css: true
71
71
  },
72
- disabled: {
72
+ inactive: {
73
73
  kkrTdU: "xt0e3qv",
74
- kSiTet: "xbyyjgo",
75
74
  kKwaWg: "x18o3ruo",
76
75
  k3aq6I: "x1c071of x1pdlv7q",
77
76
  $$css: true
78
77
  },
78
+ disabled: {
79
+ kSiTet: "xbyyjgo",
80
+ $$css: true
81
+ },
79
82
  ariaDisabled: {
80
83
  kKwaWg: "x18o3ruo xuqm82a",
81
84
  $$css: true
@@ -374,6 +377,10 @@ export function Button({
374
377
  // When interruptible, the loading state drives the spinner and aria-busy but
375
378
  // not disabled, so clicks keep landing and can interrupt the in-flight action.
376
379
  const buttonDisabled = isDisabled || groupDisabled || isLoadingState && !isInterruptible;
380
+ // A loading button remains non-interactive, but its spinner communicates an
381
+ // active state and must retain contrast. Only explicitly disabled controls
382
+ // receive the visually dimmed treatment.
383
+ const visuallyDisabled = isDisabled || groupDisabled;
377
384
  // isIconOnly prop is the source of truth for icon-only rendering.
378
385
  // When false (default), label is always rendered as visible text.
379
386
 
@@ -434,7 +441,7 @@ export function Button({
434
441
  } : null;
435
442
 
436
443
  // Shared StyleX props for both button and link rendering
437
- const sharedStylexProps = focusOutlineProps.focusVisible(styles.base, sizeStyles[size], isIconOnly && styles.iconOnly, interactionOverlayStyles.backgroundImage, buttonDisabled && styles.disabled, useAriaDisabled && styles.ariaDisabled, renderAsLink && styles.link, !buttonGroup && styles.pressable, buttonGroup && (buttonGroup.orientation === 'horizontal' ? groupStyles.horizontal : groupStyles.vertical), buttonGroup && (variant === 'primary' || variant === 'destructive') && (buttonGroup.orientation === 'horizontal' ? groupStyles.onSolidHorizontal : groupStyles.onSolidVertical),
444
+ const sharedStylexProps = focusOutlineProps.focusVisible(styles.base, sizeStyles[size], isIconOnly && styles.iconOnly, interactionOverlayStyles.backgroundImage, buttonDisabled && styles.inactive, visuallyDisabled && styles.disabled, useAriaDisabled && styles.ariaDisabled, renderAsLink && styles.link, !buttonGroup && styles.pressable, buttonGroup && (buttonGroup.orientation === 'horizontal' ? groupStyles.horizontal : groupStyles.vertical), buttonGroup && (variant === 'primary' || variant === 'destructive') && (buttonGroup.orientation === 'horizontal' ? groupStyles.onSolidHorizontal : groupStyles.onSolidVertical),
438
445
  // Standalone floating buttons only — a grouped button's elevation is owned
439
446
  // by the ButtonGroup so the shared surface lifts as one unit.
440
447
  !buttonGroup && elevationStyles[elevation], width != null && dynamicStyles.width(width),
@@ -1 +1 @@
1
- {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../src/Carousel/Carousel.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;;OAGG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC;IACzB;;;OAGG;IACH,aAAa,IAAI,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAyJD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAO,EACP,UAAiB,EACjB,WAAkB,EAClB,OAAe,EACf,OAAe,EACf,OAAO,EACP,YAAY,EAAE,kBAAkB,EAChC,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,SAAS,EACb,EAAE,aAAa,+BAgYf;yBAhZe,QAAQ"}
1
+ {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../src/Carousel/Carousel.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;;OAGG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC;IACzB;;;OAGG;IACH,aAAa,IAAI,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+JD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAO,EACP,UAAiB,EACjB,WAAkB,EAClB,OAAe,EACf,OAAe,EACf,OAAO,EACP,YAAY,EAAE,kBAAkB,EAChC,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,SAAS,EACb,EAAE,aAAa,+BAgYf;yBAhZe,QAAQ"}
@@ -69,11 +69,11 @@ const styles = {
69
69
  $$css: true
70
70
  },
71
71
  fadeStart: {
72
- kX1K2I: "x1ujl4f5",
72
+ kX1K2I: "x1ujl4f5 x17xqekc",
73
73
  $$css: true
74
74
  },
75
75
  fadeEnd: {
76
- kX1K2I: "xtdd0ob",
76
+ kX1K2I: "xtdd0ob x8ulde1",
77
77
  $$css: true
78
78
  },
79
79
  fadeBoth: {
@@ -46,8 +46,8 @@ export interface ChatComposerProps extends Omit<BaseProps<HTMLDivElement>, 'onCh
46
46
  /**
47
47
  * Resting elevation of the composer body. `low` (the default) keeps today's
48
48
  * raised look — low at rest, bumping to med on hover / focus. `none` flattens
49
- * it and draws a border with the same rest / hover / focus treatment as a
50
- * text input (emphasized border → accent on focus, with matching inset rings).
49
+ * it and draws a border. Keyboard focus in the editor adds the shared focus
50
+ * ring in either presentation; pointer focus does not add that ring.
51
51
  * @default 'low'
52
52
  */
53
53
  elevation?: 'none' | 'low';
@@ -1 +1 @@
1
- {"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0B5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAI3B,6GAA6G;IAC7G,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yHAAyH;IACzH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gHAAgH;IAChH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gHAAgH;IAChH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACnC;AAoMD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAiLpD;yBAjLe,YAAY"}
1
+ {"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA+B5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAI3B,6GAA6G;IAC7G,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yHAAyH;IACzH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gHAAgH;IAChH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gHAAgH;IAChH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACnC;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBA2MpD;yBA3Me,YAAY"}
@@ -33,6 +33,8 @@ import { ChatComposerContext } from "./ChatContext.js";
33
33
  import { ChatSendButton } from "./ChatSendButton.js";
34
34
  import { themeProps } from "../utils/themeProps.js";
35
35
  import { useTranslator } from "../i18n/index.js";
36
+ import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
37
+ import { getInteractionModality, useInteractionModalityTracking } from "../utils/interactionModality.js";
36
38
 
37
39
  // =============================================================================
38
40
  // Types
@@ -65,7 +67,8 @@ const styles = {
65
67
 
66
68
  // Resting elevation for the composer body, narrowed to two steps.
67
69
  // - `low` (default) preserves today's look: low at rest, bumping to med on
68
- // hover / focus-within (a CSS-only interaction state the component owns).
70
+ // hover / focus-within. The WCAG focus indicator is a separate shared ring,
71
+ // gated to keyboard focus in the editor; the shadow change remains depth.
69
72
  // - `none` is flat; depth comes from a border + inset rings instead. The
70
73
  // border is drawn *inside* the padding — its width is subtracted from every
71
74
  // side (like Card) so total inset (border + padding) equals the elevated
@@ -88,6 +91,9 @@ const elevationStyles = {
88
91
  $$css: true
89
92
  }
90
93
  };
94
+ function isComposerEditor(target) {
95
+ return target instanceof HTMLElement && target.matches('textarea, [contenteditable="true"], [role="textbox"], input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="url"], input[type="tel"], input[type="password"]');
96
+ }
91
97
 
92
98
  // =============================================================================
93
99
  // Component
@@ -134,6 +140,8 @@ export function ChatComposer(props) {
134
140
  } = props;
135
141
  const placeholder = placeholderFromProps ?? t('@astryx.chat.composer.placeholder');
136
142
  const [internalValue, setInternalValue] = useState('');
143
+ const [hasKeyboardEditorFocus, setHasKeyboardEditorFocus] = useState(false);
144
+ useInteractionModalityTracking();
137
145
  const isControlled = controlledValue !== undefined;
138
146
  const currentValue = isControlled ? controlledValue : internalValue;
139
147
  const updateValue = useCallback(newValue => {
@@ -175,6 +183,14 @@ export function ChatComposer(props) {
175
183
  const editable = bodyRef.current?.querySelector('[contenteditable="true"], textarea');
176
184
  editable?.focus();
177
185
  }, []);
186
+ const handleBodyFocusCapture = useCallback(event => {
187
+ setHasKeyboardEditorFocus(isComposerEditor(event.target) && getInteractionModality() === 'keyboard');
188
+ }, []);
189
+ const handleBodyBlurCapture = useCallback(event => {
190
+ if (!event.currentTarget.contains(event.relatedTarget)) {
191
+ setHasKeyboardEditorFocus(false);
192
+ }
193
+ }, []);
178
194
  const statusEl = status ? /*#__PURE__*/_jsxs("div", {
179
195
  role: status.type === 'error' ? 'alert' : 'status',
180
196
  ...{
@@ -238,7 +254,10 @@ export function ChatComposer(props) {
238
254
  children: [statusPosition === 'top' && statusEl, drawer, /*#__PURE__*/_jsxs("div", {
239
255
  ref: bodyRef,
240
256
  onClick: handleBodyClick,
241
- ...stylex.props(styles.body, elevationStyles[elevation], density === 'compact' && styles.compact, xstyle),
257
+ onPointerDownCapture: () => setHasKeyboardEditorFocus(false),
258
+ onFocusCapture: handleBodyFocusCapture,
259
+ onBlurCapture: handleBodyBlurCapture,
260
+ ...stylex.props(styles.body, elevationStyles[elevation], hasKeyboardEditorFocus && focusOutlineStyles.focusWithin, density === 'compact' && styles.compact, xstyle),
242
261
  children: [(headerActions || headerContext) && /*#__PURE__*/_jsxs("div", {
243
262
  ...{
244
263
  className: "x78zum5 x6s0dn4 x1qughib x1txdalj xe0p6wg"
@@ -1 +1 @@
1
- {"version":3,"file":"ChatComposerInput.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposerInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatComposerInput.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposerInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAkBrE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAQ,KAAK,UAAU,EAAC,MAAM,UAAU,CAAC;AAShD,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9D,6EAA6E;IAC7E,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uDAAuD;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sBAAsB;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB;AAED,wFAAwF;AACxF,MAAM,MAAM,sBAAsB,GAAG;IACnC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC;AAE/D,mFAAmF;AACnF,MAAM,MAAM,uBAAuB,GAAG;IACpC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,SAAS,CAAC;CACzB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAC3B,sBAAsB,GAAG,uBAAuB,CAAC;AAEnD,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG;IAChC,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACjD;;;OAGG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,MAAM,GAAG,iBAAiB,CAAC;IAC/D;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,CAAC;IAC1D,8DAA8D;IAC9D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,SAAS,GAAG,UAAU,CACpC;IACC,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,sDAAsD;IACtD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC/C,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0IAA0I;IAC1I,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,EACrC,IAAI,EAAE,MAAM,KACT,OAAO,GAAG,IAAI,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,yBAAyB,GAAG,KAAK,CAAC;IACjD,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC5D;AA8FD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,+BA0c9D;yBA1ce,iBAAiB;;;AAkdjC,wBAAgB,wBAAwB,CAAC,EAAC,KAAK,EAAC,EAAE;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAC,+BAc3E;yBAde,wBAAwB"}
@@ -30,7 +30,7 @@ import { colorVars, spacingVars, typeScaleVars, typographyVars } from "../theme/
30
30
  import { mergeProps, isImeKeyEvent } from "../utils/index.js";
31
31
  import { useTriggerMenu } from "./useTriggerMenu.js";
32
32
  import { useChatComposerTokens, isCustomToken } from "./useChatComposerTokens.js";
33
- import { ensureCaretInside, insertTextAtCursor } from "./chatComposerSelection.js";
33
+ import { ensureCaretInside, insertTextAtCursor, isSelectionAtStart, isSelectionAtEnd } from "./chatComposerSelection.js";
34
34
  import { ChatPastedTextToken } from "./ChatPastedTextToken.js";
35
35
  import { useChatPasteAsToken } from "./useChatPasteAsToken.js";
36
36
  import { Badge } from "../Badge/index.js";
@@ -373,12 +373,29 @@ export function ChatComposerInput(props) {
373
373
  return;
374
374
  }
375
375
 
376
- // History navigation (only when trigger menu is not active)
376
+ // History navigation (only when trigger menu is not active).
377
+ // Recall only at the text boundaries so the caret can still move
378
+ // between lines in a multi-line draft: ArrowUp recalls the
379
+ // previous message when the caret is at the very start, ArrowDown
380
+ // steps forward when it's at the very end. A recalled message is
381
+ // shown fully selected (see `selectAll` below); that spans both
382
+ // boundaries at once, so repeated presses keep stepping through
383
+ // history. Mid-text, we bail before `preventDefault` and let the
384
+ // browser move the caret up/down a line.
377
385
  if (hasHistory && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {
378
386
  if (!editableRef.current) {
379
387
  return;
380
388
  }
381
- const text = serialize(editableRef.current);
389
+ const editable = editableRef.current;
390
+ const isCollapsed = window.getSelection()?.isCollapsed ?? true;
391
+ const atStart = isSelectionAtStart(editable);
392
+ const atEnd = isSelectionAtEnd(editable);
393
+ const canRecallPrev = atStart && (isCollapsed || atEnd);
394
+ const canRecallNext = atEnd && (isCollapsed || atStart);
395
+ if (e.key === 'ArrowUp' ? !canRecallPrev : !canRecallNext) {
396
+ return;
397
+ }
398
+ const text = serialize(editable);
382
399
  const history = historyRef.current;
383
400
  if (history.length === 0) {
384
401
  return;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file ChatToolCalls.tsx
3
- * @input Uses React, StyleX, theme tokens
3
+ * @input Uses React, StyleX, semantic icon registry, theme tokens
4
4
  * @output Exports ChatToolCalls component
5
5
  * @position Chat component — displays tool/function call invocations
6
6
  *