@astryxdesign/core 0.7.6-canary.8d0a847 → 0.7.6-canary.8ff38ab

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 (226) hide show
  1. package/dist/DateInput/Wheel.d.ts.map +1 -1
  2. package/dist/DateInput/Wheel.js +11 -7
  3. package/dist/DateInput/usePointerDragScroll.d.ts +10 -1
  4. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  5. package/dist/DateInput/usePointerDragScroll.js +25 -9
  6. package/dist/DateInput/useScrollSettle.d.ts +3 -1
  7. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  8. package/dist/DateInput/useScrollSettle.js +37 -8
  9. package/dist/Layer/useLayer.d.ts.map +1 -1
  10. package/dist/Layer/useLayer.js +27 -6
  11. package/dist/Link/Link.d.ts.map +1 -1
  12. package/dist/Link/Link.js +8 -3
  13. package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +1 -1
  14. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  15. package/dist/PowerSearch/PowerSearch.js +37 -30
  16. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  17. package/dist/RadioList/RadioListItem.js +11 -3
  18. package/dist/Switch/Switch.d.ts.map +1 -1
  19. package/dist/Switch/Switch.js +10 -3
  20. package/dist/Table/Table.d.ts.map +1 -1
  21. package/dist/Table/Table.js +36 -10
  22. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  23. package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
  24. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  25. package/dist/Toast/ToastViewport.js +19 -3
  26. package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
  27. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  28. package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
  29. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  30. package/dist/Tokenizer/Tokenizer.js +15 -4
  31. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
  32. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
  33. package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
  34. package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
  35. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  36. package/dist/Typeahead/BaseTypeahead.js +43 -7
  37. package/dist/gestures/GestureArena.d.ts +1 -1
  38. package/dist/gestures/GestureArena.d.ts.map +1 -1
  39. package/dist/gestures/GestureArena.js +2 -1
  40. package/dist/gestures/GestureHost.d.ts +2 -3
  41. package/dist/gestures/GestureHost.d.ts.map +1 -1
  42. package/dist/gestures/GestureHost.js +7 -7
  43. package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
  44. package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
  45. package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
  46. package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
  47. package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
  48. package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
  49. package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
  50. package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
  51. package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
  52. package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
  53. package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
  54. package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
  55. package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
  56. package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
  57. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  58. package/dist/i18n/generated-locales/en.generated.js +2 -5
  59. package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
  60. package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
  61. package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
  62. package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
  63. package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
  64. package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
  65. package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
  66. package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
  67. package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
  68. package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
  69. package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
  70. package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
  71. package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
  72. package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
  73. package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
  74. package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
  75. package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
  76. package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
  77. package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
  78. package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
  79. package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
  80. package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
  81. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  82. package/dist/i18n/generated-locales/pseudo.generated.js +2 -5
  83. package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
  84. package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
  85. package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
  86. package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
  87. package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
  88. package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
  89. package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
  90. package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
  91. package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
  92. package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
  93. package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
  94. package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
  95. package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
  96. package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
  97. package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
  98. package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
  99. package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
  100. package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
  101. package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
  102. package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
  103. package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
  104. package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
  105. package/locales/af-ZA.json +0 -21
  106. package/locales/ar-SA.json +0 -21
  107. package/locales/ca-ES.json +0 -21
  108. package/locales/cs-CZ.json +0 -21
  109. package/locales/da-DK.json +0 -21
  110. package/locales/de-DE.json +0 -21
  111. package/locales/el-GR.json +0 -21
  112. package/locales/en.json +8 -20
  113. package/locales/es-ES.json +0 -21
  114. package/locales/fi-FI.json +0 -21
  115. package/locales/fr-FR.json +0 -21
  116. package/locales/he-IL.json +0 -21
  117. package/locales/hu-HU.json +0 -21
  118. package/locales/it-IT.json +0 -21
  119. package/locales/ja-JP.json +0 -21
  120. package/locales/ko-KR.json +0 -21
  121. package/locales/nl-NL.json +0 -21
  122. package/locales/no-NO.json +0 -21
  123. package/locales/pl-PL.json +0 -21
  124. package/locales/pseudo.json +5 -14
  125. package/locales/pt-BR.json +0 -21
  126. package/locales/pt-PT.json +0 -21
  127. package/locales/ro-RO.json +0 -21
  128. package/locales/ru-RU.json +0 -21
  129. package/locales/sr-SP.json +0 -21
  130. package/locales/sv-SE.json +0 -21
  131. package/locales/tr-TR.json +0 -21
  132. package/locales/uk-UA.json +0 -21
  133. package/locales/vi-VN.json +0 -21
  134. package/locales/zh-CN.json +0 -21
  135. package/locales/zh-TW.json +0 -21
  136. package/package.json +4 -4
  137. package/src/Chat/ChatDictationButton.spec.md +126 -81
  138. package/src/Chat/ChatLayout.spec.md +41 -36
  139. package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +38 -3
  140. package/src/DateInput/DateInputTouch.test.tsx +44 -0
  141. package/src/DateInput/Wheel.tsx +9 -6
  142. package/src/DateInput/usePointerDragScroll.ts +34 -10
  143. package/src/DateInput/useScrollSettle.ts +38 -7
  144. package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
  145. package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
  146. package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
  147. package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
  148. package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
  149. package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
  150. package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
  151. package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
  152. package/src/Layer/useLayer.test.tsx +78 -3
  153. package/src/Layer/useLayer.tsx +27 -6
  154. package/src/Link/Link.spec.md +3 -2
  155. package/src/Link/Link.tsx +11 -0
  156. package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +58 -0
  157. package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +1 -1
  158. package/src/Outline/Outline.spec.md +165 -69
  159. package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
  160. package/src/OverflowList/OverflowList.spec.md +102 -55
  161. package/src/Pagination/Pagination.spec.md +158 -84
  162. package/src/PowerSearch/PowerSearch.test.tsx +24 -0
  163. package/src/PowerSearch/PowerSearch.tsx +42 -31
  164. package/src/RadioList/RadioList.spec.md +1 -1
  165. package/src/RadioList/RadioList.test.tsx +84 -0
  166. package/src/RadioList/RadioListItem.tsx +11 -2
  167. package/src/Switch/Switch.spec.md +1 -1
  168. package/src/Switch/Switch.test.tsx +66 -1
  169. package/src/Switch/Switch.tsx +11 -3
  170. package/src/Table/Table.spec.md +1 -1
  171. package/src/Table/Table.test.tsx +32 -0
  172. package/src/Table/Table.tsx +43 -11
  173. package/src/Table/__tests__/Table.a11y.states.ts +1 -5
  174. package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
  175. package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
  176. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
  177. package/src/TimeInput/TimeInput.spec.md +13 -13
  178. package/src/Toast/Toast.spec.md +2 -5
  179. package/src/Toast/ToastViewport.test.tsx +79 -0
  180. package/src/Toast/ToastViewport.tsx +21 -3
  181. package/src/ToggleButton/ToggleButton.test.tsx +27 -0
  182. package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
  183. package/src/Tokenizer/Tokenizer.spec.md +13 -1
  184. package/src/Tokenizer/Tokenizer.test.tsx +27 -0
  185. package/src/Tokenizer/Tokenizer.tsx +24 -10
  186. package/src/Tokenizer/TokenizerBottomSheet.test.tsx +8 -0
  187. package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
  188. package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
  189. package/src/Typeahead/BaseTypeahead.spec.md +45 -45
  190. package/src/Typeahead/BaseTypeahead.tsx +48 -9
  191. package/src/Typeahead/Typeahead.test.tsx +120 -0
  192. package/src/gestures/GestureArena.ts +1 -1
  193. package/src/gestures/GestureHost.ts +6 -7
  194. package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
  195. package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
  196. package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
  197. package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
  198. package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
  199. package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
  200. package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
  201. package/src/i18n/generated-locales/en.generated.ts +2 -6
  202. package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
  203. package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
  204. package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
  205. package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
  206. package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
  207. package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
  208. package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
  209. package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
  210. package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
  211. package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
  212. package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
  213. package/src/i18n/generated-locales/pseudo.generated.ts +2 -6
  214. package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
  215. package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
  216. package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
  217. package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
  218. package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
  219. package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
  220. package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
  221. package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
  222. package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
  223. package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
  224. package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
  225. package/src/motion/README.md +2 -1
  226. package/src/motion/roles.test.ts +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/Wheel.tsx"],"names":[],"mappings":"AA8MA,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,GAChB,EAAE,UAAU,+BAgOZ;yBAtOe,KAAK"}
1
+ {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/Wheel.tsx"],"names":[],"mappings":"AA8MA,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,GAChB,EAAE,UAAU,+BAmOZ;yBAzOe,KAAK"}
@@ -12,7 +12,7 @@
12
12
  * rubber-banding, and the settle animation are the platform's; all this adds
13
13
  * is `scroll-snap-align: center` on each option, half a viewport of padding at
14
14
  * each end so the first and last option can reach the middle, and a commit
15
- * when the scrolling stops.
15
+ * when the scrolling stops and no finger or mouse drag still holds it.
16
16
  *
17
17
  * The falloff (rows fading and tipping away from the centre) is a CSS
18
18
  * scroll-driven animation on a `view()` timeline — the browser interpolates it
@@ -99,6 +99,15 @@ export function Wheel({
99
99
  // `selectedIndex` only catches up when the wheel settles.
100
100
  const [activeIndex, setActiveIndex] = useState(selectedIndex);
101
101
 
102
+ // A mouse cannot drag a scroll container, so without this the wheel ignores
103
+ // the one gesture its shape invites. Touch is untouched — it pans natively,
104
+ // with momentum this could not match. See usePointerDragScroll. The drag it
105
+ // holds is not rest either: the settle below waits for its release, as it
106
+ // waits for a finger's (useScrollSettle).
107
+ const {
108
+ isDraggingRef
109
+ } = usePointerDragScroll(scrollerRef, isActive);
110
+
102
111
  // Row height in px, read from layout rather than assumed, so a theme that
103
112
  // retunes --date-input-touch-wheel-item-size still lands on the right row.
104
113
  const itemBlockSize = useCallback(() => {
@@ -138,7 +147,7 @@ export function Wheel({
138
147
  if (option.value !== value) {
139
148
  onChange(option.value);
140
149
  }
141
- }, isActive);
150
+ }, isActive, isDraggingRef);
142
151
 
143
152
  // Park the committed row under the band whenever the wheel is shown, or the
144
153
  // value is changed from outside (the calendar scrolled to another month).
@@ -210,11 +219,6 @@ export function Wheel({
210
219
  useOwnScrollGesture(scrollerRef, 'all', {
211
220
  isEnabled: isActive
212
221
  });
213
-
214
- // A mouse cannot drag a scroll container, so without this the wheel ignores
215
- // the one gesture its shape invites. Touch is untouched — it pans natively,
216
- // with momentum this could not match. See usePointerDragScroll.
217
- usePointerDragScroll(scrollerRef, isActive);
218
222
  const moveBy = useCallback(delta => {
219
223
  const next = Math.min(options.length - 1, Math.max(0, activeIndex + delta));
220
224
  const option = options[next];
@@ -3,6 +3,15 @@
3
3
  * press of the button itself, and a wheel row is a click target.
4
4
  */
5
5
  export declare const DRAG_SLOP = 4;
6
+ /** What {@link usePointerDragScroll} reports back about the drag. */
7
+ export type PointerDragScrollState = {
8
+ /**
9
+ * True while a mouse drag holds the container: from the press that moved
10
+ * past {@link DRAG_SLOP} until its release. Pass it to `useScrollSettle`,
11
+ * which treats a held drag as it treats a finger still down.
12
+ */
13
+ isDraggingRef: React.RefObject<boolean>;
14
+ };
6
15
  /**
7
16
  * Let a mouse drag `ref`'s contents, on a container that already scrolls and
8
17
  * snaps for touch.
@@ -11,5 +20,5 @@ export declare const DRAG_SLOP = 4;
11
20
  * @param isEnabled - skip while the wheel is hidden; a hidden panel keeps its
12
21
  * layout box, so its listeners would otherwise still be live
13
22
  */
14
- export declare function usePointerDragScroll(ref: React.RefObject<HTMLElement | null>, isEnabled?: boolean): void;
23
+ export declare function usePointerDragScroll(ref: React.RefObject<HTMLElement | null>, isEnabled?: boolean): PointerDragScrollState;
15
24
  //# sourceMappingURL=usePointerDragScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePointerDragScroll.d.ts","sourceRoot":"","sources":["../../src/DateInput/usePointerDragScroll.ts"],"names":[],"mappings":"AA+CA;;;GAGG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAK3B;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,SAAS,GAAE,OAAc,GACxB,IAAI,CA8IN"}
1
+ {"version":3,"file":"usePointerDragScroll.d.ts","sourceRoot":"","sources":["../../src/DateInput/usePointerDragScroll.ts"],"names":[],"mappings":"AAwDA;;;GAGG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAK3B,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,SAAS,GAAE,OAAc,GACxB,sBAAsB,CAmJxB"}
@@ -5,7 +5,8 @@
5
5
  /**
6
6
  * @file usePointerDragScroll.ts
7
7
  * @input A scroll container ref
8
- * @output Lets a mouse drag the container's contents the way a finger does
8
+ * @output Lets a mouse drag the container's contents the way a finger does,
9
+ * and reports while a drag holds it (`isDraggingRef`)
9
10
  * @position Internal behavior hook; consumed by Wheel.tsx
10
11
  *
11
12
  * ## Why this exists
@@ -38,11 +39,19 @@
38
39
  * then jumps a whole one. The drag therefore suspends snapping, and restores
39
40
  * it once the release has settled somewhere legal.
40
41
  *
42
+ * ## A held drag is not rest
43
+ *
44
+ * Every `scrollTop` the drag assigns is a programmatic scroll, and Chromium
45
+ * ends each one with a `scrollend` — 14 moves, 14 of them. A settle listening
46
+ * for `scrollend` alone would commit the row under the band at every step,
47
+ * with the button still down. `isDraggingRef` tells `useScrollSettle` the
48
+ * drag is still held, the way a touch that has not ended does.
49
+ *
41
50
  * SYNC: When modified, update:
42
51
  * - /packages/core/src/DateInput/Wheel.tsx
43
52
  * - /packages/core/src/DateInput/DateInputTouch.test.tsx
44
53
  */
45
- import { useEffect } from 'react';
54
+ import { useEffect, useRef } from 'react';
46
55
 
47
56
  /**
48
57
  * Movement below this stays a click. A mouse shifts a pixel or two under the
@@ -53,6 +62,8 @@ export const DRAG_SLOP = 4;
53
62
  /** How long to wait for a release's settle before restoring snapping. */
54
63
  const SETTLE_FALLBACK_MS = 260;
55
64
 
65
+ /** What {@link usePointerDragScroll} reports back about the drag. */
66
+
56
67
  /**
57
68
  * Let a mouse drag `ref`'s contents, on a container that already scrolls and
58
69
  * snaps for touch.
@@ -62,6 +73,7 @@ const SETTLE_FALLBACK_MS = 260;
62
73
  * layout box, so its listeners would otherwise still be live
63
74
  */
64
75
  export function usePointerDragScroll(ref, isEnabled = true) {
76
+ const isDraggingRef = useRef(false);
65
77
  useEffect(() => {
66
78
  const element = ref.current;
67
79
  if (element == null || !isEnabled) {
@@ -70,9 +82,9 @@ export function usePointerDragScroll(ref, isEnabled = true) {
70
82
  let pointerId = null;
71
83
  let originY = 0;
72
84
  let originScrollTop = 0;
73
- let isDragging = false;
85
+ isDraggingRef.current = false;
74
86
  // Survives from the drag's end to the click it produces, which is the
75
- // whole reason it is not just `isDragging`.
87
+ // whole reason it is not just `isDraggingRef`.
76
88
  let wasDragged = false;
77
89
  let restoreTimer;
78
90
  const restoreSnap = () => {
@@ -112,7 +124,7 @@ export function usePointerDragScroll(ref, isEnabled = true) {
112
124
  pointerId = event.pointerId;
113
125
  originY = event.clientY;
114
126
  originScrollTop = element.scrollTop;
115
- isDragging = false;
127
+ isDraggingRef.current = false;
116
128
  // Not captured yet: a press that never moves has to stay a click on the
117
129
  // row under it, and capturing here would retarget that click.
118
130
  };
@@ -121,11 +133,11 @@ export function usePointerDragScroll(ref, isEnabled = true) {
121
133
  return;
122
134
  }
123
135
  const delta = event.clientY - originY;
124
- if (!isDragging) {
136
+ if (!isDraggingRef.current) {
125
137
  if (Math.abs(delta) < DRAG_SLOP) {
126
138
  return;
127
139
  }
128
- isDragging = true;
140
+ isDraggingRef.current = true;
129
141
  element.setPointerCapture(event.pointerId);
130
142
  suspendSnap();
131
143
  // Dragging across rows would otherwise select their text, leaving the
@@ -141,10 +153,10 @@ export function usePointerDragScroll(ref, isEnabled = true) {
141
153
  return;
142
154
  }
143
155
  pointerId = null;
144
- if (!isDragging) {
156
+ if (!isDraggingRef.current) {
145
157
  return;
146
158
  }
147
- isDragging = false;
159
+ isDraggingRef.current = false;
148
160
  wasDragged = true;
149
161
  element.style.removeProperty('user-select');
150
162
  if (element.hasPointerCapture(event.pointerId)) {
@@ -200,9 +212,13 @@ export function usePointerDragScroll(ref, isEnabled = true) {
200
212
  element.removeEventListener('click', onClickCapture, {
201
213
  capture: true
202
214
  });
215
+ isDraggingRef.current = false;
203
216
  restoreSnap();
204
217
  };
205
218
  }, [ref, isEnabled]);
219
+ return {
220
+ isDraggingRef
221
+ };
206
222
  }
207
223
 
208
224
  /**
@@ -21,6 +21,8 @@ export type ScrollSettleState = {
21
21
  * @param ref - the scroll container
22
22
  * @param onSettle - called with the settled element; may change every render
23
23
  * @param isEnabled - skip attaching while false (e.g. a hidden panel)
24
+ * @param isHeldRef - true while a mouse drag holds the scroller
25
+ * (usePointerDragScroll's `isDraggingRef`): not rest, however quiet
24
26
  */
25
- export declare function useScrollSettle(ref: React.RefObject<HTMLElement | null>, onSettle: (element: HTMLElement) => void, isEnabled?: boolean): ScrollSettleState;
27
+ export declare function useScrollSettle(ref: React.RefObject<HTMLElement | null>, onSettle: (element: HTMLElement) => void, isEnabled?: boolean, isHeldRef?: React.RefObject<boolean>): ScrollSettleState;
26
28
  //# sourceMappingURL=useScrollSettle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollSettle.d.ts","sourceRoot":"","sources":["../../src/DateInput/useScrollSettle.ts"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACxC,SAAS,GAAE,OAAc,GACxB,iBAAiB,CA+EnB"}
1
+ {"version":3,"file":"useScrollSettle.d.ts","sourceRoot":"","sources":["../../src/DateInput/useScrollSettle.ts"],"names":[],"mappings":"AA0DA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACxC,SAAS,GAAE,OAAc,EACzB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GACnC,iBAAiB,CAuGnB"}
@@ -4,7 +4,8 @@
4
4
 
5
5
  /**
6
6
  * @file useScrollSettle.ts
7
- * @input A scroll container ref and a settle callback
7
+ * @input A scroll container ref, a settle callback, and optionally whether a
8
+ * mouse drag holds it (usePointerDragScroll's `isDraggingRef`)
8
9
  * @output Calls back once, after scrolling (including momentum) stops
9
10
  * @position Internal behavior hook; consumed by Wheel.tsx and MonthScroller.tsx
10
11
  *
@@ -27,7 +28,10 @@
27
28
  * moment without lifting and the scroll events stop, so the timer fires
28
29
  * and the value commits to whatever is under the band. Chrome hides this
29
30
  * because it has `scrollend`, which does not fire until the touch is
30
- * released.
31
+ * released. A mouse drag (usePointerDragScroll) is held the same way, and
32
+ * there Chrome gives no cover at all: each `scrollTop` the drag assigns
33
+ * ends in its own `scrollend`, so the settle waits for the drag's
34
+ * `pointerup` as it waits for `touchend`.
31
35
  *
32
36
  * 2. **Momentum is not rest either.** iOS momentum runs on the UI thread and
33
37
  * keeps going for a second or more after the finger is gone, and its scroll
@@ -41,7 +45,7 @@
41
45
  * underneath, and the fresh scroll events start the next premature settle —
42
46
  * each one landing a row further along, which is why the month climbed.
43
47
  *
44
- * So: the settle waits for the touch to end, and then for a quiet period
48
+ * So: the settle waits for the touch or the mouse drag to end, and then for a quiet period
45
49
  * measured from the LAST scroll event, which is what makes it outlast
46
50
  * momentum however long it runs. {@link useScrollSettle} also reports whether
47
51
  * the scroller is at rest, so a caller can refuse to reposition one that is
@@ -67,8 +71,10 @@ export const SCROLL_QUIET_MS = 220;
67
71
  * @param ref - the scroll container
68
72
  * @param onSettle - called with the settled element; may change every render
69
73
  * @param isEnabled - skip attaching while false (e.g. a hidden panel)
74
+ * @param isHeldRef - true while a mouse drag holds the scroller
75
+ * (usePointerDragScroll's `isDraggingRef`): not rest, however quiet
70
76
  */
71
- export function useScrollSettle(ref, onSettle, isEnabled = true) {
77
+ export function useScrollSettle(ref, onSettle, isEnabled = true, isHeldRef) {
72
78
  // The callback closes over render-fresh values (the option list, the current
73
79
  // value); keeping it in a ref means the listeners attach once instead of
74
80
  // re-attaching mid-scroll, which would drop an in-flight settle.
@@ -84,10 +90,17 @@ export function useScrollSettle(ref, onSettle, isEnabled = true) {
84
90
  let timer;
85
91
  let hasSettled = false;
86
92
  let isTouching = false;
93
+ // Whether a mouse drag held this gesture, so its release re-arms the
94
+ // settle; a plain click does not.
95
+ let wasHeld = false;
87
96
  const settle = () => {
88
- // A finger still on the glass is not rest, however quiet the scroller
89
- // has gone. The release re-arms this.
90
- if (hasSettled || isTouching) {
97
+ // A finger still on the glass, or a mouse button still holding a drag,
98
+ // is not rest, however quiet the scroller has gone. The release re-arms
99
+ // this.
100
+ if (isHeldRef?.current) {
101
+ wasHeld = true;
102
+ }
103
+ if (hasSettled || isTouching || isHeldRef?.current) {
91
104
  return;
92
105
  }
93
106
  hasSettled = true;
@@ -106,6 +119,9 @@ export function useScrollSettle(ref, onSettle, isEnabled = true) {
106
119
  // the last of it however long it runs.
107
120
  hasSettled = false;
108
121
  isAtRestRef.current = false;
122
+ if (isHeldRef?.current) {
123
+ wasHeld = true;
124
+ }
109
125
  arm();
110
126
  };
111
127
  const onTouchStart = () => {
@@ -121,6 +137,15 @@ export function useScrollSettle(ref, onSettle, isEnabled = true) {
121
137
  // produces no further scroll events at all.
122
138
  arm();
123
139
  };
140
+ const onPointerEnd = () => {
141
+ // The drag's release: its glide to the nearest row re-arms this on its
142
+ // own, and the timer covers a release already on a row, which scrolls
143
+ // no further.
144
+ if (wasHeld) {
145
+ wasHeld = false;
146
+ arm();
147
+ }
148
+ };
124
149
  element.addEventListener('scroll', onScroll, {
125
150
  passive: true
126
151
  });
@@ -134,6 +159,8 @@ export function useScrollSettle(ref, onSettle, isEnabled = true) {
134
159
  element.addEventListener('touchcancel', onTouchEnd, {
135
160
  passive: true
136
161
  });
162
+ element.addEventListener('pointerup', onPointerEnd);
163
+ element.addEventListener('pointercancel', onPointerEnd);
137
164
  return () => {
138
165
  clearTimeout(timer);
139
166
  element.removeEventListener('scroll', onScroll);
@@ -141,8 +168,10 @@ export function useScrollSettle(ref, onSettle, isEnabled = true) {
141
168
  element.removeEventListener('touchstart', onTouchStart);
142
169
  element.removeEventListener('touchend', onTouchEnd);
143
170
  element.removeEventListener('touchcancel', onTouchEnd);
171
+ element.removeEventListener('pointerup', onPointerEnd);
172
+ element.removeEventListener('pointercancel', onPointerEnd);
144
173
  };
145
- }, [ref, isEnabled]);
174
+ }, [ref, isEnabled, isHeldRef]);
146
175
  return {
147
176
  isAtRestRef
148
177
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useLayer.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLayer.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayer.tsx"],"names":[],"mappings":"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"}
@@ -328,8 +328,9 @@ function failsAnchor(layer, anchor) {
328
328
  * every show and remount, and while the layer is open whenever its size, its
329
329
  * content's size, its anchor's size or the viewport changes; each of those
330
330
  * reads lands before the next frame paints. A same-size anchor that moves on
331
- * screen, in layout or because something scrolled, is read after paint, from
332
- * the anchor-move observer (FR8). Scroll events are not read: during one the
331
+ * screen, in layout or because something scrolled, is reported after paint by
332
+ * the anchor-move observer and read in the next frame, before it paints (FR8).
333
+ * Scroll events are not read: during one the
333
334
  * anchor has moved but the layer anchored to it not yet, so the read would
334
335
  * compare a moved anchor with a stale layer. Once switched, a layer keeps its
335
336
  * anchor-clear list until it next opens, so it never jumps back over its
@@ -469,9 +470,16 @@ function observeMove(element, onMove) {
469
470
  * range (spec:AST-059 FR4, FR8): the layer, its content or the anchor
470
471
  * resizing (ResizeObserver, before paint), the viewport resizing (before
471
472
  * paint), and the anchor moving on screen without resizing, in layout or by a
472
- * scroll (`observeMove`, after paint). Each calls `keepAnchorClear` for this layer and anchor while
473
- * `isCurrent` says they are still the live pair. Returns the function that
474
- * removes every observer and listener it added.
473
+ * scroll (`observeMove`, reported after paint). Each calls `keepAnchorClear`
474
+ * for this layer and anchor while `isCurrent` says they are still the live
475
+ * pair. A move is read in the next animation frame, not in the task that
476
+ * reports it: placing the layer afresh there, right after the frame that
477
+ * scrolled its anchor, lets Chromium lay it out for one more frame against
478
+ * the anchor's position before the scroll, over the anchor, so the second
479
+ * painted frame would still cover it. Read in the next frame, before it
480
+ * paints, the fresh placement uses the moved anchor. Reports in one frame
481
+ * share one read. Returns the function that removes every observer and
482
+ * listener it added.
475
483
  */
476
484
  function observeAnchorClearance(layer, anchor, isCurrent) {
477
485
  const view = layer.ownerDocument.defaultView;
@@ -492,11 +500,24 @@ function observeAnchorClearance(layer, anchor, isCurrent) {
492
500
  }
493
501
  observer.observe(anchor);
494
502
  }
495
- const stopObservingMove = observeMove(anchor, reread);
503
+ let moveFrame = null;
504
+ const stopObservingMove = observeMove(anchor, () => {
505
+ if (moveFrame !== null) {
506
+ return;
507
+ }
508
+ moveFrame = view.requestAnimationFrame(() => {
509
+ moveFrame = null;
510
+ reread();
511
+ });
512
+ });
496
513
  view.addEventListener('resize', reread);
497
514
  return () => {
498
515
  observer?.disconnect();
499
516
  stopObservingMove();
517
+ if (moveFrame !== null) {
518
+ view.cancelAnimationFrame(moveFrame);
519
+ moveFrame = null;
520
+ }
500
521
  view.removeEventListener('resize', reread);
501
522
  };
502
523
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/Link/Link.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAsG/C,MAAM,WAAW,SAAU,SAAQ,SAAS,CAC1C,iBAAiB,GAAG,iBAAiB,CACtC;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;IACvD;;;;;OAKG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC;IACnD;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;IACzE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,EACnB,EAAE,EACF,KAAK,EACL,IAAI,EACJ,YAAoB,EACpB,UAAkB,EAClB,cAAsB,EACtB,WAAW,EAAE,oBAAoB,EACjC,MAAM,EAAE,eAAe,EACvB,OAAO,EACP,OAAO,EACP,YAAoB,EACpB,IAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAgB,EAChB,OAAkB,EAClB,QAAY,EACZ,QAAQ,EACR,GAAG,EAAE,YAAY,EACjB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BAoJX;yBA7Ke,IAAI"}
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/Link/Link.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AA8G/C,MAAM,WAAW,SAAU,SAAQ,SAAS,CAC1C,iBAAiB,GAAG,iBAAiB,CACtC;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;IACvD;;;;;OAKG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC;IACnD;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;IACzE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,EACnB,EAAE,EACF,KAAK,EACL,IAAI,EACJ,YAAoB,EACpB,UAAkB,EAClB,cAAsB,EACtB,WAAW,EAAE,oBAAoB,EACjC,MAAM,EAAE,eAAe,EACvB,OAAO,EACP,OAAO,EACP,YAAoB,EACpB,IAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAgB,EAChB,OAAkB,EAClB,QAAY,EACZ,QAAQ,EACR,GAAG,EAAE,YAAY,EACjB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BAuJX;yBAhLe,IAAI"}
package/dist/Link/Link.js CHANGED
@@ -53,6 +53,11 @@ const styles = {
53
53
  kAMwcw: "xlr8y92",
54
54
  $$css: true
55
55
  },
56
+ truncating: {
57
+ ks0D6T: "x193iq5w",
58
+ k7Eaqz: "xeuugli",
59
+ $$css: true
60
+ },
56
61
  buttonReset: {
57
62
  kWkggS: "xjbqb8w",
58
63
  ksu8eU: "xng3xce",
@@ -206,7 +211,7 @@ export function Link({
206
211
  }), focusOutlineProps.focusVisible(styles.base, styles.buttonReset, linkColorStyles[color],
207
212
  // The system's pressed overlay behind the text; the hover stays the
208
213
  // colour change above, so a press is the one background it paints.
209
- !isDisabled && interactionOverlayStyles.pressedBackgroundColor, hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, isDisabled && styles.disabled, xstyle), className, style),
214
+ !isDisabled && interactionOverlayStyles.pressedBackgroundColor, hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, isDisabled && styles.disabled, maxLines > 0 && styles.truncating, xstyle), className, style),
210
215
  ...props,
211
216
  ...(isDisabled ? disabledInteractionProps(props.onKeyDown) : null),
212
217
  children: sharedContent
@@ -226,7 +231,7 @@ export function Link({
226
231
  tabIndex: 0,
227
232
  ...mergeProps(themeProps('link', {
228
233
  color
229
- }), focusOutlineProps.focusVisible(styles.base, linkColorStyles[color], hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, styles.disabled, xstyle), className, style),
234
+ }), focusOutlineProps.focusVisible(styles.base, linkColorStyles[color], hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, styles.disabled, maxLines > 0 && styles.truncating, xstyle), className, style),
230
235
  ...props,
231
236
  ...disabledInteractionProps(props.onKeyDown),
232
237
  children: sharedContent
@@ -244,7 +249,7 @@ export function Link({
244
249
  tabIndex: isDisabled ? -1 : undefined,
245
250
  ...mergeProps(themeProps('link', {
246
251
  color
247
- }), focusOutlineProps.focusVisible(styles.base, linkColorStyles[color], !isDisabled && interactionOverlayStyles.pressedBackgroundColor, hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, isDisabled && styles.disabled, xstyle), className, style),
252
+ }), focusOutlineProps.focusVisible(styles.base, linkColorStyles[color], !isDisabled && interactionOverlayStyles.pressedBackgroundColor, hasUnderline && styles.hasUnderline, isStandalone && styles.standalone, isDisabled && styles.disabled, maxLines > 0 && styles.truncating, xstyle), className, style),
248
253
  ...props,
249
254
  children: sharedContent
250
255
  });
@@ -16,7 +16,7 @@ import * as fs from 'node:fs';
16
16
  import * as path from 'node:path';
17
17
  import { expect, test } from '@playwright/test';
18
18
  import { DEFAULT_STORYBOOK_DIR, serveStorybook } from '@astryxdesign/a11y-spec/storybook';
19
- const STORY = 'core-markdown-plugins-heading-links--overview';
19
+ const STORY = 'core-markdown--heading-links';
20
20
  const OUTPUT = path.resolve('test-results/markdown-heading-links');
21
21
  const GEOMETRY_TOLERANCE_PX = 1;
22
22
  let storybook;
@@ -1 +1 @@
1
- {"version":3,"file":"PowerSearch.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearch.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PowerSearch.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearch.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@
16
16
  import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
17
17
  import * as stylex from '@stylexjs/stylex';
18
18
  import { Tokenizer } from "../Tokenizer/index.js";
19
+ import { TokenizerClearAllMessageContext } from "../Tokenizer/TokenizerClearAllMessageContext.js";
19
20
  import { TypeaheadItem } from "../Typeahead/TypeaheadItem.js";
20
21
  import { Token } from "../Token/index.js";
21
22
  import { Avatar } from "../Avatar/index.js";
@@ -769,6 +770,9 @@ export function PowerSearch({
769
770
  // replay (which resets a flag and would speak the count present on mount
770
771
  // unprompted) announces nothing until the count changes.
771
772
  const announce = useAnnounce();
773
+ // PowerSearch words its Clear all as its record does; the field announces
774
+ // these words instead of Tokenizer's (component:Tokenizer AR7).
775
+ const clearAllMessage = useMemo(() => t('@astryx.powersearch.allFiltersRemoved'), [t]);
772
776
  const announcedResultCountRef = useRef(resultCountText);
773
777
  useEffect(() => {
774
778
  if (resultCountText === announcedResultCountRef.current) {
@@ -799,36 +803,39 @@ export function PowerSearch({
799
803
  children: [/*#__PURE__*/_jsx("div", {
800
804
  ref: useMergedRefs(ref, popover.triggerRef),
801
805
  ...themeProps('power-search'),
802
- children: /*#__PURE__*/_jsx(Tokenizer, {
803
- handleRef: tokenizerRef,
804
- label: label,
805
- isLabelHidden: isLabelHidden,
806
- searchSource: searchSource,
807
- value: tokenizerValue,
808
- onChange: handleTokenizerChange,
809
- renderToken: renderToken,
810
- renderItem: renderItem,
811
- maxMenuItems: MAX_BROWSE_MENU_ITEMS,
812
- menuWidth: menuWidth,
813
- placeholder: filters.length === 0 ? placeholder : '',
814
- hasAutoFocus: hasAutoFocus,
815
- hasClear: hasClear && !isReadOnly,
816
- startIcon: startIcon,
817
- endContent: combinedEndContent,
818
- isDisabled: isDisabled,
819
- disabledMessage: disabledMessage,
820
- size: size,
821
- tokenOverflowBehavior: tokenOverflowBehavior,
822
- hasEntriesOnFocus: true,
823
- debounceMs: 0,
824
- status: status,
825
- statusVariant: statusVariant,
826
- onFocus: onFocus,
827
- onBlur: onBlur,
828
- containerXstyle: xstyle,
829
- containerClassName: className,
830
- containerStyle: style,
831
- "data-testid": testId
806
+ children: /*#__PURE__*/_jsx(TokenizerClearAllMessageContext, {
807
+ value: clearAllMessage,
808
+ children: /*#__PURE__*/_jsx(Tokenizer, {
809
+ handleRef: tokenizerRef,
810
+ label: label,
811
+ isLabelHidden: isLabelHidden,
812
+ searchSource: searchSource,
813
+ value: tokenizerValue,
814
+ onChange: handleTokenizerChange,
815
+ renderToken: renderToken,
816
+ renderItem: renderItem,
817
+ maxMenuItems: MAX_BROWSE_MENU_ITEMS,
818
+ menuWidth: menuWidth,
819
+ placeholder: filters.length === 0 ? placeholder : '',
820
+ hasAutoFocus: hasAutoFocus,
821
+ hasClear: hasClear && !isReadOnly,
822
+ startIcon: startIcon,
823
+ endContent: combinedEndContent,
824
+ isDisabled: isDisabled,
825
+ disabledMessage: disabledMessage,
826
+ size: size,
827
+ tokenOverflowBehavior: tokenOverflowBehavior,
828
+ hasEntriesOnFocus: true,
829
+ debounceMs: 0,
830
+ status: status,
831
+ statusVariant: statusVariant,
832
+ onFocus: onFocus,
833
+ onBlur: onBlur,
834
+ containerXstyle: xstyle,
835
+ containerClassName: className,
836
+ containerStyle: style,
837
+ "data-testid": testId
838
+ })
832
839
  })
833
840
  }), popover.render(popoverContent, {
834
841
  placement: 'below',
@@ -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;AAQ5C,OAAO,EAAO,KAAK,SAAS,EAAC,MAAM,SAAS,CAAC;AA0I7C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;;;OAUG;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,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAqKpB;yBApLe,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;AAQ5C,OAAO,EAAO,KAAK,SAAS,EAAC,MAAM,SAAS,CAAC;AA0I7C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;;;OAUG;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,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,EAAE,kBAAkB,qBA8KpB;yBA7Le,aAAa"}
@@ -198,7 +198,12 @@ export function RadioListItem({
198
198
  // from submission, matching a natively disabled control.
199
199
  ,
200
200
  form: keepsFocusableForMessage ? '' : undefined,
201
- required: context.isRequired,
201
+ required: context.isRequired
202
+ // Chromium reports an unanswered native-required radio invalid before
203
+ // any interaction; the invalid state follows the group's status
204
+ // instead (RadioList FR6).
205
+ ,
206
+ "aria-invalid": context.isRequired ? context.status?.type === 'error' : undefined,
202
207
  onChange: () => {
203
208
  if (isDisabled) {
204
209
  return;
@@ -207,9 +212,12 @@ export function RadioListItem({
207
212
  }
208
213
  // A consumer onClick rides on the radio input itself, so it fires for
209
214
  // both direct control clicks and row-surface clicks the row delegates
210
- // to the input — the same routing CheckboxListItem uses.
215
+ // to the input — the same routing CheckboxListItem uses. A disabled
216
+ // radio that stays focusable (`aria-disabled`, not native `disabled`)
217
+ // is not silenced by the browser, so drop the handler here
218
+ // (`spec:AST-085` FR2), as CheckboxInput does.
211
219
  ,
212
- onClick: onClick
220
+ onClick: isDisabled ? undefined : onClick
213
221
  // The radio names itself from the visible label element, which works
214
222
  // for a rich label as well as a plain string. `aria-label` replaces
215
223
  // that name rather than adding to it, so the two are mutually
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../src/Switch/Switch.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../src/Switch/Switch.tsx"],"names":[],"mappings":"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"}
@@ -401,8 +401,11 @@ export function Switch({
401
401
  // than the field wrapper via `...rest`.
402
402
  ,
403
403
  "aria-labelledby": ariaLabelledByProp,
404
- "aria-describedby": ariaDescribedBy,
405
- "aria-invalid": status?.type === 'error' ? true : undefined,
404
+ "aria-describedby": ariaDescribedBy
405
+ // Chromium reports an unchecked native-required checkbox invalid before
406
+ // any interaction; the invalid state follows status instead.
407
+ ,
408
+ "aria-invalid": status?.type === 'error' ? true : isRequired ? false : undefined,
406
409
  "aria-busy": isBusy || undefined,
407
410
  ...stylex.props(styles.input, rtlStyles.centerInline('-50%'), styles.inputCoarse, inputSizeStyles[size], isDisabled && styles.inputDisabled, isBusy && styles.inputBusy, switchFocusInput)
408
411
  }), /*#__PURE__*/_jsx("div", {
@@ -448,8 +451,12 @@ export function Switch({
448
451
  labelSpacing: labelSpacing !== 'hug' ? labelSpacing : undefined
449
452
  }), stylex.props(width != null && dynamicWidthStyles.width(width), xstyle), className, style),
450
453
  ...rest,
451
- // Native `disabled` suppressed clicks on the switch (spec:AST-085 FR2).
454
+ // Native `disabled` suppressed clicks and key events on the switch; the
455
+ // switch is no longer natively disabled, so withhold the caller's
456
+ // handlers while disabled (spec:AST-085 FR2).
452
457
  onClick: isDisabled ? undefined : rest.onClick,
458
+ onKeyDown: isDisabled ? undefined : rest.onKeyDown,
459
+ onKeyUp: isDisabled ? undefined : rest.onKeyUp,
453
460
  children: [/*#__PURE__*/_jsxs("div", {
454
461
  ref: el => {
455
462
  // Interaction (hover/focus) listeners for the disabled-message