@multiplatform.one/theme 7.7.6 → 7.8.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 (47) hide show
  1. package/package.json +5 -5
  2. package/src/audit/constraintAudit.spec.ts +157 -0
  3. package/src/audit/constraintAudit.ts +154 -35
  4. package/src/audit/constraintScope.spec.ts +48 -0
  5. package/src/audit/index.ts +16 -0
  6. package/src/audit/themeMatrix.spec.ts +292 -1
  7. package/src/audit/themeMatrix.ts +1015 -22
  8. package/src/theme/Intent.stories.tsx +88 -0
  9. package/src/theme/Preset.stories.tsx +80 -0
  10. package/src/theme/Surface.spec.tsx +6 -0
  11. package/src/theme/Surface.stories.tsx +91 -0
  12. package/src/theme/ThemeProvider.stories.tsx +50 -0
  13. package/src/theme/Tint.stories.tsx +98 -0
  14. package/src/theme/chartPalette.spec.ts +128 -5
  15. package/src/theme/chartPalette.ts +105 -22
  16. package/src/theme/colorRules.spec.ts +92 -39
  17. package/src/theme/colorRules.ts +4 -6
  18. package/src/theme/createDefaultThemeConfig.ts +1 -1
  19. package/src/theme/createThemes.ts +58 -3
  20. package/src/theme/devtools/ColorLineVisualizer.stories.tsx +36 -0
  21. package/src/theme/devtools/ThemeDevtoolsPanel.stories.tsx +16 -0
  22. package/src/theme/glyphPaint.spec.ts +14 -0
  23. package/src/theme/glyphPaint.ts +2 -1
  24. package/src/theme/intent.spec.tsx +1 -0
  25. package/src/theme/layoutTokensHooks.spec.tsx +1 -0
  26. package/src/theme/recipeInputs.ts +9 -9
  27. package/src/theme/resolveKnobs.spec.ts +2 -2
  28. package/src/theme/sizeLadder.spec.ts +19 -10
  29. package/src/theme/sizeRecipes.ts +2 -2
  30. package/src/theme/themeValue.spec.ts +2 -2
  31. package/src/theme/useResolvedKnobsBehavior.spec.tsx +6 -0
  32. package/types/audit/constraintAudit.d.ts +17 -1
  33. package/types/audit/constraintAudit.d.ts.map +1 -1
  34. package/types/audit/index.d.ts +2 -2
  35. package/types/audit/index.d.ts.map +1 -1
  36. package/types/audit/themeMatrix.d.ts +135 -2
  37. package/types/audit/themeMatrix.d.ts.map +1 -1
  38. package/types/theme/chartPalette.d.ts +6 -4
  39. package/types/theme/chartPalette.d.ts.map +1 -1
  40. package/types/theme/colorRules.d.ts +3 -3
  41. package/types/theme/colorRules.d.ts.map +1 -1
  42. package/types/theme/createThemes.d.ts +1 -1
  43. package/types/theme/createThemes.d.ts.map +1 -1
  44. package/types/theme/glyphPaint.d.ts.map +1 -1
  45. package/types/theme/recipeInputs.d.ts +8 -8
  46. package/types/theme/recipeInputs.d.ts.map +1 -1
  47. package/types/theme/sizeRecipes.d.ts +2 -2
@@ -9,9 +9,9 @@
9
9
  * a theme sets `{ baseHeight }` and drops the table — it is not the
10
10
  * default ladder and is not a signed-off divergence (MPO-46 / R6).
11
11
  *
12
- * Radius steps with the size token. The borderRadius knob is an override
13
- * that retargets gap through `applyRadiusStop` (gap == radius at every
14
- * knob stop too). `radiusPx` on inputs is the $4 / medium default (9).
12
+ * Radius steps with the size token. The borderRadius knob overrides the
13
+ * painted corners while internal gap stays on the size recipe. `radiusPx`
14
+ * on inputs is the $4 / medium default (9).
15
15
  *
16
16
  * Tamagui `createThemes` / theme-builder still emits COLOR palettes only.
17
17
  * Do not stuff recipe keys into `getTheme()` / `themes`.
@@ -63,8 +63,8 @@ export type SizeRecipeTokenTable = Partial<Record<SizeRecipeToken, SizeRecipeTok
63
63
 
64
64
  /**
65
65
  * borderRadius knob stops (px). Mirrors the v5 radius tokens the knob
66
- * already resolves ($0/$2/$4/$6/$12 = 0/5/9/16/50). `applyRadiusStop`
67
- * retargets recipe.gap to the same number so gap == radius at every stop.
66
+ * already resolves ($0/$2/$4/$6/$12 = 0/5/9/16/50). These shape overrides
67
+ * do not retarget the control's internal gap.
68
68
  */
69
69
  export const SIZE_RECIPE_RADIUS_STOPS = {
70
70
  none: 0,
@@ -451,7 +451,7 @@ export function recipeFromTokenChannels(
451
451
  };
452
452
  }
453
453
 
454
- /** Retarget inner gap to a borderRadius knob stop so gap == that stop's radius. */
454
+ /** Explicit recipe transformation; ordinary control shape changes use resolveControlRadius. */
455
455
  export function applyRadiusStop<T extends { gap: number }>(
456
456
  recipe: T,
457
457
  stop: SizeRecipeRadiusStop,
@@ -472,8 +472,8 @@ export const SIZE_RECIPE_RADIUS_TOKEN_TO_STOP = {
472
472
  * Painted control radius + inner gap.
473
473
  *
474
474
  * Default `medium` follows the size table (gap == radius at that token).
475
- * Any other borderRadius knob stop is an override: both values become
476
- * that stop's px so gap == radius there too (MPO-46).
475
+ * Other borderRadius stops override the corners only. Internal spacing
476
+ * continues to group the icon and label at the recipe's size (LC-79).
477
477
  */
478
478
  export function resolveControlRadius(
479
479
  recipe: SizeRecipe,
@@ -483,7 +483,7 @@ export function resolveControlRadius(
483
483
  return { radius: recipe.gap, gap: recipe.gap };
484
484
  }
485
485
  const px = SIZE_RECIPE_RADIUS_STOPS[stop];
486
- return { radius: px, gap: px };
486
+ return { radius: px, gap: recipe.gap };
487
487
  }
488
488
 
489
489
  function generateTouchHeights(
@@ -1134,8 +1134,8 @@ describe("applyDensity", () => {
1134
1134
  });
1135
1135
 
1136
1136
  it("names which gap density moves: the LAYOUT gap, never the recipe gap (LC-79)", () => {
1137
- // `control.gap` tracks the RADIUS knob, so it is invariant under density
1138
- // by construction. The gap a reader sees tighten is `knobProps.gap`, the
1137
+ // `control.gap` retains the size-table grouping across density and shape.
1138
+ // The gap a reader sees tighten is `knobProps.gap`, the
1139
1139
  // space-ramp one, and it only moves once `applyDensity` has stepped
1140
1140
  // `space` — `resolveKnobs` alone is a pure token mapper.
1141
1141
  const comfortable = resolveKnobs(applyDensity(knobsWith({ space: "medium" })));
@@ -2,8 +2,8 @@
2
2
  * MPO-46 / MPO-19 X1/X2 — the size ladder is the measured Tamagui v5 table
3
3
  * (R6: real TABLE, no escape). padX / label / icon / radius at $2/$3/$4/$6
4
4
  * come from tamagui-rendered-reference.md §6.1; Input padX is §6.2
5
- * (one space half-step below the button). gap == radius at every size
6
- * and every borderRadius knob stop.
5
+ * (one space half-step below the button). Default gap equals size-table
6
+ * radius; borderRadius shape overrides preserve that internal spacing.
7
7
  */
8
8
 
9
9
  import { describe, expect, it } from "vitest";
@@ -61,7 +61,7 @@ describe("MPO-46 size ladder — measured table, not a ratio (R6)", () => {
61
61
  });
62
62
  });
63
63
 
64
- describe("MPO-46 gap == radius", () => {
64
+ describe("MPO-46 default size-table gap and explicit recipe transformation", () => {
65
65
  it("holds at every size step", () => {
66
66
  const generated = generateSizeRecipes();
67
67
  for (const token of Object.keys(generated.recipes)) {
@@ -72,7 +72,7 @@ describe("MPO-46 gap == radius", () => {
72
72
  }
73
73
  });
74
74
 
75
- it("holds at every borderRadius knob stop", () => {
75
+ it("can explicitly retarget an authored recipe gap to a radius stop", () => {
76
76
  const stops = Object.keys(SIZE_RECIPE_RADIUS_STOPS) as SizeRecipeRadiusStop[];
77
77
  for (const token of ["$2", "$3", "$4", "$5", "$6"] as const) {
78
78
  const recipe = sizeRecipeForToken(token);
@@ -94,11 +94,20 @@ describe("MPO-46 resolveControlRadius", () => {
94
94
  expect(six.gap).toBe(16);
95
95
  });
96
96
 
97
- it("non-medium knob stops retarget both radius and gap", () => {
98
- const recipe = sizeRecipeForToken("$2");
99
- expect(resolveControlRadius(recipe, "none")).toEqual({ radius: 0, gap: 0 });
100
- expect(resolveControlRadius(recipe, "small")).toEqual({ radius: 5, gap: 5 });
101
- expect(resolveControlRadius(recipe, "large")).toEqual({ radius: 16, gap: 16 });
102
- expect(resolveControlRadius(recipe, "full")).toEqual({ radius: 50, gap: 50 });
97
+ it("corner shape preserves the size recipe's icon-label grouping", () => {
98
+ for (const family of ["control", "controlCompact"] as const) {
99
+ for (const token of ["$2", "$3", "$4", "$6"]) {
100
+ const recipe = sizeRecipeForToken(token, { family });
101
+ for (const stop of Object.keys(SIZE_RECIPE_RADIUS_STOPS) as SizeRecipeRadiusStop[]) {
102
+ const resolved = resolveControlRadius(recipe, stop);
103
+ expect(resolved.gap, `${family} ${token} ${stop}`).toBe(recipe.gap);
104
+ expect(resolved.gap).toBeGreaterThan(0);
105
+ expect(resolved.gap).toBeLessThanOrEqual(recipe.iconSize);
106
+ expect(resolved.radius).toBe(
107
+ stop === "medium" ? recipe.gap : SIZE_RECIPE_RADIUS_STOPS[stop],
108
+ );
109
+ }
110
+ }
111
+ }
103
112
  });
104
113
  });
@@ -2,8 +2,8 @@
2
2
  * Coordinated control-size recipes (LC-75 SIZE-RECIPE, LC-80 RECIPE-INPUTS).
3
3
  *
4
4
  * The default ladder is the measured Tamagui v5 table in recipeInputs
5
- * (padX / font / icon / radius per size token). Gap equals radius at
6
- * every size and at every borderRadius knob stop (`applyRadiusStop`).
5
+ * (padX / font / icon / radius per size token). Default gap equals the
6
+ * size-table radius; corner shape overrides leave that spacing intact.
7
7
  * A linear ratio is only the `{ baseHeight }` fallback — not a
8
8
  * documented divergence (MPO-46 / R6).
9
9
  *
@@ -32,7 +32,7 @@ describe("isResolvableThemeValue", () => {
32
32
  ["currentColor", "keyword"],
33
33
  ["rebeccapurple", "named colour"],
34
34
  [0.5, "number"],
35
- ])("accepts %s (%s)", (value) => {
35
+ ])("accepts %s (%s)", (value, _kind) => {
36
36
  expect(isResolvableThemeValue(value)).toBe(true);
37
37
  });
38
38
 
@@ -45,7 +45,7 @@ describe("isResolvableThemeValue", () => {
45
45
  ["bakcground", "a typo"],
46
46
  ["$", "a bare dollar"],
47
47
  [{}, "an object"],
48
- ])("rejects %s (%s)", (value) => {
48
+ ])("rejects %s (%s)", (value, _kind) => {
49
49
  expect(isResolvableThemeValue(value)).toBe(false);
50
50
  });
51
51
 
@@ -16,6 +16,12 @@ import type { Preset as PresetType } from "./preset.types";
16
16
  import { PresetContext, type PresetContextValue } from "./PresetContext";
17
17
  import { useResolvedKnobs } from "./useResolvedKnobs";
18
18
 
19
+ // These knob behavior tests hold the color scheme constant.
20
+ vi.mock(import("tamagui"), async (importOriginal) => ({
21
+ ...(await importOriginal()),
22
+ useThemeName: () => "light",
23
+ }));
24
+
19
25
  let originalMatchMedia: typeof window.matchMedia;
20
26
 
21
27
  function stubMatchMedia(
@@ -22,6 +22,8 @@ export interface TextPropertyAudit {
22
22
  export interface ElementAudit {
23
23
  /** Human-readable element descriptor */
24
24
  label: string;
25
+ /** Stable DOM position within the audited surface, distinct for sibling controls. */
26
+ key?: string;
25
27
  /** Tag name */
26
28
  tag: string;
27
29
  /** id attribute if present */
@@ -30,6 +32,10 @@ export interface ElementAudit {
30
32
  classes: string[];
31
33
  /** Audited properties (only populated when value is non-default/non-zero) */
32
34
  borderRadius?: PropertyAudit;
35
+ borderTopLeftRadius?: PropertyAudit;
36
+ borderTopRightRadius?: PropertyAudit;
37
+ borderBottomRightRadius?: PropertyAudit;
38
+ borderBottomLeftRadius?: PropertyAudit;
33
39
  borderWidth?: PropertyAudit;
34
40
  gap?: PropertyAudit;
35
41
  rowGap?: PropertyAudit;
@@ -69,6 +75,16 @@ export interface AuditReport {
69
75
  /** All audited elements (including compliant ones) */
70
76
  elements: ElementAudit[];
71
77
  }
78
+ /**
79
+ * Gap (inner spacing) knob → pixel value
80
+ * Source: gapMap in resolveKnobs.ts ($2, $4, $5 space tokens)
81
+ */
82
+ export declare const GAP_KNOB: Record<string, number>;
83
+ /**
84
+ * Gap large (gapLg) knob → pixel value
85
+ * Source: gapLgMap in resolveKnobs.ts ($3, $5, $6 space tokens)
86
+ */
87
+ export declare const GAP_LG_KNOB: Record<string, number>;
72
88
  /**
73
89
  * Runs the constraint audit in the browser.
74
90
  *
@@ -79,5 +95,5 @@ export interface AuditReport {
79
95
  *
80
96
  * Returns an AuditReport object describing all structural CSS violations.
81
97
  */
82
- export declare function runConstraintAudit(): AuditReport;
98
+ export declare function runConstraintAudit(rootSelector?: string): AuditReport;
83
99
  //# sourceMappingURL=constraintAudit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constraintAudit.d.ts","sourceRoot":"","sources":["../../src/audit/constraintAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uCAAuC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAkPD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAgiBhD"}
1
+ {"version":3,"file":"constraintAudit.d.ts","sourceRoot":"","sources":["../../src/audit/constraintAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,uBAAuB,CAAC,EAAE,aAAa,CAAC;IACxC,sBAAsB,CAAC,EAAE,aAAa,CAAC;IACvC,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uCAAuC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AA6ED;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI9C,CAAC;AAmJF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAipBrE"}
@@ -2,6 +2,6 @@ export type { AuditReport, AuditSummary, ElementAudit, PropertyAudit, TextProper
2
2
  export { runConstraintAudit } from "./constraintAudit";
3
3
  export type { AuditDiff, ElementDiff, PropertyDiff } from "./diffReport";
4
4
  export { diffAuditReports, formatAuditReport } from "./diffReport";
5
- export type { GeometryDiff, GeometryMove, MatrixElementGeometry, MatrixRect, MatrixSnapshot, MatrixTextSample, NoBreakageInput, NoBreakageResult, TextContrastResult, TextContrastViolation, } from "./themeMatrix";
6
- export { auditSignatures, captureMatrixSnapshot, diffGeometry, evaluateNoBreakage, evaluateTextContrast, } from "./themeMatrix";
5
+ export type { ChartKind, ChartProofResult, ChartProofViolation, ChartUnmeasurableReason, MatrixChartPaint, MatrixChartSample, GeometryDiff, GeometryMove, IconContrastResult, IconContrastViolation, IconExclusion, IconUnmeasurableReason, IconUnverified, MatrixElementGeometry, MatrixIconSample, MatrixRect, MatrixSnapshot, MatrixTextSample, NoBreakageInput, NoBreakageResult, TextContrastResult, TextContrastViolation, } from "./themeMatrix";
6
+ export { auditSignatures, captureMatrixSnapshot, diffGeometry, evaluateNoBreakage, evaluateIconContrast, evaluateChartProof, chartProofSignatures, iconContrastSignatures, evaluateTextContrast, } from "./themeMatrix";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
@@ -18,13 +18,21 @@
18
18
  * NOT asserted there. What must hold in every preset cell: the story
19
19
  * renders, structural values stay on the knob scales
20
20
  * (runConstraintAudit off-scale count vs the default cell), and text
21
- * ink keeps the WCAG floor (evaluateTextContrast).
21
+ * ink keeps the WCAG floor (evaluateTextContrast). Conveying SVG
22
+ * glyphs also receive an absolute 3:1 gate in every matrix cell.
22
23
  *
23
24
  * MEASURING RULE: every text assertion here measures TEXT NODES — the
24
25
  * computed style of the element that DIRECTLY contains the text, and the
25
26
  * Range-measured rect of the text itself — never the story frame. The
26
27
  * frame's font-family is always Inter and its colour is not the ink
27
28
  * (that trap shipped three wrong tickets: MPO-40/44/48).
29
+ * SVG measurements read descendant fill/stroke, including opacity. The
30
+ * bounded model handles single-ink shapes over a resolved solid backdrop;
31
+ * gradients, masks, filters, multicolor and unsupported group composition
32
+ * stay named and unverified. Explicitly declared charts route to a separate
33
+ * proof channel measuring ordered mark paint and SVG text. Geometry claims
34
+ * without a measured certificate stay unverified. Image-file SVGs, CSS glyphs and icon fonts
35
+ * are outside this channel's coverage.
28
36
  *
29
37
  * `captureMatrixSnapshot` is completely self-contained (no imports, no
30
38
  * closures) so it can be passed straight to Playwright's
@@ -68,11 +76,120 @@ export interface MatrixTextSample {
68
76
  fontWeightNum: number;
69
77
  rect: MatrixRect;
70
78
  }
79
+ export type IconExclusion = "disabled-control" | "decorative-standalone" | "hidden";
80
+ export type IconUnmeasurableReason = "unresolved-backdrop" | "masked-or-filtered" | "use-indirection" | "unsupported-paint" | "unsupported-compositing" | "multicolor" | "no-paint";
81
+ export interface MatrixIconSample {
82
+ key: string;
83
+ /** Name of the control owning this glyph, or the standalone SVG's name. */
84
+ context: string;
85
+ status: "conveying" | IconExclusion;
86
+ background: string;
87
+ backgroundResolved: boolean;
88
+ overImage: boolean;
89
+ /** Actual descendant ink, alpha-composited over the effective backdrop. */
90
+ paint?: string;
91
+ paintKinds?: Array<"fill" | "stroke">;
92
+ shapeCount: number;
93
+ distinctPaints: number;
94
+ unmeasurable?: IconUnmeasurableReason;
95
+ rect: MatrixRect;
96
+ }
97
+ export interface IconContrastViolation {
98
+ key: string;
99
+ context: string;
100
+ paint: string;
101
+ background: string;
102
+ ratio: number;
103
+ required: number;
104
+ }
105
+ export interface IconUnverified {
106
+ key: string;
107
+ context: string;
108
+ reason: IconUnmeasurableReason;
109
+ }
110
+ export interface IconContrastResult {
111
+ /** Absolute verdict. Unverified conveying paint cannot produce a pass. */
112
+ ok: boolean;
113
+ candidates: number;
114
+ measured: number;
115
+ violations: IconContrastViolation[];
116
+ unverified: IconUnverified[];
117
+ excludedDisabled: number;
118
+ excludedDecorative: number;
119
+ excludedHidden: number;
120
+ }
121
+ export type ChartKind = "bar" | "pie" | "donut" | "line" | "area";
122
+ export type ChartUnmeasurableReason = IconUnmeasurableReason | "unknown-kind" | "no-marks" | "hidden-chart" | "unverified-separation" | "incomplete-datum-text" | "unsupported-overlap";
123
+ export interface MatrixChartPaint {
124
+ key: string;
125
+ label: string;
126
+ background: string;
127
+ paint?: string;
128
+ unmeasurable?: ChartUnmeasurableReason;
129
+ }
130
+ export interface MatrixChartSample {
131
+ key: string;
132
+ kind: string;
133
+ context: string;
134
+ label: string;
135
+ background: string;
136
+ backgroundResolved: boolean;
137
+ marks: MatrixChartPaint[];
138
+ labels: MatrixChartPaint[];
139
+ /** Explicit thin axis/grid lines. Never treated as data-mark ink. */
140
+ chrome?: MatrixChartPaint[];
141
+ /** Painted drawables outside the declared mark/text/chrome channels. */
142
+ unaccountedPaint?: MatrixChartPaint[];
143
+ /** A component declaration is recorded, never accepted as geometry proof. */
144
+ separation: {
145
+ declared: boolean;
146
+ method?: "rect-bounds" | "eroded-arc";
147
+ minimumGapPx?: number;
148
+ };
149
+ datumText: {
150
+ declared: boolean;
151
+ expected: number;
152
+ observed: number;
153
+ complete: boolean;
154
+ viewId?: string;
155
+ expectedValues?: string;
156
+ verification?: "opened-dialog";
157
+ failure?: string;
158
+ };
159
+ unmeasurable?: ChartUnmeasurableReason;
160
+ }
161
+ export interface ChartProofViolation {
162
+ key: string;
163
+ context: string;
164
+ rule: "mark-backdrop" | "adjacent-pair" | "axis-text" | "missing-label";
165
+ paint?: string;
166
+ background?: string;
167
+ ratio?: number;
168
+ required?: number;
169
+ }
170
+ export interface ChartProofResult {
171
+ ok: boolean;
172
+ candidates: number;
173
+ measured: number;
174
+ marksMeasured: number;
175
+ labelsMeasured: number;
176
+ byKind: Record<string, number>;
177
+ violations: ChartProofViolation[];
178
+ unverified: Array<{
179
+ key: string;
180
+ context: string;
181
+ reason: ChartUnmeasurableReason;
182
+ }>;
183
+ }
71
184
  export interface MatrixSnapshot {
72
185
  /** False when the story root is missing or empty — always a failure. */
73
186
  storyRendered: boolean;
74
187
  geometry: MatrixElementGeometry[];
75
188
  textSamples: MatrixTextSample[];
189
+ iconSamples: MatrixIconSample[];
190
+ chartSamples: MatrixChartSample[];
191
+ /** All top-level SVG roots inside the audited story, including hidden roots. */
192
+ svgRootCount: number;
76
193
  }
77
194
  export interface GeometryMove {
78
195
  key: string;
@@ -102,7 +219,7 @@ export interface TextContrastResult {
102
219
  violations: TextContrastViolation[];
103
220
  }
104
221
  /**
105
- * Captures the geometry + text-ink snapshot of the rendered story.
222
+ * Captures geometry, direct text ink and SVG glyph paint in the rendered story.
106
223
  *
107
224
  * Self-contained by construction — pass directly to
108
225
  * `page.evaluate(captureMatrixSnapshot)`.
@@ -126,6 +243,13 @@ export declare function diffGeometry(before: MatrixSnapshot, after: MatrixSnapsh
126
243
  * silently dropped.
127
244
  */
128
245
  export declare function evaluateTextContrast(samples: MatrixTextSample[]): TextContrastResult;
246
+ /** A bounded single-ink SVG assertion. Unsupported compositions stay unverified. */
247
+ export declare function evaluateIconContrast(samples: MatrixIconSample[]): IconContrastResult;
248
+ /** Stable named findings for both absolute cell failures and preset attribution. */
249
+ export declare function iconContrastSignatures(result: IconContrastResult): string[];
250
+ /** Bounded chart proof. Declarations route samples; measured paint decides. */
251
+ export declare function evaluateChartProof(samples: MatrixChartSample[]): ChartProofResult;
252
+ export declare function chartProofSignatures(result: ChartProofResult): string[];
129
253
  /** One matrix cell's no-breakage inputs (preset axis). */
130
254
  export interface NoBreakageInput {
131
255
  storyRendered: boolean;
@@ -147,6 +271,14 @@ export interface NoBreakageInput {
147
271
  baselineContrastViolations: number;
148
272
  /** The DEFAULT-preset cell's contrast result, for naming the new misses. */
149
273
  baselineContrast?: TextContrastResult;
274
+ /**
275
+ * Supply both for icon attribution. Existing text-only callers may omit both;
276
+ * their verdict does not assert icon contrast. The matrix runner supplies both.
277
+ */
278
+ icons?: IconContrastResult;
279
+ baselineIcons?: IconContrastResult;
280
+ charts?: ChartProofResult;
281
+ baselineCharts?: ChartProofResult;
150
282
  }
151
283
  /**
152
284
  * Flattens a `runConstraintAudit` report into one signature per violation,
@@ -154,6 +286,7 @@ export interface NoBreakageInput {
154
286
  * broke rather than by how many things broke.
155
287
  */
156
288
  export declare function auditSignatures(violations: Array<{
289
+ key?: string;
157
290
  label: string;
158
291
  violations: string[];
159
292
  }>): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"themeMatrix.d.ts","sourceRoot":"","sources":["../../src/audit/themeMatrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"themeMatrix.d.ts","sourceRoot":"","sources":["../../src/audit/themeMatrix.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  * - `single` — every mark of a single-series chart takes the theme identity:
9
9
  * the active accent, or the tint solid when a tint sub-theme is active
10
10
  * (the palette re-anchors under tint exactly like the neutral ramp does).
11
- * - `categorical` — identity-led list of sanctioned Radix step-9 solids for
11
+ * - `categorical` — identity-led list of sanctioned Radix solids for
12
12
  * multi-series data. Slot 0 is the theme identity; the fixed hue cycle
13
13
  * fills the rest, dropping hues indistinguishable from the identity so
14
14
  * adjacent series stay tellable-apart under every tint.
@@ -16,7 +16,7 @@
16
16
  * semantic ramps ($red/$green/$yellow), tint-independent, scheme-aware.
17
17
  *
18
18
  * Values resolve from the same Radix scales the theme builder splats into the
19
- * base themes, so `categorical[1]` under `light` equals `$blue9`, and they
19
+ * base themes, so `categorical[1]` under `light` equals `$blue10`, and they
20
20
  * stay resolvable on native and under tint sub-themes (which only carry the
21
21
  * re-ramped neutral family).
22
22
  */
@@ -38,10 +38,12 @@ export interface ResolveChartPaletteInput {
38
38
  scheme: "light" | "dark";
39
39
  /**
40
40
  * Resolved theme-identity solid — `accentBackground` in base themes, the
41
- * re-ramped `$color9` under a tint. Falls back to the violet ramp solid
42
- * when missing or unparseable (SSR before hydration, exotic values).
41
+ * re-ramped `$color9` under a tint. Tries the ordered candidates, then
42
+ * falls back to violet when missing, unparseable or below the contrast floor.
43
43
  */
44
44
  identitySolid?: string;
45
+ /** Ordered alternatives when the identity cannot meet the mark contrast floor. */
46
+ identityCandidates?: readonly (string | undefined)[];
45
47
  }
46
48
  /**
47
49
  * Pure palette resolution — see {@link ChartPalette} for the contract.
@@ -1 +1 @@
1
- {"version":3,"file":"chartPalette.d.ts","sourceRoot":"","sources":["../../src/theme/chartPalette.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAyED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CAuBjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAU9C"}
1
+ {"version":3,"file":"chartPalette.d.ts","sourceRoot":"","sources":["../../src/theme/chartPalette.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CACtD;AAkJD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CAyBjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAe9C"}
@@ -40,7 +40,7 @@ export interface ContrastReport {
40
40
  /** The colors actually measured, as normalized 6-digit hex. */
41
41
  foreground: string;
42
42
  background: string;
43
- /** WCAG 2.x ratio rounded to 2 decimals — the number a report reads. */
43
+ /** Unrounded WCAG 2.x ratio. Round only when formatting a display value. */
44
44
  ratio: number;
45
45
  floor: number;
46
46
  pass: boolean;
@@ -49,8 +49,8 @@ export interface ContrastReport {
49
49
  * Measure one pair against its floor. Throws when a color cannot be reduced
50
50
  * to an opaque hex: an alpha color has no contrast of its own and the house
51
51
  * ramps are fully opaque, so an unmeasurable pair is a genuine failure,
52
- * never a skip. The verdict compares the REPORTED (2-decimal) ratio, so
53
- * pass/fail always matches the printed number.
52
+ * never a skip. Compare the actual ratio: rounding before classification
53
+ * can turn a below-floor pair into a passing one.
54
54
  */
55
55
  export declare function measureContrast(pair: ContrastPair): ContrastReport;
56
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"colorRules.d.ts","sourceRoot":"","sources":["../../src/theme/colorRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colorRules.d.ts","sourceRoot":"","sources":["../../src/theme/colorRules.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export interface GetThemeProps {
26
26
  }
27
27
  export interface CreateThemesBuilderOptions {
28
28
  grandChildrenThemes?: CreateThemesProps["grandChildrenThemes"];
29
- getTheme?: (props: GetThemeProps) => Record<string, string | number>;
29
+ getTheme?: (props: GetThemeProps) => Record<string, string | number | null | undefined>;
30
30
  }
31
31
  export declare const tintHueNames: Set<string>;
32
32
  export declare function createThemesBuilder(baseTheme: BaseThemeBuilderDefinition, accentTheme: ThemeBuilderDefinition, options?: CreateThemesBuilderOptions): {
@@ -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;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
+ {"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAqEhC,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,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACzF;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":"glyphPaint.d.ts","sourceRoot":"","sources":["../../src/theme/glyphPaint.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,EAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAwBR;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpD"}
1
+ {"version":3,"file":"glyphPaint.d.ts","sourceRoot":"","sources":["../../src/theme/glyphPaint.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,EAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAyBR;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpD"}
@@ -9,9 +9,9 @@
9
9
  * a theme sets `{ baseHeight }` and drops the table — it is not the
10
10
  * default ladder and is not a signed-off divergence (MPO-46 / R6).
11
11
  *
12
- * Radius steps with the size token. The borderRadius knob is an override
13
- * that retargets gap through `applyRadiusStop` (gap == radius at every
14
- * knob stop too). `radiusPx` on inputs is the $4 / medium default (9).
12
+ * Radius steps with the size token. The borderRadius knob overrides the
13
+ * painted corners while internal gap stays on the size recipe. `radiusPx`
14
+ * on inputs is the $4 / medium default (9).
15
15
  *
16
16
  * Tamagui `createThemes` / theme-builder still emits COLOR palettes only.
17
17
  * Do not stuff recipe keys into `getTheme()` / `themes`.
@@ -38,8 +38,8 @@ export type SizeRecipeTokenChannels = {
38
38
  export type SizeRecipeTokenTable = Partial<Record<SizeRecipeToken, SizeRecipeTokenChannels>>;
39
39
  /**
40
40
  * borderRadius knob stops (px). Mirrors the v5 radius tokens the knob
41
- * already resolves ($0/$2/$4/$6/$12 = 0/5/9/16/50). `applyRadiusStop`
42
- * retargets recipe.gap to the same number so gap == radius at every stop.
41
+ * already resolves ($0/$2/$4/$6/$12 = 0/5/9/16/50). These shape overrides
42
+ * do not retarget the control's internal gap.
43
43
  */
44
44
  export declare const SIZE_RECIPE_RADIUS_STOPS: {
45
45
  readonly none: 0;
@@ -181,7 +181,7 @@ export declare function resolveSizeRecipeInputs(partial?: Partial<SizeRecipeInpu
181
181
  export declare const mergeRecipeInputs: typeof resolveSizeRecipeInputs;
182
182
  export declare function sizeRecipeFromHeight(height: number, ratios?: SizeRecipeRatios): SizeRecipe;
183
183
  export declare function recipeFromTokenChannels(height: number, channels: SizeRecipeTokenChannels): SizeRecipe;
184
- /** Retarget inner gap to a borderRadius knob stop so gap == that stop's radius. */
184
+ /** Explicit recipe transformation; ordinary control shape changes use resolveControlRadius. */
185
185
  export declare function applyRadiusStop<T extends {
186
186
  gap: number;
187
187
  }>(recipe: T, stop: SizeRecipeRadiusStop): T;
@@ -197,8 +197,8 @@ export declare const SIZE_RECIPE_RADIUS_TOKEN_TO_STOP: {
197
197
  * Painted control radius + inner gap.
198
198
  *
199
199
  * Default `medium` follows the size table (gap == radius at that token).
200
- * Any other borderRadius knob stop is an override: both values become
201
- * that stop's px so gap == radius there too (MPO-46).
200
+ * Other borderRadius stops override the corners only. Internal spacing
201
+ * continues to group the icon and label at the recipe's size (LC-79).
202
202
  */
203
203
  export declare function resolveControlRadius(recipe: SizeRecipe, stop?: SizeRecipeRadiusStop): {
204
204
  radius: number;
@@ -1 +1 @@
1
- {"version":3,"file":"recipeInputs.d.ts","sourceRoot":"","sources":["../../src/theme/recipeInputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipeInputs.d.ts","sourceRoot":"","sources":["../../src/theme/recipeInputs.ts"],"names":[],"mappings":"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"}