@astryxdesign/core 0.5.0-canary.c4e6328 → 0.5.0-canary.cac77bc

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 (106) hide show
  1. package/dist/Calendar/Calendar.js +1 -1
  2. package/dist/Calendar/styles.d.ts +5 -14
  3. package/dist/Calendar/styles.d.ts.map +1 -1
  4. package/dist/Calendar/styles.js +15 -15
  5. package/dist/Card/Card.d.ts +6 -9
  6. package/dist/Card/Card.d.ts.map +1 -1
  7. package/dist/Card/Card.js +6 -6
  8. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  9. package/dist/CodeBlock/CodeBlock.js +15 -4
  10. package/dist/CodeBlock/highlightRanges.js +1 -1
  11. package/dist/CodeBlock/highlightStyles.js +13 -13
  12. package/dist/DateInput/NativeDateField.d.ts.map +1 -1
  13. package/dist/DateInput/NativeDateField.js +23 -6
  14. package/dist/DateInput/nativeDateSegments.d.ts +22 -0
  15. package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
  16. package/dist/DateInput/nativeDateSegments.js +111 -0
  17. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  18. package/dist/HoverCard/useHoverCard.js +5 -1
  19. package/dist/MultiSelector/MultiSelector.d.ts +18 -1
  20. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  21. package/dist/MultiSelector/MultiSelector.js +46 -5
  22. package/dist/NavIcon/NavIcon.d.ts.map +1 -1
  23. package/dist/NavIcon/NavIcon.js +5 -1
  24. package/dist/NumberInput/NumberInput.d.ts +1 -0
  25. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  26. package/dist/NumberInput/NumberInput.js +27 -37
  27. package/dist/NumberInput/numberParser.d.ts +64 -0
  28. package/dist/NumberInput/numberParser.d.ts.map +1 -0
  29. package/dist/NumberInput/numberParser.js +350 -0
  30. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  31. package/dist/ProgressBar/ProgressBar.js +18 -5
  32. package/dist/Selector/Selector.d.ts +17 -0
  33. package/dist/Selector/Selector.d.ts.map +1 -1
  34. package/dist/Selector/Selector.js +71 -13
  35. package/dist/SideNav/SideNavHeading.js +2 -2
  36. package/dist/Slider/Slider.d.ts.map +1 -1
  37. package/dist/Slider/Slider.js +34 -2
  38. package/dist/StatusDot/StatusDot.d.ts.map +1 -1
  39. package/dist/StatusDot/StatusDot.js +6 -1
  40. package/dist/Table/BaseTable.d.ts.map +1 -1
  41. package/dist/Table/BaseTable.js +6 -1
  42. package/dist/Table/Table.d.ts.map +1 -1
  43. package/dist/Table/Table.js +3 -6
  44. package/dist/TextArea/TextArea.d.ts.map +1 -1
  45. package/dist/TextArea/TextArea.js +6 -1
  46. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  47. package/dist/Toast/ToastViewport.js +27 -8
  48. package/dist/TopNav/TopNavHeading.js +2 -2
  49. package/dist/astryx.css +3 -1
  50. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  51. package/dist/theme/derivedVarRegistry.js +20 -4
  52. package/locales/en.json +10 -2
  53. package/locales/pseudo.json +6 -0
  54. package/package.json +2 -2
  55. package/src/Calendar/Calendar.test.tsx +51 -0
  56. package/src/Calendar/Calendar.tsx +1 -1
  57. package/src/Calendar/styles.ts +49 -31
  58. package/src/Card/Card.doc.mjs +10 -7
  59. package/src/Card/Card.test.tsx +44 -19
  60. package/src/Card/Card.tsx +12 -32
  61. package/src/CodeBlock/CodeBlock.doc.mjs +10 -4
  62. package/src/CodeBlock/CodeBlock.test.tsx +37 -0
  63. package/src/CodeBlock/CodeBlock.tsx +20 -4
  64. package/src/CodeBlock/highlightRanges.ts +1 -1
  65. package/src/CodeBlock/highlightStyles.ts +13 -13
  66. package/src/DateInput/NativeDateField.test.tsx +100 -30
  67. package/src/DateInput/NativeDateField.tsx +24 -6
  68. package/src/DateInput/nativeDateSegments.ts +127 -0
  69. package/src/HoverCard/HoverCard.doc.mjs +8 -2
  70. package/src/HoverCard/HoverCard.test.tsx +17 -0
  71. package/src/HoverCard/useHoverCard.tsx +5 -1
  72. package/src/MultiSelector/MultiSelector.doc.mjs +22 -1
  73. package/src/MultiSelector/MultiSelector.test.tsx +171 -0
  74. package/src/MultiSelector/MultiSelector.tsx +92 -5
  75. package/src/NavIcon/NavIcon.doc.mjs +8 -2
  76. package/src/NavIcon/NavIcon.test.tsx +9 -0
  77. package/src/NavIcon/NavIcon.tsx +5 -1
  78. package/src/NumberInput/NumberInput.doc.mjs +15 -0
  79. package/src/NumberInput/NumberInput.tsx +28 -29
  80. package/src/NumberInput/numberParser.docblock.test.ts +234 -0
  81. package/src/NumberInput/numberParser.test.ts +222 -0
  82. package/src/NumberInput/numberParser.ts +403 -0
  83. package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
  84. package/src/ProgressBar/ProgressBar.test.tsx +24 -0
  85. package/src/ProgressBar/ProgressBar.tsx +28 -8
  86. package/src/Selector/Selector.doc.mjs +14 -0
  87. package/src/Selector/Selector.test.tsx +217 -0
  88. package/src/Selector/Selector.tsx +123 -14
  89. package/src/SideNav/SideNavHeading.tsx +2 -2
  90. package/src/Slider/Slider.test.tsx +106 -1
  91. package/src/Slider/Slider.tsx +52 -1
  92. package/src/StatusDot/StatusDot.doc.mjs +8 -2
  93. package/src/StatusDot/StatusDot.test.tsx +9 -0
  94. package/src/StatusDot/StatusDot.tsx +7 -1
  95. package/src/Table/BaseTable.tsx +6 -1
  96. package/src/Table/Table.doc.mjs +3 -1
  97. package/src/Table/Table.tsx +3 -8
  98. package/src/TextArea/TextArea.doc.mjs +8 -2
  99. package/src/TextArea/TextArea.test.tsx +11 -0
  100. package/src/TextArea/TextArea.tsx +12 -6
  101. package/src/Toast/ToastViewport.tsx +17 -1
  102. package/src/TopNav/TopNavHeading.tsx +2 -2
  103. package/src/raw-import.d.ts +14 -0
  104. package/src/theme/derivedVarRegistry.test.ts +18 -3
  105. package/src/theme/derivedVarRegistry.ts +22 -4
  106. package/src/theme/generateThemeRules.test.ts +37 -0
@@ -261,7 +261,7 @@ export function Calendar({
261
261
  if (plainDateIsEqual(date, startPd)) {
262
262
  setRangeSelectionStart(null);
263
263
  announce(t('@astryx.calendar.rangeClearedAnnounce', {
264
- date: plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY)
264
+ date: plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY, locale)
265
265
  }));
266
266
  return;
267
267
  }
@@ -33,19 +33,9 @@ export declare const calendarStyles: Readonly<{
33
33
  }>;
34
34
  readonly monthsContainer: Readonly<{
35
35
  readonly display: stylex.StyleXClassNameFor<"display", "flex">;
36
+ readonly flexWrap: stylex.StyleXClassNameFor<"flexWrap", "wrap">;
36
37
  readonly gap: stylex.StyleXClassNameFor<"gap", "16px">;
37
38
  }>;
38
- readonly srOnly: Readonly<{
39
- readonly position: stylex.StyleXClassNameFor<"position", "absolute">;
40
- readonly width: stylex.StyleXClassNameFor<"width", "1px">;
41
- readonly height: stylex.StyleXClassNameFor<"height", "1px">;
42
- readonly padding: stylex.StyleXClassNameFor<"padding", 0>;
43
- readonly margin: stylex.StyleXClassNameFor<"margin", "-1px">;
44
- readonly overflow: stylex.StyleXClassNameFor<"overflow", "hidden">;
45
- readonly clip: stylex.StyleXClassNameFor<"clip", "rect(0, 0, 0, 0)">;
46
- readonly whiteSpace: stylex.StyleXClassNameFor<"whiteSpace", "nowrap">;
47
- readonly borderWidth: stylex.StyleXClassNameFor<"borderWidth", 0>;
48
- }>;
49
39
  readonly navIcon: Readonly<{
50
40
  readonly display: stylex.StyleXClassNameFor<"display", "inline-flex">;
51
41
  }>;
@@ -154,7 +144,7 @@ export declare const dayCellStyles: Readonly<{
154
144
  readonly display: stylex.StyleXClassNameFor<"display", "flex">;
155
145
  readonly alignItems: stylex.StyleXClassNameFor<"alignItems", "center">;
156
146
  readonly justifyContent: stylex.StyleXClassNameFor<"justifyContent", "center">;
157
- readonly borderRadius: stylex.StyleXClassNameFor<"borderRadius", "50%">;
147
+ readonly borderRadius: stylex.StyleXClassNameFor<"borderRadius", "9999px">;
158
148
  readonly borderWidth: stylex.StyleXClassNameFor<"borderWidth", 0>;
159
149
  readonly borderStyle: stylex.StyleXClassNameFor<"borderStyle", "none">;
160
150
  readonly cursor: stylex.StyleXClassNameFor<"cursor", "default" | "pointer">;
@@ -209,8 +199,9 @@ export declare const dayCellTheme: Readonly<{
209
199
  readonly boxShadow: stylex.StyleXClassNameFor<"boxShadow", `inset 0 0 0 1px ${stylex.StyleXVar<"light-dark(#0A1317, #DFE2E5)">}`>;
210
200
  }>;
211
201
  readonly daySelected: Readonly<{
212
- readonly backgroundColor: stylex.StyleXClassNameFor<"backgroundColor", "light-dark(#0064E0, #2694FE)">;
213
- readonly color: stylex.StyleXClassNameFor<"color", "light-dark(#FFFFFF, #FFFFFF)">;
202
+ readonly forcedColorAdjust: stylex.StyleXClassNameFor<"forcedColorAdjust", "none">;
203
+ readonly backgroundColor: stylex.StyleXClassNameFor<"backgroundColor", "light-dark(#0064E0, #2694FE)" | "Highlight">;
204
+ readonly color: stylex.StyleXClassNameFor<"color", "light-dark(#FFFFFF, #FFFFFF)" | "HighlightText">;
214
205
  readonly backgroundImage: stylex.StyleXClassNameFor<"backgroundImage", {
215
206
  readonly '@media (hover: hover)': `linear-gradient(${stylex.StyleXVar<"light-dark(#0536590C, #FFFFFF0C)">}, ${stylex.StyleXVar<"light-dark(#0536590C, #FFFFFF0C)">})`;
216
207
  } | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Calendar/styles.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAgB3C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CzB,CAAC;AAMH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC1B,CAAC;AAMH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+GxB,CAAC;AAMH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DvB,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Calendar/styles.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAgB3C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCzB,CAAC;AAMH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC1B,CAAC;AAiBH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+GxB,CAAC;AAMH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0EvB,CAAC"}
@@ -46,21 +46,10 @@ export const calendarStyles = {
46
46
  },
47
47
  monthsContainer: {
48
48
  k1xSpc: "x78zum5",
49
+ kwnvtZ: "x1a02dak",
49
50
  kOIVth: "x18g69wz",
50
51
  $$css: true
51
52
  },
52
- srOnly: {
53
- kVAEAm: "x10l6tqk",
54
- kzqmXN: "x1i1rx1s",
55
- kZKoxP: "xjm9jq1",
56
- kmVPX3: "x1717udv",
57
- kogj98: "xkdpibf",
58
- kVQacm: "xb3r6kr",
59
- kMcinP: "xzpqnlu",
60
- khDVqt: "xuxw1ft",
61
- kMzoRj: "xc342km",
62
- $$css: true
63
- },
64
53
  navIcon: {
65
54
  k1xSpc: "x3nfvp2",
66
55
  $$css: true
@@ -122,6 +111,16 @@ export const monthGridStyles = {
122
111
  // Day Cell Styles - Structural (layout, sizing, positioning)
123
112
  // =============================================================================
124
113
 
114
+ // Half the gap between the day button and its cell — (--size-element-md minus
115
+ // --size-element-sm) / 2 — so the band's rounded caps line up with the button
116
+ // and the button's ::before bleeds out to meet its neighbour's. Deliberately a
117
+ // literal and NOT a spacing token: this is a layout value derived from the two
118
+ // size tokens, and pinning it to --spacing-0-5 desynchronises it from them
119
+ // (matcha sets that step to 3px, which overlaps adjacent days' hit targets by
120
+ // 2px). Deriving it with calc() from the size tokens would be better still and
121
+ // would close butter's 4px dead gap; that needs its own measured change.
122
+ const BAND_INSET = '2px';
123
+ const HIT_BLEED = '-2px';
125
124
  export const dayCellStyles = {
126
125
  cell: {
127
126
  kVAEAm: "x1n2onr6",
@@ -198,7 +197,7 @@ export const dayCellStyles = {
198
197
  k1xSpc: "x78zum5",
199
198
  kGNEyG: "x6s0dn4",
200
199
  kjj79g: "xl56j7k",
201
- kaIpWk: "x16rqkct",
200
+ kaIpWk: "xjspbzw",
202
201
  kMzoRj: "xc342km",
203
202
  ksu8eU: "xng3xce",
204
203
  kkrTdU: "x1ypdohk x16khyan",
@@ -269,8 +268,9 @@ export const dayCellTheme = {
269
268
  $$css: true
270
269
  },
271
270
  daySelected: {
272
- kWkggS: "x1ewilqj",
273
- kMwMTN: "x17wrial",
271
+ kAXs8y: "x1kzknox",
272
+ kWkggS: "x1ewilqj x1jzqe4",
273
+ kMwMTN: "x17wrial x1k5gbb1",
274
274
  kKwaWg: "xmvprkv",
275
275
  $$css: true
276
276
  },
@@ -30,14 +30,6 @@ export type CardVariant = 'default' | 'transparent' | 'muted' | 'blue' | 'cyan'
30
30
  export type { SizeValue } from '../utils/types';
31
31
  export interface CardProps extends BaseProps<HTMLDivElement> {
32
32
  ref?: React.Ref<HTMLDivElement>;
33
- /**
34
- * CSS class name(s) appended to the root element.
35
- */
36
- className?: string;
37
- /**
38
- * Inline styles to apply to the root element.
39
- */
40
- style?: React.CSSProperties;
41
33
  /**
42
34
  * Width of the card.
43
35
  * Numbers are treated as pixels, strings are used as-is.
@@ -66,7 +58,12 @@ export interface CardProps extends BaseProps<HTMLDivElement> {
66
58
  /**
67
59
  * Internal padding of the card using the spacing scale.
68
60
  * Accepts numeric spacing steps: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10.
69
- * @default 4 (16px)
61
+ *
62
+ * Omit it and the card takes the theme's card padding rather than a step, so
63
+ * passing a step is a decision to override the theme, not a way to restate
64
+ * the default.
65
+ *
66
+ * @default the theme's card padding (spacing step 4 with no theme)
70
67
  */
71
68
  padding?: SpacingStep;
72
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/Card/Card.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAiBrC,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,aAAa,GACb,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,QAAQ,CAAC;AA2Gb,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BA2DX;yBAzEe,IAAI"}
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/Card/Card.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAWrC,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,aAAa,GACb,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,QAAQ,CAAC;AA2Gb,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BAgDX;yBA9De,IAAI"}
package/dist/Card/Card.js CHANGED
@@ -17,7 +17,7 @@ import * as stylex from '@stylexjs/stylex';
17
17
  import "../theme/tokens.stylex.js";
18
18
  import { borderVars, colorVars, radiusVars, shadowVars } from "../theme/tokens.stylex.js";
19
19
  import { container } from "../Layout/container.stylex.js";
20
- import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles, spacingStepToToken } from "../Layout/padding.stylex.js";
20
+ import { spacingStepToToken } from "../Layout/padding.stylex.js";
21
21
  import { mergeProps } from "../utils/index.js";
22
22
  import { themeProps } from "../utils/themeProps.js";
23
23
 
@@ -216,20 +216,20 @@ export function Card({
216
216
 
217
217
  // When no explicit padding prop, use theme default (set via container tokens)
218
218
  const useThemeDefault = padding == null;
219
- const effectivePadding = padding ?? 4;
220
- const paddingToken = spacingStepToToken[effectivePadding];
219
+ const paddingToken = useThemeDefault ? undefined : spacingStepToToken[padding];
221
220
  return /*#__PURE__*/_jsx("div", {
222
221
  ref: ref,
223
222
  ...mergeProps(themeProps('card', {
224
- variant
225
- }), stylex.props(styles.card, variantStyles[variant], elevationStyles[elevation], hasFixedHeight && styles.scrollable, dynamicStyles.sizing(width ?? null, height ?? null, maxWidth ?? null, minHeight ?? null), ...container(useThemeDefault ? {
223
+ variant,
224
+ elevation
225
+ }), stylex.props(styles.card, variantStyles[variant], elevationStyles[elevation], hasFixedHeight && styles.scrollable, dynamicStyles.sizing(width ?? null, height ?? null, maxWidth ?? null, minHeight ?? null), ...container(paddingToken == null ? {
226
226
  useThemeDefault: 'card'
227
227
  } : {
228
228
  paddingInnerX: paddingToken,
229
229
  paddingInnerY: paddingToken,
230
230
  paddingOuterX: paddingToken,
231
231
  paddingOuterY: paddingToken
232
- }), !useThemeDefault && effectivePadding !== 4 && paddingStyles[effectivePadding], !useThemeDefault && effectivePadding !== 4 && containerPaddingInlineVarStyles[effectivePadding], !useThemeDefault && effectivePadding !== 4 && containerPaddingBlockStartVarStyles[effectivePadding], !useThemeDefault && effectivePadding !== 4 && containerPaddingBlockEndVarStyles[effectivePadding],
232
+ }),
233
233
  // Applied after the container padding so the border-inset calc wins;
234
234
  // it reads the --container-padding-* vars set above.
235
235
  variant === 'default' && styles.withBorder, xstyle), className, style),
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.d.ts","sourceRoot":"","sources":["../../src/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6B5C,OAAO,EAAc,KAAK,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AA2WxE,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,KACb;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAsB,EACtB,KAAK,EACL,gBAAuB,EACvB,cAAsB,EACtB,cAAc,EACd,aAAoB,EACpB,MAAM,EACN,SAAiB,EACjB,SAAS,EACT,aAAqB,EACrB,oBAAyB,EACzB,IAAW,EACX,KAAK,EAAE,SAAyB,EAChC,SAAkB,EAClB,SAAS,EAAE,eAAe,EAC1B,aAAsB,EACtB,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,qBA6NhB;yBArPe,SAAS"}
1
+ {"version":3,"file":"CodeBlock.d.ts","sourceRoot":"","sources":["../../src/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6B5C,OAAO,EAAc,KAAK,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AA2WxE,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,KACb;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAsB,EACtB,KAAK,EACL,gBAAuB,EACvB,cAAsB,EACtB,cAAc,EACd,aAAoB,EACpB,MAAM,EACN,SAAiB,EACjB,SAAS,EACT,aAAqB,EACrB,oBAAyB,EACzB,IAAW,EACX,KAAK,EAAE,SAAyB,EAChC,SAAkB,EAClB,SAAS,EAAE,eAAe,EAC1B,aAAsB,EACtB,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,qBA6OhB;yBArQe,SAAS"}
@@ -510,13 +510,17 @@ export function CodeBlock({
510
510
  void handleCopy();
511
511
  },
512
512
  xstyle: [styles.copyButton, !showHeader && styles.copyButtonAbsolute],
513
- ...themeProps('codeblock-copy-button')
513
+ ...themeProps('code-block-copy-button', undefined, {
514
+ legacyNames: ['codeblock-copy-button']
515
+ })
514
516
  }) : null;
515
517
  const headerEl = showHeader ? /*#__PURE__*/_jsxs("div", {
516
- ...mergeProps(themeProps('codeblock-header', {
518
+ ...mergeProps(themeProps('code-block-header', {
517
519
  size,
518
520
  language,
519
521
  container
522
+ }, {
523
+ legacyNames: ['codeblock-header']
520
524
  }), {
521
525
  0: {
522
526
  className: "x78zum5 x6s0dn4 x1qughib x1pzlopt xzyc27v x7wzq59 x13vifvy x1vjfegm xce4md1"
@@ -539,9 +543,11 @@ export function CodeBlock({
539
543
  } : undefined,
540
544
  ...focusOutlineProps.focusVisible(styles.header, canCollapse && styles.headerCollapsible),
541
545
  children: /*#__PURE__*/_jsxs("span", {
542
- ...mergeProps(themeProps('codeblock-title', {
546
+ ...mergeProps(themeProps('code-block-title', {
543
547
  size,
544
548
  language
549
+ }, {
550
+ legacyNames: ['codeblock-title']
545
551
  }), {
546
552
  className: "x78zum5 x6s0dn4 x141an7d x9m5x89 x1e4wzip x1mjzq1q x1ghz6dp x1ltkj2j"
547
553
  }),
@@ -604,10 +610,15 @@ export function CodeBlock({
604
610
  });
605
611
  const block = /*#__PURE__*/_jsxs("pre", {
606
612
  ref: ref,
607
- ...mergeProps(themeProps('codeblock', {
613
+ ...mergeProps(themeProps('code-block', {
608
614
  size,
609
615
  language,
610
616
  container
617
+ },
618
+ // `codeblock` ran the compound name together; themes styling it keep
619
+ // working until the next major.
620
+ {
621
+ legacyNames: ['codeblock']
611
622
  }), stylex.props(styles.root, dynamicStyles.width(widthProp), containerStyles[container], xstyle), className, style),
612
623
  ...props,
613
624
  children: [headerEl, canCollapse ? /*#__PURE__*/_jsx("div", {
@@ -54,7 +54,7 @@ function ensureDynamicHighlightType(tokenType) {
54
54
  }
55
55
  const name = `astryx-${tokenType}`;
56
56
  const colorVar = `var(--color-syntax-${tokenType}, currentColor)`;
57
- dynamicStyleSheet.insertRule(`.astryx-codeblock code::highlight(${name}), .astryx-codeeditor code::highlight(${name}) { color: ${colorVar}; }`);
57
+ dynamicStyleSheet.insertRule(`.astryx-code-block code::highlight(${name}), .astryx-codeeditor code::highlight(${name}) { color: ${colorVar}; }`);
58
58
  }
59
59
 
60
60
  // ---------------------------------------------------------------------------
@@ -28,31 +28,31 @@ const FALLBACK_TOKENS = `:root {\n${Object.entries(syntaxTokenDefaults).map(([na
28
28
  const HIGHLIGHT_STYLES = `
29
29
  ${FALLBACK_TOKENS}
30
30
 
31
- .astryx-codeblock code::highlight(astryx-keyword),
31
+ .astryx-code-block code::highlight(astryx-keyword),
32
32
  .astryx-codeeditor code::highlight(astryx-keyword) { color: var(--color-syntax-keyword); }
33
- .astryx-codeblock code::highlight(astryx-string),
33
+ .astryx-code-block code::highlight(astryx-string),
34
34
  .astryx-codeeditor code::highlight(astryx-string) { color: var(--color-syntax-string); }
35
- .astryx-codeblock code::highlight(astryx-comment),
35
+ .astryx-code-block code::highlight(astryx-comment),
36
36
  .astryx-codeeditor code::highlight(astryx-comment) { color: var(--color-syntax-comment); }
37
- .astryx-codeblock code::highlight(astryx-number),
37
+ .astryx-code-block code::highlight(astryx-number),
38
38
  .astryx-codeeditor code::highlight(astryx-number) { color: var(--color-syntax-number); }
39
- .astryx-codeblock code::highlight(astryx-function),
39
+ .astryx-code-block code::highlight(astryx-function),
40
40
  .astryx-codeeditor code::highlight(astryx-function) { color: var(--color-syntax-function); }
41
- .astryx-codeblock code::highlight(astryx-type),
41
+ .astryx-code-block code::highlight(astryx-type),
42
42
  .astryx-codeeditor code::highlight(astryx-type) { color: var(--color-syntax-type); }
43
- .astryx-codeblock code::highlight(astryx-tag),
43
+ .astryx-code-block code::highlight(astryx-tag),
44
44
  .astryx-codeeditor code::highlight(astryx-tag) { color: var(--color-syntax-tag); }
45
- .astryx-codeblock code::highlight(astryx-attribute),
45
+ .astryx-code-block code::highlight(astryx-attribute),
46
46
  .astryx-codeeditor code::highlight(astryx-attribute) { color: var(--color-syntax-attribute); }
47
- .astryx-codeblock code::highlight(astryx-property),
47
+ .astryx-code-block code::highlight(astryx-property),
48
48
  .astryx-codeeditor code::highlight(astryx-property) { color: var(--color-syntax-property); }
49
- .astryx-codeblock code::highlight(astryx-operator),
49
+ .astryx-code-block code::highlight(astryx-operator),
50
50
  .astryx-codeeditor code::highlight(astryx-operator) { color: var(--color-syntax-operator); }
51
- .astryx-codeblock code::highlight(astryx-constant),
51
+ .astryx-code-block code::highlight(astryx-constant),
52
52
  .astryx-codeeditor code::highlight(astryx-constant) { color: var(--color-syntax-constant); }
53
- .astryx-codeblock code::highlight(astryx-punctuation),
53
+ .astryx-code-block code::highlight(astryx-punctuation),
54
54
  .astryx-codeeditor code::highlight(astryx-punctuation) { color: var(--color-syntax-punctuation); }
55
- .astryx-codeblock code::highlight(astryx-variable),
55
+ .astryx-code-block code::highlight(astryx-variable),
56
56
  .astryx-codeeditor code::highlight(astryx-variable) { color: var(--color-syntax-variable); }
57
57
 
58
58
  /* Span-based fallback classes — used when highlightMode='spans' or
@@ -1 +1 @@
1
- {"version":3,"file":"NativeDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/NativeDateField.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAwLhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAGhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,aAAa,EAC3B,MAAoB,EACpB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAmXhB;yBAlZe,eAAe"}
1
+ {"version":3,"file":"NativeDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/NativeDateField.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA0LhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAGhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,aAAa,EAC3B,MAAoB,EACpB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAkYhB;yBAjae,eAAe"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file NativeDateField.tsx
7
- * @input Uses React, Field, Icon, InputClearButton, Spinner, useCalendarConstraints
7
+ * @input Uses React, Field, Icon, InputClearButton, Spinner, useCalendarConstraints, hasEditableDateSegments
8
8
  * @output Exports NativeDateField — the OS-picker touch surface
9
9
  * @position One of DateInput's three surfaces. `DateInput` picks the pointer
10
10
  * field on a mouse and, on touch, either `TouchDateField` (the default) or
@@ -22,13 +22,16 @@
22
22
  * SYNC: When modified, update these files to stay in sync:
23
23
  * - /packages/core/src/DateInput/DateInput.tsx (the `nativePicker` prop)
24
24
  * - /packages/core/src/DateInput/DateInput.doc.mjs (prop table)
25
- * - /packages/core/src/DateInput/DateInputNative.test.tsx (tests)
25
+ * - /packages/core/src/DateInput/nativeDateSegments.ts (the engine probe)
26
+ * - /packages/core/src/DateInput/NativeDateField.test.tsx (tests)
26
27
  */
27
28
  import { useCallback, useEffect, useId, useRef, useState } from 'react';
28
29
  import * as stylex from '@stylexjs/stylex';
29
30
  import { useCalendarConstraints } from "../Calendar/index.js";
31
+ import { hasEditableDateSegments } from "./nativeDateSegments.js";
30
32
  import { Field, InputClearButton, inputStatusBorderStyles, inputStatusFocusWithinStyles, inputStatusHoverShadowStyles, inputWrapperStyles } from "../Field/index.js";
31
33
  import { useInputStatusIcon, useMergedRefs } from "../hooks/index.js";
34
+ import { useMediaQuery } from "../hooks/useMediaQuery.js";
32
35
  import { useResolvedRequired } from "../hooks/useResolvedRequired.js";
33
36
  import { Icon } from "../Icon/index.js";
34
37
  import { useLocale, useTranslator } from "../i18n/index.js";
@@ -129,6 +132,8 @@ export function NativeDateField({
129
132
  });
130
133
  const placeholder = placeholderFromProps ?? t('@astryx.dateInput.placeholder');
131
134
  const size = useSize(sizeProp, 'md');
135
+ // Only breaks a tie the engine probe cannot: see ./nativeDateSegments.
136
+ const isTouchPointer = useMediaQuery('(pointer: coarse)');
132
137
  const id = useId();
133
138
  const inputLabelID = useId();
134
139
  const descriptionID = useId();
@@ -173,6 +178,10 @@ export function NativeDateField({
173
178
  // Whether the control has focus — which, on a touch device, means its
174
179
  // picker is open.
175
180
  const [isFocused, setIsFocused] = useState(false);
181
+ // Whether the engine draws this control as editable segments rather than a
182
+ // picker-only run. Latched on focus rather than read during render: the
183
+ // probe touches the DOM, and unfocused the answer changes nothing.
184
+ const [isSegmentEditable, setIsSegmentEditable] = useState(false);
176
185
  // The raw value the control last reported and we acted on, so the same edit
177
186
  // arriving through both commit paths only fires one change.
178
187
  const lastCommitRef = useRef(null);
@@ -192,10 +201,14 @@ export function NativeDateField({
192
201
  const formatValue = useCallback(iso => typeof format === 'function' ? format(iso) : formatSharedDate(plainDateFromISO(iso), format, locale), [format, locale]);
193
202
 
194
203
  // This field paints the closed control's text itself, which is what keeps
195
- // `format` and `placeholder` applying: the OS picker has no segments to
196
- // edit, so our text holds even while the picker is open, and tracks it live.
204
+ // `format` and `placeholder` applying: a picker-only control has no
205
+ // segments to edit, so our text holds even while the picker is open, and
206
+ // tracks it live. An editable control is the opposite case — its text IS
207
+ // the edit surface, and it reports no `value` until every segment is
208
+ // filled, so the overlay has nothing to paint mid-edit — so step aside for
209
+ // as long as it has focus. See ./nativeDateSegments.
197
210
  const overlayText = nativeValue ? formatValue(nativeValue) : placeholder;
198
- const showsOverlay = !!overlayText;
211
+ const showsOverlay = !!overlayText && !(isFocused && isSegmentEditable);
199
212
  const commitValue = useCallback(newValue => {
200
213
  if (isEffectivelyDisabled) {
201
214
  return;
@@ -286,6 +299,10 @@ export function NativeDateField({
286
299
  input.value = nativeValue;
287
300
  }
288
301
  }, [isFocused, nativeValue]);
302
+ const handleFocus = useCallback(() => {
303
+ setIsSegmentEditable(hasEditableDateSegments(isTouchPointer));
304
+ setIsFocused(true);
305
+ }, [isTouchPointer]);
289
306
  const handleBlur = useCallback(() => {
290
307
  const domValue = inputRef.current?.value;
291
308
  setIsFocused(false);
@@ -368,7 +385,7 @@ export function NativeDateField({
368
385
  ,
369
386
  defaultValue: initialValueRef.current ?? '',
370
387
  onChange: handleChange,
371
- onFocus: () => setIsFocused(true),
388
+ onFocus: handleFocus,
372
389
  onBlur: handleBlur,
373
390
  min: min,
374
391
  max: max,
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Whether the user can type into this engine's `<input type="date">`.
3
+ *
4
+ * Firefox exposes neither pseudo-element, so it — and any future engine —
5
+ * comes back `'unknown'` and the pointer breaks the tie. That is the right
6
+ * fallback precisely where the probe is blind: the pointer is wrong for
7
+ * Chromium because Blink's answer is fixed at build time and contradicts it,
8
+ * and an engine we cannot see is not in that position. It lands Firefox on
9
+ * the desktop (segmented) and on Android (picker-only) correctly.
10
+ *
11
+ * @param isTouchPointer Whether `(pointer: coarse)` matches.
12
+ * @internal Exported for tests.
13
+ */
14
+ export declare function hasEditableDateSegments(isTouchPointer: boolean): boolean;
15
+ /**
16
+ * Drops the cached classification.
17
+ *
18
+ * @internal Exists for tests, which render against several engines in one
19
+ * document.
20
+ */
21
+ export declare function resetDateSegmentProbe(): void;
22
+ //# sourceMappingURL=nativeDateSegments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDateSegments.d.ts","sourceRoot":"","sources":["../../src/DateInput/nativeDateSegments.ts"],"names":[],"mappings":"AAoGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,OAAO,GAAG,OAAO,CAGxE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,111 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file nativeDateSegments.ts
7
+ * @input Uses the DOM only
8
+ * @output Exports hasEditableDateSegments, resetDateSegmentProbe
9
+ * @position Internal helper for NativeDateField; answers "can the user type
10
+ * into this engine's `<input type="date">`?"
11
+ *
12
+ * `<input type="date">` is two different controls wearing one tag name: a
13
+ * single untypable run the OS picker drives (iOS, Android), or a row of
14
+ * editable `mm`/`dd`/`yyyy` fields (desktop engines). Hiding the first costs
15
+ * nothing; hiding the second hides what the user is editing.
16
+ *
17
+ * Neither obvious test tells them apart. The pointer is wrong on Chrome's
18
+ * touch simulator, a Windows tablet and a ChromeOS convertible, which report
19
+ * a coarse pointer while Blink still renders segments. And measured, iOS and
20
+ * Chromium BOTH accept every `-webkit-datetime-*` selector, so
21
+ * `CSS.supports('selector(...)')` only proves the parser knows the name. What
22
+ * separates them is which pseudo is a real box, so this measures that.
23
+ *
24
+ * SYNC: When modified, update these files to stay in sync:
25
+ * - /packages/core/src/DateInput/NativeDateField.tsx (the caller)
26
+ * - /packages/core/src/DateInput/NativeDateField.test.tsx (tests)
27
+ */
28
+
29
+ /** Marks the throwaway probe element for the probe stylesheet. */
30
+ const PROBE_ATTR = 'data-astryx-date-probe';
31
+
32
+ /** How much padding the probe adds, in px. Large enough to beat rounding. */
33
+ const PROBE_PADDING = 100;
34
+ let cachedEngine = null;
35
+
36
+ /** Whether padding this pseudo-element moves the control's box. */
37
+ function pseudoIsRealBox(input, style, pseudo, baseWidth) {
38
+ style.textContent = `[${PROBE_ATTR}]${pseudo}{padding-inline-start:${PROBE_PADDING}px !important}`;
39
+ // Reading geometry flushes style and layout, so this already reflects it.
40
+ return input.getBoundingClientRect().width > baseWidth + PROBE_PADDING / 2;
41
+ }
42
+
43
+ /**
44
+ * Classifies the engine's date control. Cached: the answer is a build-time
45
+ * property of the browser, not of the field or the pointer in use.
46
+ */
47
+ function probeEngine() {
48
+ if (cachedEngine !== null) {
49
+ return cachedEngine;
50
+ }
51
+ if (typeof document === 'undefined' || !document.body) {
52
+ return 'unknown';
53
+ }
54
+ const input = document.createElement('input');
55
+ input.setAttribute('type', 'date');
56
+ input.setAttribute(PROBE_ATTR, '');
57
+ // Off-screen, and immune to the page's own `input` rules: the probe reads a
58
+ // width DELTA, so anything pinning the width would swallow the signal.
59
+ input.style.cssText = 'position:fixed;top:-9999px;left:0;width:auto;min-width:0;max-width:none;' + 'padding:0;border:0;font-size:16px;box-sizing:content-box;';
60
+ const style = document.createElement('style');
61
+ let kind = 'unknown';
62
+ try {
63
+ document.body.appendChild(input);
64
+ document.head.appendChild(style);
65
+ const base = input.getBoundingClientRect().width;
66
+ if (pseudoIsRealBox(input, style, '::-webkit-datetime-edit', base)) {
67
+ // Chromium's editable field row, and WebKit's on macOS/GTK. Probe the
68
+ // container: the individual field pseudos overflow it rather than
69
+ // expand it, so they do not move the box even in Chromium.
70
+ kind = 'segmented';
71
+ } else if (pseudoIsRealBox(input, style, '::-webkit-date-and-time-value', base)) {
72
+ // The single, untypable run iOS Safari and Chrome on Android paint.
73
+ kind = 'picker-only';
74
+ }
75
+ } catch {
76
+ // A hostile CSSOM leaves the answer unknown, resolved by the pointer.
77
+ } finally {
78
+ input.remove();
79
+ style.remove();
80
+ }
81
+ cachedEngine = kind;
82
+ return kind;
83
+ }
84
+
85
+ /**
86
+ * Whether the user can type into this engine's `<input type="date">`.
87
+ *
88
+ * Firefox exposes neither pseudo-element, so it — and any future engine —
89
+ * comes back `'unknown'` and the pointer breaks the tie. That is the right
90
+ * fallback precisely where the probe is blind: the pointer is wrong for
91
+ * Chromium because Blink's answer is fixed at build time and contradicts it,
92
+ * and an engine we cannot see is not in that position. It lands Firefox on
93
+ * the desktop (segmented) and on Android (picker-only) correctly.
94
+ *
95
+ * @param isTouchPointer Whether `(pointer: coarse)` matches.
96
+ * @internal Exported for tests.
97
+ */
98
+ export function hasEditableDateSegments(isTouchPointer) {
99
+ const engine = probeEngine();
100
+ return engine === 'unknown' ? !isTouchPointer : engine === 'segmented';
101
+ }
102
+
103
+ /**
104
+ * Drops the cached classification.
105
+ *
106
+ * @internal Exists for tests, which render against several engines in one
107
+ * document.
108
+ */
109
+ export function resetDateSegmentProbe() {
110
+ cachedEngine = null;
111
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useHoverCard.d.ts","sourceRoot":"","sources":["../../src/HoverCard/useHoverCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AA6BlC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;;OAOG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,SAAS,EACnB,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAC5C,SAAS,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAyBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CA6a5E"}
1
+ {"version":3,"file":"useHoverCard.d.ts","sourceRoot":"","sources":["../../src/HoverCard/useHoverCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AA6BlC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;;OAOG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,SAAS,EACnB,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAC5C,SAAS,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAyBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAib5E"}
@@ -358,7 +358,11 @@ export function useHoverCard(options = {}) {
358
358
  // Render function that wraps layer.render with hover card behavior
359
359
  const renderHoverCard = useCallback((children, props) => {
360
360
  const renderPlacement = props?.placement ?? placement;
361
- const themeClassName = themeProps('hovercard').className;
361
+ const themeClassName = themeProps('hover-card', undefined, {
362
+ // `hovercard` ran the compound name together; themes styling it keep
363
+ // working until the next major.
364
+ legacyNames: ['hovercard']
365
+ }).className;
362
366
  const renderProps = {
363
367
  placement: renderPlacement,
364
368
  alignment: props?.alignment ?? alignment,
@@ -175,6 +175,23 @@ export interface MultiSelectorProps<T extends MultiSelectorOptionType = MultiSel
175
175
  * @default 'Search...'
176
176
  */
177
177
  searchPlaceholder?: string;
178
+ /**
179
+ * Content shown in the panel when there are no options to show, and
180
+ * announced in a polite live region when the panel opens. Not shown while
181
+ * `isLoading` — the options have not arrived yet.
182
+ * @default 'No options'
183
+ */
184
+ emptyText?: ReactNode;
185
+ /**
186
+ * Content shown in the panel when a search query matches no options, and
187
+ * announced in a polite live region at the same time.
188
+ *
189
+ * The panel message is `role="presentation"`, so the live region is the only
190
+ * route to assistive tech: a string is announced verbatim, a richer node
191
+ * falls back to the default text since it cannot be spoken.
192
+ * @default 'No results found'
193
+ */
194
+ emptySearchText?: ReactNode;
178
195
  /**
179
196
  * How to display selected items in the trigger.
180
197
  * - 'count': "3 selected"
@@ -236,7 +253,7 @@ export interface MultiSelectorProps<T extends MultiSelectorOptionType = MultiSel
236
253
  * />
237
254
  * ```
238
255
  */
239
- export declare function MultiSelector<T extends MultiSelectorOptionType>({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, options, value, onChange, changeAction, isLoading, placeholder: placeholderFromProps, size: sizeProp, variant, status, statusVariant, labelTooltip, startIcon, hasClear, hasSelectAll, selectAllLabel: selectAllLabelFromProps, hasSearch, searchPlaceholder: searchPlaceholderFromProps, triggerDisplay, formatValue, maxBadges, renderOption, indicatorPosition, isDefaultOpen, 'data-testid': testId, htmlName, width, xstyle, className, style, }: MultiSelectorProps<T>): React.JSX.Element;
256
+ export declare function MultiSelector<T extends MultiSelectorOptionType>({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, options, value, onChange, changeAction, isLoading, placeholder: placeholderFromProps, size: sizeProp, variant, status, statusVariant, labelTooltip, startIcon, hasClear, hasSelectAll, selectAllLabel: selectAllLabelFromProps, hasSearch, searchPlaceholder: searchPlaceholderFromProps, emptyText: emptyTextFromProps, emptySearchText: emptySearchTextFromProps, triggerDisplay, formatValue, maxBadges, renderOption, indicatorPosition, isDefaultOpen, 'data-testid': testId, htmlName, width, xstyle, className, style, }: MultiSelectorProps<T>): React.JSX.Element;
240
257
  export declare namespace MultiSelector {
241
258
  var displayName: string;
242
259
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelector.d.ts","sourceRoot":"","sources":["../../src/MultiSelector/MultiSelector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelector.d.ts","sourceRoot":"","sources":["../../src/MultiSelector/MultiSelector.tsx"],"names":[],"mappings":"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"}