@multiplatform.one/theme 7.52.0 → 7.54.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.
- package/package.json +5 -5
- package/src/audit/constraintAudit.spec.ts +22 -0
- package/src/audit/constraintAudit.ts +7 -2
- package/src/figma/figmaTokens.spec.ts +9 -3
- package/src/theme/createDefaultThemeConfig.spec.ts +4 -3
- package/src/theme/createThemes.ts +6 -0
- package/src/theme/defaults/builderOptions.ts +36 -1
- package/src/theme/defaults/secondaryInk.spec.ts +76 -0
- package/src/theme/recipes.ts +20 -0
- package/src/theme/resolveKnobs.spec.ts +84 -2
- package/src/theme/resolveKnobs.ts +53 -9
- package/types/audit/constraintAudit.d.ts.map +1 -1
- package/types/theme/createThemes.d.ts.map +1 -1
- package/types/theme/defaults/builderOptions.d.ts +14 -0
- package/types/theme/defaults/builderOptions.d.ts.map +1 -1
- package/types/theme/recipes.d.ts +19 -0
- package/types/theme/recipes.d.ts.map +1 -1
- package/types/theme/resolveKnobs.d.ts +9 -1
- package/types/theme/resolveKnobs.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/theme",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.54.0",
|
|
4
4
|
"description": "Tamagui theme system for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multiplatform",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@multiplatform.one/platform": "^7.
|
|
76
|
-
"@multiplatform.one/store": "^7.
|
|
75
|
+
"@multiplatform.one/platform": "^7.54.0",
|
|
76
|
+
"@multiplatform.one/store": "^7.54.0",
|
|
77
77
|
"@tamagui/animations-react-native": "2.7.6",
|
|
78
78
|
"@tamagui/colors": "2.7.6",
|
|
79
79
|
"@tamagui/config": "2.7.6",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
91
|
"@expo/prebuild-config": "55.0.18",
|
|
92
|
-
"@multiplatform.one/config": "7.
|
|
93
|
-
"@multiplatform.one/test-utils": "7.
|
|
92
|
+
"@multiplatform.one/config": "7.54.0",
|
|
93
|
+
"@multiplatform.one/test-utils": "7.54.0",
|
|
94
94
|
"@tamagui/animations-css": "2.7.6",
|
|
95
95
|
"@tamagui/animations-reanimated": "2.7.6",
|
|
96
96
|
"@tamagui/font-inter": "2.7.6",
|
|
@@ -285,6 +285,28 @@ describe("font weight provenance", () => {
|
|
|
285
285
|
expect(measured()?.fontWeight?.offScale).toBe(true);
|
|
286
286
|
expect(measured()?.violations.join(" ")).not.toContain(`${weight}px`);
|
|
287
287
|
});
|
|
288
|
+
it.each([500, 700])("accepts the label role at %i on a form label (LC-152)", (weight) => {
|
|
289
|
+
const el = document.createElement("label");
|
|
290
|
+
el.id = "specimen";
|
|
291
|
+
el.style.fontWeight = String(weight);
|
|
292
|
+
document.body.replaceChildren(el);
|
|
293
|
+
for (const run of [audit, runConstraintAudit]) {
|
|
294
|
+
const entry = run().elements.find((item) => item.id === "specimen");
|
|
295
|
+
expect(entry?.fontWeight).toMatchObject({ value: weight, offScale: false });
|
|
296
|
+
expect(entry?.fontWeight?.knob).toBe("label role (LC-152)");
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
it.each([500, 600])("rejects %i outside a label and a heading", (weight) => {
|
|
300
|
+
specimen(`font-weight:${weight}`);
|
|
301
|
+
expect(measured()?.fontWeight?.offScale).toBe(true);
|
|
302
|
+
});
|
|
303
|
+
it("rejects a form label at a weight the label role never takes", () => {
|
|
304
|
+
const el = document.createElement("label");
|
|
305
|
+
el.id = "specimen";
|
|
306
|
+
el.style.fontWeight = "600";
|
|
307
|
+
document.body.replaceChildren(el);
|
|
308
|
+
expect(measured()?.fontWeight?.offScale).toBe(true);
|
|
309
|
+
});
|
|
288
310
|
it("does not grant arbitrary elements heading weights", () => {
|
|
289
311
|
specimen("font-weight:800");
|
|
290
312
|
expect(measured()?.fontWeight?.offScale).toBe(true);
|
|
@@ -964,6 +964,9 @@ export function runConstraintAudit(rootSelector?: string): AuditReport {
|
|
|
964
964
|
),
|
|
965
965
|
)) &&
|
|
966
966
|
[600, 700, 800].includes(fw);
|
|
967
|
+
// LC-152 TEXT-ROLES: a form label is the label role, 500 (700 under the
|
|
968
|
+
// bold fontWeight knob), not body copy at a stray weight.
|
|
969
|
+
const configuredLabel = el.tagName === "LABEL" && [500, 700].includes(fw);
|
|
967
970
|
const expected =
|
|
968
971
|
weightKnob !== null && ["regular", "bold"].includes(weightKnob)
|
|
969
972
|
? _FONT_WEIGHT_KNOB[weightKnob]
|
|
@@ -971,13 +974,15 @@ export function runConstraintAudit(rootSelector?: string): AuditReport {
|
|
|
971
974
|
const offScale =
|
|
972
975
|
weightKnob !== null
|
|
973
976
|
? expected === undefined || fw !== expected
|
|
974
|
-
: !_VALID_FONT_WEIGHT.has(fw) && !configuredHeading;
|
|
977
|
+
: !_VALID_FONT_WEIGHT.has(fw) && !configuredHeading && !configuredLabel;
|
|
975
978
|
const knob =
|
|
976
979
|
weightKnob !== null
|
|
977
980
|
? `fontWeight:${weightKnob}`
|
|
978
981
|
: configuredHeading
|
|
979
982
|
? "configured heading (@tamagui/config/v5)"
|
|
980
|
-
:
|
|
983
|
+
: configuredLabel
|
|
984
|
+
? "label role (LC-152)"
|
|
985
|
+
: _reverseFontWeight(fw);
|
|
981
986
|
entry.fontWeight = { value: fw, unit: "", knob, offScale };
|
|
982
987
|
if (offScale)
|
|
983
988
|
entry.violations.push(
|
|
@@ -101,7 +101,8 @@ describe("buildFigmaTokens", () => {
|
|
|
101
101
|
// the correction landing, and what this pins is that it landed —
|
|
102
102
|
// borderColor back off color5, the background states no longer forced.
|
|
103
103
|
expect(result.semantic.borderColor?.alias).toBe("color4");
|
|
104
|
-
|
|
104
|
+
// LC-152: the secondary ink is a different ramp step per scheme, so no one alias.
|
|
105
|
+
expect(result.semantic.textMuted?.alias).toBeNull();
|
|
105
106
|
expect(result.semantic.placeholderColor?.alias).toBe("color9");
|
|
106
107
|
expect(result.semantic.surfaceMuted?.alias).toBe("color10");
|
|
107
108
|
expect(result.semantic.borderStrong?.alias).toBe("color7");
|
|
@@ -115,8 +116,13 @@ describe("buildFigmaTokens", () => {
|
|
|
115
116
|
});
|
|
116
117
|
|
|
117
118
|
it("derives textAccent knob tiers as text-low/medium/high", () => {
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
// LC-152: low and medium are the scheme-aware secondary ink, a different
|
|
120
|
+
// ramp step per scheme ($color9 light, $color10 dark), so no one alias.
|
|
121
|
+
for (const tier of ["text-low", "text-medium"]) {
|
|
122
|
+
expect(result.semantic[tier]?.alias, tier).toBeNull();
|
|
123
|
+
expect(result.semantic[tier]?.light, tier).toBe(result.semantic.textMuted?.light);
|
|
124
|
+
expect(result.semantic[tier]?.dark, tier).toBe(result.semantic.textMuted?.dark);
|
|
125
|
+
}
|
|
120
126
|
expect(result.semantic["text-high"]?.alias).toBe("color12");
|
|
121
127
|
});
|
|
122
128
|
|
|
@@ -90,8 +90,8 @@ describe("createDefaultThemeConfig — builderOptions.getTheme composition (DF-0
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
it("consumer keys win over the default derivation per key", () => {
|
|
93
|
-
// Default getTheme
|
|
94
|
-
// to color10
|
|
93
|
+
// Default getTheme picks textMuted as the secondary ink ($color9 in light);
|
|
94
|
+
// the consumer moves it to color10, and composition keeps the consumer's choice.
|
|
95
95
|
for (const scheme of ["light", "dark"] as const) {
|
|
96
96
|
expect(themes[scheme].textMuted).toBe(themes[scheme].color10);
|
|
97
97
|
}
|
|
@@ -156,7 +156,8 @@ describe("createDefaultThemeConfig — builderOptions.getTheme composition (DF-0
|
|
|
156
156
|
for (const scheme of ["light", "dark"] as const) {
|
|
157
157
|
const theme = themes[scheme];
|
|
158
158
|
expect(normalizeToHex(theme.outlineColor)).toBeTruthy();
|
|
159
|
-
|
|
159
|
+
// LC-152: textMuted is the secondary ink, $color9 in light, $color10 in dark.
|
|
160
|
+
expect(theme.textMuted).toBe(theme[scheme === "light" ? "color9" : "color10"]);
|
|
160
161
|
}
|
|
161
162
|
expect(config.recipeFamilies?.control.boxVariants.$4.height).toBe(40);
|
|
162
163
|
});
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
pickReadableForeground,
|
|
14
14
|
relativeLuminance,
|
|
15
15
|
} from "./colorRules";
|
|
16
|
+
import { pickSecondaryInk } from "./defaults/builderOptions";
|
|
16
17
|
import { themeRampHues } from "./ramps";
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -229,6 +230,11 @@ function neutralizeTintText(
|
|
|
229
230
|
for (const key of tintNeutralTextKeys) {
|
|
230
231
|
if (key in patched && base[key] != null) patched[key] = base[key];
|
|
231
232
|
}
|
|
233
|
+
// LC-152: the secondary ink is neutral too, the most muted neutral step
|
|
234
|
+
// that clears 7:1 on this tint's own surfaces. The hue's step, picked on
|
|
235
|
+
// its palette, measured 4:1 on light tints; the scheme's own pick, 6.6:1
|
|
236
|
+
// on dark_blue.
|
|
237
|
+
if ("textMuted" in patched) patched.textMuted = pickSecondaryInk(patched, base);
|
|
232
238
|
out[name] = patched;
|
|
233
239
|
}
|
|
234
240
|
return out;
|
|
@@ -78,6 +78,41 @@ function pickHairlineBorderColor(
|
|
|
78
78
|
return undefined;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* LC-152 TEXT-ROLES: the secondary text ink. Labels, captions and meta are
|
|
83
|
+
* 12-13px, so the floor is 7:1 (AAA) on the page and on every card tier,
|
|
84
|
+
* and the pick is the most muted ramp step that clears it. The stock v5 ramp
|
|
85
|
+
* is not symmetric: light $color11 is 14% lightness, two points off the
|
|
86
|
+
* primary ink, so one fixed step cannot read as secondary in both schemes.
|
|
87
|
+
* On the default ramp this lands on $color9 in light and $color10 in dark.
|
|
88
|
+
*/
|
|
89
|
+
export const secondaryInkContrast = 7;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* `ramp` supplies the candidate steps when they differ from the theme whose
|
|
93
|
+
* surfaces the ink sits on: a tint picks from its scheme's neutral ramp.
|
|
94
|
+
*/
|
|
95
|
+
export function pickSecondaryInk(
|
|
96
|
+
theme: Record<string, string>,
|
|
97
|
+
ramp: Record<string, string> = theme,
|
|
98
|
+
): string {
|
|
99
|
+
const fallback = ramp.color11 ?? ramp.color12 ?? "transparent";
|
|
100
|
+
const surfaces = [theme.background, theme.color1, theme.color2, theme.color3].map((raw) =>
|
|
101
|
+
normalizeToHex(raw ?? ""),
|
|
102
|
+
);
|
|
103
|
+
if (surfaces.some((hex) => !hex)) return fallback;
|
|
104
|
+
const luminances = surfaces.map((hex) => relativeLuminance(hex!));
|
|
105
|
+
for (const key of [8, 9, 10, 11]) {
|
|
106
|
+
const raw = ramp[`color${key}`];
|
|
107
|
+
const hex = raw ? normalizeToHex(raw) : null;
|
|
108
|
+
if (!raw || !hex) continue;
|
|
109
|
+
const luminance = relativeLuminance(hex);
|
|
110
|
+
const minC = Math.min(...luminances.map((surface) => contrastRatio(luminance, surface)));
|
|
111
|
+
if (minC >= secondaryInkContrast) return raw;
|
|
112
|
+
}
|
|
113
|
+
return fallback;
|
|
114
|
+
}
|
|
115
|
+
|
|
81
116
|
function getBaseTheme(theme: Record<string, string>) {
|
|
82
117
|
const borderColorHairline = pickHairlineBorderColor(theme.borderColor, (n) => theme[`color${n}`]);
|
|
83
118
|
return {
|
|
@@ -87,7 +122,7 @@ function getBaseTheme(theme: Record<string, string>) {
|
|
|
87
122
|
switchThumb: "#ffffff",
|
|
88
123
|
// The v5 makeSurface templates own the interaction ramp and borders.
|
|
89
124
|
// No ramp step is pinned here; only semantic aliases are added.
|
|
90
|
-
textMuted: theme
|
|
125
|
+
textMuted: pickSecondaryInk(theme),
|
|
91
126
|
textSubtle: theme.color6,
|
|
92
127
|
borderStrong: theme.color7,
|
|
93
128
|
borderStrongHover: theme.color8,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { contrastRatio, normalizeToHex, relativeLuminance } from "../colorRules";
|
|
3
|
+
import { createThemesBuilder, tintHueNames } from "../createThemes";
|
|
4
|
+
import { defaultAccentTheme } from "./accent";
|
|
5
|
+
import { defaultBaseTheme } from "./base";
|
|
6
|
+
import { defaultBuilderOptions, pickSecondaryInk, secondaryInkContrast } from "./builderOptions";
|
|
7
|
+
|
|
8
|
+
type Themes = Record<string, Record<string, string>>;
|
|
9
|
+
|
|
10
|
+
const built = createThemesBuilder(
|
|
11
|
+
defaultBaseTheme,
|
|
12
|
+
defaultAccentTheme,
|
|
13
|
+
defaultBuilderOptions,
|
|
14
|
+
).themes() as Themes;
|
|
15
|
+
|
|
16
|
+
const luminance = (raw: string) => relativeLuminance(normalizeToHex(raw)!);
|
|
17
|
+
const minContrast = (theme: Record<string, string>, ink: string) =>
|
|
18
|
+
Math.min(
|
|
19
|
+
...[theme.background!, theme.color1!, theme.color2!, theme.color3!].map((surface) =>
|
|
20
|
+
contrastRatio(luminance(ink), luminance(surface)),
|
|
21
|
+
),
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
describe("LC-152 secondary ink", () => {
|
|
25
|
+
it("lands on $color9 in light and $color10 in dark on the default ramp", () => {
|
|
26
|
+
expect(built.light!.textMuted).toBe(built.light!.color9);
|
|
27
|
+
expect(built.dark!.textMuted).toBe(built.dark!.color10);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("clears 7:1 on the page and every card tier in both schemes", () => {
|
|
31
|
+
for (const scheme of ["light", "dark"] as const) {
|
|
32
|
+
const theme = built[scheme]!;
|
|
33
|
+
expect(minContrast(theme, theme.textMuted!)).toBeGreaterThanOrEqual(secondaryInkContrast);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("is the most muted step that clears the floor, so it reads as secondary", () => {
|
|
38
|
+
for (const scheme of ["light", "dark"] as const) {
|
|
39
|
+
const theme = built[scheme]!;
|
|
40
|
+
const index = Number(
|
|
41
|
+
Object.entries(theme)
|
|
42
|
+
.find(([key, value]) => /^color\d+$/.test(key) && value === theme.textMuted)![0]
|
|
43
|
+
.slice(5),
|
|
44
|
+
);
|
|
45
|
+
const softer = theme[`color${index - 1}`]!;
|
|
46
|
+
expect(minContrast(theme, softer)).toBeLessThan(secondaryInkContrast);
|
|
47
|
+
expect(theme.textMuted).not.toBe(theme.color12);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("every scheme theme that carries a ramp gets a secondary ink at the floor or the best it has", () => {
|
|
52
|
+
for (const [name, theme] of Object.entries(built)) {
|
|
53
|
+
if (!theme.color5 || !theme.textMuted) continue;
|
|
54
|
+
if (tintHueNames.has(name.split("_")[1] ?? "")) continue;
|
|
55
|
+
expect(theme.textMuted, name).toBe(pickSecondaryInk(theme));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("a tint takes a neutral secondary ink that clears 7:1 on the tint's own surfaces", () => {
|
|
60
|
+
// The hue's own step cleared 7:1 on the palette it was picked from but only
|
|
61
|
+
// 4:1 on the tint's final surfaces (light_orange measured 3.99:1), and the
|
|
62
|
+
// scheme's pick reached 6.6:1 on dark_blue, so a tint picks from the
|
|
63
|
+
// scheme's neutral ramp against its own surfaces.
|
|
64
|
+
let tints = 0;
|
|
65
|
+
for (const [name, theme] of Object.entries(built)) {
|
|
66
|
+
const [scheme, hue, ...rest] = name.split("_");
|
|
67
|
+
if (rest.length || !hue || !tintHueNames.has(hue) || !theme.textMuted) continue;
|
|
68
|
+
tints += 1;
|
|
69
|
+
expect(theme.textMuted, name).toBe(pickSecondaryInk(theme, built[scheme!]!));
|
|
70
|
+
expect(minContrast(theme, theme.textMuted!), name).toBeGreaterThanOrEqual(
|
|
71
|
+
secondaryInkContrast,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
expect(tints).toBeGreaterThan(0);
|
|
75
|
+
});
|
|
76
|
+
});
|
package/src/theme/recipes.ts
CHANGED
|
@@ -150,6 +150,13 @@ export interface CornerSmoothingCarrier {
|
|
|
150
150
|
className?: string;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
export interface TextRoleFragment {
|
|
154
|
+
fontSize: FontSizeTokens;
|
|
155
|
+
lineHeight: FontSizeTokens;
|
|
156
|
+
fontWeight: string;
|
|
157
|
+
color: string;
|
|
158
|
+
}
|
|
159
|
+
|
|
153
160
|
export interface KnobProps {
|
|
154
161
|
borderRadius: {
|
|
155
162
|
borderRadius: string;
|
|
@@ -329,6 +336,19 @@ export interface KnobProps {
|
|
|
329
336
|
* `pageTitleScale` override) re-opens the display scale for marketing.
|
|
330
337
|
*/
|
|
331
338
|
pageTitle: PageTitleFragment;
|
|
339
|
+
/**
|
|
340
|
+
* LC-152 TEXT-ROLES, at the control size token. `label`: field, fact and
|
|
341
|
+
* column labels (13/500 web, 15/500 native, secondary ink). `caption`:
|
|
342
|
+
* timestamps and counts (12/400, secondary ink). `headline`: row and card
|
|
343
|
+
* titles (16/600 web, 17/600 native, primary ink). Spread whole.
|
|
344
|
+
*/
|
|
345
|
+
textRole: {
|
|
346
|
+
label: TextRoleFragment;
|
|
347
|
+
/** LC-155: a row's secondary line, label size at 400 in the secondary ink. */
|
|
348
|
+
meta: TextRoleFragment;
|
|
349
|
+
caption: TextRoleFragment;
|
|
350
|
+
headline: TextRoleFragment;
|
|
351
|
+
};
|
|
332
352
|
/** color is set only for solid semantic-intent Buttons (error/warning/success). */
|
|
333
353
|
body: { fontFamily: string; fontWeight: string; color?: ColorTokens };
|
|
334
354
|
typography: {
|
|
@@ -1101,6 +1101,88 @@ describe("resolveKnobs", () => {
|
|
|
1101
1101
|
const low = resolveKnobs(knobsWith({ textAccent: "low" }));
|
|
1102
1102
|
expect(low.knobProps.textAccent).toBe("low");
|
|
1103
1103
|
});
|
|
1104
|
+
|
|
1105
|
+
it("low and medium take the theme's secondary ink; high keeps the primary ink (LC-152)", () => {
|
|
1106
|
+
expect(resolveKnobs(knobsWith({ textAccent: "low" })).knobProps.textAccentColor).toBe(
|
|
1107
|
+
"$textMuted",
|
|
1108
|
+
);
|
|
1109
|
+
expect(resolveKnobs(knobsWith({ textAccent: "medium" })).knobProps.textAccentColor).toBe(
|
|
1110
|
+
"$textMuted",
|
|
1111
|
+
);
|
|
1112
|
+
expect(resolveKnobs(knobsWith({ textAccent: "high" })).knobProps.textAccentColor).toBe(
|
|
1113
|
+
"$color",
|
|
1114
|
+
);
|
|
1115
|
+
});
|
|
1116
|
+
});
|
|
1117
|
+
|
|
1118
|
+
// ── text roles (LC-152) ─────────────────────────────────────
|
|
1119
|
+
|
|
1120
|
+
describe("text roles", () => {
|
|
1121
|
+
it("label, caption and headline resolve on the web ladder at $true", () => {
|
|
1122
|
+
const { textRole } = resolveKnobs(defaultKnobs).knobProps;
|
|
1123
|
+
expect(textRole.label).toEqual({
|
|
1124
|
+
fontSize: "$2",
|
|
1125
|
+
lineHeight: "$2",
|
|
1126
|
+
fontWeight: "500",
|
|
1127
|
+
color: "$textMuted",
|
|
1128
|
+
});
|
|
1129
|
+
expect(textRole.meta).toEqual({
|
|
1130
|
+
fontSize: "$2",
|
|
1131
|
+
lineHeight: "$2",
|
|
1132
|
+
fontWeight: "400",
|
|
1133
|
+
color: "$textMuted",
|
|
1134
|
+
});
|
|
1135
|
+
expect(textRole.caption).toEqual({
|
|
1136
|
+
fontSize: "$1",
|
|
1137
|
+
lineHeight: "$1",
|
|
1138
|
+
fontWeight: "400",
|
|
1139
|
+
color: "$textMuted",
|
|
1140
|
+
});
|
|
1141
|
+
expect(textRole.headline).toEqual({
|
|
1142
|
+
fontSize: "$5",
|
|
1143
|
+
lineHeight: "$5",
|
|
1144
|
+
fontWeight: "600",
|
|
1145
|
+
color: "$color",
|
|
1146
|
+
});
|
|
1147
|
+
});
|
|
1148
|
+
|
|
1149
|
+
it("roles follow the control size token and the bold weight knob", () => {
|
|
1150
|
+
const small = resolveKnobs(defaultKnobs, undefined, "light", { sizeToken: "$3" }).knobProps
|
|
1151
|
+
.textRole;
|
|
1152
|
+
expect(small.label.fontSize).toBe("$1");
|
|
1153
|
+
expect(small.headline.fontSize).toBe("$4");
|
|
1154
|
+
const bold = resolveKnobs(knobsWith({ fontWeight: "bold" })).knobProps.textRole;
|
|
1155
|
+
expect(bold.label.fontWeight).toBe("700");
|
|
1156
|
+
expect(bold.headline.fontWeight).toBe("700");
|
|
1157
|
+
expect(bold.caption.fontWeight).toBe("400");
|
|
1158
|
+
});
|
|
1159
|
+
|
|
1160
|
+
it("native reaches the HIG classes: label 15, caption 12, headline 17", async () => {
|
|
1161
|
+
vi.resetModules();
|
|
1162
|
+
vi.doMock("@multiplatform.one/platform", () => ({
|
|
1163
|
+
isWeb: false,
|
|
1164
|
+
isTouchable: false,
|
|
1165
|
+
isWebTouchable: false,
|
|
1166
|
+
}));
|
|
1167
|
+
try {
|
|
1168
|
+
const { resolveKnobs: resolveNative } = await import("./resolveKnobs");
|
|
1169
|
+
const { textRole } = resolveNative(defaultKnobs).knobProps;
|
|
1170
|
+
expect(textRole.label.fontSize).toBe("$3");
|
|
1171
|
+
expect(textRole.caption.fontSize).toBe("$2");
|
|
1172
|
+
expect(textRole.headline.fontSize).toBe("$4");
|
|
1173
|
+
} finally {
|
|
1174
|
+
vi.doUnmock("@multiplatform.one/platform");
|
|
1175
|
+
vi.resetModules();
|
|
1176
|
+
}
|
|
1177
|
+
});
|
|
1178
|
+
|
|
1179
|
+
it("label and caption keep the secondary ink at every textAccent stop", () => {
|
|
1180
|
+
for (const textAccent of ["low", "medium", "high"] as const) {
|
|
1181
|
+
const { textRole } = resolveKnobs(knobsWith({ textAccent })).knobProps;
|
|
1182
|
+
expect(textRole.label.color, textAccent).toBe("$textMuted");
|
|
1183
|
+
expect(textRole.caption.color, textAccent).toBe("$textMuted");
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1104
1186
|
});
|
|
1105
1187
|
|
|
1106
1188
|
// ── typography knobs ────────────────────────────────────────
|
|
@@ -1156,10 +1238,10 @@ describe("resolveKnobs", () => {
|
|
|
1156
1238
|
|
|
1157
1239
|
describe("pageTitleScale knob", () => {
|
|
1158
1240
|
const compact = (step: string) => ({ fontSize: step, lineHeight: step, letterSpacing: step });
|
|
1159
|
-
const moderateTitle = { size: "$
|
|
1241
|
+
const moderateTitle = { size: "$9", "$max-sm": compact("$9") };
|
|
1160
1242
|
const displayTitle = { size: "$12", "$max-sm": compact("$11") };
|
|
1161
1243
|
|
|
1162
|
-
it("defaults to the moderate page-title step ($
|
|
1244
|
+
it("defaults to the moderate page-title step ($9, LC-152)", () => {
|
|
1163
1245
|
expect(resolveKnobs(defaultKnobs).knobProps.pageTitle).toEqual(moderateTitle);
|
|
1164
1246
|
});
|
|
1165
1247
|
|
|
@@ -30,6 +30,7 @@ import type {
|
|
|
30
30
|
PageTitleFragment,
|
|
31
31
|
ResolvedKnobs,
|
|
32
32
|
StateRecipes,
|
|
33
|
+
TextRoleFragment,
|
|
33
34
|
TextStateProps,
|
|
34
35
|
} from "./recipes";
|
|
35
36
|
import { sizeRecipeForToken } from "./sizeRecipes";
|
|
@@ -140,11 +141,13 @@ const featureRadiusMap = {
|
|
|
140
141
|
} as const;
|
|
141
142
|
|
|
142
143
|
// ── Page-title step (D-11 hero-H1 dial) ───────────────────────
|
|
143
|
-
// Default type 15: moderate is 40px; display is 52px.
|
|
144
|
-
//
|
|
145
|
-
//
|
|
144
|
+
// Default type 15: moderate is 40px; display is 52px.
|
|
145
|
+
// LC-152: one page-title step on every product screen, the HIG large-title
|
|
146
|
+
// class (30 web / 32 native). It replaces the 40px rider of LC-17. Below `$sm`
|
|
147
|
+
// (a phone) display drops one token, as iOS large titles and Material's
|
|
148
|
+
// compact headline do (FZ-7703); moderate is already the large-title class.
|
|
146
149
|
const pageTitleSizeMap: Record<PageTitleScale, FontSizeTokens> = {
|
|
147
|
-
moderate: "$
|
|
150
|
+
moderate: "$9",
|
|
148
151
|
display: "$12",
|
|
149
152
|
};
|
|
150
153
|
const compactPageTitleSizeMap: Record<PageTitleScale, FontSizeTokens> = {
|
|
@@ -403,15 +406,55 @@ function elevationChromeFor(key: SizeKey | undefined): ElevationChromeProps {
|
|
|
403
406
|
// The fill alone would land on the base edge step and erase the border.
|
|
404
407
|
const surface2 = { fill: "$color4", edge: "$color6" } as const;
|
|
405
408
|
|
|
406
|
-
//
|
|
407
|
-
//
|
|
408
|
-
//
|
|
409
|
+
// `$textMuted` is the theme's secondary ink (LC-152): the most muted ramp
|
|
410
|
+
// step that clears 7:1 on the page and every card tier in its own scheme. A
|
|
411
|
+
// fixed `$color11` read as the primary ink in light on the stock v5 ramp.
|
|
409
412
|
const textAccentColorMap: Record<string, string> = {
|
|
410
|
-
low: "$
|
|
411
|
-
medium: "$
|
|
413
|
+
low: "$textMuted",
|
|
414
|
+
medium: "$textMuted",
|
|
412
415
|
high: "$color",
|
|
413
416
|
};
|
|
414
417
|
|
|
418
|
+
// LC-152 TEXT-ROLES: the type steps of the three non-body roles, as key
|
|
419
|
+
// offsets on the body ladder from the control's type key. Web (15px body) and
|
|
420
|
+
// native (17pt body, HIG) reach the same classes from different offsets:
|
|
421
|
+
// label = footnote/subheadline (13 web, 15 native), caption = caption1
|
|
422
|
+
// (12 on both), headline = headline (16 web, 17 native).
|
|
423
|
+
const FONT_LADDER = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] as const;
|
|
424
|
+
const textRoleOffsets = isWeb
|
|
425
|
+
? { label: -2, caption: -3, headline: 1 }
|
|
426
|
+
: { label: -1, caption: -2, headline: 0 };
|
|
427
|
+
|
|
428
|
+
function fontKeyOffset(key: FontSizeTokens, offset: number): FontSizeTokens {
|
|
429
|
+
const bare = key === "$true" ? "4" : String(key).replace(/^\$/, "");
|
|
430
|
+
const index = FONT_LADDER.indexOf(bare as (typeof FONT_LADDER)[number]);
|
|
431
|
+
if (index < 0) return key;
|
|
432
|
+
const next = Math.min(FONT_LADDER.length - 1, Math.max(0, index + offset));
|
|
433
|
+
return `$${FONT_LADDER[next]}` as FontSizeTokens;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* LC-152 TEXT-ROLES: label, meta, caption and headline for a control size
|
|
438
|
+
* token. Label is 500, meta (a row's secondary line, LC-155) and caption 400,
|
|
439
|
+
* all in the secondary ink whatever the textAccent knob (which dials body and
|
|
440
|
+
* helper copy); headline is 600 in the primary ink. The bold fontWeight knob
|
|
441
|
+
* lifts label and headline to 700.
|
|
442
|
+
*/
|
|
443
|
+
export function resolveTextRoles(sizeToken: string, bold: boolean): KnobProps["textRole"] {
|
|
444
|
+
const secondaryInk = "$textMuted";
|
|
445
|
+
const base = labelFontSizeFor(sizeToken);
|
|
446
|
+
const role = (offset: number, fontWeight: string, color: string): TextRoleFragment => {
|
|
447
|
+
const size = fontKeyOffset(base, offset);
|
|
448
|
+
return { fontSize: size, lineHeight: size, fontWeight, color };
|
|
449
|
+
};
|
|
450
|
+
return {
|
|
451
|
+
label: role(textRoleOffsets.label, bold ? "700" : "500", secondaryInk),
|
|
452
|
+
meta: role(textRoleOffsets.label, "400", secondaryInk),
|
|
453
|
+
caption: role(textRoleOffsets.caption, "400", secondaryInk),
|
|
454
|
+
headline: role(textRoleOffsets.headline, bold ? "700" : "600", "$color"),
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
|
|
415
458
|
// ── Disabled treatment (LC-40 DISABLED-VISIBLE) ───────────────
|
|
416
459
|
// A disabled control must be visually distinguishable from its enabled twin
|
|
417
460
|
// under BOTH `disabledStyle` values (Axiom 6 HONEST STATE; DG-ST-05 names
|
|
@@ -778,6 +821,7 @@ export function resolveKnobs(
|
|
|
778
821
|
...(knobs.fontWeight === "bold" ? { fontWeight: "700" } : {}),
|
|
779
822
|
},
|
|
780
823
|
pageTitle: resolvePageTitleScale(knobs.pageTitleScale ?? "moderate"),
|
|
824
|
+
textRole: resolveTextRoles(sizeToken, knobs.fontWeight === "bold"),
|
|
781
825
|
body: {
|
|
782
826
|
fontFamily: bodyFontValue,
|
|
783
827
|
fontWeight: fontWeightValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraintAudit.d.ts","sourceRoot":"","sources":["../../src/audit/constraintAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,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;AA+DD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE9C,CAAC;AAmJF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"constraintAudit.d.ts","sourceRoot":"","sources":["../../src/audit/constraintAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,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;AA+DD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE9C,CAAC;AAmJF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAkwBrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,IAAI,mBAAmB,EACpC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import type { CreateThemesBuilderOptions } from "../createThemes";
|
|
2
|
+
/**
|
|
3
|
+
* LC-152 TEXT-ROLES: the secondary text ink. Labels, captions and meta are
|
|
4
|
+
* 12-13px, so the floor is 7:1 (AAA) on the page and on every card tier,
|
|
5
|
+
* and the pick is the most muted ramp step that clears it. The stock v5 ramp
|
|
6
|
+
* is not symmetric: light $color11 is 14% lightness, two points off the
|
|
7
|
+
* primary ink, so one fixed step cannot read as secondary in both schemes.
|
|
8
|
+
* On the default ramp this lands on $color9 in light and $color10 in dark.
|
|
9
|
+
*/
|
|
10
|
+
export declare const secondaryInkContrast = 7;
|
|
11
|
+
/**
|
|
12
|
+
* `ramp` supplies the candidate steps when they differ from the theme whose
|
|
13
|
+
* surfaces the ink sits on: a tint picks from its scheme's neutral ramp.
|
|
14
|
+
*/
|
|
15
|
+
export declare function pickSecondaryInk(theme: Record<string, string>, ramp?: Record<string, string>): string;
|
|
2
16
|
export declare const defaultBuilderOptions: CreateThemesBuilderOptions;
|
|
3
17
|
//# sourceMappingURL=builderOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builderOptions.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/builderOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAiB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"builderOptions.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/builderOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAiB,MAAM,iBAAiB,CAAC;AAgFjF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAS,GACnC,MAAM,CAgBR;AA8DD,eAAO,MAAM,qBAAqB,EAAE,0BA+CnC,CAAC"}
|
package/types/theme/recipes.d.ts
CHANGED
|
@@ -129,6 +129,12 @@ export interface KnobRecipe<T> {
|
|
|
129
129
|
export interface CornerSmoothingCarrier {
|
|
130
130
|
className?: string;
|
|
131
131
|
}
|
|
132
|
+
export interface TextRoleFragment {
|
|
133
|
+
fontSize: FontSizeTokens;
|
|
134
|
+
lineHeight: FontSizeTokens;
|
|
135
|
+
fontWeight: string;
|
|
136
|
+
color: string;
|
|
137
|
+
}
|
|
132
138
|
export interface KnobProps {
|
|
133
139
|
borderRadius: {
|
|
134
140
|
borderRadius: string;
|
|
@@ -367,6 +373,19 @@ export interface KnobProps {
|
|
|
367
373
|
* `pageTitleScale` override) re-opens the display scale for marketing.
|
|
368
374
|
*/
|
|
369
375
|
pageTitle: PageTitleFragment;
|
|
376
|
+
/**
|
|
377
|
+
* LC-152 TEXT-ROLES, at the control size token. `label`: field, fact and
|
|
378
|
+
* column labels (13/500 web, 15/500 native, secondary ink). `caption`:
|
|
379
|
+
* timestamps and counts (12/400, secondary ink). `headline`: row and card
|
|
380
|
+
* titles (16/600 web, 17/600 native, primary ink). Spread whole.
|
|
381
|
+
*/
|
|
382
|
+
textRole: {
|
|
383
|
+
label: TextRoleFragment;
|
|
384
|
+
/** LC-155: a row's secondary line, label size at 400 in the secondary ink. */
|
|
385
|
+
meta: TextRoleFragment;
|
|
386
|
+
caption: TextRoleFragment;
|
|
387
|
+
headline: TextRoleFragment;
|
|
388
|
+
};
|
|
370
389
|
/** color is set only for solid semantic-intent Buttons (error/warning/success). */
|
|
371
390
|
body: {
|
|
372
391
|
fontFamily: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/theme/recipes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/theme/recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FontSizeTokens } from "tamagui";
|
|
2
2
|
import type { Elevation, Knobs, PageTitleScale } from "./knobs";
|
|
3
3
|
import { type SizeKey } from "./scale/scaleInputs";
|
|
4
|
-
import type { KnobPropsOverride, PageTitleFragment, ResolvedKnobs } from "./recipes";
|
|
4
|
+
import type { KnobProps, KnobPropsOverride, PageTitleFragment, ResolvedKnobs } from "./recipes";
|
|
5
5
|
export declare const borderRadiusMap: {
|
|
6
6
|
readonly none: "$0";
|
|
7
7
|
readonly small: "$2";
|
|
@@ -102,6 +102,14 @@ export declare function sizedElevation(px: number): {
|
|
|
102
102
|
radius: number;
|
|
103
103
|
android: number;
|
|
104
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* LC-152 TEXT-ROLES: label, meta, caption and headline for a control size
|
|
107
|
+
* token. Label is 500, meta (a row's secondary line, LC-155) and caption 400,
|
|
108
|
+
* all in the secondary ink whatever the textAccent knob (which dials body and
|
|
109
|
+
* helper copy); headline is 600 in the primary ink. The bold fontWeight knob
|
|
110
|
+
* lifts label and headline to 700.
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveTextRoles(sizeToken: string, bold: boolean): KnobProps["textRole"];
|
|
105
113
|
/**
|
|
106
114
|
* A content card on a painted parent sits one ramp step off it, so the box
|
|
107
115
|
* reads without a shadow (nested surfaces never re-elevate).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiD,cAAc,EAAE,MAAM,SAAS,CAAC;AAY7F,OAAO,KAAK,EAAmB,SAAS,EAAE,KAAK,EAAE,cAAc,EAAc,MAAM,SAAS,CAAC;AAI7F,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"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"}
|