@multiplatform.one/theme 7.5.0 → 7.6.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 (42) hide show
  1. package/package.json +5 -5
  2. package/src/audit/index.ts +19 -0
  3. package/src/audit/themeMatrix.spec.ts +274 -0
  4. package/src/audit/themeMatrix.ts +630 -0
  5. package/src/font.ts +36 -11
  6. package/src/index.ts +12 -0
  7. package/src/theme/FontKnobStyles.tsx +9 -28
  8. package/src/theme/colorRules.spec.ts +73 -0
  9. package/src/theme/cornerSmoothing.spec.ts +63 -6
  10. package/src/theme/cornerSmoothing.ts +15 -0
  11. package/src/theme/defaults/categoryFonts.ts +15 -12
  12. package/src/theme/defaults/fonts.spec.ts +106 -36
  13. package/src/theme/defaults/fonts.theme.spec.tsx +69 -58
  14. package/src/theme/defaults/fonts.ts +115 -79
  15. package/src/theme/focusState.spec.ts +17 -8
  16. package/src/theme/fontCategoryMetrics.ts +57 -0
  17. package/src/theme/fontCategoryStacks.ts +19 -6
  18. package/src/theme/index.ts +1 -0
  19. package/src/theme/resolveKnobs.spec.ts +16 -2
  20. package/src/theme/resolveKnobs.ts +3 -2
  21. package/types/audit/index.d.ts +2 -0
  22. package/types/audit/index.d.ts.map +1 -1
  23. package/types/audit/themeMatrix.d.ts +172 -0
  24. package/types/audit/themeMatrix.d.ts.map +1 -0
  25. package/types/font.d.ts.map +1 -1
  26. package/types/index.d.ts +2 -0
  27. package/types/index.d.ts.map +1 -1
  28. package/types/theme/FontKnobStyles.d.ts +6 -11
  29. package/types/theme/FontKnobStyles.d.ts.map +1 -1
  30. package/types/theme/colorRules.d.ts +1 -1
  31. package/types/theme/cornerSmoothing.d.ts.map +1 -1
  32. package/types/theme/defaults/categoryFonts.d.ts +4 -0
  33. package/types/theme/defaults/categoryFonts.d.ts.map +1 -1
  34. package/types/theme/defaults/fonts.d.ts +34 -29
  35. package/types/theme/defaults/fonts.d.ts.map +1 -1
  36. package/types/theme/fontCategoryMetrics.d.ts +36 -0
  37. package/types/theme/fontCategoryMetrics.d.ts.map +1 -0
  38. package/types/theme/fontCategoryStacks.d.ts +18 -5
  39. package/types/theme/fontCategoryStacks.d.ts.map +1 -1
  40. package/types/theme/index.d.ts +1 -0
  41. package/types/theme/index.d.ts.map +1 -1
  42. package/types/theme/resolveKnobs.d.ts.map +1 -1
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Theme-matrix invariance + no-breakage assertions (MPO-18).
3
+ *
4
+ * The theme matrix sweeps every story cell across the globals axes
5
+ * (scheme × theme colour × preset) and holds TWO separate assertions,
6
+ * never one:
7
+ *
8
+ * 1. GEOMETRY INVARIANCE across the THEME axis — switching the theme
9
+ * colour may repaint ink, never move a box. Colour is the one axis
10
+ * whose whole contract is "paint only" (LC-80 RECIPE-INPUTS: size
11
+ * recipes are generated from inputs at config time; Tamagui colour
12
+ * themes stay the colour path). Any geometry delta across colours
13
+ * means a recipe consumed a theme option.
14
+ *
15
+ * 2. NO-BREAKAGE across the PRESET axis — presets are EXPECTED to move
16
+ * pixels (boldPreset flips radius/border/weight/space; heroPreset
17
+ * moves the page title scale), so geometry equality is deliberately
18
+ * NOT asserted there. What must hold in every preset cell: the story
19
+ * renders, structural values stay on the knob scales
20
+ * (runConstraintAudit off-scale count vs the default cell), and text
21
+ * ink keeps the WCAG floor (evaluateTextContrast).
22
+ *
23
+ * MEASURING RULE: every text assertion here measures TEXT NODES — the
24
+ * computed style of the element that DIRECTLY contains the text, and the
25
+ * Range-measured rect of the text itself — never the story frame. The
26
+ * frame's font-family is always Inter and its colour is not the ink
27
+ * (that trap shipped three wrong tickets: MPO-40/44/48).
28
+ *
29
+ * `captureMatrixSnapshot` is completely self-contained (no imports, no
30
+ * closures) so it can be passed straight to Playwright's
31
+ * `page.evaluate(captureMatrixSnapshot)`, exactly like
32
+ * `runConstraintAudit`. The comparators are pure Node-side functions so
33
+ * vitest can hold them to the tripwire tests without a browser.
34
+ */
35
+ export interface MatrixRect {
36
+ x: number;
37
+ y: number;
38
+ w: number;
39
+ h: number;
40
+ }
41
+ export interface MatrixElementGeometry {
42
+ /** Stable structural path from the story root (tag:index-among-same-tag). */
43
+ key: string;
44
+ tag: string;
45
+ rect: MatrixRect;
46
+ /**
47
+ * Geometry-bearing computed properties. The theme axis must never move
48
+ * any of these; colour properties are deliberately absent.
49
+ */
50
+ props: Record<string, string>;
51
+ /** Range-measured rect of the element's DIRECT text nodes, when any. */
52
+ textRect?: MatrixRect;
53
+ }
54
+ export interface MatrixTextSample {
55
+ /** Structural key of the element that DIRECTLY contains the text node. */
56
+ key: string;
57
+ /** First characters of the text node (identification only). */
58
+ text: string;
59
+ /** Composited ink colour as #rrggbb (alpha already blended over background). */
60
+ color: string;
61
+ /** Composited effective background as #rrggbb. */
62
+ background: string;
63
+ /** False when no opaque backdrop could be resolved (gradient/image/alpha chain). */
64
+ backgroundResolved: boolean;
65
+ /** True when a background-image/gradient sits between text and backdrop. */
66
+ overImage: boolean;
67
+ fontSizePx: number;
68
+ fontWeightNum: number;
69
+ rect: MatrixRect;
70
+ }
71
+ export interface MatrixSnapshot {
72
+ /** False when the story root is missing or empty — always a failure. */
73
+ storyRendered: boolean;
74
+ geometry: MatrixElementGeometry[];
75
+ textSamples: MatrixTextSample[];
76
+ }
77
+ export interface GeometryMove {
78
+ key: string;
79
+ property: string;
80
+ before: string;
81
+ after: string;
82
+ }
83
+ export interface GeometryDiff {
84
+ identical: boolean;
85
+ /** Elements present in `before` but missing in `after`. */
86
+ removedKeys: string[];
87
+ /** Elements present in `after` but missing in `before`. */
88
+ addedKeys: string[];
89
+ moves: GeometryMove[];
90
+ }
91
+ export interface TextContrastViolation {
92
+ key: string;
93
+ text: string;
94
+ color: string;
95
+ background: string;
96
+ ratio: number;
97
+ required: number;
98
+ }
99
+ export interface TextContrastResult {
100
+ measured: number;
101
+ unmeasurable: number;
102
+ violations: TextContrastViolation[];
103
+ }
104
+ /**
105
+ * Captures the geometry + text-ink snapshot of the rendered story.
106
+ *
107
+ * Self-contained by construction — pass directly to
108
+ * `page.evaluate(captureMatrixSnapshot)`.
109
+ */
110
+ export declare function captureMatrixSnapshot(): MatrixSnapshot;
111
+ /**
112
+ * Geometry invariance diff for the THEME axis: every element must keep its
113
+ * rect, its text rect, and every geometry-bearing computed property.
114
+ * `epsilonPx` absorbs sub-pixel raster jitter in rect measurements only —
115
+ * computed properties compare exactly.
116
+ */
117
+ export declare function diffGeometry(before: MatrixSnapshot, after: MatrixSnapshot, options?: {
118
+ epsilonPx?: number;
119
+ }): GeometryDiff;
120
+ /**
121
+ * The contrast assertion for the matrix (and for downstream repos — call
122
+ * this instead of keeping a local contrast spec): WCAG AA floors from
123
+ * `colorRules`, large text (≥24px, or ≥18.66px at ≥700) takes the 3:1
124
+ * floor, everything else 4.5:1. Samples whose backdrop could not be
125
+ * resolved (gradient/image/never-opaque chain) are counted, never
126
+ * silently dropped.
127
+ */
128
+ export declare function evaluateTextContrast(samples: MatrixTextSample[]): TextContrastResult;
129
+ /** One matrix cell's no-breakage inputs (preset axis). */
130
+ export interface NoBreakageInput {
131
+ storyRendered: boolean;
132
+ /** Off-scale violation count from `runConstraintAudit` in this cell. */
133
+ offScaleViolations: number;
134
+ /** Off-scale count in the same story+scheme at the DEFAULT preset. */
135
+ baselineOffScaleViolations: number;
136
+ /**
137
+ * Per-violation signatures in this cell — see {@link auditSignatures}. A
138
+ * gate that reports "32 violations where the default cell had 31" names
139
+ * nothing a person can go and fix; with these it names the elements.
140
+ */
141
+ offScaleSignatures?: string[];
142
+ /** The same signatures in the DEFAULT-preset cell. */
143
+ baselineOffScaleSignatures?: string[];
144
+ /** Contrast result of this cell. */
145
+ contrast: TextContrastResult;
146
+ /** Contrast violation count in the same story+scheme at the DEFAULT preset. */
147
+ baselineContrastViolations: number;
148
+ /** The DEFAULT-preset cell's contrast result, for naming the new misses. */
149
+ baselineContrast?: TextContrastResult;
150
+ }
151
+ /**
152
+ * Flattens a `runConstraintAudit` report into one signature per violation,
153
+ * `"<element label> :: <violation>"`, so two cells can be compared by what
154
+ * broke rather than by how many things broke.
155
+ */
156
+ export declare function auditSignatures(violations: Array<{
157
+ label: string;
158
+ violations: string[];
159
+ }>): string[];
160
+ export interface NoBreakageResult {
161
+ ok: boolean;
162
+ failures: string[];
163
+ }
164
+ /**
165
+ * NO-BREAKAGE evaluation for the preset axis. Geometry equality is
166
+ * deliberately NOT part of this: presets are expected to move pixels.
167
+ * Breakage means: the story failed to render, structural values fell off
168
+ * the knob scales beyond the default cell's standing debt, or text ink
169
+ * lost contrast the default cell still had.
170
+ */
171
+ export declare function evaluateNoBreakage(input: NoBreakageInput): NoBreakageResult;
172
+ //# sourceMappingURL=themeMatrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeMatrix.d.ts","sourceRoot":"","sources":["../../src/audit/themeMatrix.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAoBhD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EACrD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;CAAE,GACzC,CAAC,CAWH"}
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsChD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EACrD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;CAAE,GACzC,CAAC,CAkBH"}
package/types/index.d.ts CHANGED
@@ -6,5 +6,7 @@ export * from "./keyboardFocusRing";
6
6
  export * from "./menuRow";
7
7
  export * from "./font";
8
8
  export * from "./fonts/index";
9
+ export { diffGeometry, evaluateNoBreakage, evaluateTextContrast } from "./audit";
10
+ export type { GeometryDiff, MatrixTextSample, NoBreakageInput, NoBreakageResult, TextContrastResult, TextContrastViolation, } from "./audit";
9
11
  export type { GenericFonts, MediaQueryKey, ThemeName } from "@tamagui/web";
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAG9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAI9B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACjF,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -1,17 +1,12 @@
1
+ import { fontCategoryMetrics } from "./fontCategoryMetrics";
1
2
  import type { FontCategory } from "./knobs";
2
3
  /**
3
- * Per-category legibility floors, applied on top of the base (Inter-tuned)
4
- * lineHeight tables when the heading/body knob selects that category.
5
- * `heading`/`body` are minimum lineHeight:fontSize ratios; `letterSpacing:
6
- * "neutral"` zeroes Inter's tracking-by-size curve (wrong for fixed-pitch
7
- * and connected-script families). "sans-serif" is the default scope (never
8
- * overridden), listed for completeness.
4
+ * Re-exported so `@multiplatform.one/theme` consumers keep the historical
5
+ * import path. The table itself lives in `fontCategoryMetrics.ts` because
6
+ * `defaults/fonts.ts` bakes the same floors into the registered category
7
+ * fonts and the two must not drift (LC-11).
9
8
  */
10
- export declare const fontCategoryMetrics: Record<FontCategory, {
11
- heading: number;
12
- body: number;
13
- letterSpacing: "inherit" | "neutral";
14
- }>;
9
+ export { fontCategoryMetrics };
15
10
  /** Numeric font tables for a purpose font, keyed WITHOUT the `$` prefix. */
16
11
  export interface FontScopeTables {
17
12
  size: Record<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"FontKnobStyles.d.ts","sourceRoot":"","sources":["../../src/theme/FontKnobStyles.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM5C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,YAAY,EACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAgBxE,CAAC;AAqBF,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAelF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,eAAe,GAAG,SAAS,CAgC9F;AAkCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,YAAY,EACtB,aAAa,GAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,MAAM,GAAG,SAAmC,EACvF,aAAa,GAAE,CACb,KAAK,EAAE,SAAS,GAAG,MAAM,KACtB,eAAe,GAAG,SAAmC,GACzD,MAAM,CAkBR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,SAgC7B"}
1
+ {"version":3,"file":"FontKnobStyles.d.ts","sourceRoot":"","sources":["../../src/theme/FontKnobStyles.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,uBAAuB,CAAC;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM5C;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAqB/B,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAelF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,eAAe,GAAG,SAAS,CAgC9F;AAkCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,YAAY,EACtB,aAAa,GAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,MAAM,GAAG,SAAmC,EACvF,aAAa,GAAE,CACb,KAAK,EAAE,SAAS,GAAG,MAAM,KACtB,eAAe,GAAG,SAAmC,GACzD,MAAM,CAkBR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,SAgC7B"}
@@ -113,7 +113,7 @@ export interface ButtonColorConfig extends ComponentColorConfig {
113
113
  }
114
114
  export declare const buttonColors: ButtonColorConfig;
115
115
  export declare const inputColors: ComponentColorConfig;
116
- export declare function $color(step: ColorStep): "$color3" | "$color1" | "$color2" | "$color12" | "$color7" | "$color4" | "$color5" | "$color10" | "$color11" | "$color6" | "$color8" | "$color9";
116
+ export declare function $color(step: ColorStep): "$color3" | "$color1" | "$color2" | "$color12" | "$color7" | "$color4" | "$color5" | "$color9" | "$color10" | "$color6" | "$color11" | "$color8";
117
117
  export interface SemanticGroup {
118
118
  key: string;
119
119
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"cornerSmoothing.d.ts","sourceRoot":"","sources":["../../src/theme/cornerSmoothing.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAE1E,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,kDAAwE,CAAC;AAExG;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,GACxE,OAAO,CAQT;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,MAAM,CAIR;AAMD,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,eAAyB,GAAG,IAAI,CAQ9E;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,IAAI,IAAI,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAoB5C"}
1
+ {"version":3,"file":"cornerSmoothing.d.ts","sourceRoot":"","sources":["../../src/theme/cornerSmoothing.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAE1E,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,kDAAwE,CAAC;AAExG;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,GACxE,OAAO,CAQT;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,MAAM,CAIR;AAMD,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,eAAyB,GAAG,IAAI,CAQ9E;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,IAAI,IAAI,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAoB5C"}
@@ -3,6 +3,10 @@
3
3
  * heading/body overrides. FontKnobStyles looks these up as `$serif` etc.
4
4
  * so headingFont=serif writes `--f-family` even when the app only customizes
5
5
  * heading/body (SHC console Operator).
6
+ *
7
+ * Picked out of `defaultFonts` rather than built a second time: two
8
+ * construction paths meant `$mono` could be registered from one stack here
9
+ * and another there, which is the same one-source failure MPO-44 was about.
6
10
  */
7
11
  export declare const defaultCategoryFonts: {
8
12
  serif: import("tamagui").GenericFont;
@@ -1 +1 @@
1
- {"version":3,"file":"categoryFonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/categoryFonts.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAWhC,CAAC"}
1
+ {"version":3,"file":"categoryFonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/categoryFonts.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAWhC,CAAC"}
@@ -1,39 +1,44 @@
1
- import type { GenericFont } from "tamagui";
1
+ import { type GenericFont } from "@tamagui/web";
2
+ import type { FontCategory } from "../knobs";
2
3
  /** Inter dynamic tracking for a rendered `sizePx`, in em. */
3
4
  export declare function interTrackingEm(sizePx: number): number;
4
5
  /** Inter dynamic tracking for a rendered `sizePx`, in px (2-decimal). */
5
6
  export declare function interTrackingPx(sizePx: number): number;
6
- /** Body leading stays on the ramp: size + 10 (14 → 24). Never CSS `normal`. */
7
+ /**
8
+ * Legacy `size + 10` leading. Kept for `createDefaultFont` callers that pass
9
+ * their own size table and therefore have no era leading to floor.
10
+ */
7
11
  export declare const BODY_LINE_HEIGHT_OFFSET = 10;
8
12
  export declare function bodyLineHeightPx(sizePx: number): number;
13
+ /**
14
+ * The era's body size table. Exported under its historical name because
15
+ * `createDefaultFont` defaults to it, so a consumer-registered category font
16
+ * lands on the same ladder as the built-in ones instead of a private copy
17
+ * that drifts at the next pin (MPO-19 X8/X9).
18
+ */
9
19
  export declare const bodyFontSizes: Record<string, number>;
20
+ /** The era's body leading, before any per-category floor. */
21
+ export declare const bodyFontLineHeights: Record<string, number>;
10
22
  /**
11
- * Concrete family stacks for each `headingFont`/`bodyFont` category.
12
- * Distinct first families so a text-node measurement cannot collapse three
13
- * stops onto one system fallback. Matches `packages/config/fonts.ts`
14
- * (serif/mono are explicit system aliases; the rest are shipped webfonts).
23
+ * Concrete family stacks for each `headingFont`/`bodyFont` category. Alias of
24
+ * the one table in `fontCategoryStacks.ts`, which `FontKnobStyles` also reads
25
+ * for its `--f-family` fallback — one stop cannot render two faces.
15
26
  */
16
- export declare const fontFamilyStacks: {
17
- readonly "sans-serif": "Inter, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif";
18
- readonly serif: "Georgia, 'Times New Roman', Times, serif";
19
- readonly mono: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace";
20
- readonly slab: "'Roboto Slab', 'Rockwell', 'Courier New', serif";
21
- readonly rounded: "'Nunito', 'Varela Round', system-ui, sans-serif";
22
- readonly condensed: "'Roboto Condensed', 'Arial Narrow', sans-serif";
23
- readonly cursive: "'Dancing Script', 'Pacifico', cursive";
24
- readonly handwriting: "'Caveat', 'Patrick Hand', 'Comic Sans MS', cursive";
25
- readonly pixel: "'Silkscreen', 'Press Start 2P', monospace";
26
- readonly blackletter: "'UnifrakturCook', 'Fraktur', serif";
27
- readonly geometric: "'Futura', 'Poppins', 'Century Gothic', sans-serif";
28
- };
29
- export type FontFamilyCategory = keyof typeof fontFamilyStacks;
27
+ export declare const fontFamilyStacks: Record<FontCategory, string>;
28
+ export type FontFamilyCategory = FontCategory;
29
+ /**
30
+ * Leading for one category: the era's body table with the category's LC-11
31
+ * floor applied. Every text step comes back as `$body`'s own value; only the
32
+ * display steps, where the era's taper eases below the floor, move up.
33
+ */
34
+ export declare function categoryLineHeights(category: FontCategory): Record<string, number>;
30
35
  /**
31
- * Category font on the body ramp: same size table as Inter (including
32
- * `true: 14`) and lineHeight size+10. Inter tracking is NOT copied — that
33
- * curve is Inter-specific (LC-11); FontKnobStyles applies per-category
34
- * floors when the knob restyles `$heading`/`$body`.
36
+ * Category font on the `$body` ladder: same sizes (including `true`), same
37
+ * weights, leading floored per LC-11, tracking neutral. A missing `true` key
38
+ * is what collapsed `$serif`/`$mono`/`$rounded` to the system face at
39
+ * `line-height: normal` (MPO-44).
35
40
  */
36
- export declare function createCategoryFont(family: string): GenericFont;
41
+ export declare function createCategoryFont(category: FontCategory, family: string): GenericFont;
37
42
  export declare const defaultHeadingFont: import("@tamagui/web").FillInFont<{
38
43
  face: {
39
44
  readonly 400: {
@@ -53,7 +58,7 @@ export declare const defaultHeadingFont: import("@tamagui/web").FillInFont<{
53
58
  lineHeight: Record<string, number>;
54
59
  weight: Record<string, string>;
55
60
  letterSpacing: Record<string, number>;
56
- }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 10 | 11 | 13 | 14 | "true" | 16 | 6 | 8 | 9 | 15>;
61
+ }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 9 | 15 | 10 | 6 | 16 | 11 | 14 | 8 | 13 | "true">;
57
62
  export declare const defaultBodyFont: import("@tamagui/web").FillInFont<{
58
63
  face: {
59
64
  readonly 400: {
@@ -73,7 +78,7 @@ export declare const defaultBodyFont: import("@tamagui/web").FillInFont<{
73
78
  lineHeight: Record<string, number>;
74
79
  weight: Record<string, string>;
75
80
  letterSpacing: Record<string, number>;
76
- }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 10 | 11 | 13 | 14 | "true" | 16 | 6 | 8 | 9 | 15>;
81
+ }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 9 | 15 | 10 | 6 | 16 | 11 | 14 | 8 | 13 | "true">;
77
82
  export declare const defaultSerifFont: GenericFont;
78
83
  export declare const defaultMonoFont: GenericFont;
79
84
  export declare const defaultSlabFont: GenericFont;
@@ -105,7 +110,7 @@ export declare const defaultFonts: {
105
110
  lineHeight: Record<string, number>;
106
111
  weight: Record<string, string>;
107
112
  letterSpacing: Record<string, number>;
108
- }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 10 | 11 | 13 | 14 | "true" | 16 | 6 | 8 | 9 | 15>;
113
+ }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 9 | 15 | 10 | 6 | 16 | 11 | 14 | 8 | 13 | "true">;
109
114
  readonly body: import("@tamagui/web").FillInFont<{
110
115
  face: {
111
116
  readonly 400: {
@@ -125,7 +130,7 @@ export declare const defaultFonts: {
125
130
  lineHeight: Record<string, number>;
126
131
  weight: Record<string, string>;
127
132
  letterSpacing: Record<string, number>;
128
- }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 10 | 11 | 13 | 14 | "true" | 16 | 6 | 8 | 9 | 15>;
133
+ }, 3 | 1 | 2 | 12 | 7 | 4 | 5 | 9 | 15 | 10 | 6 | 16 | 11 | 14 | 8 | 13 | "true">;
129
134
  readonly serif: GenericFont;
130
135
  readonly mono: GenericFont;
131
136
  readonly slab: GenericFont;
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/fonts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwC3C,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAQD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBhD,CAAC;AA6CF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAanB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAU9D;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iFAS9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;iFAS3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,aAA6C,CAAC;AAC3E,eAAO,MAAM,eAAe,aAA4C,CAAC;AACzE,eAAO,MAAM,eAAe,aAA4C,CAAC;AACzE,eAAO,MAAM,kBAAkB,aAA+C,CAAC;AAC/E,eAAO,MAAM,oBAAoB,aAAiD,CAAC;AACnF,eAAO,MAAM,kBAAkB,aAA+C,CAAC;AAC/E,eAAO,MAAM,sBAAsB,aAAmD,CAAC;AACvF,eAAO,MAAM,gBAAgB,aAA6C,CAAC;AAC3E,eAAO,MAAM,sBAAsB,aAAmD,CAAC;AACvF,eAAO,MAAM,oBAAoB,aAAiD,CAAC;AAEnF,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaf,CAAC"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/fonts.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsE7C,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAuCD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAa,CAAC;AAE/D,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAmB,CAAC;AAe3E;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,8BAAqB,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAQtF;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iFAS9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;iFAS3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AACpF,eAAO,MAAM,eAAe,aAAoD,CAAC;AACjF,eAAO,MAAM,eAAe,aAAoD,CAAC;AACjF,eAAO,MAAM,kBAAkB,aAA0D,CAAC;AAC1F,eAAO,MAAM,oBAAoB,aAA8D,CAAC;AAChG,eAAO,MAAM,kBAAkB,aAA0D,CAAC;AAC1F,eAAO,MAAM,sBAAsB,aAGlC,CAAC;AACF,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AACpF,eAAO,MAAM,sBAAsB,aAGlC,CAAC;AACF,eAAO,MAAM,oBAAoB,aAA8D,CAAC;AAEhG,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaf,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { FontCategory } from "./knobs";
2
+ /**
3
+ * Per-category legibility floors (LC-11 FONT-FAMILY-METRICS).
4
+ *
5
+ * `heading` / `body` are minimum lineHeight:fontSize ratios. `letterSpacing:
6
+ * "neutral"` marks the families where Inter's tracking-by-size curve is
7
+ * actively wrong — fixed-pitch faces must keep their pitch, and connected
8
+ * scripts break when tracked apart.
9
+ *
10
+ * Two consumers read this table and they must never drift apart:
11
+ *
12
+ * - `FontKnobStyles` emits `--f-lineHeight-N` overrides on the `.font_body`
13
+ * / `.font_heading` CSS scopes, which is how the knob restyles text that
14
+ * never asked for a category token (web only).
15
+ * - `defaults/fonts.ts` bakes the same floors into each registered category
16
+ * font's own lineHeight table, which is the path the knob actually takes:
17
+ * `bodyFont: "serif"` renders `.font_serif`, and the CSS scope rules above
18
+ * are keyed to `.font_body`, so they never reach it. Native has no CSS at
19
+ * all and depends on the table entirely.
20
+ *
21
+ * "sans-serif" is the default scope and is listed for completeness — the
22
+ * `$body` / `$heading` tables are upstream's under the v5 era pin (MPO-19
23
+ * X8/X9) and this file does not rewrite them.
24
+ */
25
+ export declare const fontCategoryMetrics: Record<FontCategory, {
26
+ heading: number;
27
+ body: number;
28
+ letterSpacing: "inherit" | "neutral";
29
+ }>;
30
+ /**
31
+ * Leading for one size step: the era's own value, raised to the category's
32
+ * floor when the era's taper falls under it. Never below the base, so a
33
+ * category can only ever ask for MORE room than `$body` takes, never less.
34
+ */
35
+ export declare function flooredLineHeight(sizePx: number, baseLineHeightPx: number, minRatio: number): number;
36
+ //# sourceMappingURL=fontCategoryMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fontCategoryMetrics.d.ts","sourceRoot":"","sources":["../../src/theme/fontCategoryMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,YAAY,EACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAgBxE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER"}
@@ -1,11 +1,24 @@
1
1
  import type { FontCategory } from "./knobs";
2
2
  /**
3
- * Concrete stacks for each headingFont/bodyFont category. Used as the
4
- * FontKnobStyles `--f-family` fallback when Tamagui has no `$serif` (etc.)
5
- * font registered, and as the default category fonts on
6
- * createDefaultThemeConfig so consumers do not have to pass a font map.
3
+ * The one concrete family stack per headingFont/bodyFont category.
7
4
  *
8
- * Matches packages/config/fonts.ts (system serif/mono; webfonts for the rest).
5
+ * Both paths read THIS table, so a stop cannot render one face through the
6
+ * registered font and another through the CSS fallback:
7
+ *
8
+ * - `defaults/fonts.ts` builds the registered `$serif` / `$mono` / … fonts
9
+ * from it (the path the knob takes on every platform).
10
+ * - `FontKnobStyles` falls back to it for `--f-family` when a consumer's
11
+ * config has no font registered for the category (live SHC console had
12
+ * the style tag and skipped the family).
13
+ *
14
+ * Distinct FIRST families throughout, because a text-node measurement reads
15
+ * the first resolvable name — three stops that all begin at a system
16
+ * fallback is the MPO-44 defect.
17
+ *
18
+ * Tracks `packages/config/fonts.ts` (serif/mono/geometric are system aliases,
19
+ * the rest are shipped webfonts). `mono` is the one deliberate widening: the
20
+ * template's bare `monospace` keyword leaves the face to the UA, so this
21
+ * names the platform faces ahead of it and keeps the keyword last.
9
22
  */
10
23
  export declare const fontCategoryStacks: Record<FontCategory, string>;
11
24
  //# sourceMappingURL=fontCategoryStacks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fontCategoryStacks.d.ts","sourceRoot":"","sources":["../../src/theme/fontCategoryStacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAa3D,CAAC"}
1
+ {"version":3,"file":"fontCategoryStacks.d.ts","sourceRoot":"","sources":["../../src/theme/fontCategoryStacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAa3D,CAAC"}
@@ -9,6 +9,7 @@ export * from "./defaults/index";
9
9
  export * from "./devtools/ThemeDevtoolsPanel";
10
10
  export * from "./focusState";
11
11
  export * from "./glyphPaint";
12
+ export * from "./fontCategoryMetrics";
12
13
  export * from "./fontCategoryStacks";
13
14
  export * from "./FontKnobStyles";
14
15
  export * from "./groupGeometry";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,MAAM,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjF,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,MAAM,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjF,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAC;AAU9D,OAAO,KAAK,EAA8B,KAAK,EAAE,cAAc,EAAc,MAAM,SAAS,CAAC;AAE7F,OAAO,KAAK,EAOV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,WAAW,CAAC;AAKnB;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAI/D,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAIlE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,KAAK,CAU3E;AAID,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAoDX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAErF;AA0BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GACpB,MAAM,GAAG,MAAM,CAIjB;AAqFD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEZ,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnB,CAAC;AAE1D,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AA2N3C,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,MAAM,GAAE,WAAqB,GAC5B,aAAa,CAyNf"}
1
+ {"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAC;AAU9D,OAAO,KAAK,EAA8B,KAAK,EAAE,cAAc,EAAc,MAAM,SAAS,CAAC;AAE7F,OAAO,KAAK,EAOV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,WAAW,CAAC;AAKnB;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAI/D,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAIlE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,KAAK,CAU3E;AAID,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAqDX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAErF;AA0BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GACpB,MAAM,GAAG,MAAM,CAIjB;AAqFD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEZ,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnB,CAAC;AAE1D,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AA2N3C,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,MAAM,GAAE,WAAqB,GAC5B,aAAa,CAyNf"}