@lets-ship/brand-dna 2.0.0 → 3.0.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 (102) hide show
  1. package/catalog/fonts/bricolage-grotesque-latin-700-normal.woff2 +0 -0
  2. package/catalog/fonts/figtree-latin-400-normal.woff2 +0 -0
  3. package/catalog/fonts/figtree-latin-600-normal.woff2 +0 -0
  4. package/catalog/fonts/gabarito-latin-700-normal.woff2 +0 -0
  5. package/catalog/fonts/gloock-latin-400-normal.woff2 +0 -0
  6. package/catalog/fonts/hanken-grotesk-latin-400-normal.woff2 +0 -0
  7. package/catalog/fonts/hanken-grotesk-latin-600-normal.woff2 +0 -0
  8. package/catalog/fonts/mulish-latin-400-normal.woff2 +0 -0
  9. package/catalog/fonts/mulish-latin-600-normal.woff2 +0 -0
  10. package/catalog/fonts/schibsted-grotesk-latin-400-normal.woff2 +0 -0
  11. package/catalog/fonts/schibsted-grotesk-latin-600-normal.woff2 +0 -0
  12. package/catalog/fonts/schibsted-grotesk-latin-700-normal.woff2 +0 -0
  13. package/catalog/fonts/source-sans-3-latin-400-normal.woff2 +0 -0
  14. package/catalog/fonts/source-sans-3-latin-600-normal.woff2 +0 -0
  15. package/catalog/fonts/young-serif-latin-400-normal.woff2 +0 -0
  16. package/catalog/fonts.lock.json +165 -0
  17. package/dist/core/color/pairs.d.ts.map +1 -1
  18. package/dist/core/color/pairs.js +5 -0
  19. package/dist/core/color/pairs.js.map +1 -1
  20. package/dist/core/compile/design-language.d.ts +10 -0
  21. package/dist/core/compile/design-language.d.ts.map +1 -0
  22. package/dist/core/compile/design-language.js +74 -0
  23. package/dist/core/compile/design-language.js.map +1 -0
  24. package/dist/core/compile/design-md.d.ts.map +1 -1
  25. package/dist/core/compile/design-md.js +8 -2
  26. package/dist/core/compile/design-md.js.map +1 -1
  27. package/dist/core/compile/patterns.d.ts +8 -0
  28. package/dist/core/compile/patterns.d.ts.map +1 -1
  29. package/dist/core/compile/patterns.js +14 -3
  30. package/dist/core/compile/patterns.js.map +1 -1
  31. package/dist/core/compile/site-design.d.ts +32 -0
  32. package/dist/core/compile/site-design.d.ts.map +1 -0
  33. package/dist/core/compile/site-design.js +243 -0
  34. package/dist/core/compile/site-design.js.map +1 -0
  35. package/dist/core/compile/site-emphasis.d.ts +46 -0
  36. package/dist/core/compile/site-emphasis.d.ts.map +1 -0
  37. package/dist/core/compile/site-emphasis.js +64 -0
  38. package/dist/core/compile/site-emphasis.js.map +1 -0
  39. package/dist/core/compile/site-theme-rules.d.ts +9 -2
  40. package/dist/core/compile/site-theme-rules.d.ts.map +1 -1
  41. package/dist/core/compile/site-theme-rules.js +83 -2
  42. package/dist/core/compile/site-theme-rules.js.map +1 -1
  43. package/dist/core/compile/site-theme-values.d.ts +11 -1
  44. package/dist/core/compile/site-theme-values.d.ts.map +1 -1
  45. package/dist/core/compile/site-theme-values.js +39 -5
  46. package/dist/core/compile/site-theme-values.js.map +1 -1
  47. package/dist/core/compile/site-theme.d.ts.map +1 -1
  48. package/dist/core/compile/site-theme.js +16 -4
  49. package/dist/core/compile/site-theme.js.map +1 -1
  50. package/dist/core/compile/skill.d.ts.map +1 -1
  51. package/dist/core/compile/skill.js +8 -0
  52. package/dist/core/compile/skill.js.map +1 -1
  53. package/dist/core/lint/catalog.d.ts +1 -1
  54. package/dist/core/lint/catalog.d.ts.map +1 -1
  55. package/dist/core/lint/catalog.js +13 -1
  56. package/dist/core/lint/catalog.js.map +1 -1
  57. package/dist/core/lint/rules/design.d.ts +27 -0
  58. package/dist/core/lint/rules/design.d.ts.map +1 -0
  59. package/dist/core/lint/rules/design.js +234 -0
  60. package/dist/core/lint/rules/design.js.map +1 -0
  61. package/dist/core/lint/rules/refs.d.ts.map +1 -1
  62. package/dist/core/lint/rules/refs.js +3 -0
  63. package/dist/core/lint/rules/refs.js.map +1 -1
  64. package/dist/core/lint/rules/type.js +1 -1
  65. package/dist/core/lint/rules/type.js.map +1 -1
  66. package/dist/core/presets/base.dna.json +307 -21
  67. package/dist/core/presets/design.d.ts +16 -0
  68. package/dist/core/presets/design.d.ts.map +1 -0
  69. package/dist/core/presets/design.js +86 -0
  70. package/dist/core/presets/design.js.map +1 -0
  71. package/dist/core/presets/presets.d.ts +1 -1
  72. package/dist/core/presets/presets.d.ts.map +1 -1
  73. package/dist/core/presets/presets.js +18 -11
  74. package/dist/core/presets/presets.js.map +1 -1
  75. package/dist/core/presets/specs.d.ts +330 -16
  76. package/dist/core/presets/specs.d.ts.map +1 -1
  77. package/dist/core/presets/specs.js +162 -12
  78. package/dist/core/presets/specs.js.map +1 -1
  79. package/dist/core/site/colours.d.ts +3 -3
  80. package/dist/core/site/colours.d.ts.map +1 -1
  81. package/dist/core/site/colours.js +13 -5
  82. package/dist/core/site/colours.js.map +1 -1
  83. package/dist/schema/channel-spec.d.ts +5 -5
  84. package/dist/schema/design.d.ts +258 -0
  85. package/dist/schema/design.d.ts.map +1 -0
  86. package/dist/schema/design.js +132 -0
  87. package/dist/schema/design.js.map +1 -0
  88. package/dist/schema/dna.d.ts +324 -4
  89. package/dist/schema/dna.d.ts.map +1 -1
  90. package/dist/schema/dna.js +16 -0
  91. package/dist/schema/dna.js.map +1 -1
  92. package/dist/schema/gen.d.ts +6 -1
  93. package/dist/schema/gen.d.ts.map +1 -1
  94. package/dist/schema/pattern.d.ts +80 -0
  95. package/dist/schema/pattern.d.ts.map +1 -1
  96. package/dist/schema/skeleton.d.ts +81 -8
  97. package/dist/schema/skeleton.d.ts.map +1 -1
  98. package/dist/schema/tokens.d.ts +45 -2
  99. package/dist/schema/tokens.d.ts.map +1 -1
  100. package/dist/schema/tokens.js +16 -0
  101. package/dist/schema/tokens.js.map +1 -1
  102. package/package.json +1 -1
@@ -0,0 +1,243 @@
1
+ /**
2
+ * The design-language half of the theme contract (SHIP Sites D27, minor 1): the variables that
3
+ * carry density, composition, containers, emphasis, the accent policy, media, controls, details
4
+ * and the page reveal. A DNA without a design primitive gets the value its rule below names, the
5
+ * same look the engine had before the primitive existed, so the exporter never guesses.
6
+ *
7
+ * The rules below write a value as `var(--dna-…)` where it follows another contract variable;
8
+ * `concreteDesignDecls` then resolves every such link against the theme's own declarations of
9
+ * one mode, so `site-theme.css` holds concrete values and stands alone.
10
+ */
11
+ import { TEXTURE_TONES } from "../../schema/design.js";
12
+ import { cssOklch } from "../color/color.js";
13
+ import { indexTokens } from "../tokens/resolve.js";
14
+ import { textureLayers } from "./patterns.js";
15
+ import { dimensionCss, resolvedColor } from "./shared.js";
16
+ import { EMPHASIS_SURFACES, emphasisSurfaceDecls } from "./site-emphasis.js";
17
+ import { ThemeContractError } from "./site-theme-rules.js";
18
+ /** Section padding by density, in px: small, medium and large steps. */
19
+ export const SECTION_SPACE_PX = {
20
+ compact: { sm: 40, md: 56, lg: 80 },
21
+ regular: { sm: 48, md: 64, lg: 96 },
22
+ airy: { sm: 64, md: 112, lg: 160 },
23
+ };
24
+ /** The space steps a site reads, each with the value a DNA without the step gets. */
25
+ export const SPACE_STEPS = {
26
+ xs: "4px",
27
+ sm: "8px",
28
+ md: "16px",
29
+ lg: "24px",
30
+ xl: "40px",
31
+ "2xl": "64px",
32
+ };
33
+ const role = (name) => `var(--dna-color-${name})`;
34
+ const TRANSPARENT = "transparent";
35
+ function spaceDecls(index, dna) {
36
+ const own = (step) => index.has(`space.${step}`) ? dimensionCss(index, `{space.${step}}`) : undefined;
37
+ const steps = Object.entries(SPACE_STEPS).map(([step, fixed]) => [`--dna-space-${step}`, own(step) ?? fixed]);
38
+ const density = SECTION_SPACE_PX[dna.composition?.density ?? "regular"];
39
+ const sections = ["sm", "md", "lg"].map((step) => [`--dna-section-${step}`, own(`section-${step}`) ?? `${density[step]}px`]);
40
+ return [...steps, ...sections];
41
+ }
42
+ function compositionDecls(dna) {
43
+ const c = dna.composition;
44
+ const [wide, narrow] = c?.split ?? [1, 1];
45
+ return [
46
+ ["--dna-head-align", c?.align ?? "start"],
47
+ ["--dna-head-margin", c?.align === "center" ? "auto" : "0"],
48
+ ["--dna-split-wide", `${wide}fr`],
49
+ ["--dna-split-narrow", `${narrow}fr`],
50
+ ["--dna-measure-body", `${c?.measure.body ?? 65}ch`],
51
+ ["--dna-measure-lead", `${c?.measure.lead ?? 42}ch`],
52
+ ];
53
+ }
54
+ const LIST = {
55
+ card: (lg) => [
56
+ ["--dna-list-bg", "var(--dna-component-card-bg)"],
57
+ ["--dna-list-fill", "1"],
58
+ ["--dna-list-border-width", "var(--dna-border-width-thin)"],
59
+ ["--dna-list-radius", "var(--dna-component-card-radius)"],
60
+ ["--dna-list-padding-x", lg],
61
+ ["--dna-list-padding-y", lg],
62
+ ],
63
+ rule: (lg) => [
64
+ ["--dna-list-bg", TRANSPARENT],
65
+ ["--dna-list-fill", "0"],
66
+ ["--dna-list-border-width", "var(--dna-border-width-thin) 0 0 0"],
67
+ ["--dna-list-radius", "0px"],
68
+ ["--dna-list-padding-x", "0px"],
69
+ ["--dna-list-padding-y", lg],
70
+ ],
71
+ plain: () => [
72
+ ["--dna-list-bg", TRANSPARENT],
73
+ ["--dna-list-fill", "0"],
74
+ ["--dna-list-border-width", "0px"],
75
+ ["--dna-list-radius", "0px"],
76
+ ["--dna-list-padding-x", "0px"],
77
+ ["--dna-list-padding-y", "0px"],
78
+ ],
79
+ };
80
+ function quoteDecls(dna, ruleColour) {
81
+ const style = dna.containers?.quote ?? "card";
82
+ if (style === "card")
83
+ return [
84
+ ["--dna-quote-bg", "var(--dna-component-card-bg)"],
85
+ ["--dna-quote-border-width", "var(--dna-border-width-thin)"],
86
+ ["--dna-quote-border-color", role("border")],
87
+ ["--dna-quote-radius", "var(--dna-component-card-radius)"],
88
+ ["--dna-quote-padding", "var(--dna-space-lg)"],
89
+ ];
90
+ return [
91
+ ["--dna-quote-bg", TRANSPARENT],
92
+ ["--dna-quote-border-width", style === "rule" ? "0 0 0 var(--dna-border-width-thick)" : "0px"],
93
+ ["--dna-quote-border-color", ruleColour],
94
+ ["--dna-quote-radius", "0px"],
95
+ ["--dna-quote-padding", style === "rule" ? "0 0 0 var(--dna-space-lg)" : "0px"],
96
+ ];
97
+ }
98
+ function mediaDecls(index, dna) {
99
+ const style = dna.containers?.media ?? "frame";
100
+ const media = dna.imagery.media;
101
+ const radius = media ? dimensionCss(index, media.radius) : "var(--dna-radius-md)";
102
+ const [w, h] = (media?.aspects[0] ?? "").split(":");
103
+ const duo = media?.duotone;
104
+ return [
105
+ ["--dna-media-radius", radius],
106
+ ["--dna-media-aspect", w && h ? `${w} / ${h}` : "auto"],
107
+ ["--dna-media-frame-bg", style === "frame" ? "var(--dna-component-card-bg)" : TRANSPARENT],
108
+ ["--dna-media-frame-border-width", style === "frame" ? "var(--dna-border-width-thin)" : "0px"],
109
+ ["--dna-media-frame-padding", style === "frame" ? "var(--dna-space-sm)" : "0px"],
110
+ ["--dna-media-bleed", style === "bleed" ? "1" : "0"],
111
+ ["--dna-media-filter", duo ? "grayscale(1) contrast(1.05)" : "none"],
112
+ ["--dna-media-blend", duo ? "multiply" : "normal"],
113
+ ["--dna-media-highlight", duo ? cssOklch(resolvedColor(index, duo.highlight)) : TRANSPARENT],
114
+ ["--dna-media-shadow", duo ? cssOklch(resolvedColor(index, duo.shadow)) : TRANSPARENT],
115
+ ];
116
+ }
117
+ /** The text colour of each band tone, which its texture is drawn in. */
118
+ const BAND_TEXT = { tint: "on-surface", inverse: "on-surface-inverse", brand: "on-surface-brand" };
119
+ /** The texture of each band tone: the DNA pattern `composition.texture` names, or none. */
120
+ function textureDecls(dna) {
121
+ const texture = dna.composition?.texture;
122
+ const pattern = texture ? dna.patterns[texture.pattern] : undefined;
123
+ if (texture && !pattern)
124
+ throw new ThemeContractError(`patterns.${texture.pattern}`, "Add the pattern composition.texture names.");
125
+ return TEXTURE_TONES.map((tone) => {
126
+ const on = pattern && texture?.tones.includes(tone);
127
+ return [`--dna-texture-${tone}`, on ? textureLayers(pattern.layers, role(BAND_TEXT[tone])) : "none"];
128
+ });
129
+ }
130
+ function emphasisDecls(dna) {
131
+ const e = dna.emphasis ?? { style: "colour", role: "primary" };
132
+ const c = role(e.role);
133
+ const marker = `linear-gradient(transparent 58%, ${c} 58%, ${c} 92%, transparent 92%)`;
134
+ // The rule as written; concreteDesignDecls solves each surface's colour so it stays readable.
135
+ const surfaces = EMPHASIS_SURFACES.flatMap((surface) => [
136
+ [`--dna-emphasis-color${surface}`, e.style === "colour" ? c : "inherit"],
137
+ [`--dna-emphasis-bg${surface}`, e.style === "marker" ? marker : "none"],
138
+ ]);
139
+ return [
140
+ ...surfaces,
141
+ ["--dna-emphasis-style", e.style === "italic" ? "italic" : "normal"],
142
+ ["--dna-emphasis-decoration", e.style === "underline" ? "underline" : "none"],
143
+ ["--dna-emphasis-decoration-color", e.style === "underline" ? c : "currentColor"],
144
+ ];
145
+ }
146
+ function accentDecls(dna) {
147
+ const uses = new Set(dna.colorPolicy?.accent?.uses ?? []);
148
+ return [
149
+ ["--dna-accent-rule", uses.has("rule") ? role("accent") : role("primary")],
150
+ ["--dna-accent-numerals", uses.has("numerals") ? role("accent") : "inherit"],
151
+ ["--dna-cta-inverse-bg", uses.has("cta-inverse") ? role("accent") : role("on-surface-inverse")],
152
+ ["--dna-cta-inverse-fg", uses.has("cta-inverse") ? role("on-accent") : role("surface-inverse")],
153
+ ["--dna-badge-bg", uses.has("badge") ? role("accent") : "var(--dna-component-badge-bg)"],
154
+ ["--dna-badge-fg", uses.has("badge") ? role("on-accent") : "var(--dna-component-badge-fg)"],
155
+ ];
156
+ }
157
+ function controlDecls(index, dna) {
158
+ const c = dna.controls;
159
+ const dim = (value, fixed) => (c ? dimensionCss(index, value) : fixed);
160
+ return [
161
+ ["--dna-control-height-sm", dim(c?.size.sm, "32px")],
162
+ ["--dna-control-height-md", dim(c?.size.md, "40px")],
163
+ ["--dna-control-height-lg", dim(c?.size.lg, "48px")],
164
+ ["--dna-focus-color", role(c?.focus.role ?? "primary")],
165
+ ["--dna-focus-width", dim(c?.focus.width, "2px")],
166
+ ["--dna-focus-offset", dim(c?.focus.offset, "2px")],
167
+ ["--dna-hover-mix", `${Math.round((c?.hover.mix ?? 0.1) * 100)}%`],
168
+ ];
169
+ }
170
+ const NUMERALS = { tabular: "tabular-nums", proportional: "normal", oldstyle: "oldstyle-nums" };
171
+ function detailDecls(dna) {
172
+ return [
173
+ ["--dna-numerals", NUMERALS[dna.details?.numerals ?? "proportional"]],
174
+ ["--dna-quote-hang", dna.details?.hangingPunctuation ? "-0.45em" : "0em"],
175
+ ];
176
+ }
177
+ function motionDecls(index, dna) {
178
+ const own = (path) => {
179
+ const token = index.get(path);
180
+ if (!token)
181
+ return undefined;
182
+ const v = token.value;
183
+ if (Array.isArray(v))
184
+ return `cubic-bezier(${v.join(", ")})`;
185
+ const d = v;
186
+ return `${d.value}${d.unit}`;
187
+ };
188
+ const reveal = dna.motion?.pageReveal ?? "none";
189
+ return [
190
+ ["--dna-motion-fast", own("motion.duration.fast") ?? "120ms"],
191
+ ["--dna-motion-base", own("motion.duration.base") ?? "200ms"],
192
+ ["--dna-motion-slow", own("motion.duration.slow") ?? "360ms"],
193
+ ["--dna-motion-ease", own("motion.ease.standard") ?? "cubic-bezier(0.2, 0, 0, 1)"],
194
+ ["--dna-reveal-duration", reveal === "none" ? "0ms" : "var(--dna-motion-slow)"],
195
+ ["--dna-reveal-distance", reveal === "rise" ? "12px" : "0px"],
196
+ ["--dna-reveal-opacity", reveal === "none" ? "1" : "0"],
197
+ ];
198
+ }
199
+ /** Every design variable of one DNA, in the order of DESIGN_VARIABLES. */
200
+ export function designDecls(dna, index = indexTokens(dna.tokens)) {
201
+ const lg = "var(--dna-space-lg)";
202
+ const uses = new Set(dna.colorPolicy?.accent?.uses ?? []);
203
+ const ruleColour = uses.has("rule") ? role("accent") : role("primary");
204
+ return [
205
+ ...spaceDecls(index, dna),
206
+ ...compositionDecls(dna),
207
+ ...textureDecls(dna),
208
+ ...LIST[dna.containers?.list ?? "card"](lg),
209
+ ...quoteDecls(dna, ruleColour),
210
+ ...mediaDecls(index, dna),
211
+ ...emphasisDecls(dna),
212
+ ...accentDecls(dna),
213
+ ...controlDecls(index, dna),
214
+ ...detailDecls(dna),
215
+ ...motionDecls(index, dna),
216
+ ];
217
+ }
218
+ const LINK = /var\((--dna-[a-z0-9-]+)\)/g;
219
+ /** A design value with every `var(--dna-…)` replaced by its concrete value in `known`. */
220
+ function concrete(name, value, known, depth = 0) {
221
+ if (!value.includes("var(--dna-"))
222
+ return value;
223
+ if (depth > 4)
224
+ throw new ThemeContractError(name, "Its value links to itself; give it a concrete value.");
225
+ const next = value.replace(LINK, (_m, link) => {
226
+ const target = known.get(link);
227
+ if (target === undefined)
228
+ throw new ThemeContractError(link, `It is not declared, and ${name} needs it.`);
229
+ return target;
230
+ });
231
+ return concrete(name, next, known, depth + 1);
232
+ }
233
+ /**
234
+ * The design variables of one mode with concrete values. `base` holds the theme's other
235
+ * declarations of that mode (roles, shapes, components), which the design values link to.
236
+ */
237
+ export function concreteDesignDecls(dna, index, base) {
238
+ const own = designDecls(dna, index);
239
+ const known = new Map([...base, ...own]);
240
+ const solved = new Map(emphasisSurfaceDecls(dna, known));
241
+ return own.map(([name, value]) => [name, solved.get(name) ?? concrete(name, value, known)]);
242
+ }
243
+ //# sourceMappingURL=site-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-design.js","sourceRoot":"","sources":["../../../src/core/compile/site-design.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The emphasis of a headline, readable on every surface a block can stand on. A marker sits
3
+ * behind the words, so the words' colour must read on it; an emphasis colour is the words'
4
+ * colour, so it must read on the surface. A role chosen for the light page can fail on the dark
5
+ * page or in a dark band (Harbor's yellow marker under white text measured 1.68:1), so the theme
6
+ * solves the colour once per mode and per surface: it keeps the role's hue and chroma and moves
7
+ * its lightness away from what it must read against, until each pair reaches AA.
8
+ */
9
+ import type { Dna } from "../../schema/dna.js";
10
+ import { type Oklch } from "../color/color.js";
11
+ type Decl = [string, string];
12
+ /** Text over a marker, or text in the emphasis colour, reaches AA on every surface. */
13
+ export declare const EMPHASIS_MIN_CONTRAST: number;
14
+ /** The surfaces a block can stand on: the colour of their text, and their backgrounds. */
15
+ declare const SURFACES: {
16
+ readonly "": {
17
+ readonly text: "on-surface";
18
+ readonly backgrounds: readonly ["surface", "surface-tint"];
19
+ };
20
+ readonly "-inverse": {
21
+ readonly text: "on-surface-inverse";
22
+ readonly backgrounds: readonly ["surface-inverse"];
23
+ };
24
+ readonly "-brand": {
25
+ readonly text: "on-surface-brand";
26
+ readonly backgrounds: readonly ["surface-brand"];
27
+ };
28
+ };
29
+ export type EmphasisSurface = keyof typeof SURFACES;
30
+ export declare const EMPHASIS_SURFACES: EmphasisSurface[];
31
+ export declare class EmphasisContrastError extends Error {
32
+ constructor(role: string, surface: string);
33
+ }
34
+ /**
35
+ * The nearest colour to `colour`, by lightness alone, that reaches `min` with each of `against`.
36
+ * It first moves away from the first of `against`, then toward it; undefined when neither works.
37
+ */
38
+ export declare function readableAgainst(colour: Oklch, against: readonly Oklch[], min: number): Oklch | undefined;
39
+ /**
40
+ * The emphasis colour and marker of one mode, for the page and for each band, solved against
41
+ * that mode's concrete role colours in `known`. A style that is neither colour nor marker keeps
42
+ * the values `designDecls` gave it.
43
+ */
44
+ export declare function emphasisSurfaceDecls(dna: Dna, known: ReadonlyMap<string, string>): Decl[];
45
+ export {};
46
+ //# sourceMappingURL=site-emphasis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-emphasis.d.ts","sourceRoot":"","sources":["../../../src/core/compile/site-emphasis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAgD,KAAK,KAAK,EAA0B,MAAM,mBAAmB,CAAC;AAErH,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7B,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,QAAe,CAAC;AAElD,0FAA0F;AAC1F,QAAA,MAAM,QAAQ;;;;;;;;;;;;;CAI6E,CAAC;AAE5F,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,QAAQ,CAAC;AACpD,eAAO,MAAM,iBAAiB,EAA4B,eAAe,EAAE,CAAC;AAE5E,qBAAa,qBAAsB,SAAQ,KAAK;gBACnC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOzC;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIxG;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,CAoBzF"}
@@ -0,0 +1,64 @@
1
+ import { contrastRatio, cssOklch, gamutMap, LEVEL_MIN, parseColor, roundOklch } from "../color/color.js";
2
+ /** Text over a marker, or text in the emphasis colour, reaches AA on every surface. */
3
+ export const EMPHASIS_MIN_CONTRAST = LEVEL_MIN.AA;
4
+ /** The surfaces a block can stand on: the colour of their text, and their backgrounds. */
5
+ const SURFACES = {
6
+ "": { text: "on-surface", backgrounds: ["surface", "surface-tint"] },
7
+ "-inverse": { text: "on-surface-inverse", backgrounds: ["surface-inverse"] },
8
+ "-brand": { text: "on-surface-brand", backgrounds: ["surface-brand"] },
9
+ };
10
+ export const EMPHASIS_SURFACES = Object.keys(SURFACES);
11
+ export class EmphasisContrastError extends Error {
12
+ constructor(role, surface) {
13
+ super(`site-theme: no lightness of the emphasis role ${role} reaches ${EMPHASIS_MIN_CONTRAST}:1 on the ${surface} ` +
14
+ "surface. Choose another emphasis role or style in the DNA's emphasis.");
15
+ this.name = "EmphasisContrastError";
16
+ }
17
+ }
18
+ const reaches = (colour, against, min) => against.every((other) => contrastRatio(colour, other) >= min);
19
+ /** `colour` stepped in lightness, 0.01 at a time, in one direction, until it reaches `min`. */
20
+ function stepped(colour, against, min, direction) {
21
+ const steps = Array.from({ length: 100 }, (_, i) => i + 1);
22
+ return steps
23
+ .map((step) => roundOklch(gamutMap({ ...colour, l: Math.min(1, Math.max(0, colour.l + direction * step * 0.01)) })))
24
+ .find((candidate) => reaches(candidate, against, min));
25
+ }
26
+ /**
27
+ * The nearest colour to `colour`, by lightness alone, that reaches `min` with each of `against`.
28
+ * It first moves away from the first of `against`, then toward it; undefined when neither works.
29
+ */
30
+ export function readableAgainst(colour, against, min) {
31
+ if (reaches(colour, against, min))
32
+ return colour;
33
+ const away = colour.l >= (against[0]?.l ?? 0) ? 1 : -1;
34
+ return stepped(colour, against, min, away) ?? stepped(colour, against, min, away === 1 ? -1 : 1);
35
+ }
36
+ const marker = (c) => `linear-gradient(transparent 58%, ${c} 58%, ${c} 92%, transparent 92%)`;
37
+ /**
38
+ * The emphasis colour and marker of one mode, for the page and for each band, solved against
39
+ * that mode's concrete role colours in `known`. A style that is neither colour nor marker keeps
40
+ * the values `designDecls` gave it.
41
+ */
42
+ export function emphasisSurfaceDecls(dna, known) {
43
+ const style = dna.emphasis?.style ?? "colour";
44
+ const role = dna.emphasis?.role ?? "primary";
45
+ const colour = (name) => parseColor(known.get(`--dna-color-${name}`) ?? "");
46
+ if (style !== "colour" && style !== "marker")
47
+ return EMPHASIS_SURFACES.flatMap((surface) => [
48
+ [`--dna-emphasis-color${surface}`, "inherit"],
49
+ [`--dna-emphasis-bg${surface}`, "none"],
50
+ ]);
51
+ return EMPHASIS_SURFACES.flatMap((surface) => {
52
+ const { text, backgrounds } = SURFACES[surface];
53
+ const against = style === "marker" ? [colour(text)] : backgrounds.map(colour);
54
+ const solved = readableAgainst(colour(role), against, EMPHASIS_MIN_CONTRAST);
55
+ if (!solved)
56
+ throw new EmphasisContrastError(role, surface === "" ? "page" : surface.slice(1));
57
+ const css = cssOklch(solved);
58
+ return [
59
+ [`--dna-emphasis-color${surface}`, style === "colour" ? css : "inherit"],
60
+ [`--dna-emphasis-bg${surface}`, style === "marker" ? marker(css) : "none"],
61
+ ];
62
+ });
63
+ }
64
+ //# sourceMappingURL=site-emphasis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-emphasis.js","sourceRoot":"","sources":["../../../src/core/compile/site-emphasis.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import type { ColorRole } from "../../schema/tokens.js";
12
12
  export declare const THEME_CONTRACT_MAJOR = 1;
13
- export declare const THEME_CONTRACT_MINOR = 0;
13
+ export declare const THEME_CONTRACT_MINOR = 3;
14
14
  export declare const SITE_THEME_PATH = "site-theme.css";
15
15
  /** A required token is absent, so the theme cannot meet the contract. */
16
16
  export declare class ThemeContractError extends Error {
@@ -29,7 +29,7 @@ export declare const SHADOW_RULES: Readonly<Record<string, StepRule>>;
29
29
  export declare const BORDER_WIDTH_RULES: Readonly<Record<string, StepRule>>;
30
30
  /** h1, h2, h3 and body are required; the others take the first defined role in their chain. */
31
31
  export declare const TYPE_RULES: Readonly<Record<string, readonly string[]>>;
32
- export declare const TYPE_PROPS: readonly ["family", "size", "weight", "line-height", "tracking"];
32
+ export declare const TYPE_PROPS: readonly ["family", "size", "weight", "line-height", "tracking", "features"];
33
33
  /** A component the DNA does not define is built from these role, radius and space tokens. */
34
34
  export type ComponentRule = {
35
35
  readonly background: string;
@@ -44,6 +44,13 @@ export declare const COMPONENT_PROPS: readonly ["bg", "fg", "border", "radius",
44
44
  export declare const FONT_VARIABLES: readonly ["--font-sans", "--font-display", "--font-mono"];
45
45
  export declare const MONO_FALLBACK: readonly ["ui-monospace", "monospace"];
46
46
  export declare const DEFAULT_LAYOUT_WIDTH_PX = 1400;
47
+ /** The narrowest and widest screens a fluid type size spans, in px. */
48
+ export declare const FLUID_RANGE_PX: {
49
+ readonly min: 390;
50
+ readonly max: 1440;
51
+ };
52
+ /** The design-language variables (site-design.ts): contract minor 1, minor 2 adds the emphasis of each band, minor 3 the band textures. */
53
+ export declare const DESIGN_VARIABLES: readonly [...string[], "--dna-section-sm", "--dna-section-md", "--dna-section-lg", "--dna-head-align", "--dna-head-margin", "--dna-split-wide", "--dna-split-narrow", "--dna-measure-body", "--dna-measure-lead", "--dna-texture-tint", "--dna-texture-inverse", "--dna-texture-brand", "--dna-list-bg", "--dna-list-fill", "--dna-list-border-width", "--dna-list-radius", "--dna-list-padding-x", "--dna-list-padding-y", "--dna-quote-bg", "--dna-quote-border-width", "--dna-quote-border-color", "--dna-quote-radius", "--dna-quote-padding", "--dna-media-radius", "--dna-media-aspect", "--dna-media-frame-bg", "--dna-media-frame-border-width", "--dna-media-frame-padding", "--dna-media-bleed", "--dna-media-filter", "--dna-media-blend", "--dna-media-highlight", "--dna-media-shadow", "--dna-emphasis-color", "--dna-emphasis-bg", "--dna-emphasis-color-inverse", "--dna-emphasis-bg-inverse", "--dna-emphasis-color-brand", "--dna-emphasis-bg-brand", "--dna-emphasis-style", "--dna-emphasis-decoration", "--dna-emphasis-decoration-color", "--dna-accent-rule", "--dna-accent-numerals", "--dna-cta-inverse-bg", "--dna-cta-inverse-fg", "--dna-badge-bg", "--dna-badge-fg", "--dna-control-height-sm", "--dna-control-height-md", "--dna-control-height-lg", "--dna-focus-color", "--dna-focus-width", "--dna-focus-offset", "--dna-hover-mix", "--dna-numerals", "--dna-quote-hang", "--dna-motion-fast", "--dna-motion-base", "--dna-motion-slow", "--dna-motion-ease", "--dna-reveal-duration", "--dna-reveal-distance", "--dna-reveal-opacity"];
47
54
  /** Every variable that `site-theme.css` must declare, in the order the contract lists them. */
48
55
  export declare function themeContractVariables(): string[];
49
56
  //# sourceMappingURL=site-theme-rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site-theme-rules.d.ts","sourceRoot":"","sources":["../../../src/core/compile/site-theme-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,yEAAyE;AACzE,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKzC;AAED,8EAA8E;AAC9E,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC,CAexE,CAAC;AAEF,wGAAwG;AACxG,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAK3D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAI3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAGjE,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CASlE,CAAC;AAEF,eAAO,MAAM,UAAU,kEAAmE,CAAC;AAE3F,6FAA6F;AAC7F,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAyBnE,CAAC;AAEF,eAAO,MAAM,eAAe,qEAAsE,CAAC;AAEnG,eAAO,MAAM,cAAc,2DAA4D,CAAC;AACxF,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAK5C,+FAA+F;AAC/F,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAWjD"}
1
+ {"version":3,"file":"site-theme-rules.d.ts","sourceRoot":"","sources":["../../../src/core/compile/site-theme-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,yEAAyE;AACzE,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKzC;AAED,8EAA8E;AAC9E,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC,CAsBxE,CAAC;AAEF,wGAAwG;AACxG,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAK3D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAI3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAGjE,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAYlE,CAAC;AAEF,eAAO,MAAM,UAAU,8EAA+E,CAAC;AAEvG,6FAA6F;AAC7F,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAyBnE,CAAC;AAEF,eAAO,MAAM,eAAe,qEAAsE,CAAC;AAEnG,eAAO,MAAM,cAAc,2DAA4D,CAAC;AACxF,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,uEAAuE;AACvE,eAAO,MAAM,cAAc;;;CAAmC,CAAC;AAE/D,2IAA2I;AAC3I,eAAO,MAAM,gBAAgB,2+CAkEnB,CAAC;AAKX,+FAA+F;AAC/F,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAYjD"}
@@ -1,6 +1,6 @@
1
1
  import { COLOR_ROLES } from "../../schema/tokens.js";
2
2
  export const THEME_CONTRACT_MAJOR = 1;
3
- export const THEME_CONTRACT_MINOR = 0;
3
+ export const THEME_CONTRACT_MINOR = 3;
4
4
  export const SITE_THEME_PATH = "site-theme.css";
5
5
  /** A required token is absent, so the theme cannot meet the contract. */
6
6
  export class ThemeContractError extends Error {
@@ -22,6 +22,13 @@ export const ROLE_RULES = {
22
22
  surface: ["surface"],
23
23
  "surface-alt": ["surface-alt", "surface"],
24
24
  "on-surface": ["on-surface"],
25
+ "surface-tint": ["surface-tint", "surface-alt", "surface"],
26
+ // Without its own inverse roles a brand swaps its text and page colours: a pair every DNA
27
+ // already holds at AA, where a secondary colour may be a mid tone.
28
+ "surface-inverse": ["surface-inverse", "on-surface"],
29
+ "on-surface-inverse": ["on-surface-inverse", "surface"],
30
+ "surface-brand": ["surface-brand", "primary"],
31
+ "on-surface-brand": ["on-surface-brand", "on-primary"],
25
32
  muted: ["muted", "on-surface"],
26
33
  border: ["border", "muted", "on-surface"],
27
34
  success: ["success", "primary"],
@@ -53,8 +60,11 @@ export const TYPE_RULES = {
53
60
  h4: ["h4", "h3"],
54
61
  "body-sm": ["body-sm", "body"],
55
62
  caption: ["caption", "body-sm", "body"],
63
+ "display-xl": ["display-xl", "display", "h1"],
64
+ overline: ["overline", "caption", "body-sm", "body"],
65
+ button: ["button", "body"],
56
66
  };
57
- export const TYPE_PROPS = ["family", "size", "weight", "line-height", "tracking"];
67
+ export const TYPE_PROPS = ["family", "size", "weight", "line-height", "tracking", "features"];
58
68
  export const COMPONENT_RULES = {
59
69
  "button-primary": {
60
70
  background: "{color.role.primary}",
@@ -85,6 +95,76 @@ export const COMPONENT_PROPS = ["bg", "fg", "border", "radius", "padding-x", "pa
85
95
  export const FONT_VARIABLES = ["--font-sans", "--font-display", "--font-mono"];
86
96
  export const MONO_FALLBACK = ["ui-monospace", "monospace"];
87
97
  export const DEFAULT_LAYOUT_WIDTH_PX = 1400;
98
+ /** The narrowest and widest screens a fluid type size spans, in px. */
99
+ export const FLUID_RANGE_PX = { min: 390, max: 1440 };
100
+ /** The design-language variables (site-design.ts): contract minor 1, minor 2 adds the emphasis of each band, minor 3 the band textures. */
101
+ export const DESIGN_VARIABLES = [
102
+ ...["xs", "sm", "md", "lg", "xl", "2xl"].map((step) => `--dna-space-${step}`),
103
+ "--dna-section-sm",
104
+ "--dna-section-md",
105
+ "--dna-section-lg",
106
+ "--dna-head-align",
107
+ "--dna-head-margin",
108
+ "--dna-split-wide",
109
+ "--dna-split-narrow",
110
+ "--dna-measure-body",
111
+ "--dna-measure-lead",
112
+ "--dna-texture-tint",
113
+ "--dna-texture-inverse",
114
+ "--dna-texture-brand",
115
+ "--dna-list-bg",
116
+ "--dna-list-fill",
117
+ "--dna-list-border-width",
118
+ "--dna-list-radius",
119
+ "--dna-list-padding-x",
120
+ "--dna-list-padding-y",
121
+ "--dna-quote-bg",
122
+ "--dna-quote-border-width",
123
+ "--dna-quote-border-color",
124
+ "--dna-quote-radius",
125
+ "--dna-quote-padding",
126
+ "--dna-media-radius",
127
+ "--dna-media-aspect",
128
+ "--dna-media-frame-bg",
129
+ "--dna-media-frame-border-width",
130
+ "--dna-media-frame-padding",
131
+ "--dna-media-bleed",
132
+ "--dna-media-filter",
133
+ "--dna-media-blend",
134
+ "--dna-media-highlight",
135
+ "--dna-media-shadow",
136
+ "--dna-emphasis-color",
137
+ "--dna-emphasis-bg",
138
+ "--dna-emphasis-color-inverse",
139
+ "--dna-emphasis-bg-inverse",
140
+ "--dna-emphasis-color-brand",
141
+ "--dna-emphasis-bg-brand",
142
+ "--dna-emphasis-style",
143
+ "--dna-emphasis-decoration",
144
+ "--dna-emphasis-decoration-color",
145
+ "--dna-accent-rule",
146
+ "--dna-accent-numerals",
147
+ "--dna-cta-inverse-bg",
148
+ "--dna-cta-inverse-fg",
149
+ "--dna-badge-bg",
150
+ "--dna-badge-fg",
151
+ "--dna-control-height-sm",
152
+ "--dna-control-height-md",
153
+ "--dna-control-height-lg",
154
+ "--dna-focus-color",
155
+ "--dna-focus-width",
156
+ "--dna-focus-offset",
157
+ "--dna-hover-mix",
158
+ "--dna-numerals",
159
+ "--dna-quote-hang",
160
+ "--dna-motion-fast",
161
+ "--dna-motion-base",
162
+ "--dna-motion-slow",
163
+ "--dna-motion-ease",
164
+ "--dna-reveal-duration",
165
+ "--dna-reveal-distance",
166
+ "--dna-reveal-opacity",
167
+ ];
88
168
  const stepVariables = (prefix, rules) => Object.keys(rules).map((step) => `--dna-${prefix}-${step}`);
89
169
  /** Every variable that `site-theme.css` must declare, in the order the contract lists them. */
90
170
  export function themeContractVariables() {
@@ -97,6 +177,7 @@ export function themeContractVariables() {
97
177
  ...Object.keys(COMPONENT_RULES).flatMap((id) => COMPONENT_PROPS.map((prop) => `--dna-component-${id}-${prop}`)),
98
178
  ...FONT_VARIABLES,
99
179
  "--fd-layout-width",
180
+ ...DESIGN_VARIABLES,
100
181
  ];
101
182
  }
102
183
  //# sourceMappingURL=site-theme-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"site-theme-rules.js","sourceRoot":"","sources":["../../../src/core/compile/site-theme-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-theme-rules.js","sourceRoot":"","sources":["../../../src/core/compile/site-theme-rules.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,yEAAyE;AACzE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACnC,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,MAAc;QACxC,KAAK,CAAC,8BAA8B,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;CACD;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAsD;IAC5E,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;IACnC,cAAc,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;IAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,WAAW,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IACxC,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,aAAa,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;IACzC,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,cAAc,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,CAAC;IAC1D,0FAA0F;IAC1F,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;IACpD,oBAAoB,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC;IACvD,eAAe,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC;IAC7C,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACtD,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;IACzC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;IACzC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC7B,CAAC;AAKF,MAAM,CAAC,MAAM,YAAY,GAAuC;IAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;IACrB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;IAC3B,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;IAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAuC;IAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IACpC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;IAC1C,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAuC;IACrE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;IACvC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;CACjD,CAAC;AAEF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,UAAU,GAAgD;IACtE,EAAE,EAAE,CAAC,IAAI,CAAC;IACV,EAAE,EAAE,CAAC,IAAI,CAAC;IACV,EAAE,EAAE,CAAC,IAAI,CAAC;IACV,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;IAC1B,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAYvG,MAAM,CAAC,MAAM,eAAe,GAA4C;IACvE,gBAAgB,EAAE;QACjB,UAAU,EAAE,sBAAsB;QAClC,UAAU,EAAE,yBAAyB;QACrC,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;KACtB;IACD,IAAI,EAAE;QACL,UAAU,EAAE,0BAA0B;QACtC,UAAU,EAAE,yBAAyB;QACrC,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;KACtB;IACD,KAAK,EAAE;QACN,UAAU,EAAE,0BAA0B;QACtC,UAAU,EAAE,yBAAyB;QACrC,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;KACtB;CACD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;AAEnG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAU,CAAC;AACxF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,WAAW,CAAU,CAAC;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAW,CAAC;AAE/D,2IAA2I;AAC3I,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC;IAC7E,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,mBAAmB;IACnB,sBAAsB;IACtB,sBAAsB;IACtB,gBAAgB;IAChB,0BAA0B;IAC1B,0BAA0B;IAC1B,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,gCAAgC;IAChC,2BAA2B;IAC3B,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,oBAAoB;IACpB,sBAAsB;IACtB,mBAAmB;IACnB,8BAA8B;IAC9B,2BAA2B;IAC3B,4BAA4B;IAC5B,yBAAyB;IACzB,sBAAsB;IACtB,2BAA2B;IAC3B,iCAAiC;IACjC,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,gBAAgB;IAChB,gBAAgB;IAChB,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;CACb,CAAC;AAEX,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,KAAwC,EAAY,EAAE,CAC5F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;AAE7D,+FAA+F;AAC/F,MAAM,UAAU,sBAAsB;IACrC,OAAO;QACN,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC;QACnD,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC;QACxC,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC;QACxC,GAAG,aAAa,CAAC,cAAc,EAAE,kBAAkB,CAAC;QACpD,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QACpG,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/G,GAAG,cAAc;QACjB,mBAAmB;QACnB,GAAG,gBAAgB;KACnB,CAAC;AACH,CAAC"}
@@ -8,7 +8,17 @@ export declare function contractRole(index: TokenIndex, dna: Dna, role: ColorRol
8
8
  export declare function roleDecls(index: TokenIndex, dna: Dna, mode: Mode): Decl[];
9
9
  /** Radius, shadow and border-width steps, each after its rule. */
10
10
  export declare function shapeDecls(index: TokenIndex): Decl[];
11
- /** Family, size, weight, line height and tracking for each contract type role. */
11
+ /**
12
+ * A role's size: fixed, or with `fontSizeMin` a clamp that grows linearly from the narrow to the
13
+ * wide screen of FLUID_RANGE_PX, so a headline fits a phone and fills a desktop.
14
+ */
15
+ export declare function sizeCss(index: TokenIndex, t: Record<string, unknown>): string;
16
+ /**
17
+ * A role's tracking. A fluid role writes it in em, as a share of the size, so a headline keeps the
18
+ * same tightness on a phone as on a desktop; a fixed size keeps its own unit.
19
+ */
20
+ export declare function trackingCss(index: TokenIndex, t: Record<string, unknown>): string;
21
+ /** Family, size, weight, line height, tracking and features for each contract type role. */
12
22
  export declare function typeDecls(index: TokenIndex, dna: Dna): Decl[];
13
23
  /** Colours and shape of each contract component, from the DNA or from its component rule. */
14
24
  export declare function componentDecls(index: TokenIndex, dna: Dna, mode: Mode): Decl[];
@@ -1 +1 @@
1
- {"version":3,"file":"site-theme-values.d.ts","sourceRoot":"","sources":["../../../src/core/compile/site-theme-values.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAe,KAAK,SAAS,EAAmB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAe,WAAW,EAAE,KAAK,IAAI,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAc1G,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpC,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAQ7F;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAEzE;AA2BD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,CAWpD;AAUD,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAY7D;AAsBD,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CA0B9E;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"site-theme-values.d.ts","sourceRoot":"","sources":["../../../src/core/compile/site-theme-values.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAe,KAAK,SAAS,EAAmB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAe,WAAW,EAAE,KAAK,IAAI,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAe1G,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpC,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAQ7F;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAEzE;AA2BD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,CAWpD;AAeD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAO7E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAKjF;AAOD,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAa7D;AAsBD,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CA0B9E;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}