@astryxdesign/core 0.5.2-canary.237d82a → 0.5.2-canary.29bde32

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 (224) hide show
  1. package/dist/AppShell/AppShell.d.ts.map +1 -1
  2. package/dist/AppShell/AppShell.js +8 -5
  3. package/dist/Banner/Banner.d.ts +5 -0
  4. package/dist/Banner/Banner.d.ts.map +1 -1
  5. package/dist/Banner/Banner.js +7 -2
  6. package/dist/Chat/ChatComposer.d.ts +2 -2
  7. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  8. package/dist/Chat/ChatComposer.js +21 -2
  9. package/dist/Chat/useChatNewMessages.js +3 -3
  10. package/dist/CheckboxList/CheckboxListItem.d.ts +5 -3
  11. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  12. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  13. package/dist/DropdownMenu/DropdownMenu.js +2 -4
  14. package/dist/Field/Field.d.ts.map +1 -1
  15. package/dist/Field/Field.js +10 -4
  16. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  17. package/dist/Field/PanelSearchInput.js +3 -5
  18. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  19. package/dist/FieldStatus/FieldStatus.js +4 -2
  20. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  21. package/dist/Layer/useTouchTrigger.js +2 -4
  22. package/dist/RadioList/RadioListItem.d.ts +30 -5
  23. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  24. package/dist/RadioList/RadioListItem.js +17 -4
  25. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  26. package/dist/Resizable/ResizeHandle.js +102 -44
  27. package/dist/Resizable/index.d.ts +2 -0
  28. package/dist/Resizable/index.d.ts.map +1 -1
  29. package/dist/Resizable/index.js +1 -0
  30. package/dist/Resizable/useResizable.d.ts +89 -8
  31. package/dist/Resizable/useResizable.d.ts.map +1 -1
  32. package/dist/Resizable/useResizable.js +521 -38
  33. package/dist/Resizable/utils.d.ts +35 -0
  34. package/dist/Resizable/utils.d.ts.map +1 -0
  35. package/dist/Resizable/utils.js +27 -0
  36. package/dist/Slider/Slider.d.ts.map +1 -1
  37. package/dist/Slider/Slider.js +3 -5
  38. package/dist/Spinner/Spinner.d.ts.map +1 -1
  39. package/dist/Spinner/Spinner.js +8 -9
  40. package/dist/Stepper/Step.d.ts +2 -1
  41. package/dist/Stepper/Step.d.ts.map +1 -1
  42. package/dist/Stepper/Step.js +75 -11
  43. package/dist/Stepper/Stepper.d.ts.map +1 -1
  44. package/dist/Stepper/Stepper.js +1 -0
  45. package/dist/TabList/TabList.d.ts.map +1 -1
  46. package/dist/TabList/TabList.js +2 -3
  47. package/dist/Table/index.d.ts +16 -1
  48. package/dist/Table/index.d.ts.map +1 -1
  49. package/dist/Table/index.js +4 -0
  50. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  51. package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
  52. package/dist/Table/plugins/rowStatus/index.d.ts +1 -1
  53. package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -1
  54. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +11 -33
  55. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
  56. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +108 -75
  57. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  58. package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
  59. package/dist/Text/useTruncation.d.ts +1 -1
  60. package/dist/Text/useTruncation.d.ts.map +1 -1
  61. package/dist/Text/useTruncation.js +8 -7
  62. package/dist/Timestamp/Timestamp.d.ts +2 -2
  63. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  64. package/dist/Timestamp/Timestamp.js +4 -145
  65. package/dist/Timestamp/formatRelativeTime.d.ts +20 -0
  66. package/dist/Timestamp/formatRelativeTime.d.ts.map +1 -0
  67. package/dist/Timestamp/formatRelativeTime.js +81 -0
  68. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  69. package/dist/Toast/ToastViewport.js +125 -77
  70. package/dist/Tokenizer/Tokenizer.d.ts +0 -38
  71. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  72. package/dist/Tokenizer/Tokenizer.js +94 -26
  73. package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
  74. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
  75. package/dist/Tokenizer/useEndLaneReserve.js +136 -0
  76. package/dist/Tooltip/useTooltip.d.ts +1 -1
  77. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  78. package/dist/Tooltip/useTooltip.js +53 -42
  79. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  80. package/dist/Typeahead/BaseTypeahead.js +85 -30
  81. package/dist/Typeahead/Typeahead.d.ts +0 -21
  82. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  83. package/dist/Typeahead/Typeahead.js +108 -67
  84. package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
  85. package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
  86. package/dist/Typeahead/busyIndicatorLane.js +98 -0
  87. package/dist/astryx.css +23 -6
  88. package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -1
  89. package/dist/hooks/useFocusReturnVisibility.js +3 -5
  90. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  91. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  92. package/dist/hooks/useOverflow.js +11 -11
  93. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  94. package/dist/hooks/useScrollOverflow.js +7 -4
  95. package/dist/theme/defineTheme.d.ts +13 -0
  96. package/dist/theme/defineTheme.d.ts.map +1 -1
  97. package/dist/theme/defineTheme.js +7 -0
  98. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  99. package/dist/theme/generateThemeRules.js +1 -1
  100. package/dist/theme/localTokens.d.ts +18 -0
  101. package/dist/theme/localTokens.d.ts.map +1 -0
  102. package/dist/theme/localTokens.js +162 -0
  103. package/dist/utils/interactionModality.d.ts +6 -28
  104. package/dist/utils/interactionModality.d.ts.map +1 -1
  105. package/dist/utils/interactionModality.js +72 -37
  106. package/dist/utils/sharedResizeObserver.d.ts +17 -9
  107. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  108. package/dist/utils/sharedResizeObserver.js +54 -12
  109. package/package.json +7 -2
  110. package/src/AlertDialog/useImperativeAlertDialog.test.tsx +163 -0
  111. package/src/AppShell/AppShell.test.tsx +21 -0
  112. package/src/AppShell/AppShell.tsx +10 -5
  113. package/src/Banner/Banner.doc.mjs +4 -0
  114. package/src/Banner/Banner.tsx +12 -1
  115. package/src/Calendar/hooks/useCalendarConstraints.test.ts +153 -0
  116. package/src/Calendar/hooks/useCalendarDays.test.ts +265 -0
  117. package/src/Calendar/hooks/useCalendarNavigation.test.ts +252 -0
  118. package/src/Chat/ChatComposer.doc.mjs +7 -4
  119. package/src/Chat/ChatComposer.test.tsx +84 -2
  120. package/src/Chat/ChatComposer.tsx +45 -3
  121. package/src/Chat/ChatSendButton.test.tsx +189 -0
  122. package/src/Chat/useChatNewMessages.ts +3 -3
  123. package/src/Chat/useChatPasteAsToken.test.ts +191 -0
  124. package/src/CheckboxList/CheckboxList.test.tsx +45 -0
  125. package/src/CheckboxList/CheckboxListItem.doc.mjs +11 -9
  126. package/src/CheckboxList/CheckboxListItem.tsx +5 -3
  127. package/src/Collapsible/useCollapsible.test.tsx +236 -0
  128. package/src/CommandPalette/CommandPaletteEmpty.test.tsx +101 -0
  129. package/src/ComplexSelector/ComplexSelector.spec.md +1 -1
  130. package/src/DropdownMenu/DropdownMenu.tsx +2 -4
  131. package/src/Field/Field.doc.mjs +1 -0
  132. package/src/Field/Field.test.tsx +39 -0
  133. package/src/Field/Field.tsx +18 -1
  134. package/src/Field/InputClearButton.test.tsx +68 -6
  135. package/src/Field/PanelSearchInput.tsx +3 -5
  136. package/src/FieldStatus/FieldStatus.test.tsx +17 -0
  137. package/src/FieldStatus/FieldStatus.tsx +7 -2
  138. package/src/Layer/useTouchTrigger.ts +2 -4
  139. package/src/Layout/LayoutHeader.doc.mjs +9 -0
  140. package/src/Layout/LayoutPanel.doc.mjs +4 -3
  141. package/src/Lightbox/useLightbox.test.tsx +263 -0
  142. package/src/MultiSelector/MultiSelector.spec.md +1 -1
  143. package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +253 -0
  144. package/src/PowerSearch/PowerSearchToken.test.tsx +228 -0
  145. package/src/RadioList/RadioList.test.tsx +136 -2
  146. package/src/RadioList/RadioListItem.doc.mjs +30 -11
  147. package/src/RadioList/RadioListItem.tsx +44 -8
  148. package/src/Resizable/Resizable.doc.mjs +71 -8
  149. package/src/Resizable/Resizable.spec.md +85 -34
  150. package/src/Resizable/ResizeHandle.test.tsx +177 -56
  151. package/src/Resizable/ResizeHandle.tsx +128 -45
  152. package/src/Resizable/index.ts +2 -0
  153. package/src/Resizable/shippedDirections.test.ts +462 -0
  154. package/src/Resizable/useResizable.doc.mjs +124 -29
  155. package/src/Resizable/useResizable.test.ts +1277 -3
  156. package/src/Resizable/useResizable.ts +760 -48
  157. package/src/Resizable/utils.test.ts +74 -0
  158. package/src/Resizable/utils.ts +35 -0
  159. package/src/Selector/Selector.spec.md +8 -6
  160. package/src/SideNav/SideNav.test.tsx +3 -3
  161. package/src/Slider/Slider.tsx +2 -5
  162. package/src/Spinner/Spinner.test.tsx +32 -7
  163. package/src/Spinner/Spinner.tsx +25 -13
  164. package/src/Stepper/Step.doc.mjs +1 -1
  165. package/src/Stepper/Step.tsx +118 -5
  166. package/src/Stepper/Stepper.doc.mjs +51 -1
  167. package/src/Stepper/Stepper.spec.md +245 -0
  168. package/src/Stepper/Stepper.test.tsx +315 -0
  169. package/src/Stepper/Stepper.tsx +8 -0
  170. package/src/TabList/TabList.tsx +2 -3
  171. package/src/Table/Table.perf.test.tsx +51 -1
  172. package/src/Table/Table.spec.md +92 -53
  173. package/src/Table/TableHeaderCell.test.tsx +291 -0
  174. package/src/Table/index.ts +19 -4
  175. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
  176. package/src/Table/plugins/filtering/useTableFilterState.test.tsx +143 -0
  177. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +2 -1
  178. package/src/Table/plugins/rowStatus/index.ts +1 -4
  179. package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +92 -0
  180. package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +354 -0
  181. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +413 -56
  182. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +155 -102
  183. package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
  184. package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
  185. package/src/Table/useTableRowStatus.doc.mjs +5 -5
  186. package/src/Text/useTruncation.ts +8 -7
  187. package/src/TextArea/TextArea.spec.md +1 -1
  188. package/src/Timestamp/Timestamp.doc.mjs +2 -2
  189. package/src/Timestamp/Timestamp.test.tsx +75 -3
  190. package/src/Timestamp/Timestamp.tsx +7 -153
  191. package/src/Timestamp/formatRelativeTime.ts +96 -0
  192. package/src/Toast/ToastViewport.test.tsx +194 -0
  193. package/src/Toast/ToastViewport.tsx +136 -58
  194. package/src/Tokenizer/Tokenizer.doc.mjs +2 -0
  195. package/src/Tokenizer/Tokenizer.spec.md +5 -5
  196. package/src/Tokenizer/Tokenizer.test.tsx +335 -1
  197. package/src/Tokenizer/Tokenizer.tsx +129 -46
  198. package/src/Tokenizer/useEndLaneReserve.ts +146 -0
  199. package/src/Tooltip/Tooltip.test.tsx +21 -1
  200. package/src/Tooltip/useTooltip.test.tsx +318 -0
  201. package/src/Tooltip/useTooltip.tsx +60 -39
  202. package/src/Typeahead/BaseTypeahead.tsx +96 -25
  203. package/src/Typeahead/Typeahead.doc.mjs +6 -0
  204. package/src/Typeahead/Typeahead.spec.md +8 -2
  205. package/src/Typeahead/Typeahead.test.tsx +502 -1
  206. package/src/Typeahead/Typeahead.tsx +187 -69
  207. package/src/Typeahead/TypeaheadItem.test.tsx +93 -2
  208. package/src/Typeahead/busyIndicatorLane.tsx +109 -0
  209. package/src/__tests__/stylexDeclarations.ts +51 -0
  210. package/src/hooks/useFocusReturnVisibility.ts +3 -5
  211. package/src/hooks/useOverflow.ts +11 -11
  212. package/src/hooks/useScrollLock.test.ts +103 -0
  213. package/src/hooks/useScrollOverflow.ts +7 -4
  214. package/src/i18n/useTranslator.test.tsx +197 -0
  215. package/src/theme/defineTheme.test.ts +227 -0
  216. package/src/theme/defineTheme.ts +30 -0
  217. package/src/theme/derivedVarRegistry.test.ts +6 -0
  218. package/src/theme/generateThemeRules.ts +4 -1
  219. package/src/theme/localTokens.ts +272 -0
  220. package/src/theme/themingTargets.test.ts +39 -7
  221. package/src/utils/interactionModality.test.ts +83 -0
  222. package/src/utils/interactionModality.ts +88 -36
  223. package/src/utils/sharedResizeObserver.test.ts +124 -5
  224. package/src/utils/sharedResizeObserver.ts +60 -14
@@ -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"}
@@ -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: {
@@ -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", {
@@ -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"
@@ -23,7 +23,7 @@
23
23
  * - /packages/core/src/Chat/index.ts (exports)
24
24
  */
25
25
  import { useCallback, useEffect, useRef, useState } from 'react';
26
- import { observeResize, unobserveResize } from "../utils/sharedResizeObserver.js";
26
+ import { observeResize } from "../utils/sharedResizeObserver.js";
27
27
 
28
28
  // =============================================================================
29
29
  // Types
@@ -49,7 +49,7 @@ export function useChatNewMessages({
49
49
  const elementRef = useRef(null);
50
50
  const cleanupRef = useRef(null);
51
51
  const attach = useCallback(el => {
52
- observeResize(el, () => {
52
+ const unobserve = observeResize(el, () => {
53
53
  onResizeRef.current?.();
54
54
  const messages = el.getElementsByClassName('astryx-chat-message');
55
55
  const last = messages.length > 0 ? messages[messages.length - 1] : null;
@@ -60,7 +60,7 @@ export function useChatNewMessages({
60
60
  }
61
61
  }
62
62
  });
63
- cleanupRef.current = () => unobserveResize(el);
63
+ cleanupRef.current = unobserve;
64
64
  }, []);
65
65
  const detach = useCallback(() => {
66
66
  cleanupRef.current?.();
@@ -19,7 +19,9 @@ export interface CheckboxListItemProps extends BaseProps<HTMLLIElement> {
19
19
  *
20
20
  * Accepts a plain string (single-line truncation applied automatically)
21
21
  * or a ReactNode for rich content (no truncation constraints —
22
- * child components control their own text behavior).
22
+ * child components control their own text behavior). Links and buttons in
23
+ * the label keep their own behavior; only non-interactive row clicks
24
+ * delegate to the checkbox.
23
25
  */
24
26
  label: ReactNode;
25
27
  /**
@@ -47,9 +49,9 @@ export interface CheckboxListItemProps extends BaseProps<HTMLLIElement> {
47
49
  */
48
50
  value?: string;
49
51
  /**
50
- * Secondary text below the label.
52
+ * Secondary content below the label. Accepts a plain string or a ReactNode.
51
53
  */
52
- description?: string;
54
+ description?: ReactNode;
53
55
  /**
54
56
  * Content rendered after the label area.
55
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxListItem.d.ts","sourceRoot":"","sources":["../../src/CheckboxList/CheckboxListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsB5C,MAAM,WAAW,qBAAsB,SAAQ,SAAS,CAAC,aAAa,CAAC;IACrE;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IACtC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;CAChC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,KAAK,EACL,WAAW,EACX,UAAU,EACV,UAAU,EAAE,cAAsB,EAClC,SAAS,EAAE,aAAqB,EAChC,SAAS,EACT,OAAO,EACP,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,GAAG,SAAS,EACb,EAAE,qBAAqB,+BAqIvB;yBArJe,gBAAgB"}
1
+ {"version":3,"file":"CheckboxListItem.d.ts","sourceRoot":"","sources":["../../src/CheckboxList/CheckboxListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsB5C,MAAM,WAAW,qBAAsB,SAAQ,SAAS,CAAC,aAAa,CAAC;IACrE;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IACtC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;CAChC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,KAAK,EACL,WAAW,EACX,UAAU,EACV,UAAU,EAAE,cAAsB,EAClC,SAAS,EAAE,aAAqB,EAChC,SAAS,EACT,OAAO,EACP,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,GAAG,SAAS,EACb,EAAE,qBAAqB,+BAqIvB;yBArJe,gBAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../src/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAS,KAAK,WAAW,EAAC,MAAM,WAAW,CAAC;AAKnD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAe9D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAStE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8I5C;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,qBAAqB,EACnB,MAAM,GACN,SAAS,GACT,YAAY,GACZ,SAAS,GACT,aAAa,GACb,YAAY,GACZ,kBAAkB,CACrB;IACC;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAC5B,oBAAoB,GAAG,uBAAuB,GAAG,mBAAmB,CAAC;AAMvE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEnE,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE5D,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAsB,SAAQ,qBAAqB;IAC3D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,yBAA0B,SAAQ,qBAAqB;IAC/D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAC3B,qBAAqB,GAAG,yBAAyB,CAAC;AA8lBpD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAqCpD;yBArCe,YAAY"}
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../src/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAS,KAAK,WAAW,EAAC,MAAM,WAAW,CAAC;AAKnD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAe9D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAStE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8I5C;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,qBAAqB,EACnB,MAAM,GACN,SAAS,GACT,YAAY,GACZ,SAAS,GACT,aAAa,GACb,YAAY,GACZ,kBAAkB,CACrB;IACC;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAC5B,oBAAoB,GAAG,uBAAuB,GAAG,mBAAmB,CAAC;AAMvE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEnE,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE5D,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAsB,SAAQ,qBAAqB;IAC3D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,yBAA0B,SAAQ,qBAAqB;IAC/D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAC3B,qBAAqB,GAAG,yBAAyB,CAAC;AA4lBpD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAqCpD;yBArCe,YAAY"}
@@ -50,7 +50,7 @@ import "../theme/tokens.stylex.js";
50
50
  import { spacingVars, colorVars, radiusVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
51
51
  import { mergeProps, rtlStyles } from "../utils/index.js";
52
52
  import { themeProps } from "../utils/themeProps.js";
53
- import { getInteractionModality, trackInteractionModality } from "../utils/interactionModality.js";
53
+ import { getInteractionModality, useInteractionModalityTracking } from "../utils/interactionModality.js";
54
54
  import { useTranslator } from "../i18n/index.js";
55
55
  import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
56
56
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
@@ -427,9 +427,7 @@ function DropdownMenuPopover({
427
427
  const [internalIsOpen, setInternalIsOpen] = useState(false);
428
428
  const isControlled = controlledIsOpen !== undefined;
429
429
  const isOpen = isControlled ? controlledIsOpen : internalIsOpen;
430
- useEffect(() => {
431
- trackInteractionModality();
432
- }, []);
430
+ useInteractionModalityTracking();
433
431
 
434
432
  // Keyboard dismissal returns focus to the trigger. Pointer dismissal leaves
435
433
  // focus where the browser put it; Safari can otherwise paint a focus-visible
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/Field/Field.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAM,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAG9C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAqCtC,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI,CACtC,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,OAAO,EACP,OAAO,EACP,YAAoB,EACpB,aAAa,EACb,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAA0B,EAC1B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BAwGZ;yBA9He,KAAK"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/Field/Field.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAM,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAG9C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAmDtC,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI,CACtC,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,OAAO,EACP,OAAO,EACP,YAAoB,EACpB,aAAa,EACb,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAA0B,EAC1B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BA2GZ;yBAjIe,KAAK"}
@@ -20,7 +20,7 @@ import * as stylex from '@stylexjs/stylex';
20
20
  import { FieldLabel } from "./FieldLabel.js";
21
21
  import { FieldStatus } from "../FieldStatus/FieldStatus.js";
22
22
  import "../theme/tokens.stylex.js";
23
- import { spacingVars, borderVars } from "../theme/tokens.stylex.js";
23
+ import { spacingVars, borderVars, sizeVars } from "../theme/tokens.stylex.js";
24
24
  import { mergeProps } from "../utils/index.js";
25
25
  import { useDevWarning } from "../hooks/useDevWarning.js";
26
26
  import { FormLayoutContext } from "../FormLayout/FormLayoutContext.js";
@@ -40,6 +40,11 @@ const styles = {
40
40
  horizontalLabels: {
41
41
  k1xSpc: "xjp7ctv",
42
42
  $$css: true
43
+ },
44
+ attachedStatusLayer: {
45
+ kVAEAm: "x1n2onr6",
46
+ kY2c9j: "x8knxv4",
47
+ $$css: true
43
48
  }
44
49
  };
45
50
 
@@ -116,7 +121,8 @@ export function Field({
116
121
  type: status.type,
117
122
  message: status.message,
118
123
  id: resolvedMessageID,
119
- variant: statusVariant
124
+ variant: statusVariant,
125
+ xstyle: statusVariant === 'attached' ? styles.attachedStatusLayer : undefined
120
126
  }) : null;
121
127
 
122
128
  // ─── Horizontal-labels mode ───────────────────────────────────────────
@@ -138,7 +144,7 @@ export function Field({
138
144
  children: labelNode
139
145
  }), /*#__PURE__*/_jsxs("div", {
140
146
  ...{
141
- className: "x78zum5 xdt5ytf xc8icb0"
147
+ className: "x78zum5 xdt5ytf xc8icb0 x19nvjgn xlumz0n x1qs65gq"
142
148
  },
143
149
  children: [description && /*#__PURE__*/_jsx(Text, {
144
150
  type: "supporting",
@@ -157,7 +163,7 @@ export function Field({
157
163
  ...props,
158
164
  children: [labelNode, statusVariant === 'attached' ? /*#__PURE__*/_jsxs("div", {
159
165
  ...{
160
- className: "x78zum5 xdt5ytf xc8icb0"
166
+ className: "x78zum5 xdt5ytf xc8icb0 x19nvjgn xlumz0n x1qs65gq"
161
167
  },
162
168
  children: [children, statusNode]
163
169
  }) : /*#__PURE__*/_jsxs(_Fragment, {
@@ -1 +1 @@
1
- {"version":3,"file":"PanelSearchInput.d.ts","sourceRoot":"","sources":["../../src/Field/PanelSearchInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAmC,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AAkBjE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6E5C,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,SAAS,CAAC,gBAAgB,CAAC,EAC3B,UAAU,CACX;IACC,iEAAiE;IACjE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,kEAAkE;IAClE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,wCAAwC;IACxC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAEzD,0EAA0E;IAC1E,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEpD,yEAAyE;IACzE,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;CACjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,qBAAqB,+BAkEvB;yBAjFe,gBAAgB"}
1
+ {"version":3,"file":"PanelSearchInput.d.ts","sourceRoot":"","sources":["../../src/Field/PanelSearchInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAwB,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AAkBtD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6E5C,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,SAAS,CAAC,gBAAgB,CAAC,EAC3B,UAAU,CACX;IACC,iEAAiE;IACjE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,kEAAkE;IAClE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,wCAAwC;IACxC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAEzD,0EAA0E;IAC1E,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEpD,yEAAyE;IACzE,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;CACjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,qBAAqB,+BAgEvB;yBA/Ee,gBAAgB"}
@@ -38,12 +38,12 @@
38
38
  * Not exported from the package: it is an implementation detail of the panels
39
39
  * that use it, not public API.
40
40
  */
41
- import { useCallback, useEffect, useState } from 'react';
41
+ import { useCallback, useState } from 'react';
42
42
  import * as stylex from '@stylexjs/stylex';
43
43
  import { Icon } from "../Icon/index.js";
44
44
  import { InputClearButton } from "./InputClearButton.js";
45
45
  import { mergeProps } from "../utils/index.js";
46
- import { getInteractionModality, trackInteractionModality } from "../utils/interactionModality.js";
46
+ import { getInteractionModality, useInteractionModalityTracking } from "../utils/interactionModality.js";
47
47
  import "../theme/tokens.stylex.js";
48
48
  import { colorVars, durationVars, easeVars, radiusVars, spacingVars, typeScaleVars, typographyVars } from "../theme/tokens.stylex.js";
49
49
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -90,9 +90,7 @@ export function PanelSearchInput({
90
90
  // by itself. Gate it on how the user last interacted; the CSS condition
91
91
  // stays `:focus-visible`, this only narrows it.
92
92
  const [isKeyboardFocus, setIsKeyboardFocus] = useState(false);
93
- useEffect(() => {
94
- trackInteractionModality();
95
- }, []);
93
+ useInteractionModalityTracking();
96
94
  const handleFocus = useCallback(e => {
97
95
  setIsKeyboardFocus(getInteractionModality() === 'keyboard');
98
96
  onFocus?.(e);
@@ -1 +1 @@
1
- {"version":3,"file":"FieldStatus.d.ts","sourceRoot":"","sources":["../../src/FieldStatus/FieldStatus.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAKpD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC;AAgEnD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,IAAI,EACJ,OAAO,EACP,EAAE,EACF,OAAoB,EACpB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAsDlB;yBAhEe,WAAW"}
1
+ {"version":3,"file":"FieldStatus.d.ts","sourceRoot":"","sources":["../../src/FieldStatus/FieldStatus.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAKpD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC;AAqEnD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,IAAI,EACJ,OAAO,EACP,EAAE,EACF,OAAoB,EACpB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAsDlB;yBAhEe,WAAW"}
@@ -36,6 +36,7 @@ const statusIconMap = {
36
36
  error: 'error',
37
37
  success: 'success'
38
38
  };
39
+ const ATTACHED_OVERLAP = `var(--_field-status-overlap, ${spacingVars['--spacing-1-5']})`;
39
40
  const styles = {
40
41
  base: {
41
42
  kMv6JI: "x9ynric",
@@ -44,12 +45,13 @@ const styles = {
44
45
  $$css: true
45
46
  },
46
47
  attached: {
47
- keoZOQ: "x1c40v9y",
48
- kLKAdn: "x1ak3mig",
48
+ keoZOQ: "x3dbumh",
49
+ kLKAdn: "xdgtoc0",
49
50
  kGO01o: "x1wesfrj",
50
51
  kg3NbH: "xf314gf",
51
52
  kVL7Gh: "xquck67",
52
53
  kT0f0o: "x14i3lts",
54
+ kfzvcC: "x47corl",
53
55
  $$css: true
54
56
  },
55
57
  detached: {
@@ -1 +1 @@
1
- {"version":3,"file":"useTouchTrigger.d.ts","sourceRoot":"","sources":["../../src/Layer/useTouchTrigger.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAMrE;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAmCxD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAoB7D;AAeD,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,YAAY,EAAE,iBAAiB,CAAC;IAEhC,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;IAEhB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE1C,uDAAuD;IACvD,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,mCAAmC;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,iBAAiB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAElC;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAElD;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IAEpD,gFAAgF;IAChF,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAiKvB"}
1
+ {"version":3,"file":"useTouchTrigger.d.ts","sourceRoot":"","sources":["../../src/Layer/useTouchTrigger.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAMrE;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAmCxD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAoB7D;AAeD,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,YAAY,EAAE,iBAAiB,CAAC;IAEhC,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;IAEhB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE1C,uDAAuD;IACvD,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,mCAAmC;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,iBAAiB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAElC;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAElD;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IAEpD,gFAAgF;IAChF,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CA+JvB"}
@@ -26,7 +26,7 @@
26
26
  * icon-button whose only job is to reveal the layer needs.
27
27
  */
28
28
  import { useCallback, useEffect, useRef } from 'react';
29
- import { getInteractionModality, trackInteractionModality } from "../utils/interactionModality.js";
29
+ import { getInteractionModality, useInteractionModalityTracking } from "../utils/interactionModality.js";
30
30
 
31
31
  /**
32
32
  * How a hover layer behaves on a touch pointer.
@@ -144,9 +144,7 @@ export function useTouchTrigger(options) {
144
144
  // pointer-leave, and a controlled one is not ours to close.
145
145
  const isTapOpenRef = useRef(false);
146
146
  const outsideListenerRef = useRef(null);
147
- useEffect(() => {
148
- trackInteractionModality();
149
- }, []);
147
+ useInteractionModalityTracking();
150
148
  const disarmOutsideDismiss = useCallback(() => {
151
149
  isTapOpenRef.current = false;
152
150
  const listener = outsideListenerRef.current;
@@ -18,17 +18,42 @@ import type { BaseProps } from '../BaseProps';
18
18
  export interface RadioListItemProps extends BaseProps<HTMLDivElement> {
19
19
  ref?: React.Ref<HTMLDivElement>;
20
20
  /**
21
- * Label text for the radio item.
21
+ * Primary label for the radio item.
22
+ *
23
+ * Accepts a plain string or a ReactNode for rich content. Links and buttons
24
+ * in the label keep their own behavior; only non-interactive row clicks
25
+ * delegate to the radio. The radio points at the rendered label for its
26
+ * accessible name, so a rich label still names it from its own text — pass
27
+ * `aria-label` when that text is absent or too noisy to announce.
22
28
  */
23
- label: string;
29
+ label: ReactNode;
30
+ /**
31
+ * Plain-text accessible name for the radio, applied to the control rather
32
+ * than the row. It replaces the name the label would otherwise supply — a
33
+ * plain string label included — so reach for it when a rich label's own
34
+ * text is absent or reads badly, not as a routine addition.
35
+ *
36
+ * @example
37
+ * ```
38
+ * <RadioListItem
39
+ * label={<span>Pro plan <Badge label="Recommended" /></span>}
40
+ * aria-label="Pro plan"
41
+ * value="pro"
42
+ * />
43
+ * ```
44
+ */
45
+ 'aria-label'?: string;
24
46
  /**
25
47
  * Value of this radio item.
26
48
  */
27
49
  value: string;
28
50
  /**
29
- * Description text displayed below the label.
51
+ * Secondary content displayed below the label. Accepts a plain string or a
52
+ * ReactNode. Links and buttons anywhere in the row keep their own click
53
+ * behaviour — the row only delegates clicks from its non-interactive
54
+ * surface to the radio.
30
55
  */
31
- description?: string;
56
+ description?: ReactNode;
32
57
  /**
33
58
  * Whether this individual radio item is disabled.
34
59
  * @default false
@@ -56,7 +81,7 @@ export interface RadioListItemProps extends BaseProps<HTMLDivElement> {
56
81
  * />
57
82
  * ```
58
83
  */
59
- export declare function RadioListItem({ ref, label, value, description, isDisabled: isItemDisabled, startContent, endContent, xstyle, className, style, onClick, ...rest }: RadioListItemProps): React.JSX.Element;
84
+ export declare function RadioListItem({ ref, label, 'aria-label': ariaLabel, value, description, isDisabled: isItemDisabled, startContent, endContent, xstyle, className, style, onClick, ...rest }: RadioListItemProps): React.JSX.Element;
60
85
  export declare namespace RadioListItem {
61
86
  var displayName: string;
62
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RadioListItem.d.ts","sourceRoot":"","sources":["../../src/RadioList/RadioListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAGhE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAyF5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,KAAK,EACL,WAAW,EACX,UAAU,EAAE,cAAsB,EAClC,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,EAAE,kBAAkB,qBA4IpB;yBAzJe,aAAa"}
1
+ {"version":3,"file":"RadioListItem.d.ts","sourceRoot":"","sources":["../../src/RadioList/RadioListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAGhE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAyF5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,KAAK,EACL,WAAW,EACX,UAAU,EAAE,cAAsB,EAClC,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAsJpB;yBApKe,aAAa"}
@@ -94,6 +94,7 @@ const rowStyles = {
94
94
  export function RadioListItem({
95
95
  ref,
96
96
  label,
97
+ 'aria-label': ariaLabel,
97
98
  value,
98
99
  description,
99
100
  isDisabled: isItemDisabled = false,
@@ -110,6 +111,7 @@ export function RadioListItem({
110
111
  throw new Error('RadioListItem must be used within an RadioList');
111
112
  }
112
113
  const id = useId();
114
+ const labelID = useId();
113
115
  const descriptionID = useId();
114
116
  const isDisabled = context.isDisabled || isItemDisabled;
115
117
  // When the whole group is disabled with a disabledMessage, radios stay
@@ -118,6 +120,10 @@ export function RadioListItem({
118
120
  // and always uses the native disabled attribute.
119
121
  const keepsFocusableForMessage = context.hasDisabledMessage && !isItemDisabled;
120
122
  const isChecked = context.value === value;
123
+ // One predicate for both the rendered element and the aria-describedby that
124
+ // points at it. A ReactNode description can be `false` or `''`, which render
125
+ // nothing — a `!= null` check would leave the link dangling.
126
+ const hasDescription = isRenderable(description);
121
127
  const size = context.size;
122
128
  // The radio visual is an indicator: a theme can restyle it through the
123
129
  // `radio` / `radio-dot` targets or replace the component outright.
@@ -148,7 +154,6 @@ export function RadioListItem({
148
154
  name: context.name,
149
155
  value: value,
150
156
  checked: isChecked,
151
- "aria-label": label,
152
157
  disabled: isDisabled && !keepsFocusableForMessage,
153
158
  "aria-disabled": keepsFocusableForMessage ? 'true' : undefined
154
159
  // A focusable-disabled radio is not natively disabled, so detach it
@@ -167,8 +172,15 @@ export function RadioListItem({
167
172
  // both direct control clicks and row-surface clicks the row delegates
168
173
  // to the input — the same routing CheckboxListItem uses.
169
174
  ,
170
- onClick: onClick,
171
- "aria-describedby": description ? descriptionID : undefined,
175
+ onClick: onClick
176
+ // The radio names itself from the visible label element, which works
177
+ // for a rich label as well as a plain string. `aria-label` replaces
178
+ // that name rather than adding to it, so the two are mutually
179
+ // exclusive — aria-labelledby would otherwise win over it.
180
+ ,
181
+ "aria-label": ariaLabel,
182
+ "aria-labelledby": ariaLabel == null ? labelID : undefined,
183
+ "aria-describedby": hasDescription ? descriptionID : undefined,
172
184
  ...stylex.props(styles.input, wrapperSizeStyles[size], isDisabled && styles.inputDisabled)
173
185
  }), /*#__PURE__*/_jsx("span", {
174
186
  ref: indicatorRef,
@@ -195,9 +207,10 @@ export function RadioListItem({
195
207
  interactiveRef: radioRef,
196
208
  isDisabled: isDisabled,
197
209
  label: /*#__PURE__*/_jsx("span", {
210
+ id: labelID,
198
211
  children: label
199
212
  }),
200
- description: isRenderable(description) ? /*#__PURE__*/_jsx("span", {
213
+ description: hasDescription ? /*#__PURE__*/_jsx("span", {
201
214
  id: descriptionID,
202
215
  children: description
203
216
  }) : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../src/Resizable/ResizeHandle.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAQnD,KAAK,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AA0NzD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,OAAO,CACR;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEhC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAwB,EACxB,QAAQ,EAAE,YAAuB,EACjC,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAsB,EACtB,aAAsB,EACtB,KAAK,EAAE,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,iBAAiB,+BA6RnB;yBA5Se,YAAY"}
1
+ {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../src/Resizable/ResizeHandle.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAW5C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAQnD,KAAK,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAyOzD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,OAAO,CACR;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEhC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAwB,EACxB,QAAQ,EAAE,YAAuB,EACjC,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAsB,EACtB,aAAsB,EACtB,KAAK,EAAE,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,iBAAiB,+BAuVnB;yBAtWe,YAAY"}