@multiplatform.one/theme 6.7.0 → 7.1.0

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 (71) hide show
  1. package/package.json +17 -17
  2. package/src/dates.spec.ts +344 -1
  3. package/src/dates.ts +50 -3
  4. package/src/devWarn.ts +29 -1
  5. package/src/figma/figmaTokens.spec.ts +3 -3
  6. package/src/figma/figmaTokens.ts +6 -3
  7. package/src/keyboardFocusRing.ts +61 -5
  8. package/src/menuRow.spec.ts +2 -2
  9. package/src/menuRow.ts +5 -4
  10. package/src/theme/Surface.spec.tsx +146 -0
  11. package/src/theme/Surface.tsx +73 -0
  12. package/src/theme/createDefaultThemeConfig.spec.ts +152 -0
  13. package/src/theme/createDefaultThemeConfig.ts +47 -3
  14. package/src/theme/createThemes.ts +27 -4
  15. package/src/theme/devtools/ThemeDevtoolsPanel.tsx +6 -2
  16. package/src/theme/focusState.ts +9 -1
  17. package/src/theme/groupGeometry.spec.ts +108 -0
  18. package/src/theme/groupGeometry.ts +119 -0
  19. package/src/theme/index.ts +3 -0
  20. package/src/theme/intent.spec.tsx +17 -0
  21. package/src/theme/knobs.ts +2 -2
  22. package/src/theme/layoutTokens.spec.ts +14 -0
  23. package/src/theme/layoutTokens.ts +29 -0
  24. package/src/theme/recipeInputs.ts +368 -0
  25. package/src/theme/recipes.ts +34 -0
  26. package/src/theme/resolveKnobs.spec.ts +91 -9
  27. package/src/theme/resolveKnobs.ts +55 -5
  28. package/src/theme/shared.tsx +11 -0
  29. package/src/theme/sizeRecipes.spec.ts +296 -0
  30. package/src/theme/sizeRecipes.ts +198 -0
  31. package/src/theme/useResolvedKnobs.ts +76 -24
  32. package/src/theme/useResolvedKnobsBehavior.spec.tsx +11 -3
  33. package/types/dates.d.ts +36 -2
  34. package/types/dates.d.ts.map +1 -1
  35. package/types/devWarn.d.ts +16 -1
  36. package/types/devWarn.d.ts.map +1 -1
  37. package/types/figma/figmaTokens.d.ts +1 -1
  38. package/types/figma/figmaTokens.d.ts.map +1 -1
  39. package/types/keyboardFocusRing.d.ts +19 -4
  40. package/types/keyboardFocusRing.d.ts.map +1 -1
  41. package/types/menuRow.d.ts +5 -4
  42. package/types/menuRow.d.ts.map +1 -1
  43. package/types/theme/Surface.d.ts +37 -0
  44. package/types/theme/Surface.d.ts.map +1 -0
  45. package/types/theme/createDefaultThemeConfig.d.ts +14 -3
  46. package/types/theme/createDefaultThemeConfig.d.ts.map +1 -1
  47. package/types/theme/createThemes.d.ts.map +1 -1
  48. package/types/theme/devtools/ThemeDevtoolsPanel.d.ts.map +1 -1
  49. package/types/theme/focusState.d.ts +8 -0
  50. package/types/theme/focusState.d.ts.map +1 -1
  51. package/types/theme/groupGeometry.d.ts +69 -0
  52. package/types/theme/groupGeometry.d.ts.map +1 -0
  53. package/types/theme/index.d.ts +3 -0
  54. package/types/theme/index.d.ts.map +1 -1
  55. package/types/theme/knobs.d.ts +2 -2
  56. package/types/theme/knobs.d.ts.map +1 -1
  57. package/types/theme/layoutTokens.d.ts +22 -0
  58. package/types/theme/layoutTokens.d.ts.map +1 -1
  59. package/types/theme/recipeInputs.d.ts +110 -0
  60. package/types/theme/recipeInputs.d.ts.map +1 -0
  61. package/types/theme/recipes.d.ts +47 -0
  62. package/types/theme/recipes.d.ts.map +1 -1
  63. package/types/theme/resolveKnobs.d.ts +7 -3
  64. package/types/theme/resolveKnobs.d.ts.map +1 -1
  65. package/types/theme/shared.d.ts +9 -0
  66. package/types/theme/shared.d.ts.map +1 -1
  67. package/types/theme/sizeRecipes.d.ts +68 -0
  68. package/types/theme/sizeRecipes.d.ts.map +1 -0
  69. package/types/theme/useResolvedKnobs.d.ts +10 -6
  70. package/types/theme/useResolvedKnobs.d.ts.map +1 -1
  71. package/src/audit/baselines/home-pokemon.json +0 -355
@@ -3,9 +3,15 @@ import type { SizeTokens } from "tamagui";
3
3
  import { defaultKnobs, type Knobs } from "./knobs";
4
4
  import type { IntentOverride } from "./preset.types";
5
5
  import type { KnobPropsOverride, ResolvedKnobs } from "./recipes";
6
- import { applyDensity, resolveKnobs } from "./resolveKnobs";
6
+ import { applyDensity, compactSpaceMap, resolveKnobs } from "./resolveKnobs";
7
7
  import { usePresetContext } from "./PresetContext";
8
8
  import { defaultIntents } from "./intents";
9
+ import {
10
+ clampSurfaceDensity,
11
+ clampSurfaceSize,
12
+ SurfaceContext,
13
+ type SurfaceIntent,
14
+ } from "./Surface";
9
15
 
10
16
  export const IntentContext = createContext<string | null>(null);
11
17
 
@@ -24,7 +30,6 @@ function usePrefersReducedMotion(): boolean {
24
30
  const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
25
31
  const handler = () => setReduced(mq.matches);
26
32
  handler();
27
- // RN / older WebKit: MediaQueryList has addListener, not addEventListener
28
33
  if (typeof mq.addEventListener === "function") {
29
34
  mq.addEventListener("change", handler);
30
35
  return () => mq.removeEventListener("change", handler);
@@ -37,6 +42,35 @@ function usePrefersReducedMotion(): boolean {
37
42
  return reduced;
38
43
  }
39
44
 
45
+ function applySurfaceToKnobs(
46
+ knobs: Knobs,
47
+ surface: SurfaceIntent,
48
+ opts: { sizeOverride: boolean; densityOverride: boolean },
49
+ ): Knobs {
50
+ let next = knobs;
51
+ if (surface.size !== "unset") {
52
+ if (!opts.sizeOverride) {
53
+ next = { ...next, size: surface.size };
54
+ } else {
55
+ const size = clampSurfaceSize(next.size, surface.size);
56
+ if (size !== "unset" && size !== next.size) {
57
+ next = { ...next, size };
58
+ }
59
+ }
60
+ }
61
+ if (surface.density !== "unset") {
62
+ if (!opts.densityOverride) {
63
+ next = { ...next, density: surface.density };
64
+ } else {
65
+ const density = clampSurfaceDensity(next.density, surface.density);
66
+ if (density !== "unset" && density !== next.density) {
67
+ next = { ...next, density };
68
+ }
69
+ }
70
+ }
71
+ return next;
72
+ }
73
+
40
74
  export interface UseResolvedKnobsOptions {
41
75
  intent?: string;
42
76
  component?: string;
@@ -44,14 +78,15 @@ export interface UseResolvedKnobsOptions {
44
78
  /** Override the size from knobs */
45
79
  size?: SizeTokens;
46
80
  /**
47
- * Compact sizing override. When set, wins over `knobs.density`:
48
- * `true` forces compact stepping; `false` forces comfortable.
49
- * When omitted, the density knob controls compact vs comfortable.
81
+ * Density-compact override (layout gaps only — does not step size).
82
+ * When set, wins over `knobs.density`:
83
+ * `true` forces compact density; `false` forces comfortable.
84
+ * Then re-clamped to the parent Surface ceiling (LC-68).
85
+ * When omitted, the density knob / Surface controls compact vs comfortable.
50
86
  */
51
87
  compact?: boolean;
52
88
  }
53
89
 
54
- // Map size tokens to knob size values
55
90
  const sizeTokenToKnobSize: Record<string, Knobs["size"]> = {
56
91
  $1: "small",
57
92
  $2: "small",
@@ -62,12 +97,6 @@ const sizeTokenToKnobSize: Record<string, Knobs["size"]> = {
62
97
  $true: "medium",
63
98
  };
64
99
 
65
- // Semantic intents whose Buttons render SOLID (see defaults/builderOptions):
66
- // the _Button sub-theme surfaces on the hue's step 11 and carries a
67
- // luminance-computed on-fill foreground as its `color` token (Axiom 15 /
68
- // LC-05), so filled labels bind `$color` and outlined labels pin to the
69
- // hue's readable text tier instead of the on-fill foreground. Exported so
70
- // Button can anchor outlined frames (icon currentColor) the same way.
71
100
  export const solidButtonIntents = new Set(["error", "warning", "success"]);
72
101
 
73
102
  /**
@@ -78,14 +107,19 @@ export const solidButtonIntents = new Set(["error", "warning", "success"]);
78
107
  * 2. Merge intent-level overrides (if intent provided or from context)
79
108
  * 3. Merge intent+component overrides (if both provided)
80
109
  * 4. Apply size override if provided
81
- * 5. Apply density (knobs.density, or compact option which wins)
82
- * 6. OS reduced-motion forces animation="none"
83
- * 7. Call resolveKnobs(mergedKnobs, override) — override merges last
110
+ * 5. Clamp size/density to Surface context (step-down only, LC-68)
111
+ * 6. Apply density (space only; compact option wins when provided)
112
+ * 7. Re-clamp to Surface ceiling (compact option cannot exceed parent)
113
+ * 8. OS reduced-motion forces animation="none"
114
+ * 9. Call resolveKnobs(mergedKnobs, override) — override merges last
84
115
  */
85
116
  export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKnobs {
86
117
  const presetCtx = usePresetContext();
87
118
  const contextIntent = useIntentContext();
88
119
  const prefersReducedMotion = usePrefersReducedMotion();
120
+ const surfaceCtx = SurfaceContext.useStyledContext();
121
+ const surfaceSize = surfaceCtx?.size ?? "unset";
122
+ const surfaceDensity = surfaceCtx?.density ?? "unset";
89
123
 
90
124
  const intent = options?.intent ?? contextIntent ?? undefined;
91
125
  const component = options?.component;
@@ -122,7 +156,6 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
122
156
  }
123
157
  }
124
158
 
125
- // Apply size override if provided
126
159
  if (sizeOverride) {
127
160
  const sizeStr = String(sizeOverride);
128
161
  const knobSize = sizeTokenToKnobSize[sizeStr];
@@ -131,21 +164,30 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
131
164
  }
132
165
  }
133
166
 
134
- // Density knob or per-call compact override (override wins when provided)
167
+ const surfaceIntent: SurfaceIntent = { size: surfaceSize, density: surfaceDensity };
168
+ merged = applySurfaceToKnobs(merged, surfaceIntent, {
169
+ sizeOverride: Boolean(sizeOverride),
170
+ densityOverride: compact !== undefined,
171
+ });
172
+
173
+ const spaceBeforeDensity = merged.space;
135
174
  merged = applyDensity(merged, compact);
175
+ merged = applySurfaceToKnobs(merged, surfaceIntent, {
176
+ sizeOverride: true,
177
+ densityOverride: true,
178
+ });
179
+ if (merged.density === "compact") {
180
+ merged = { ...merged, space: compactSpaceMap[spaceBeforeDensity] };
181
+ } else {
182
+ merged = { ...merged, space: spaceBeforeDensity };
183
+ }
136
184
 
137
- // OS reduced-motion ≡ animation=none for decorative A-* motion (knob consumers).
138
185
  if (prefersReducedMotion) {
139
186
  merged = { ...merged, animation: "none" };
140
187
  }
141
188
 
142
189
  const resolved = resolveKnobs(merged, override);
143
190
 
144
- // Semantic-intent Button labels: filled binds `$color` — the sub-theme's
145
- // luminance-computed on-fill foreground (defaults/builderOptions, Axiom
146
- // 15 / LC-05) — while outlined pins the hue's readable text tier
147
- // ($color11 falls through the narrow _Button sub-theme to the intent
148
- // theme), since the on-fill foreground is illegible on page surfaces.
149
191
  if (intent && component === "Button" && solidButtonIntents.has(intent)) {
150
192
  const labelColor = merged.fillStyle === "filled" ? "$color" : "$color11";
151
193
  return {
@@ -158,5 +200,15 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
158
200
  }
159
201
 
160
202
  return resolved;
161
- }, [presetCtx, intent, component, override, sizeOverride, compact, prefersReducedMotion]);
203
+ }, [
204
+ presetCtx,
205
+ intent,
206
+ component,
207
+ override,
208
+ sizeOverride,
209
+ compact,
210
+ prefersReducedMotion,
211
+ surfaceSize,
212
+ surfaceDensity,
213
+ ]);
162
214
  }
@@ -156,11 +156,19 @@ describe("intent + component knob merging", () => {
156
156
  );
157
157
  });
158
158
 
159
- it("compact option steps sizing down regardless of the density knob", () => {
159
+ it("compact option does not shrink size; it shrinks gap and sets density compact", () => {
160
160
  const comfortable = renderHook(() => useResolvedKnobs());
161
161
  const compact = renderHook(() => useResolvedKnobs({ compact: true }));
162
- // default medium comfort → small under compact stepping
163
162
  expect(comfortable.result.current.knobProps.size).toBe("medium");
164
- expect(compact.result.current.knobProps.size).toBe("small");
163
+ expect(compact.result.current.knobProps.size).toBe("medium");
164
+ expect(compact.result.current.knobProps.sizeToken).toBe(
165
+ comfortable.result.current.knobProps.sizeToken,
166
+ );
167
+ expect(compact.result.current.knobProps.control.height).toBe(
168
+ comfortable.result.current.knobProps.control.height,
169
+ );
170
+ expect(compact.result.current.knobProps.density).toBe("compact");
171
+ expect(comfortable.result.current.knobProps.gap).toEqual({ gap: "$4" });
172
+ expect(compact.result.current.knobProps.gap).toEqual({ gap: "$2" });
165
173
  });
166
174
  });
package/types/dates.d.ts CHANGED
@@ -31,6 +31,19 @@ export interface AbsoluteDateFormatOptions {
31
31
  year?: "auto" | "always" | "never";
32
32
  /** Include the time component ("Aug 9, 3:30 PM"). Default false. */
33
33
  withTime?: boolean;
34
+ /**
35
+ * Append seconds to the time component ("Aug 9, 3:30:45 PM"). Off by
36
+ * default — no register emits seconds unless a surface asks. Only the
37
+ * editing register does: a `showSeconds` picker has to display the second
38
+ * it lets you set. Ignored without `withTime`.
39
+ */
40
+ seconds?: boolean;
41
+ /**
42
+ * Pin the 12/24-hour clock instead of following the locale — the
43
+ * `timeFormat` contract a datetime picker exposes to its consumers.
44
+ * Ignored without `withTime`.
45
+ */
46
+ hour12?: boolean;
34
47
  /** BCP-47 locale forwarded to Intl. Default: system locale. */
35
48
  locale?: string;
36
49
  /** Reference date for current-year elision (injectable for tests). */
@@ -56,6 +69,25 @@ export declare const ISO_DATE_ONLY: RegExp;
56
69
  * ("2026-13-45") rather than silently rolling them into the next month.
57
70
  */
58
71
  export declare function parseCalendarDate(value: DateInput): Date | null;
72
+ /** Timezone-naive wire shapes: Frappe's `Date`, `Datetime` and `Time`. */
73
+ export type CalendarDateShape = "date" | "datetime" | "time";
74
+ /**
75
+ * Serialize a date onto the LOCAL calendar parts it names — the write
76
+ * counterpart to `parseCalendarDate`, and the only place the repo builds a
77
+ * timezone-naive wire string.
78
+ *
79
+ * `"date"` emits `YYYY-MM-DD`, `"datetime"` emits `YYYY-MM-DD HH:mm:ss`, and
80
+ * `"time"` emits `HH:mm:ss` — the shapes Frappe stores, none of which carries
81
+ * an offset. `toISOString()` renders the UTC instant instead, so it names the
82
+ * wrong day whenever the value's local time of day sits across the UTC date
83
+ * boundary, and shifts a wall clock by the whole offset. Reading such a string
84
+ * back through `parseCalendarDate` then compounds the error, because the read
85
+ * side treats it as local.
86
+ *
87
+ * Accepts anything `parseCalendarDate` does, so a value already on the wire
88
+ * round-trips unchanged; empty and unparseable input serialize to "".
89
+ */
90
+ export declare function formatCalendarDate(value: DateInput, shape?: CalendarDateShape): string;
59
91
  /**
60
92
  * Compact absolute date — the house register for every absolute date.
61
93
  * "Jul 1" / "Jul 1, 2025" (year auto-elided when current), or with
@@ -65,8 +97,10 @@ export declare function parseCalendarDate(value: DateInput): Date | null;
65
97
  export declare function formatAbsoluteDate(value: DateInput, options?: AbsoluteDateFormatOptions): string;
66
98
  /**
67
99
  * Compact absolute date-time ("Aug 9, 3:30 PM"; year added when not
68
- * current). The system-event register (LC-12) and the tooltip form for
69
- * relative timestamps.
100
+ * current). The system-event register (LC-12), the tooltip form for relative
101
+ * timestamps, and — with `year: "always"` — the datetime picker display on
102
+ * BOTH platform halves, which is why it takes `hour12` / `seconds`: the two
103
+ * halves used to compose their own and drifted by a comma.
70
104
  */
71
105
  export declare function formatAbsoluteDateTime(value: DateInput, options?: Omit<AbsoluteDateFormatOptions, "withTime">): string;
72
106
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACxC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,0CAA0C;AAC1C,eAAO,MAAM,aAAa,QAAwB,CAAC;AAyBnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAkB/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,CA0BR;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAM,GACxD,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAgB1F;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU,QAAqC,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAuB9F;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAa1F;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAW9F;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAU5F;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAO3E;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAO,GAC1D,MAAM,EAAE,CAIV"}
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,9 @@
5
5
  * W12 owns `outline-none` + `positive-tabindex`. Other codes are catalogued
6
6
  * here so consumers share one tree-shaken entry point.
7
7
  */
8
- export type DevWarnCode = "placeholder-as-label" | "two-primaries" | "banned-error-word" | "bare-disabled" | "cancel-disabled" | "dialog-too-many-actions" | "select-too-few-options" | "positive-tabindex" | "tooltip-on-disabled" | "outline-none" | "multiple-h1";
8
+ export type DevWarnCode = "placeholder-as-label" | "two-primaries" | "banned-error-word" | "bare-disabled" | "cancel-disabled" | "dialog-too-many-actions" | "select-too-few-options" | "positive-tabindex" | "tooltip-on-disabled" | "outline-none" | "multiple-h1" | "opaque-stack-group"
9
+ /** Numeric height/paddingHorizontal on a recipe control without sizeRecipeEscape. */
10
+ | "size-recipe-escape";
9
11
  export type DevWarnDetail = {
10
12
  component?: string;
11
13
  id?: string;
@@ -80,6 +82,19 @@ export declare function warnBareDisabled(args: {
80
82
  component?: string;
81
83
  id?: string;
82
84
  }): void;
85
+ /**
86
+ * LC-65 — numeric `height` / `paddingHorizontal` on a size-recipe control
87
+ * (Button, Input.Box) must opt in with `sizeRecipeEscape="reason"`. Warns
88
+ * once per component+id like `warnBareDisabled`; does not invent a general
89
+ * style escape.
90
+ */
91
+ export declare function warnSizeRecipeEscape(args: {
92
+ height?: unknown;
93
+ paddingHorizontal?: unknown;
94
+ sizeRecipeEscape?: string | null;
95
+ component?: string;
96
+ id?: string;
97
+ }): void;
83
98
  /**
84
99
  * DG-ACT-05 — the cancel/dismiss action never renders disabled (while confirm
85
100
  * may be). Enforcing callers strip the prop and report the attempt here.
@@ -1 +1 @@
1
- {"version":3,"file":"devWarn.d.ts","sourceRoot":"","sources":["../src/devWarn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devWarn.d.ts","sourceRoot":"","sources":["../src/devWarn.ts"],"names":[],"mappings":"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"}
@@ -117,7 +117,7 @@ export interface FigmaKnobsExport {
117
117
  };
118
118
  density: {
119
119
  default: Knobs["density"];
120
- /** compact steps size/space down one level (applyDensity). */
120
+ /** compact steps space only (applyDensity); size is an independent axis. */
121
121
  compact: {
122
122
  size: Record<string, string>;
123
123
  space: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"figmaTokens.d.ts","sourceRoot":"","sources":["../../src/figma/figmaTokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"figmaTokens.d.ts","sourceRoot":"","sources":["../../src/figma/figmaTokens.ts"],"names":[],"mappings":"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"}
@@ -22,11 +22,26 @@ export declare function ensureKeyboardModalityTracking(): void;
22
22
  * false) and during SSR.
23
23
  */
24
24
  export declare function wasKeyboardFocus(): boolean;
25
- /** Standard manual ring props (mirrors the focusVisibleStyle contract). */
25
+ /**
26
+ * Standard manual ring props — the SAME geometry as `FOCUS_VISIBLE_RING`
27
+ * (2px solid `$outlineColor`, inset −2), spread here so manually-painted
28
+ * rings and `focusVisibleStyle` rings can never drift apart.
29
+ */
26
30
  export declare const keyboardFocusRingProps: {
27
- readonly outlineColor: "$outlineColor";
28
- readonly outlineWidth: 2;
31
+ readonly outlineWidth: number;
29
32
  readonly outlineStyle: "solid";
30
- readonly outlineOffset: -2;
33
+ readonly outlineColor: string;
34
+ readonly outlineOffset: number;
31
35
  };
36
+ /**
37
+ * LC-71 RING-ANATOMY — CSS-synchronous ring on a composite's outer boundary.
38
+ *
39
+ * `:has(:focus-visible)` paints the same frame the keyboard heuristic would,
40
+ * with zero React latency (the prior `focused` JS path lagged one frame and
41
+ * spawned the inner-Area ring cascade). Inner targets suppress their own
42
+ * outline so the box carries exactly one ring. Class: `mp-composite-ring`.
43
+ */
44
+ export declare const compositeFocusRingCss = "/* LC-71: ring on the composite outer box; never on the inner field.\n Inset (\u22122px): these frames use overflow:hidden to clip children to radius,\n which severs an outer ring. Do NOT use :has(:focus-visible) on every\n descendant \u2014 that would ring the whole SearchInput when the clear \u2715 is\n focused (two focusables \u2192 two rings, chip-dismiss rule). */\n.mp-composite-ring:focus-visible,\n.mp-composite-ring:has(input:focus),\n.mp-composite-ring:has(textarea:focus),\n.mp-composite-ring:has(.mp-input-area:focus) {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: -2px;\n}\n.mp-composite-ring-deep:has(:focus-visible) {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: -2px;\n}\n.mp-composite-ring input,\n.mp-composite-ring textarea,\n.mp-composite-ring [contenteditable],\n.mp-input-area,\n.mp-input-area:focus,\n.mp-input-area:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n}\n.mp-chip-dismiss:focus-visible {\n outline: none !important;\n}\n.mp-chip-dismiss:focus-visible .mp-chip-dismiss-ring {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: 2px;\n}";
45
+ /** Idempotently mount the composite-boundary focus-ring stylesheet. */
46
+ export declare function ensureCompositeFocusRing(): void;
32
47
  //# sourceMappingURL=keyboardFocusRing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyboardFocusRing.d.ts","sourceRoot":"","sources":["../src/keyboardFocusRing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;GAIG;AACH,wBAAgB,8BAA8B,SAK7C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAC"}
1
+ {"version":3,"file":"keyboardFocusRing.d.ts","sourceRoot":"","sources":["../src/keyboardFocusRing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;GAIG;AACH,wBAAgB,8BAA8B,SAK7C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAID;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;CAEzB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,gvCA+BhC,CAAC;AAIH,uEAAuE;AACvE,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C"}
@@ -4,9 +4,11 @@
4
4
  * One geometry recipe for every menu/listbox row (DropdownMenu `ItemRow`,
5
5
  * Select `SelectRow`, MentionInput `MentionSuggestionItem`): the row spans
6
6
  * the full overlay width (edge-to-edge highlight, SP-EDGE), owns its
7
- * horizontal padding, keeps flat corners (the overlay container clips to the
8
- * radius knob), and suppresses the focus outline — the row surface highlight
9
- * IS the focus/active indicator.
7
+ * horizontal padding, and keeps flat corners (the overlay container clips to
8
+ * the radius knob — LC-72 CONTAINER-CLIP). LC-71 RING-ANATOMY: the highlight
9
+ * fill and the focus ring are orthogonal; consumers paint
10
+ * `ensureFocusVisibleRing({ outlineOffset: -2 })` on `focusVisibleStyle`
11
+ * (inset so the overlay clip does not sever it). Do not delete the ring.
10
12
  *
11
13
  * It lives in `@multiplatform.one/theme` (not `components`) because the
12
14
  * dependency direction is `components` → `forms` → `theme`; the two forms
@@ -27,6 +29,5 @@ export declare const menuRowFrame: {
27
29
  readonly borderRadius: 0;
28
30
  readonly userSelect: "none";
29
31
  readonly backgroundColor: "transparent";
30
- readonly outlineStyle: any;
31
32
  };
32
33
  //# sourceMappingURL=menuRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY;;;;;;;;2BAQC,GAAG;CACnB,CAAC"}
1
+ {"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { ReactNode } from "react";
2
+ export type SurfaceSize = "small" | "medium" | "large";
3
+ export type SurfaceSizeIntent = SurfaceSize | "sm" | "md" | "lg";
4
+ export type SurfaceDensity = "compact" | "comfortable";
5
+ export type SurfaceIntent = {
6
+ size: SurfaceSize | "unset";
7
+ density: SurfaceDensity | "unset";
8
+ };
9
+ export declare function normalizeSurfaceSize(size: SurfaceSizeIntent): SurfaceSize;
10
+ export declare const SurfaceContext: import("@tamagui/web").StyledContext<SurfaceIntent>;
11
+ export declare const SURFACE_SIZE_RANK: {
12
+ readonly unset: 99;
13
+ readonly small: 0;
14
+ readonly medium: 1;
15
+ readonly large: 2;
16
+ };
17
+ export declare const SURFACE_DENSITY_RANK: {
18
+ readonly unset: 99;
19
+ readonly compact: 0;
20
+ readonly comfortable: 1;
21
+ };
22
+ /**
23
+ * Nested surfaces/controls may inherit or go tighter (lower rank), never larger
24
+ * than the parent (LC-68). `unset` parent = no ceiling. `unset` requested = inherit.
25
+ */
26
+ export declare function clampSurfaceSize(requested: SurfaceSize | "unset", parent: SurfaceSize | "unset"): SurfaceSize | "unset";
27
+ export declare function clampSurfaceDensity(requested: SurfaceDensity | "unset", parent: SurfaceDensity | "unset"): SurfaceDensity | "unset";
28
+ /**
29
+ * Declares size/density INTENT for a subtree. Nested Surfaces clamp step-down
30
+ * only — never raw gap tokens (LC-68, LC-69). Accepts sm/md/lg aliases.
31
+ */
32
+ export declare function Surface({ size, density, children, }: {
33
+ size?: SurfaceSizeIntent;
34
+ density?: SurfaceDensity;
35
+ children?: ReactNode;
36
+ }): import("react/jsx-runtime").JSX.Element;
37
+ //# sourceMappingURL=Surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../src/theme/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC;AAW/F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAED,eAAO,MAAM,cAAc,qDAGzB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;CAAwD,CAAC;AACvF,eAAO,MAAM,oBAAoB;;;;CAAqD,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,GAAG,OAAO,EAChC,MAAM,EAAE,WAAW,GAAG,OAAO,GAC5B,WAAW,GAAG,OAAO,CAIvB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,cAAc,GAAG,OAAO,EACnC,MAAM,EAAE,cAAc,GAAG,OAAO,GAC/B,cAAc,GAAG,OAAO,CAI1B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CASA"}
@@ -1,6 +1,7 @@
1
1
  import type { CreateTamaguiProps, GenericFont } from "tamagui";
2
2
  import { type BaseThemeBuilderDefinition, type CreateThemesBuilderOptions, type ThemeBuilderDefinition } from "./createThemes";
3
3
  import type { Preset } from "./preset.types";
4
+ import { type SizeRecipeInputs } from "./recipeInputs";
4
5
  import { type ThemeConfig } from "./shared";
5
6
  export interface CreateDefaultThemeConfigOptions {
6
7
  /** Base theme palette (dark/light with optional shadows; defaults to the built-in neutral ramps) */
@@ -23,15 +24,25 @@ export interface CreateDefaultThemeConfigOptions {
23
24
  presets?: Record<string, Preset>;
24
25
  /** Default preset name to use when no `mp.preset` cookie is set */
25
26
  defaultPreset?: string;
27
+ /**
28
+ * Size-recipe inputs (LC-70). Merged over `defaultRecipeInputs`; tables are
29
+ * generated, written into the live aliases Button/Input already import, and
30
+ * attached on ThemeConfig as `recipeInputs` / `recipeFamilies`. Not written
31
+ * into Tamagui `themes` (those stay color palettes from createThemes /
32
+ * theme-builder).
33
+ */
34
+ recipeInputs?: Partial<SizeRecipeInputs>;
26
35
  }
27
36
  /**
28
37
  * Builds a complete Tamagui theme config with batteries included: calling it
29
38
  * with zero options yields the framework's polished defaults — the neutral
30
39
  * Radix-mauve-curve base ramps, the solid-surface brand accent ramps, Inter
31
40
  * heading/body fonts and the interaction-ramp `getTheme` theme builder.
32
- * Every option overrides its piece independently: `base`, `accent` and
33
- * `builderOptions` each replace their default, while `fonts` are spread OVER
34
- * the defaults so a partial font map keeps the default heading/body.
41
+ * Every option overrides its piece independently: `base` and `accent` each
42
+ * replace their default, `fonts` are spread OVER the defaults so a partial
43
+ * font map keeps the default heading/body, and `builderOptions.getTheme`
44
+ * COMPOSES with the default (consumer keys win; framework derivations like
45
+ * the solid `$outlineColor` focus ring survive partial overrides).
35
46
  */
36
47
  export declare function createDefaultThemeConfig(options?: CreateDefaultThemeConfigOptions): ThemeConfig;
37
48
  //# sourceMappingURL=createDefaultThemeConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createDefaultThemeConfig.d.ts","sourceRoot":"","sources":["../../src/theme/createDefaultThemeConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAE5B,MAAM,gBAAgB,CAAC;AAKxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,UAAU,CAAC;AAE/D,MAAM,WAAW,+BAA+B;IAC9C,oGAAoG;IACpG,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC,mEAAmE;IACnE,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC1D,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,qEAAqE;IACrE,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC9C,oEAAoE;IACpE,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,WAAW,CAyDb"}
1
+ {"version":3,"file":"createDefaultThemeConfig.d.ts","sourceRoot":"","sources":["../../src/theme/createDefaultThemeConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE5B,MAAM,gBAAgB,CAAC;AAKxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,UAAU,CAAC;AAG/D,MAAM,WAAW,+BAA+B;IAC9C,oGAAoG;IACpG,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC,mEAAmE;IACnE,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC1D,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,qEAAqE;IACrE,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC9C,oEAAoE;IACpE,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,WAAW,CA6Db"}
@@ -1 +1 @@
1
- {"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAchC,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAExC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B,CACzC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACxC,WAAW,SAAS,OAAO,GAAG,OAAO,EACrC,YAAY,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACtE;AAQD,eAAO,MAAM,YAAY,aA6BvB,CAAC;AA0DH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,0BAA0B,EACrC,WAAW,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,0BAA0B;;aAkLzB,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,sBAAsB,GAuB1D,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;;+BAAkC;EAG7E"}
1
+ {"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAchC,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAExC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B,CACzC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACxC,WAAW,SAAS,OAAO,GAAG,OAAO,EACrC,YAAY,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACtE;AA8BD,eAAO,MAAM,YAAY,aA6BvB,CAAC;AA0DH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,0BAA0B,EACrC,WAAW,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,0BAA0B;;aAmLzB,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,sBAAsB,GAuB1D,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;;+BAAkC;EAG7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeDevtoolsPanel.d.ts","sourceRoot":"","sources":["../../../src/theme/devtools/ThemeDevtoolsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAyMH,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAkiBF,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,UAAU,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmDD,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,EAAE,uBAAuB,2CA67BzB"}
1
+ {"version":3,"file":"ThemeDevtoolsPanel.d.ts","sourceRoot":"","sources":["../../../src/theme/devtools/ThemeDevtoolsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAyMH,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAkiBF,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,UAAU,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmDD,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,EAAE,uBAAuB,2CAi8BzB"}
@@ -14,6 +14,14 @@ export declare const FOCUS_RING_MIN_CONTRAST = 3;
14
14
  * unresolved rings as failing.
15
15
  */
16
16
  export declare function focusRingColorMeetsContrast(ringColor: string, surfaceColor: string): boolean;
17
+ /**
18
+ * ONE ring geometry (DG-A11Y-01): 2px solid `$outlineColor`, inset −2.
19
+ * Inset is the only offset that survives fused/clipped groups (segmented
20
+ * controls clip children at the group radius; an outset ring paints square
21
+ * across the clip or disappears under `overflow: hidden`) and it matches
22
+ * `keyboardFocusRingProps`, the manual ring painted for roving-focus
23
+ * widgets — so keyboard focus reads identically everywhere.
24
+ */
17
25
  export declare const FOCUS_VISIBLE_RING: {
18
26
  outlineWidth: number;
19
27
  outlineStyle: "solid";
@@ -1 +1 @@
1
- {"version":3,"file":"focusState.d.ts","sourceRoot":"","sources":["../../src/theme/focusState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAuBzC;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED,eAAO,MAAM,kBAAkB;;;;;CAKF,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,IAAI,GACxC,CAAC,GAAG,iBAAiB,CAyBvB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,iBAAiB,GACvB,iBAAiB,CAKnB"}
1
+ {"version":3,"file":"focusState.d.ts","sourceRoot":"","sources":["../../src/theme/focusState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAuBzC;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKF,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,IAAI,GACxC,CAAC,GAAG,iBAAiB,CAyBvB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,iBAAiB,GACvB,iBAAiB,CAKnB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Stacked-group corner geometry — the one canonical mapping from a row's
3
+ * position in a flush stack to its corner radii (Axiom 1 R-OUTER: a nested
4
+ * rounded child directly against the frame rounds only the outer corners;
5
+ * inner boundaries stay square).
6
+ *
7
+ * A "stacked group" is any run of flush siblings composing one visual unit —
8
+ * segmented buttons, grouped inputs, accordion/sidebar rows, list rows. The
9
+ * FIRST item rounds only its leading corners, the LAST only its trailing
10
+ * corners, everything between is square, and a lone item keeps the plain
11
+ * radius. State highlights (hover/press/selection) paint on the row surface
12
+ * itself, so they inherit exactly this geometry — a uniformly rounded
13
+ * highlight against a straight interior seam is the defect this module
14
+ * exists to prevent. Web focus outlines follow the element's border-radius,
15
+ * so the focus ring inherits the same geometry for free.
16
+ *
17
+ * It lives in `@multiplatform.one/theme` because both `components`
18
+ * (Accordion, List) and `forms` (ToggleGroup, ControlGroup) consume it and
19
+ * the dependency direction is components → forms → theme (same reasoning as
20
+ * menuRow.ts). Corners are LOGICAL (start/end) so RTL flips the rounding
21
+ * with the items — physical corners would land rounded edges on interior
22
+ * seams (the ControlGroup/ToggleGroup precedent).
23
+ *
24
+ * Overlay-clipped stacks (DropdownMenu/Select rows via `menuRowFrame`,
25
+ * table frames) are the CONTAINER-CLIP arm of the same rule: rows stay flat
26
+ * and the rounded overflow-hidden container cuts the outer corners. Use that
27
+ * arm when a rounded clipping container already exists; use this arm when
28
+ * the rows themselves are the outermost painted surface.
29
+ */
30
+ /** A row's position within its stacked group. */
31
+ export type GroupPosition = "only" | "first" | "middle" | "last";
32
+ /** Stacking direction: vertical stacks round top/bottom, horizontal start/end. */
33
+ export type GroupOrientation = "horizontal" | "vertical";
34
+ /** Resolve a row index to its group position (count <= 1 is "only"). */
35
+ export declare function getGroupPosition(index: number, count: number): GroupPosition;
36
+ export type StackRadiusFragment = {
37
+ borderStartStartRadius: string | number;
38
+ borderStartEndRadius: string | number;
39
+ borderEndStartRadius: string | number;
40
+ borderEndEndRadius: string | number;
41
+ };
42
+ /**
43
+ * Corner fragment for a row whose leading/trailing edge may or may not be
44
+ * the group's outer edge. `start` is the top edge (vertical) or inline-start
45
+ * edge (horizontal); `end` the opposite. This is the low-level arm for rows
46
+ * whose outer-edge status is conditional — an open accordion trigger's
47
+ * bottom edge abuts its own content, so its bottom corners go square even on
48
+ * the last item.
49
+ */
50
+ export declare function stackEdgeRadius(radius: string | number | undefined, edges: {
51
+ start?: boolean;
52
+ end?: boolean;
53
+ }, orientation?: GroupOrientation): StackRadiusFragment;
54
+ /**
55
+ * The complete corner fragment for a row at `position` in a stacked group.
56
+ * Spread it onto the row surface (the element that paints hover/press/
57
+ * selection) — never cherry-pick single corners out of it.
58
+ */
59
+ export declare function stackRadiusProps(position: GroupPosition, radius: string | number | undefined, orientation?: GroupOrientation): StackRadiusFragment;
60
+ /**
61
+ * Group containers provide each item's position so nested compound parts
62
+ * (an Accordion.Trigger inside an Accordion.Item) resolve their geometry
63
+ * without prop drilling. `undefined` means "not inside a stacked group" —
64
+ * consumers treat that as "only".
65
+ */
66
+ export declare const GroupPositionContext: import("react").Context<GroupPosition | undefined>;
67
+ /** The current row's position within its stacked group, if any. */
68
+ export declare function useGroupPosition(): GroupPosition | undefined;
69
+ //# sourceMappingURL=groupGeometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupGeometry.d.ts","sourceRoot":"","sources":["../../src/theme/groupGeometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEzD,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAK5E;AAID,MAAM,MAAM,mBAAmB,GAAG;IAChC,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,WAAW,GAAE,gBAA6B,GACzC,mBAAmB,CAkBrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,WAAW,GAAE,gBAA6B,GACzC,mBAAmB,CASrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,oDAAsD,CAAC;AAExF,mEAAmE;AACnE,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D"}