@astryxdesign/core 0.7.6-canary.bb18c81 → 0.7.6-canary.d669762

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 (194) hide show
  1. package/dist/Badge/Badge.d.ts.map +1 -1
  2. package/dist/Badge/Badge.js +7 -1
  3. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  4. package/dist/ClickableCard/ClickableCard.js +37 -4
  5. package/dist/DateInput/DateInput.d.ts.map +1 -1
  6. package/dist/DateInput/DateInput.js +8 -3
  7. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  8. package/dist/DateInput/TouchDateField.js +8 -3
  9. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
  10. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  11. package/dist/DateTimeInput/DateTimeInput.js +19 -11
  12. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
  13. package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
  14. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  15. package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
  16. package/dist/Drawer/Drawer.d.ts +1 -0
  17. package/dist/Drawer/Drawer.d.ts.map +1 -1
  18. package/dist/Drawer/Drawer.js +2 -2
  19. package/dist/Layer/popoverOperations.d.ts +27 -0
  20. package/dist/Layer/popoverOperations.d.ts.map +1 -0
  21. package/dist/Layer/popoverOperations.js +159 -0
  22. package/dist/Layer/useLayer.d.ts +1 -1
  23. package/dist/Layer/useLayer.d.ts.map +1 -1
  24. package/dist/Layer/useLayer.js +93 -59
  25. package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
  26. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  27. package/dist/MultiSelector/MultiSelector.js +21 -8
  28. package/dist/NumberInput/numberParser.d.ts +3 -0
  29. package/dist/NumberInput/numberParser.d.ts.map +1 -1
  30. package/dist/NumberInput/numberParser.js +7 -44
  31. package/dist/TimeInput/TimeInput.d.ts +6 -2
  32. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  33. package/dist/TimeInput/TimeInput.js +21 -14
  34. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  35. package/dist/TimeInput/TouchTimeField.js +5 -4
  36. package/dist/Toast/Toast.d.ts.map +1 -1
  37. package/dist/Toast/Toast.js +60 -20
  38. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  39. package/dist/TopNav/TopNavMegaMenu.js +3 -0
  40. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  41. package/dist/TopNav/TopNavMenu.js +1 -0
  42. package/dist/astryx.css +1 -0
  43. package/dist/gestures/GestureArena.d.ts +6 -0
  44. package/dist/gestures/GestureArena.d.ts.map +1 -1
  45. package/dist/gestures/GestureArena.js +39 -0
  46. package/dist/gestures/GestureHost.d.ts +352 -0
  47. package/dist/gestures/GestureHost.d.ts.map +1 -0
  48. package/dist/gestures/GestureHost.js +1773 -0
  49. package/dist/gestures/GestureRecognizer.d.ts +10 -0
  50. package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
  51. package/dist/gestures/GestureRecognizer.js +16 -0
  52. package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
  53. package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
  54. package/dist/gestures/LongPressGestureRecognizer.js +3 -0
  55. package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
  56. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  57. package/dist/gestures/PanGestureRecognizer.js +3 -0
  58. package/dist/gestures/PinchGestureRecognizer.d.ts +1 -0
  59. package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -1
  60. package/dist/gestures/PinchGestureRecognizer.js +3 -0
  61. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +1 -0
  62. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
  63. package/dist/gestures/ScreenEdgePanGestureRecognizer.js +3 -0
  64. package/dist/gestures/SwipeGestureRecognizer.d.ts +1 -0
  65. package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -1
  66. package/dist/gestures/SwipeGestureRecognizer.js +3 -0
  67. package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
  68. package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
  69. package/dist/gestures/TapGestureRecognizer.js +3 -0
  70. package/dist/gestures/haptics.d.ts +65 -0
  71. package/dist/gestures/haptics.d.ts.map +1 -0
  72. package/dist/gestures/haptics.js +182 -0
  73. package/dist/gestures/nativeScroll.d.ts +42 -0
  74. package/dist/gestures/nativeScroll.d.ts.map +1 -0
  75. package/dist/gestures/nativeScroll.js +228 -0
  76. package/dist/gestures/touchAction.d.ts +60 -0
  77. package/dist/gestures/touchAction.d.ts.map +1 -0
  78. package/dist/gestures/touchAction.js +157 -0
  79. package/dist/gestures/touchActionRule.d.ts +34 -0
  80. package/dist/gestures/touchActionRule.d.ts.map +1 -0
  81. package/dist/gestures/touchActionRule.js +140 -0
  82. package/dist/gestures/types.d.ts +7 -0
  83. package/dist/gestures/types.d.ts.map +1 -1
  84. package/dist/hooks/index.d.ts +1 -1
  85. package/dist/hooks/index.d.ts.map +1 -1
  86. package/dist/hooks/modalAnnounce.d.ts.map +1 -1
  87. package/dist/hooks/modalAnnounce.js +107 -61
  88. package/dist/hooks/useAnnounce.d.ts +101 -42
  89. package/dist/hooks/useAnnounce.d.ts.map +1 -1
  90. package/dist/hooks/useAnnounce.js +161 -75
  91. package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
  92. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  93. package/dist/hooks/useAnnounceRenderedText.js +5 -3
  94. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  95. package/dist/hooks/useBusyAnnouncement.js +6 -12
  96. package/dist/utils/plainDate.d.ts +2 -0
  97. package/dist/utils/plainDate.d.ts.map +1 -1
  98. package/dist/utils/plainDate.js +46 -3
  99. package/dist/utils/primaryClick.d.ts +11 -0
  100. package/dist/utils/primaryClick.d.ts.map +1 -0
  101. package/dist/utils/primaryClick.js +25 -0
  102. package/dist/utils/timeFormat.d.ts +47 -0
  103. package/dist/utils/timeFormat.d.ts.map +1 -0
  104. package/dist/utils/timeFormat.js +240 -0
  105. package/dist/utils/unicodeDigits.d.ts +20 -0
  106. package/dist/utils/unicodeDigits.d.ts.map +1 -0
  107. package/dist/utils/unicodeDigits.js +70 -0
  108. package/locales/en.json +2 -2
  109. package/package.json +4 -4
  110. package/src/Badge/Badge.doc.mjs +1 -1
  111. package/src/Badge/Badge.tsx +19 -2
  112. package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
  113. package/src/ClickableCard/ClickableCard.test.tsx +96 -0
  114. package/src/ClickableCard/ClickableCard.tsx +48 -4
  115. package/src/ComplexSelector/ComplexSelector.test.tsx +37 -0
  116. package/src/DateInput/DateInput.test.tsx +62 -1
  117. package/src/DateInput/DateInput.tsx +14 -3
  118. package/src/DateInput/DateInputTouch.test.tsx +76 -0
  119. package/src/DateInput/TouchDateField.tsx +14 -3
  120. package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
  121. package/src/DateTimeInput/DateTimeInput.spec.md +27 -26
  122. package/src/DateTimeInput/DateTimeInput.test.tsx +20 -0
  123. package/src/DateTimeInput/DateTimeInput.tsx +31 -13
  124. package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
  125. package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
  126. package/src/Drawer/Drawer.test.tsx +13 -0
  127. package/src/Drawer/Drawer.tsx +8 -2
  128. package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
  129. package/src/Kbd/Kbd.spec.md +81 -38
  130. package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
  131. package/src/Layer/popoverOperations.test.ts +205 -0
  132. package/src/Layer/popoverOperations.ts +172 -0
  133. package/src/Layer/useLayer.test.tsx +348 -1
  134. package/src/Layer/useLayer.tsx +118 -71
  135. package/src/List/ListItem.spec.md +205 -0
  136. package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
  137. package/src/MultiSelector/MultiSelector.test.tsx +152 -0
  138. package/src/MultiSelector/MultiSelector.tsx +19 -8
  139. package/src/NumberInput/numberParser.ts +7 -45
  140. package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
  141. package/src/TabList/TabList.test.tsx +7 -4
  142. package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
  143. package/src/TimeInput/Presentation.test.tsx +21 -0
  144. package/src/TimeInput/TimeInput.doc.mjs +8 -8
  145. package/src/TimeInput/TimeInput.spec.md +45 -48
  146. package/src/TimeInput/TimeInput.test.tsx +76 -0
  147. package/src/TimeInput/TimeInput.tsx +36 -18
  148. package/src/TimeInput/TouchTimeField.tsx +4 -6
  149. package/src/Toast/Toast.spec.md +7 -10
  150. package/src/Toast/Toast.tsx +104 -36
  151. package/src/Toast/ToastViewport.test.tsx +144 -0
  152. package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
  153. package/src/TopNav/TopNavMegaMenu.tsx +4 -1
  154. package/src/TopNav/TopNavMenu.test.tsx +17 -0
  155. package/src/TopNav/TopNavMenu.tsx +1 -0
  156. package/src/gestures/GestureArena.ts +35 -0
  157. package/src/gestures/GestureHost.ts +2065 -0
  158. package/src/gestures/GestureRecognizer.ts +18 -0
  159. package/src/gestures/LongPressGestureRecognizer.ts +4 -0
  160. package/src/gestures/PanGestureRecognizer.ts +4 -0
  161. package/src/gestures/PinchGestureRecognizer.ts +4 -0
  162. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +4 -0
  163. package/src/gestures/SwipeGestureRecognizer.ts +4 -0
  164. package/src/gestures/TapGestureRecognizer.ts +4 -0
  165. package/src/gestures/__tests__/GestureHost.test.ts +2087 -0
  166. package/src/gestures/__tests__/arena.test.ts +5 -0
  167. package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +5 -0
  168. package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
  169. package/src/gestures/__tests__/browser/fixture.ts +307 -0
  170. package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
  171. package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
  172. package/src/gestures/__tests__/haptics.test.ts +187 -0
  173. package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
  174. package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
  175. package/src/gestures/haptics.ts +203 -0
  176. package/src/gestures/nativeScroll.ts +277 -0
  177. package/src/gestures/touchAction.ts +191 -0
  178. package/src/gestures/touchActionRule.ts +157 -0
  179. package/src/gestures/types.ts +7 -0
  180. package/src/hooks/index.ts +5 -1
  181. package/src/hooks/modalAnnounce.ts +129 -72
  182. package/src/hooks/useAnnounce.doc.mjs +35 -3
  183. package/src/hooks/useAnnounce.replace.test.tsx +516 -0
  184. package/src/hooks/useAnnounce.ts +209 -102
  185. package/src/hooks/useAnnounceRenderedText.ts +17 -3
  186. package/src/hooks/useBusyAnnouncement.ts +7 -10
  187. package/src/utils/plainDate.test.ts +90 -0
  188. package/src/utils/plainDate.ts +58 -3
  189. package/src/utils/primaryClick.test.ts +38 -0
  190. package/src/utils/primaryClick.ts +28 -0
  191. package/src/utils/timeFormat.test.ts +204 -0
  192. package/src/utils/timeFormat.ts +314 -0
  193. package/src/utils/unicodeDigits.test.ts +44 -0
  194. package/src/utils/unicodeDigits.ts +71 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/Badge/Badge.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAW5C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AA8I7C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,EACpB,OAAmB,EACnB,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BAsCZ;yBA/Ce,KAAK"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/Badge/Badge.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAW5C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAwJ7C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,EACpB,OAAmB,EACnB,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BA6CZ;yBAtDe,KAAK"}
@@ -41,6 +41,10 @@ const styles = {
41
41
  ks0D6T: "x193iq5w",
42
42
  k7Eaqz: "xeuugli",
43
43
  $$css: true
44
+ },
45
+ grows: {
46
+ kAzted: "x1tn5z8q",
47
+ $$css: true
44
48
  }
45
49
  };
46
50
 
@@ -182,11 +186,13 @@ export function Badge({
182
186
  // really cut, reachable by hover and by focus — needs that measurement and
183
187
  // a client component, so it is tracked in #5585.
184
188
  const labelTitle = typeof label === 'number' ? String(label) : typeof label === 'string' && label.length > 0 ? label : undefined;
189
+ // Whether the label renders anything, which is when the badge grows with it.
190
+ const hasLabel = label !== '' && label != null && typeof label !== 'boolean';
185
191
  return /*#__PURE__*/_jsxs("span", {
186
192
  ref: ref,
187
193
  ...mergeProps(themeProps('badge', {
188
194
  variant
189
- }), stylex.props(styles.base, variants[variant], xstyle), className, style),
195
+ }), stylex.props(styles.base, hasLabel && styles.grows, variants[variant], xstyle), className, style),
190
196
  title: labelTitle,
191
197
  ...props,
192
198
  children: [icon, /*#__PURE__*/_jsx("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"ClickableCard.d.ts","sourceRoot":"","sources":["../../src/ClickableCard/ClickableCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,UAAU,EAAU,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AASxE,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAGtE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwJ5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAE1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,yBAAyB;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAyFpB;yBA5Ge,aAAa"}
1
+ {"version":3,"file":"ClickableCard.d.ts","sourceRoot":"","sources":["../../src/ClickableCard/ClickableCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EAGf,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAGtE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwJ5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAE1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,yBAAyB;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,kBAAkB,+BA+HpB;yBAlJe,aAAa"}
@@ -28,7 +28,7 @@
28
28
  * For static display, use Card.
29
29
  * For toggle selection, use SelectableCard.
30
30
  */
31
- import { useRef } from 'react';
31
+ import { useCallback, useRef } from 'react';
32
32
  import * as stylex from '@stylexjs/stylex';
33
33
  import "../theme/tokens.stylex.js";
34
34
  import { borderVars, colorVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
@@ -166,6 +166,36 @@ export function ClickableCard({
166
166
  const pressable = usePressFeedback();
167
167
  const containerRef = useRef(null);
168
168
  const interactiveRef = useRef(null);
169
+ const restoreFocusRef = useRef(false);
170
+ // The isDisabled value of the link that just detached: a link card that
171
+ // flips it replaces its hidden link (router component and plain anchor),
172
+ // and only that replacement takes focus back.
173
+ const detachedDisabledRef = useRef(null);
174
+
175
+ // A focused link remounts when isDisabled changes: the replacement takes
176
+ // focus back, without scrolling, if focus fell to the page. Any other
177
+ // detach and attach (a hidden Activity or Suspense boundary revealed
178
+ // again) leaves focus where the person put it.
179
+ const setInteractiveRef = useCallback(node => {
180
+ if (node == null) {
181
+ const previous = interactiveRef.current;
182
+ restoreFocusRef.current = previous != null && previous === previous.ownerDocument.activeElement;
183
+ detachedDisabledRef.current = isDisabled;
184
+ interactiveRef.current = null;
185
+ return;
186
+ }
187
+ interactiveRef.current = node;
188
+ const isFlip = detachedDisabledRef.current != null && detachedDisabledRef.current !== isDisabled;
189
+ const active = node.ownerDocument.activeElement;
190
+ const hasFallen = active == null || active === node.ownerDocument.body;
191
+ if (restoreFocusRef.current && isFlip && hasFallen) {
192
+ node.focus({
193
+ preventScroll: true
194
+ });
195
+ }
196
+ restoreFocusRef.current = false;
197
+ detachedDisabledRef.current = null;
198
+ }, [isDisabled]);
169
199
  const LinkComponent = useLinkComponent();
170
200
  const {
171
201
  onClick,
@@ -184,6 +214,9 @@ export function ClickableCard({
184
214
  } : onMouseUp;
185
215
  const isLink = href != null;
186
216
 
217
+ // Disabled links have no href, so bypass the router and render an anchor.
218
+ const LinkRoot = isDisabled ? 'a' : LinkComponent;
219
+
187
220
  // Only the `default` variant has a visible border. Card draws a transparent
188
221
  // 1px border on every other variant purely to avoid layout jitter; we drop
189
222
  // it here so the hover overlay covers the full box with no untinted ring.
@@ -207,8 +240,8 @@ export function ClickableCard({
207
240
  onClick: !isDisabled ? onClick : undefined,
208
241
  onMouseUp: !isDisabled ? handleMouseUp : undefined,
209
242
  ...props,
210
- children: [isLink ? /*#__PURE__*/_jsx(LinkComponent, {
211
- ref: interactiveRef,
243
+ children: [isLink ? /*#__PURE__*/_jsx(LinkRoot, {
244
+ ref: setInteractiveRef,
212
245
  href: isDisabled ? undefined : href,
213
246
  target: isDisabled ? undefined : target,
214
247
  role: isDisabled ? 'link' : undefined,
@@ -222,7 +255,7 @@ export function ClickableCard({
222
255
  className: "x10l6tqk x1i1rx1s xjm9jq1 x1717udv xkdpibf xb3r6kr xzpqnlu xuxw1ft xc342km"
223
256
  }
224
257
  }) : /*#__PURE__*/_jsx("button", {
225
- ref: interactiveRef,
258
+ ref: setInteractiveRef,
226
259
  type: "button",
227
260
  "aria-label": label,
228
261
  "aria-disabled": isDisabled || undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../src/DateInput/DateInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../src/DateInput/DateInput.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAQ3C,OAAO,EAGL,KAAK,WAAW,EAKhB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAQlB,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAiBrB,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAoEpC,QAAA,MAAM,UAAU;;;;;;;;;;;;;EAad,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH;;;;;;;;GAQG;AACH,iFAAiF;AACjF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjE,8FAA8F;AAC9F,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,OAAO,CACnC,eAAe,EACf,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CACtD,CAAC;AAIF,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,mBAAmB,GACvC,MAAM,UAAU,CAAC;AAGlB,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAM9C,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,UAAU,GAAG,cAAc,CAC5B;IACC,qEAAqE;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IAEtD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAEnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC;IAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AA6iBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BA0B9C;yBA1Be,SAAS"}
@@ -330,7 +330,7 @@ function PointerDateField({
330
330
 
331
331
  // Unified change handler that fires both onChange and changeAction
332
332
  const fireChange = useCallback(newValue => {
333
- if (isBusy) {
333
+ if (isEffectivelyDisabled) {
334
334
  return;
335
335
  }
336
336
  onChange?.(newValue);
@@ -340,7 +340,7 @@ function PointerDateField({
340
340
  await changeAction(newValue);
341
341
  });
342
342
  }
343
- }, [isBusy, onChange, changeAction, startTransition, setOptimisticValue]);
343
+ }, [isEffectivelyDisabled, onChange, changeAction, startTransition, setOptimisticValue]);
344
344
 
345
345
  // Handle clear button click
346
346
  const handleClear = useCallback(e => {
@@ -360,10 +360,15 @@ function PointerDateField({
360
360
 
361
361
  // Handle date selection from calendar
362
362
  const handleDateSelect = useCallback(selectedDate => {
363
+ // An already-open calendar can outlive an enabled owner. Reject the
364
+ // whole selection, including dismissal, so its focused day stays put.
365
+ if (isDisabled) {
366
+ return;
367
+ }
363
368
  fireChange(selectedDate);
364
369
  setPendingInput(null);
365
370
  popover.hide();
366
- }, [fireChange, popover]);
371
+ }, [isDisabled, fireChange, popover]);
367
372
 
368
373
  // Handle input text change - update immediately if valid and allowed
369
374
  const handleInputChange = useCallback(e => {
@@ -1 +1 @@
1
- {"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAgEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA6ehD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAIhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,MAAoB,EACpB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,cAAc,+BAswBhB;yBA1yBe,cAAc"}
1
+ {"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAgEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA6ehD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAIhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,MAAoB,EACpB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,cAAc,+BAixBhB;yBArzBe,cAAc"}
@@ -380,7 +380,7 @@ export function TouchDateField({
380
380
  // literal renders the same shape here and on the desktop control.
381
381
  const displayValue = optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue) ? typeof format === 'function' ? format(optimisticValue) : formatSharedDate(plainDateFromISO(optimisticValue), format, locale) : '';
382
382
  const fireChange = useCallback(newValue => {
383
- if (isBusy) {
383
+ if (isEffectivelyDisabled) {
384
384
  return;
385
385
  }
386
386
  onChange?.(newValue);
@@ -390,7 +390,7 @@ export function TouchDateField({
390
390
  await changeAction(newValue);
391
391
  });
392
392
  }
393
- }, [isBusy, onChange, changeAction, startTransition, setOptimisticValue]);
393
+ }, [isEffectivelyDisabled, onChange, changeAction, startTransition, setOptimisticValue]);
394
394
  const openSheet = useCallback(() => {
395
395
  if (!isEffectivelyDisabled) {
396
396
  // Always onto the calendar, whatever was showing last time. The wheels
@@ -447,6 +447,11 @@ export function TouchDateField({
447
447
  * value is still cleared either way — that half never depends on the range.
448
448
  */
449
449
  const handleResetInSheet = useCallback(() => {
450
+ // Disabled: reject the entire reset without closing or moving focus.
451
+ // Busy-only fields keep month navigation; fireChange blocks the clear.
452
+ if (isDisabled) {
453
+ return;
454
+ }
450
455
  fireChange(undefined);
451
456
  const currentMonth = monthIndexOf(today);
452
457
  if (currentMonth < minMonthIndex || currentMonth > maxMonthIndex) {
@@ -457,7 +462,7 @@ export function TouchDateField({
457
462
  }
458
463
  setMonthIndex(currentMonth);
459
464
  scrollerHandleRef.current?.scrollToMonth(currentMonth, 'smooth');
460
- }, [fireChange, today, monthIndex, minMonthIndex, maxMonthIndex]);
465
+ }, [isDisabled, fireChange, today, monthIndex, minMonthIndex, maxMonthIndex]);
461
466
 
462
467
  // Selection commits on the tap and leaves the sheet up, so a mistake can be
463
468
  // corrected in place and a nearby date reconsidered without reopening.
@@ -112,8 +112,11 @@ export interface DateTimeInputProps extends Omit<FieldInputBaseProps<HTMLInputEl
112
112
  */
113
113
  hasSeconds?: boolean;
114
114
  /**
115
- * Hour display format.
116
- * @default '12h'
115
+ * Hour display format: '12h' with the locale's day period, or '24h'.
116
+ * When unset, follows the `InternationalizationProvider` locale's hour
117
+ * cycle (`en-US` 12-hour, `en-GB` 24-hour); a per-user preference rides on
118
+ * the locale tag (`en-US-u-hc-h23`).
119
+ * @default the locale's hour cycle
117
120
  */
118
121
  hourFormat?: DateTimeInputHourFormat;
119
122
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AA4CA,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AA8BrB,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAc9C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,uGAAuG;AACvG,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEpE,YAAY,EACV,WAAW,IAAI,mBAAmB,EAClC,eAAe,IAAI,uBAAuB,GAC3C,MAAM,UAAU,CAAC;AAiKlB,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,UAAU,GAAG,cAAc,CAC5B;IACC,8CAA8C;IAC9C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;IAErC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,CAAC,EAAE,+BAA+B,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAEzC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;CAC1C;AAi7CD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAqCtD;yBArCe,aAAa"}
1
+ {"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ import { useTooltip } from "../Tooltip/index.js";
34
34
  import { useInputContainer } from "../hooks/useInputContainer.js";
35
35
  import { useBusyAnnouncement } from "../hooks/useBusyAnnouncement.js";
36
36
  import { useInputStatusIcon } from "../hooks/useInputStatusIcon.js";
37
- import { parseDateInput, parseISOTime, parseTimeInput, formatDisplayTime12h, formatDisplayTime24h, formatISOTime, isTimeInRange, adjustTime, isImeKeyEvent, mergeProps, isFocusDetached } from "../utils/index.js";
37
+ import { parseDateInput, parseISOTime, formatISOTime, isTimeInRange, adjustTime, isImeKeyEvent, mergeProps, isFocusDetached } from "../utils/index.js";
38
38
  import { chainEventHandlers } from "../utils/chainEventHandlers.js";
39
39
  import { joinAriaIDs } from "../utils/inputAria.js";
40
40
  import { plainDateFromISO, plainDateToISO, plainDateFormat, DATE_FORMAT_LONG } from "../utils/plainDate.js";
@@ -46,6 +46,7 @@ import { useSize } from "../SizeContext/SizeContext.js";
46
46
  import { themeProps } from "../utils/themeProps.js";
47
47
  import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
48
48
  import { useLocale, useTranslator } from "../i18n/index.js";
49
+ import { formatLocaleTime, parseLocaleTime, resolveHourFormat } from "../utils/timeFormat.js";
49
50
  import { useMergedRefs } from "../hooks/useMergedRefs.js";
50
51
  import { useHighlightedOptionScroll } from "../hooks/useHighlightedOptionScroll.js";
51
52
  import { NativeDateSegment } from "./NativeDateSegment.js";
@@ -415,7 +416,7 @@ function PointerDateTimeField({
415
416
  }
416
417
  }
417
418
  const nativeTimeValue = nativeTimeDraft ?? valueParts.time;
418
- const formatDisplayTime = hourFormat === '12h' ? formatDisplayTime12h : formatDisplayTime24h;
419
+ const formatDisplayTime = useCallback((time, includeSeconds) => formatLocaleTime(time, locale, hourFormat, includeSeconds), [locale, hourFormat]);
419
420
  const timeDisplayValue = useMemo(() => {
420
421
  if (timePendingInput !== null) {
421
422
  return timePendingInput;
@@ -426,12 +427,12 @@ function PointerDateTimeField({
426
427
  if (timePendingInput === null || !timePendingInput.trim()) {
427
428
  return true;
428
429
  }
429
- const parsed = parseTimeInput(timePendingInput, hasSeconds);
430
+ const parsed = parseLocaleTime(timePendingInput, locale, hasSeconds);
430
431
  if (!parsed) {
431
432
  return false;
432
433
  }
433
434
  return isTimeInRange(parsed, timeMin, timeMax);
434
- }, [timePendingInput, hasSeconds, timeMin, timeMax]);
435
+ }, [timePendingInput, locale, hasSeconds, timeMin, timeMax]);
435
436
  const resolvedTimePlaceholder = useMemo(() => {
436
437
  if (isTimeFocused && !timeDisplayValue) {
437
438
  return hourFormat === '12h' ? t('@astryx.dateTimeInput.timeHint12h') : t('@astryx.dateTimeInput.timeHint24h');
@@ -817,7 +818,7 @@ function PointerDateTimeField({
817
818
  }
818
819
  const text = e.target.value;
819
820
  setTimePendingInput(text);
820
- const parsed = parseTimeInput(text, hasSeconds);
821
+ const parsed = parseLocaleTime(text, locale, hasSeconds);
821
822
 
822
823
  // Typing narrows nothing — free-form entry is the contract, and a time
823
824
  // between two options must stay reachable. The list instead follows the
@@ -834,7 +835,7 @@ function PointerDateTimeField({
834
835
  }
835
836
  }
836
837
  }
837
- }, [hasSeconds, timeMin, timeMax, valueParts.time, valueParts.date, fireChange, isEffectivelyDisabled, timePopover.isOpen, closestOptionIndex]);
838
+ }, [locale, hasSeconds, timeMin, timeMax, valueParts.time, valueParts.date, fireChange, isEffectivelyDisabled, timePopover.isOpen, closestOptionIndex]);
838
839
  const handleTimeFocus = useCallback(() => {
839
840
  // A disabled/busy input stays focusable (via aria-disabled) so its reason
840
841
  // is discoverable, but it must not present editing affordances — keep the
@@ -866,7 +867,7 @@ function PointerDateTimeField({
866
867
  setTimePendingInput(null);
867
868
  return;
868
869
  }
869
- const parsed = parseTimeInput(timePendingInput, hasSeconds);
870
+ const parsed = parseLocaleTime(timePendingInput, locale, hasSeconds);
870
871
  if (parsed && isTimeInRange(parsed, timeMin, timeMax)) {
871
872
  if (parsed !== valueParts.time && valueParts.date) {
872
873
  const combined = combineDateTime(valueParts.date, parsed);
@@ -876,7 +877,7 @@ function PointerDateTimeField({
876
877
  }
877
878
  }
878
879
  setTimePendingInput(null);
879
- }, [timePendingInput, hasSeconds, timeMin, timeMax, valueParts, fireChange, timePopover]);
880
+ }, [timePendingInput, locale, hasSeconds, timeMin, timeMax, valueParts, fireChange, timePopover]);
880
881
  const handleTimeKeyDown = useCallback(e => {
881
882
  // ArrowUp/ArrowDown step the time and preventDefault; an IME candidate
882
883
  // window uses those same arrows to navigate candidates, so guard the
@@ -934,7 +935,7 @@ function PointerDateTimeField({
934
935
  // Typed text wins over the highlight. The highlight only tracks
935
936
  // the option at or before what was typed, so committing it here
936
937
  // would round 1:07 PM down to 1:00 PM and discard the entry.
937
- const typed = timeHighlightFollowsTypingRef.current && timePendingInput !== null ? parseTimeInput(timePendingInput, hasSeconds) : null;
938
+ const typed = timeHighlightFollowsTypingRef.current && timePendingInput !== null ? parseLocaleTime(timePendingInput, locale, hasSeconds) : null;
938
939
  const option = timeOptions[activeTimeIndex];
939
940
  if (typed) {
940
941
  commitTimeOption(typed);
@@ -975,7 +976,7 @@ function PointerDateTimeField({
975
976
  }
976
977
  }
977
978
  }
978
- }, [valueParts, hasSeconds, timeIncrement, timeMin, timeMax, fireChange, announce, formatDisplayTime, hasTimeOptions, isEffectivelyDisabled, timePopover, timeOptions, activeTimeIndex, timePendingInput, showTimeOptions, commitTimeOption]);
979
+ }, [valueParts, locale, hasSeconds, timeIncrement, timeMin, timeMax, fireChange, announce, formatDisplayTime, hasTimeOptions, isEffectivelyDisabled, timePopover, timeOptions, activeTimeIndex, timePendingInput, showTimeOptions, commitTimeOption]);
979
980
 
980
981
  // --- Clear ---
981
982
  const handleClear = useCallback(e => {
@@ -1304,11 +1305,18 @@ export function DateTimeInput(props) {
1304
1305
  const isTouch = useMediaQuery(TOUCH_POINTER_QUERY);
1305
1306
  useDevWarning('DateTimeInput', '`nativePicker` is deprecated; use `presentation` instead (`touch` → `adaptive-native`, `always` → `native`, `never` → `adaptive-bottom-sheet`). `presentation` wins when both are set.', props.nativePicker !== undefined);
1306
1307
  const effective = effectivePickerPresentation(props.presentation, props.nativePicker);
1308
+ const locale = useLocale();
1307
1309
  const {
1308
1310
  presentation: _presentation,
1309
1311
  nativePicker: _nativePicker,
1310
- ...rest
1312
+ ...surfaceProps
1311
1313
  } = props;
1314
+ // Every surface gets the resolved hour format, so typed text, the native
1315
+ // field's resting text, preset times, and the sheet wheels agree.
1316
+ const rest = {
1317
+ ...surfaceProps,
1318
+ hourFormat: resolveHourFormat(locale, props.hourFormat)
1319
+ };
1312
1320
  if (effective === 'native') {
1313
1321
  return /*#__PURE__*/_jsx(PointerDateTimeField, {
1314
1322
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTimeSegment.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/NativeTimeSegment.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAK9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAoBlB,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,IAAI,CACjB,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,mBAAmB,GAAG,UAAU,GAAG,cAAc,CACxD,CAAC;CACH,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAoB,EACpB,GAAG,EACH,GAAG,EACH,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACN,UAAU,EACV,eAAe,EACf,YAAY,GACb,EAAE,sBAAsB,+BA6OxB;yBAlQe,iBAAiB"}
1
+ {"version":3,"file":"NativeTimeSegment.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/NativeTimeSegment.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAM9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAoBlB,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,IAAI,CACjB,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,mBAAmB,GAAG,UAAU,GAAG,cAAc,CACxD,CAAC;CACH,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAoB,EACpB,GAAG,EACH,GAAG,EACH,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACN,UAAU,EACV,eAAe,EACf,YAAY,GACb,EAAE,sBAAsB,+BA4OxB;yBAjQe,iBAAiB"}
@@ -28,9 +28,10 @@ import { hasEditableDateSegments } from "../DateInput/nativeDateSegments.js";
28
28
  import { useMediaQuery } from "../hooks/useMediaQuery.js";
29
29
  import { useMergedRefs } from "../hooks/useMergedRefs.js";
30
30
  import { Icon } from "../Icon/index.js";
31
- import { useTranslator } from "../i18n/index.js";
31
+ import { useLocale, useTranslator } from "../i18n/index.js";
32
+ import { formatLocaleTime } from "../utils/timeFormat.js";
32
33
  import { VisuallyHidden } from "../VisuallyHidden/index.js";
33
- import { focusOutlineStyles, formatDisplayTime12h, formatDisplayTime24h, formatISOTime, isTimeInRange, parseISOTime } from "../utils/index.js";
34
+ import { focusOutlineStyles, formatISOTime, isTimeInRange, parseISOTime } from "../utils/index.js";
34
35
  import { chainEventHandlers } from "../utils/chainEventHandlers.js";
35
36
  import { nativePickerSegmentStyles as styles } from "./nativePickerSegmentStyles.js";
36
37
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
@@ -72,6 +73,7 @@ export function NativeTimeSegment({
72
73
  ...inputProps
73
74
  } = controlProps ?? {};
74
75
  const t = useTranslator();
76
+ const locale = useLocale();
75
77
  const isTouchPointer = useMediaQuery('(pointer: coarse)');
76
78
  const internalInputRef = useRef(null);
77
79
  const mergedInputRef = useMergedRefs(inputRef, internalInputRef);
@@ -94,8 +96,7 @@ export function NativeTimeSegment({
94
96
  }
95
97
  const nativeValue = normalizeNativeTime(value) ?? '';
96
98
  const isInputValid = rejectedValue === null;
97
- const formatDisplayTime = hourFormat === '12h' ? formatDisplayTime12h : formatDisplayTime24h;
98
- const overlayText = nativeValue ? formatDisplayTime(nativeValue, false) : placeholder;
99
+ const overlayText = nativeValue ? formatLocaleTime(nativeValue, locale, hourFormat, false) : placeholder;
99
100
  const showsOverlay = !!overlayText && !(isFocused && isSegmentEditable);
100
101
  const commitValue = useCallback(newValue => {
101
102
  if (isEffectivelyDisabled || lastCommitRef.current === newValue) {
@@ -1 +1 @@
1
- {"version":3,"file":"TouchDateTimeField.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/TouchDateTimeField.tsx"],"names":[],"mappings":"AA8GA,OAAO,KAAK,EAAC,kBAAkB,EAAoB,MAAM,iBAAiB,CAAC;AAuV3E,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,UAAkB,EAClB,UAAkB,EAElB,aAAa,EAAE,cAAc,EAC7B,kBAAkB,EAAE,mBAAmB,EACvC,QAAgB,EAChB,WAAW,EAAE,oBAAoB,EACjC,eAAe,EAAE,wBAAwB,EACzC,SAAS,EACT,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,YAAY,EAEZ,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,kBAAkB,+BAkgCpB;yBAziCe,kBAAkB"}
1
+ {"version":3,"file":"TouchDateTimeField.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/TouchDateTimeField.tsx"],"names":[],"mappings":"AA6GA,OAAO,KAAK,EAAC,kBAAkB,EAAoB,MAAM,iBAAiB,CAAC;AAuV3E,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,UAAkB,EAClB,UAAkB,EAElB,aAAa,EAAE,cAAc,EAC7B,kBAAkB,EAAE,mBAAmB,EACvC,QAAgB,EAChB,WAAW,EAAE,oBAAoB,EACjC,eAAe,EAAE,wBAAwB,EACzC,SAAS,EACT,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,YAAY,EAEZ,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,kBAAkB,+BA+/BpB;yBAtiCe,kBAAkB"}
@@ -44,7 +44,8 @@ import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
44
44
  import { rtlStyles } from "../utils/rtlStyles.js";
45
45
  import { themeProps } from "../utils/themeProps.js";
46
46
  import { normalizeDayOfWeek } from "../utils/dateTypes.js";
47
- import { formatDisplayTime12h, formatDisplayTime24h, formatISOTime, isImeKeyEvent, isRenderable, isTimeInRange, clampTime, mergeProps, parseISOTime } from "../utils/index.js";
47
+ import { formatLocaleTime } from "../utils/timeFormat.js";
48
+ import { formatISOTime, isImeKeyEvent, isRenderable, isTimeInRange, clampTime, mergeProps, parseISOTime } from "../utils/index.js";
48
49
  import { chainEventHandlers } from "../utils/chainEventHandlers.js";
49
50
  import { joinAriaIDs } from "../utils/inputAria.js";
50
51
  import { DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_WEEKDAY_ONLY, plainDateFormat, plainDateFromISO, plainDateToday } from "../utils/plainDate.js";
@@ -417,8 +418,8 @@ export function TouchDateTimeField({
417
418
  }, [selectedDate, locale]);
418
419
  const timeDisplayValue = useMemo(() => {
419
420
  const displayTime = normalizedValueTime ?? draftTime;
420
- return displayTime ? (hourFormat === '12h' ? formatDisplayTime12h : formatDisplayTime24h)(displayTime, hasSeconds) : '';
421
- }, [draftTime, normalizedValueTime, hourFormat, hasSeconds]);
421
+ return displayTime ? formatLocaleTime(displayTime, locale, hourFormat, hasSeconds) : '';
422
+ }, [draftTime, normalizedValueTime, locale, hourFormat, hasSeconds]);
422
423
  const timeBoundsForDate = useCallback(date => ({
423
424
  min: date != null && minParts.date === date && minParts.time ? minParts.time : undefined,
424
425
  max: date != null && maxParts.date === date && maxParts.time ? maxParts.time : undefined
@@ -48,6 +48,7 @@
48
48
  * SYNC: When modified, update these files to stay in sync:
49
49
  * - /packages/core/src/Drawer/Drawer.doc.mjs (props table, features, usage)
50
50
  * - /packages/core/src/Drawer/Drawer.test.tsx (tests for new/changed behavior)
51
+ * - /packages/core/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts (the page beside a non-modal drawer scrolls)
51
52
  * - /packages/core/src/Drawer/Drawer.spec.md (component contract)
52
53
  * - /packages/core/src/Drawer/index.ts (exports if types change)
53
54
  * - /packages/cli/assets/templates/blocks/components/Drawer/ (showcase blocks)
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../src/Drawer/Drawer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAgB7C,OAAO,KAAK,EAAC,WAAW,EAAe,MAAM,WAAW,CAAC;AAgMzD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAExC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QACb;;;;;;WAMG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,YAAY,EACZ,IAAY,EACZ,KAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAe,EACf,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,+BAmLb;yBArMe,MAAM"}
1
+ {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../src/Drawer/Drawer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAgB7C,OAAO,KAAK,EAAC,WAAW,EAAe,MAAM,WAAW,CAAC;AAqMzD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAExC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QACb;;;;;;WAMG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,YAAY,EACZ,IAAY,EACZ,KAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAe,EACf,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,+BAmLb;yBArMe,MAAM"}
@@ -52,6 +52,7 @@
52
52
  * SYNC: When modified, update these files to stay in sync:
53
53
  * - /packages/core/src/Drawer/Drawer.doc.mjs (props table, features, usage)
54
54
  * - /packages/core/src/Drawer/Drawer.test.tsx (tests for new/changed behavior)
55
+ * - /packages/core/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts (the page beside a non-modal drawer scrolls)
55
56
  * - /packages/core/src/Drawer/Drawer.spec.md (component contract)
56
57
  * - /packages/core/src/Drawer/index.ts (exports if types change)
57
58
  * - /packages/cli/assets/templates/blocks/components/Drawer/ (showcase blocks)
@@ -101,8 +102,7 @@ const styles = {
101
102
  kXwgrk: "xdt5ytf",
102
103
  kWkggS: "x10xzikg",
103
104
  kGVxlE: "x1kcpxr7",
104
- kVQacm: "xb3r6kr",
105
- kZeWKH: "xish69e",
105
+ kVQacm: "x7giv3",
106
106
  kI3sdo: "x1a2a7pz",
107
107
  k87sOh: "x13vifvy",
108
108
  krVfgx: "x1ey2m1c",
@@ -0,0 +1,27 @@
1
+ /** Runs `operation`, counting it as one of the layers' own popover operations in `doc`. */
2
+ export declare function runPopoverOperation(doc: Document, operation: () => void): void;
3
+ /** Whether one of the layers' own shows or hides is running in `doc`: a show asked now would be refused. */
4
+ export declare function isPopoverOperationInFlight(doc: Document): boolean;
5
+ /**
6
+ * Whether a hide the browser runs itself is counted in `doc`. The count
7
+ * outlasts the engine's own window (it ends at the element's `toggle`, a task
8
+ * later), so a show asked inside it may well succeed; one the browser refuses
9
+ * is deferred to the count's end.
10
+ */
11
+ export declare function isBrowserHideInFlight(doc: Document): boolean;
12
+ /**
13
+ * Counts a hide the browser runs itself. Called as the element's `beforetoggle`
14
+ * fires, which the hide dispatches synchronously as it starts; the count ends
15
+ * at the element's `toggle`, which the browser queues for the task after the
16
+ * hide, and in any case at the next task: the hide is synchronous, so the task
17
+ * after it is past the window even when the element has left the document and
18
+ * its `toggle` never arrives. Calling it again for the same hide is a no-op.
19
+ */
20
+ export declare function observeBrowserHide(popover: HTMLElement): void;
21
+ /**
22
+ * Runs `callback` once no popover operation of either kind is in flight in
23
+ * `doc`: at once when none is, otherwise in its own microtask after the last
24
+ * one has ended and the script that started it has unwound.
25
+ */
26
+ export declare function afterPopoverOperations(doc: Document, callback: () => void): void;
27
+ //# sourceMappingURL=popoverOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popoverOperations.d.ts","sourceRoot":"","sources":["../../src/Layer/popoverOperations.ts"],"names":[],"mappings":"AAoFA,2FAA2F;AAC3F,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,MAAM,IAAI,GACpB,IAAI,CAQN;AAED,4GAA4G;AAC5G,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAE5D;AAKD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA0B7D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,MAAM,IAAI,GACnB,IAAI,CAWN"}