@conductor-by-89soone/tokens 0.5.0 → 0.6.1
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/dist/cli.js +100 -4
- package/dist/contrast-cli.js +114 -11
- package/dist/contrast-report.json +173 -4
- package/dist/index.js +20 -1
- package/dist/tokens.css +45 -3
- package/dist/tokens.d.ts +19 -0
- package/dist/tokens.js +20 -1
- package/dist/tokens.json +146 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -271,7 +271,13 @@ var motion = [
|
|
|
271
271
|
semantic("motion.fast", "140ms {ease.entrance}", "Colour, background and border transitions."),
|
|
272
272
|
semantic("motion.standard", "240ms {ease.entrance}", "Overlay and page entrance."),
|
|
273
273
|
semantic("motion.bounce", "300ms {ease.overshoot}", "Toggle and switch settle."),
|
|
274
|
-
semantic("motion.spin", "1000ms {ease.linear}", "One revolution of the indeterminate spinner.")
|
|
274
|
+
semantic("motion.spin", "1000ms {ease.linear}", "One revolution of the indeterminate spinner."),
|
|
275
|
+
// CR-047: a press, an exit, a large surface, a spring settle, and the step between staged items.
|
|
276
|
+
semantic("motion.instant", "90ms {ease.entrance}", "Press feedback and pointer-tracking highlights."),
|
|
277
|
+
semantic("motion.exit", "160ms {ease.exit}", "Overlay, popover and drawer exits."),
|
|
278
|
+
semantic("motion.slow", "420ms {ease.emphasized}", "Drawers and other large surfaces entering."),
|
|
279
|
+
semantic("motion.spring", "520ms {ease.spring}", "Spring settle for dialogs, popovers and checked indicators (entrances only)."),
|
|
280
|
+
semantic("motion.stagger", "45ms", "Delay step between items of a staged entrance; a duration, never an easing.")
|
|
275
281
|
];
|
|
276
282
|
var scaleTokens = [
|
|
277
283
|
...fontSize,
|
|
@@ -477,7 +483,7 @@ var overlay = [
|
|
|
477
483
|
component("overlay.drawerBackground", ref("surface.raised"), "Drawer panel fill."),
|
|
478
484
|
component("overlay.drawerWidth", value("500px"), "Drawer panel width."),
|
|
479
485
|
component("overlay.enter", ref("motion.standard"), "Overlay entrance."),
|
|
480
|
-
component("overlay.exit", ref("motion.
|
|
486
|
+
component("overlay.exit", ref("motion.exit"), "Overlay exit.")
|
|
481
487
|
];
|
|
482
488
|
var HEADING_MIN_PX = FONT_SIZE_PX.xl * 1.2;
|
|
483
489
|
var HEADING_MAX_PX = FONT_SIZE_PX.xl * 1.6;
|
|
@@ -605,6 +611,59 @@ var componentTokens = [
|
|
|
605
611
|
...workbench
|
|
606
612
|
];
|
|
607
613
|
|
|
614
|
+
// src/oklab.ts
|
|
615
|
+
var HEX = /^#([0-9a-f]{6})$/i;
|
|
616
|
+
function parseHex(hex) {
|
|
617
|
+
const match = HEX.exec(hex);
|
|
618
|
+
if (match === null) throw new Error(`oklab: expected #rrggbb, got "${hex}"`);
|
|
619
|
+
const digits = match[1];
|
|
620
|
+
return [0, 2, 4].map((offset) => Number.parseInt(digits.slice(offset, offset + 2), 16) / 255);
|
|
621
|
+
}
|
|
622
|
+
var toLinear = (channel) => channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;
|
|
623
|
+
var toGamma = (channel) => channel <= 31308e-7 ? 12.92 * channel : 1.055 * channel ** (1 / 2.4) - 0.055;
|
|
624
|
+
var clamp = (channel) => Math.min(1, Math.max(0, channel));
|
|
625
|
+
function toOklab(hex) {
|
|
626
|
+
const [r, g, b] = parseHex(hex).map(toLinear);
|
|
627
|
+
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
|
628
|
+
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
|
629
|
+
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
|
630
|
+
return [
|
|
631
|
+
0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
632
|
+
1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
633
|
+
0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s
|
|
634
|
+
];
|
|
635
|
+
}
|
|
636
|
+
function fromOklab([lightness, a, b]) {
|
|
637
|
+
const l = (lightness + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
638
|
+
const m = (lightness - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
639
|
+
const s = (lightness - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
640
|
+
const linear = [
|
|
641
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
642
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
643
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
|
|
644
|
+
];
|
|
645
|
+
return `#${linear.map((channel) => Math.round(clamp(toGamma(clamp(channel))) * 255).toString(16).padStart(2, "0")).join("")}`;
|
|
646
|
+
}
|
|
647
|
+
function mixOklab(foreground, background, weight) {
|
|
648
|
+
if (!(weight >= 0 && weight <= 1)) throw new Error(`oklab: weight must be within [0, 1], got ${weight}`);
|
|
649
|
+
const front = toOklab(foreground);
|
|
650
|
+
const back = toOklab(background);
|
|
651
|
+
return fromOklab(front.map((channel, index) => channel * weight + back[index] * (1 - weight)));
|
|
652
|
+
}
|
|
653
|
+
var TONE_WEIGHTS = {
|
|
654
|
+
background: 0.04,
|
|
655
|
+
border: 0.14,
|
|
656
|
+
backgroundHover: 0.12,
|
|
657
|
+
borderHover: 0.45
|
|
658
|
+
};
|
|
659
|
+
function toneValues(tones, surfaceRaised) {
|
|
660
|
+
const out = {};
|
|
661
|
+
for (const tone2 of Object.keys(tones)) {
|
|
662
|
+
for (const [state, weight] of Object.entries(TONE_WEIGHTS)) out[`tone.${tone2}.${state}`] = mixOklab(tones[tone2], surfaceRaised, weight);
|
|
663
|
+
}
|
|
664
|
+
return out;
|
|
665
|
+
}
|
|
666
|
+
|
|
608
667
|
// src/palette.dark.ts
|
|
609
668
|
function darkToken(input2) {
|
|
610
669
|
return { tier: "semantic", ...input2 };
|
|
@@ -1098,6 +1157,27 @@ var dataviz = [
|
|
|
1098
1157
|
description: "Sequential distribution step 5 of 5 (most prominent), single-hue luminance ramp. Fill only; non-text 3:1 on chart surfaces (CP-115~CP-117)."
|
|
1099
1158
|
})
|
|
1100
1159
|
];
|
|
1160
|
+
var TONE_STATE_DESCRIPTIONS = {
|
|
1161
|
+
background: "rest fill",
|
|
1162
|
+
border: "rest edge",
|
|
1163
|
+
backgroundHover: "hover fill",
|
|
1164
|
+
borderHover: "hover edge"
|
|
1165
|
+
};
|
|
1166
|
+
function valueOf(tokens, key) {
|
|
1167
|
+
const value2 = tokens.find((token) => token.key === key)?.value;
|
|
1168
|
+
if (typeof value2 !== "string") throw new Error(`palette.dark: tone base "${key}" has no literal colour value`);
|
|
1169
|
+
return value2;
|
|
1170
|
+
}
|
|
1171
|
+
var toneBases = { accent: valueOf(accent, "accent.DEFAULT"), danger: valueOf(status, "status.danger") };
|
|
1172
|
+
var tone = Object.entries(toneValues(toneBases, valueOf(surface, "surface.raised"))).map(([key, value2]) => {
|
|
1173
|
+
const [, toneName, state] = key.split(".");
|
|
1174
|
+
return darkToken({
|
|
1175
|
+
key,
|
|
1176
|
+
usage: "decorative",
|
|
1177
|
+
value: value2,
|
|
1178
|
+
description: `Secondary ${toneName}-tone button ${TONE_STATE_DESCRIPTIONS[state]}: ${Math.round(TONE_WEIGHTS[state] * 100)}% of \`${toneName === "accent" ? "accent" : "status.danger"}\` over \`surface.raised\`, mixed in OKLab at build time (CR-050).`
|
|
1179
|
+
});
|
|
1180
|
+
});
|
|
1101
1181
|
var darkPalette = [
|
|
1102
1182
|
...surface,
|
|
1103
1183
|
...text,
|
|
@@ -1109,11 +1189,12 @@ var darkPalette = [
|
|
|
1109
1189
|
...fontFamily,
|
|
1110
1190
|
...elevation,
|
|
1111
1191
|
...interaction,
|
|
1192
|
+
...tone,
|
|
1112
1193
|
...dataviz
|
|
1113
1194
|
];
|
|
1114
1195
|
|
|
1115
1196
|
// src/palette.light.ts
|
|
1116
|
-
var
|
|
1197
|
+
var baseValues = {
|
|
1117
1198
|
"surface.base": "#e8ecf2",
|
|
1118
1199
|
"surface.canvas": "#eef1f6",
|
|
1119
1200
|
"surface.subtle": "#f3f6f9",
|
|
@@ -1183,6 +1264,13 @@ var values = {
|
|
|
1183
1264
|
"dataviz.sequential.4": "#4539cd",
|
|
1184
1265
|
"dataviz.sequential.5": "#3329a4"
|
|
1185
1266
|
};
|
|
1267
|
+
var values = {
|
|
1268
|
+
...baseValues,
|
|
1269
|
+
...toneValues(
|
|
1270
|
+
{ accent: baseValues["accent.DEFAULT"], danger: baseValues["status.danger"] },
|
|
1271
|
+
baseValues["surface.raised"]
|
|
1272
|
+
)
|
|
1273
|
+
};
|
|
1186
1274
|
var lightAdditions = [];
|
|
1187
1275
|
function derivePalette(base, overrides, additions = []) {
|
|
1188
1276
|
const baseKeys = new Set(base.map((token) => token.key));
|
|
@@ -1314,7 +1402,15 @@ var nonColour = [
|
|
|
1314
1402
|
primitive("curve.24", "24px", "Corner radius step."),
|
|
1315
1403
|
primitive("ease.entrance", "cubic-bezier(0.2, 0, 0, 1)", "Entrance and state-change easing."),
|
|
1316
1404
|
primitive("ease.overshoot", "cubic-bezier(0.34, 1.56, 0.64, 1)", "Toggle settle easing."),
|
|
1317
|
-
primitive("ease.linear", "linear", "Constant-rate motion: spinners and marquees.")
|
|
1405
|
+
primitive("ease.linear", "linear", "Constant-rate motion: spinners and marquees."),
|
|
1406
|
+
// CR-047: exits accelerate away, large surfaces decelerate hard, and settles follow a sampled spring.
|
|
1407
|
+
primitive("ease.exit", "cubic-bezier(0.4, 0, 1, 1)", "Exit easing: accelerates out of view."),
|
|
1408
|
+
primitive("ease.emphasized", "cubic-bezier(0.05, 0.7, 0.1, 1)", "Emphasized deceleration for large surfaces and hero entrances."),
|
|
1409
|
+
primitive(
|
|
1410
|
+
"ease.spring",
|
|
1411
|
+
"linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1)",
|
|
1412
|
+
"Damped spring (ratio 0.72, ~4% overshoot) sampled into linear(); entrances only."
|
|
1413
|
+
)
|
|
1318
1414
|
];
|
|
1319
1415
|
var primitiveTokens = [
|
|
1320
1416
|
...ink,
|
package/dist/contrast-cli.js
CHANGED
|
@@ -362,6 +362,12 @@ var datavizPairs = [
|
|
|
362
362
|
pair("CP-116", "dataviz.sequential.5", "surface.canvas", "nonText"),
|
|
363
363
|
pair("CP-117", "dataviz.sequential.5", "surface.raised", "nonText")
|
|
364
364
|
];
|
|
365
|
+
var tonePairs = [
|
|
366
|
+
pair("CP-118", "text.primary", "tone.accent.background", "body"),
|
|
367
|
+
pair("CP-119", "text.primary", "tone.accent.backgroundHover", "body"),
|
|
368
|
+
pair("CP-120", "text.primary", "tone.danger.background", "body"),
|
|
369
|
+
pair("CP-121", "text.primary", "tone.danger.backgroundHover", "body")
|
|
370
|
+
];
|
|
365
371
|
var contrastPairs = [
|
|
366
372
|
...textOnSurface,
|
|
367
373
|
...accentPairs,
|
|
@@ -371,7 +377,8 @@ var contrastPairs = [
|
|
|
371
377
|
...severityPairs,
|
|
372
378
|
...badgePairs,
|
|
373
379
|
...disabledPairs,
|
|
374
|
-
...datavizPairs
|
|
380
|
+
...datavizPairs,
|
|
381
|
+
...tonePairs
|
|
375
382
|
];
|
|
376
383
|
var forbiddenPairs = [
|
|
377
384
|
{
|
|
@@ -492,7 +499,13 @@ var motion = [
|
|
|
492
499
|
semantic("motion.fast", "140ms {ease.entrance}", "Colour, background and border transitions."),
|
|
493
500
|
semantic("motion.standard", "240ms {ease.entrance}", "Overlay and page entrance."),
|
|
494
501
|
semantic("motion.bounce", "300ms {ease.overshoot}", "Toggle and switch settle."),
|
|
495
|
-
semantic("motion.spin", "1000ms {ease.linear}", "One revolution of the indeterminate spinner.")
|
|
502
|
+
semantic("motion.spin", "1000ms {ease.linear}", "One revolution of the indeterminate spinner."),
|
|
503
|
+
// CR-047: a press, an exit, a large surface, a spring settle, and the step between staged items.
|
|
504
|
+
semantic("motion.instant", "90ms {ease.entrance}", "Press feedback and pointer-tracking highlights."),
|
|
505
|
+
semantic("motion.exit", "160ms {ease.exit}", "Overlay, popover and drawer exits."),
|
|
506
|
+
semantic("motion.slow", "420ms {ease.emphasized}", "Drawers and other large surfaces entering."),
|
|
507
|
+
semantic("motion.spring", "520ms {ease.spring}", "Spring settle for dialogs, popovers and checked indicators (entrances only)."),
|
|
508
|
+
semantic("motion.stagger", "45ms", "Delay step between items of a staged entrance; a duration, never an easing.")
|
|
496
509
|
];
|
|
497
510
|
var scaleTokens = [
|
|
498
511
|
...fontSize,
|
|
@@ -698,7 +711,7 @@ var overlay = [
|
|
|
698
711
|
component("overlay.drawerBackground", ref("surface.raised"), "Drawer panel fill."),
|
|
699
712
|
component("overlay.drawerWidth", value("500px"), "Drawer panel width."),
|
|
700
713
|
component("overlay.enter", ref("motion.standard"), "Overlay entrance."),
|
|
701
|
-
component("overlay.exit", ref("motion.
|
|
714
|
+
component("overlay.exit", ref("motion.exit"), "Overlay exit.")
|
|
702
715
|
];
|
|
703
716
|
var HEADING_MIN_PX = FONT_SIZE_PX.xl * 1.2;
|
|
704
717
|
var HEADING_MAX_PX = FONT_SIZE_PX.xl * 1.6;
|
|
@@ -826,6 +839,59 @@ var componentTokens = [
|
|
|
826
839
|
...workbench
|
|
827
840
|
];
|
|
828
841
|
|
|
842
|
+
// src/oklab.ts
|
|
843
|
+
var HEX = /^#([0-9a-f]{6})$/i;
|
|
844
|
+
function parseHex(hex) {
|
|
845
|
+
const match = HEX.exec(hex);
|
|
846
|
+
if (match === null) throw new Error(`oklab: expected #rrggbb, got "${hex}"`);
|
|
847
|
+
const digits = match[1];
|
|
848
|
+
return [0, 2, 4].map((offset) => Number.parseInt(digits.slice(offset, offset + 2), 16) / 255);
|
|
849
|
+
}
|
|
850
|
+
var toLinear = (channel) => channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;
|
|
851
|
+
var toGamma = (channel) => channel <= 31308e-7 ? 12.92 * channel : 1.055 * channel ** (1 / 2.4) - 0.055;
|
|
852
|
+
var clamp = (channel) => Math.min(1, Math.max(0, channel));
|
|
853
|
+
function toOklab(hex) {
|
|
854
|
+
const [r, g, b] = parseHex(hex).map(toLinear);
|
|
855
|
+
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
|
856
|
+
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
|
857
|
+
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
|
858
|
+
return [
|
|
859
|
+
0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
860
|
+
1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
861
|
+
0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s
|
|
862
|
+
];
|
|
863
|
+
}
|
|
864
|
+
function fromOklab([lightness, a, b]) {
|
|
865
|
+
const l = (lightness + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
866
|
+
const m = (lightness - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
867
|
+
const s = (lightness - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
868
|
+
const linear = [
|
|
869
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
870
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
871
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
|
|
872
|
+
];
|
|
873
|
+
return `#${linear.map((channel) => Math.round(clamp(toGamma(clamp(channel))) * 255).toString(16).padStart(2, "0")).join("")}`;
|
|
874
|
+
}
|
|
875
|
+
function mixOklab(foreground, background, weight) {
|
|
876
|
+
if (!(weight >= 0 && weight <= 1)) throw new Error(`oklab: weight must be within [0, 1], got ${weight}`);
|
|
877
|
+
const front = toOklab(foreground);
|
|
878
|
+
const back = toOklab(background);
|
|
879
|
+
return fromOklab(front.map((channel, index) => channel * weight + back[index] * (1 - weight)));
|
|
880
|
+
}
|
|
881
|
+
var TONE_WEIGHTS = {
|
|
882
|
+
background: 0.04,
|
|
883
|
+
border: 0.14,
|
|
884
|
+
backgroundHover: 0.12,
|
|
885
|
+
borderHover: 0.45
|
|
886
|
+
};
|
|
887
|
+
function toneValues(tones, surfaceRaised) {
|
|
888
|
+
const out = {};
|
|
889
|
+
for (const tone2 of Object.keys(tones)) {
|
|
890
|
+
for (const [state, weight] of Object.entries(TONE_WEIGHTS)) out[`tone.${tone2}.${state}`] = mixOklab(tones[tone2], surfaceRaised, weight);
|
|
891
|
+
}
|
|
892
|
+
return out;
|
|
893
|
+
}
|
|
894
|
+
|
|
829
895
|
// src/palette.dark.ts
|
|
830
896
|
function darkToken(input2) {
|
|
831
897
|
return { tier: "semantic", ...input2 };
|
|
@@ -1319,6 +1385,27 @@ var dataviz = [
|
|
|
1319
1385
|
description: "Sequential distribution step 5 of 5 (most prominent), single-hue luminance ramp. Fill only; non-text 3:1 on chart surfaces (CP-115~CP-117)."
|
|
1320
1386
|
})
|
|
1321
1387
|
];
|
|
1388
|
+
var TONE_STATE_DESCRIPTIONS = {
|
|
1389
|
+
background: "rest fill",
|
|
1390
|
+
border: "rest edge",
|
|
1391
|
+
backgroundHover: "hover fill",
|
|
1392
|
+
borderHover: "hover edge"
|
|
1393
|
+
};
|
|
1394
|
+
function valueOf(tokens, key) {
|
|
1395
|
+
const value2 = tokens.find((token) => token.key === key)?.value;
|
|
1396
|
+
if (typeof value2 !== "string") throw new Error(`palette.dark: tone base "${key}" has no literal colour value`);
|
|
1397
|
+
return value2;
|
|
1398
|
+
}
|
|
1399
|
+
var toneBases = { accent: valueOf(accent, "accent.DEFAULT"), danger: valueOf(status, "status.danger") };
|
|
1400
|
+
var tone = Object.entries(toneValues(toneBases, valueOf(surface, "surface.raised"))).map(([key, value2]) => {
|
|
1401
|
+
const [, toneName, state] = key.split(".");
|
|
1402
|
+
return darkToken({
|
|
1403
|
+
key,
|
|
1404
|
+
usage: "decorative",
|
|
1405
|
+
value: value2,
|
|
1406
|
+
description: `Secondary ${toneName}-tone button ${TONE_STATE_DESCRIPTIONS[state]}: ${Math.round(TONE_WEIGHTS[state] * 100)}% of \`${toneName === "accent" ? "accent" : "status.danger"}\` over \`surface.raised\`, mixed in OKLab at build time (CR-050).`
|
|
1407
|
+
});
|
|
1408
|
+
});
|
|
1322
1409
|
var darkPalette = [
|
|
1323
1410
|
...surface,
|
|
1324
1411
|
...text,
|
|
@@ -1330,11 +1417,12 @@ var darkPalette = [
|
|
|
1330
1417
|
...fontFamily,
|
|
1331
1418
|
...elevation,
|
|
1332
1419
|
...interaction,
|
|
1420
|
+
...tone,
|
|
1333
1421
|
...dataviz
|
|
1334
1422
|
];
|
|
1335
1423
|
|
|
1336
1424
|
// src/palette.light.ts
|
|
1337
|
-
var
|
|
1425
|
+
var baseValues = {
|
|
1338
1426
|
"surface.base": "#e8ecf2",
|
|
1339
1427
|
"surface.canvas": "#eef1f6",
|
|
1340
1428
|
"surface.subtle": "#f3f6f9",
|
|
@@ -1404,6 +1492,13 @@ var values = {
|
|
|
1404
1492
|
"dataviz.sequential.4": "#4539cd",
|
|
1405
1493
|
"dataviz.sequential.5": "#3329a4"
|
|
1406
1494
|
};
|
|
1495
|
+
var values = {
|
|
1496
|
+
...baseValues,
|
|
1497
|
+
...toneValues(
|
|
1498
|
+
{ accent: baseValues["accent.DEFAULT"], danger: baseValues["status.danger"] },
|
|
1499
|
+
baseValues["surface.raised"]
|
|
1500
|
+
)
|
|
1501
|
+
};
|
|
1407
1502
|
var lightAdditions = [];
|
|
1408
1503
|
function derivePalette(base, overrides, additions = []) {
|
|
1409
1504
|
const baseKeys = new Set(base.map((token) => token.key));
|
|
@@ -1535,7 +1630,15 @@ var nonColour = [
|
|
|
1535
1630
|
primitive("curve.24", "24px", "Corner radius step."),
|
|
1536
1631
|
primitive("ease.entrance", "cubic-bezier(0.2, 0, 0, 1)", "Entrance and state-change easing."),
|
|
1537
1632
|
primitive("ease.overshoot", "cubic-bezier(0.34, 1.56, 0.64, 1)", "Toggle settle easing."),
|
|
1538
|
-
primitive("ease.linear", "linear", "Constant-rate motion: spinners and marquees.")
|
|
1633
|
+
primitive("ease.linear", "linear", "Constant-rate motion: spinners and marquees."),
|
|
1634
|
+
// CR-047: exits accelerate away, large surfaces decelerate hard, and settles follow a sampled spring.
|
|
1635
|
+
primitive("ease.exit", "cubic-bezier(0.4, 0, 1, 1)", "Exit easing: accelerates out of view."),
|
|
1636
|
+
primitive("ease.emphasized", "cubic-bezier(0.05, 0.7, 0.1, 1)", "Emphasized deceleration for large surfaces and hero entrances."),
|
|
1637
|
+
primitive(
|
|
1638
|
+
"ease.spring",
|
|
1639
|
+
"linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1)",
|
|
1640
|
+
"Damped spring (ratio 0.72, ~4% overshoot) sampled into linear(); entrances only."
|
|
1641
|
+
)
|
|
1539
1642
|
];
|
|
1540
1643
|
var primitiveTokens = [
|
|
1541
1644
|
...ink,
|
|
@@ -1588,7 +1691,7 @@ function tokensForTheme(theme) {
|
|
|
1588
1691
|
// src/contrast/color.ts
|
|
1589
1692
|
var HEX_SOURCE = "#([0-9a-f]{3,8})\\b";
|
|
1590
1693
|
var FUNCTIONAL_SOURCE = "\\b(rgba?|hsla?)\\(\\s*([^()]*)\\)";
|
|
1591
|
-
var
|
|
1694
|
+
var clamp2 = (value2, low, high) => Math.min(Math.max(value2, low), high);
|
|
1592
1695
|
function fromHex(digits) {
|
|
1593
1696
|
const byte = (pair2) => parseInt(pair2.length === 1 ? pair2 + pair2 : pair2, 16);
|
|
1594
1697
|
if (digits.length === 3 || digits.length === 4) {
|
|
@@ -1612,14 +1715,14 @@ function argumentsOf(body) {
|
|
|
1612
1715
|
function toAlpha(raw) {
|
|
1613
1716
|
if (raw === void 0) return 1;
|
|
1614
1717
|
const value2 = raw.endsWith("%") ? Number(raw.slice(0, -1)) / 100 : Number(raw);
|
|
1615
|
-
return Number.isFinite(value2) ?
|
|
1718
|
+
return Number.isFinite(value2) ? clamp2(value2, 0, 1) : 1;
|
|
1616
1719
|
}
|
|
1617
1720
|
function fromRgb(body) {
|
|
1618
1721
|
const parts = argumentsOf(body);
|
|
1619
1722
|
if (parts.length < 3) return void 0;
|
|
1620
1723
|
const channel = (raw) => {
|
|
1621
1724
|
const value2 = raw.endsWith("%") ? Number(raw.slice(0, -1)) / 100 * 255 : Number(raw);
|
|
1622
|
-
return Number.isFinite(value2) ?
|
|
1725
|
+
return Number.isFinite(value2) ? clamp2(Math.round(value2), 0, 255) : Number.NaN;
|
|
1623
1726
|
};
|
|
1624
1727
|
const r = channel(parts[0]);
|
|
1625
1728
|
const g = channel(parts[1]);
|
|
@@ -1634,10 +1737,10 @@ function fromHsl(body) {
|
|
|
1634
1737
|
const saturation = Number(parts[1].replace(/%$/, "")) / 100;
|
|
1635
1738
|
const lightness = Number(parts[2].replace(/%$/, "")) / 100;
|
|
1636
1739
|
if (![hue, saturation, lightness].every((value2) => Number.isFinite(value2))) return void 0;
|
|
1637
|
-
const chroma = (1 - Math.abs(2 *
|
|
1740
|
+
const chroma = (1 - Math.abs(2 * clamp2(lightness, 0, 1) - 1)) * clamp2(saturation, 0, 1);
|
|
1638
1741
|
const sextant = (hue % 360 + 360) % 360 / 60;
|
|
1639
1742
|
const secondary = chroma * (1 - Math.abs(sextant % 2 - 1));
|
|
1640
|
-
const lift =
|
|
1743
|
+
const lift = clamp2(lightness, 0, 1) - chroma / 2;
|
|
1641
1744
|
const wheel = [
|
|
1642
1745
|
[chroma, secondary, 0],
|
|
1643
1746
|
[secondary, chroma, 0],
|
|
@@ -1647,7 +1750,7 @@ function fromHsl(body) {
|
|
|
1647
1750
|
[chroma, 0, secondary]
|
|
1648
1751
|
];
|
|
1649
1752
|
const [r, g, b] = wheel[Math.floor(sextant) % 6];
|
|
1650
|
-
const channel = (raw) =>
|
|
1753
|
+
const channel = (raw) => clamp2(Math.round((raw + lift) * 255), 0, 255);
|
|
1651
1754
|
return { r: channel(r), g: channel(g), b: channel(b), alpha: toAlpha(parts[3]) };
|
|
1652
1755
|
}
|
|
1653
1756
|
function parseFunctional(name, body) {
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"nonText": 3
|
|
11
11
|
},
|
|
12
12
|
"summary": {
|
|
13
|
-
"declaredPairs":
|
|
14
|
-
"checks":
|
|
15
|
-
"passed":
|
|
13
|
+
"declaredPairs": 120,
|
|
14
|
+
"checks": 240,
|
|
15
|
+
"passed": 240,
|
|
16
16
|
"failed": 0,
|
|
17
|
-
"excludedTokens":
|
|
17
|
+
"excludedTokens": 249,
|
|
18
18
|
"forbiddenPairs": 2
|
|
19
19
|
},
|
|
20
20
|
"results": [
|
|
@@ -1526,6 +1526,58 @@
|
|
|
1526
1526
|
"ratio": 10.836,
|
|
1527
1527
|
"pass": true
|
|
1528
1528
|
},
|
|
1529
|
+
{
|
|
1530
|
+
"id": "CP-118",
|
|
1531
|
+
"theme": "dark",
|
|
1532
|
+
"foreground": "text.primary",
|
|
1533
|
+
"background": "tone.accent.background",
|
|
1534
|
+
"foregroundValue": "#f4f7fb",
|
|
1535
|
+
"backgroundValue": "#172131",
|
|
1536
|
+
"compositedForeground": "#f4f7fb",
|
|
1537
|
+
"usage": "body",
|
|
1538
|
+
"threshold": 4.5,
|
|
1539
|
+
"ratio": 15.0532,
|
|
1540
|
+
"pass": true
|
|
1541
|
+
},
|
|
1542
|
+
{
|
|
1543
|
+
"id": "CP-119",
|
|
1544
|
+
"theme": "dark",
|
|
1545
|
+
"foreground": "text.primary",
|
|
1546
|
+
"background": "tone.accent.backgroundHover",
|
|
1547
|
+
"foregroundValue": "#f4f7fb",
|
|
1548
|
+
"backgroundValue": "#1d2840",
|
|
1549
|
+
"compositedForeground": "#f4f7fb",
|
|
1550
|
+
"usage": "body",
|
|
1551
|
+
"threshold": 4.5,
|
|
1552
|
+
"ratio": 13.6691,
|
|
1553
|
+
"pass": true
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"id": "CP-120",
|
|
1557
|
+
"theme": "dark",
|
|
1558
|
+
"foreground": "text.primary",
|
|
1559
|
+
"background": "tone.danger.background",
|
|
1560
|
+
"foregroundValue": "#f4f7fb",
|
|
1561
|
+
"backgroundValue": "#1d202c",
|
|
1562
|
+
"compositedForeground": "#f4f7fb",
|
|
1563
|
+
"usage": "body",
|
|
1564
|
+
"threshold": 4.5,
|
|
1565
|
+
"ratio": 15.0893,
|
|
1566
|
+
"pass": true
|
|
1567
|
+
},
|
|
1568
|
+
{
|
|
1569
|
+
"id": "CP-121",
|
|
1570
|
+
"theme": "dark",
|
|
1571
|
+
"foreground": "text.primary",
|
|
1572
|
+
"background": "tone.danger.backgroundHover",
|
|
1573
|
+
"foregroundValue": "#f4f7fb",
|
|
1574
|
+
"backgroundValue": "#2d252f",
|
|
1575
|
+
"compositedForeground": "#f4f7fb",
|
|
1576
|
+
"usage": "body",
|
|
1577
|
+
"threshold": 4.5,
|
|
1578
|
+
"ratio": 13.79,
|
|
1579
|
+
"pass": true
|
|
1580
|
+
},
|
|
1529
1581
|
{
|
|
1530
1582
|
"id": "CP-001",
|
|
1531
1583
|
"theme": "light",
|
|
@@ -3033,6 +3085,58 @@
|
|
|
3033
3085
|
"threshold": 3,
|
|
3034
3086
|
"ratio": 10.2529,
|
|
3035
3087
|
"pass": true
|
|
3088
|
+
},
|
|
3089
|
+
{
|
|
3090
|
+
"id": "CP-118",
|
|
3091
|
+
"theme": "light",
|
|
3092
|
+
"foreground": "text.primary",
|
|
3093
|
+
"background": "tone.accent.background",
|
|
3094
|
+
"foregroundValue": "#0c121c",
|
|
3095
|
+
"backgroundValue": "#f3f6fc",
|
|
3096
|
+
"compositedForeground": "#0c121c",
|
|
3097
|
+
"usage": "body",
|
|
3098
|
+
"threshold": 4.5,
|
|
3099
|
+
"ratio": 17.3371,
|
|
3100
|
+
"pass": true
|
|
3101
|
+
},
|
|
3102
|
+
{
|
|
3103
|
+
"id": "CP-119",
|
|
3104
|
+
"theme": "light",
|
|
3105
|
+
"foreground": "text.primary",
|
|
3106
|
+
"background": "tone.accent.backgroundHover",
|
|
3107
|
+
"foregroundValue": "#0c121c",
|
|
3108
|
+
"backgroundValue": "#e4e9fa",
|
|
3109
|
+
"compositedForeground": "#0c121c",
|
|
3110
|
+
"usage": "body",
|
|
3111
|
+
"threshold": 4.5,
|
|
3112
|
+
"ratio": 15.4924,
|
|
3113
|
+
"pass": true
|
|
3114
|
+
},
|
|
3115
|
+
{
|
|
3116
|
+
"id": "CP-120",
|
|
3117
|
+
"theme": "light",
|
|
3118
|
+
"foreground": "text.primary",
|
|
3119
|
+
"background": "tone.danger.background",
|
|
3120
|
+
"foregroundValue": "#0c121c",
|
|
3121
|
+
"backgroundValue": "#fbf4f4",
|
|
3122
|
+
"compositedForeground": "#0c121c",
|
|
3123
|
+
"usage": "body",
|
|
3124
|
+
"threshold": 4.5,
|
|
3125
|
+
"ratio": 17.292,
|
|
3126
|
+
"pass": true
|
|
3127
|
+
},
|
|
3128
|
+
{
|
|
3129
|
+
"id": "CP-121",
|
|
3130
|
+
"theme": "light",
|
|
3131
|
+
"foreground": "text.primary",
|
|
3132
|
+
"background": "tone.danger.backgroundHover",
|
|
3133
|
+
"foregroundValue": "#0c121c",
|
|
3134
|
+
"backgroundValue": "#f9e4e2",
|
|
3135
|
+
"compositedForeground": "#0c121c",
|
|
3136
|
+
"usage": "body",
|
|
3137
|
+
"threshold": 4.5,
|
|
3138
|
+
"ratio": 15.3929,
|
|
3139
|
+
"pass": true
|
|
3036
3140
|
}
|
|
3037
3141
|
],
|
|
3038
3142
|
"exclusions": [
|
|
@@ -3176,6 +3280,46 @@
|
|
|
3176
3280
|
"usage": "decorative",
|
|
3177
3281
|
"reason": "Policy-blocked fill. Contrast-exempt as a fill; checked beneath the label (5.27:1)."
|
|
3178
3282
|
},
|
|
3283
|
+
{
|
|
3284
|
+
"key": "tone.accent.background",
|
|
3285
|
+
"usage": "decorative",
|
|
3286
|
+
"reason": "Secondary accent-tone button rest fill: 4% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3287
|
+
},
|
|
3288
|
+
{
|
|
3289
|
+
"key": "tone.accent.border",
|
|
3290
|
+
"usage": "decorative",
|
|
3291
|
+
"reason": "Secondary accent-tone button rest edge: 14% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3292
|
+
},
|
|
3293
|
+
{
|
|
3294
|
+
"key": "tone.accent.backgroundHover",
|
|
3295
|
+
"usage": "decorative",
|
|
3296
|
+
"reason": "Secondary accent-tone button hover fill: 12% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3297
|
+
},
|
|
3298
|
+
{
|
|
3299
|
+
"key": "tone.accent.borderHover",
|
|
3300
|
+
"usage": "decorative",
|
|
3301
|
+
"reason": "Secondary accent-tone button hover edge: 45% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3302
|
+
},
|
|
3303
|
+
{
|
|
3304
|
+
"key": "tone.danger.background",
|
|
3305
|
+
"usage": "decorative",
|
|
3306
|
+
"reason": "Secondary danger-tone button rest fill: 4% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3307
|
+
},
|
|
3308
|
+
{
|
|
3309
|
+
"key": "tone.danger.border",
|
|
3310
|
+
"usage": "decorative",
|
|
3311
|
+
"reason": "Secondary danger-tone button rest edge: 14% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3312
|
+
},
|
|
3313
|
+
{
|
|
3314
|
+
"key": "tone.danger.backgroundHover",
|
|
3315
|
+
"usage": "decorative",
|
|
3316
|
+
"reason": "Secondary danger-tone button hover fill: 12% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3317
|
+
},
|
|
3318
|
+
{
|
|
3319
|
+
"key": "tone.danger.borderHover",
|
|
3320
|
+
"usage": "decorative",
|
|
3321
|
+
"reason": "Secondary danger-tone button hover edge: 45% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050)."
|
|
3322
|
+
},
|
|
3179
3323
|
{
|
|
3180
3324
|
"key": "font.size.2xs",
|
|
3181
3325
|
"usage": "decorative",
|
|
@@ -3396,6 +3540,31 @@
|
|
|
3396
3540
|
"usage": "decorative",
|
|
3397
3541
|
"reason": "One revolution of the indeterminate spinner."
|
|
3398
3542
|
},
|
|
3543
|
+
{
|
|
3544
|
+
"key": "motion.instant",
|
|
3545
|
+
"usage": "decorative",
|
|
3546
|
+
"reason": "Press feedback and pointer-tracking highlights."
|
|
3547
|
+
},
|
|
3548
|
+
{
|
|
3549
|
+
"key": "motion.exit",
|
|
3550
|
+
"usage": "decorative",
|
|
3551
|
+
"reason": "Overlay, popover and drawer exits."
|
|
3552
|
+
},
|
|
3553
|
+
{
|
|
3554
|
+
"key": "motion.slow",
|
|
3555
|
+
"usage": "decorative",
|
|
3556
|
+
"reason": "Drawers and other large surfaces entering."
|
|
3557
|
+
},
|
|
3558
|
+
{
|
|
3559
|
+
"key": "motion.spring",
|
|
3560
|
+
"usage": "decorative",
|
|
3561
|
+
"reason": "Spring settle for dialogs, popovers and checked indicators (entrances only)."
|
|
3562
|
+
},
|
|
3563
|
+
{
|
|
3564
|
+
"key": "motion.stagger",
|
|
3565
|
+
"usage": "decorative",
|
|
3566
|
+
"reason": "Delay step between items of a staged entrance; a duration, never an easing."
|
|
3567
|
+
},
|
|
3399
3568
|
{
|
|
3400
3569
|
"key": "button.minHeight",
|
|
3401
3570
|
"usage": "decorative",
|
package/dist/index.js
CHANGED
|
@@ -103,6 +103,20 @@ var tokens = {
|
|
|
103
103
|
disabled: "var(--cdt-state-disabled)",
|
|
104
104
|
disabledPolicy: "var(--cdt-state-disabled-policy)"
|
|
105
105
|
},
|
|
106
|
+
tone: {
|
|
107
|
+
accent: {
|
|
108
|
+
background: "var(--cdt-tone-accent-background)",
|
|
109
|
+
border: "var(--cdt-tone-accent-border)",
|
|
110
|
+
backgroundHover: "var(--cdt-tone-accent-background-hover)",
|
|
111
|
+
borderHover: "var(--cdt-tone-accent-border-hover)"
|
|
112
|
+
},
|
|
113
|
+
danger: {
|
|
114
|
+
background: "var(--cdt-tone-danger-background)",
|
|
115
|
+
border: "var(--cdt-tone-danger-border)",
|
|
116
|
+
backgroundHover: "var(--cdt-tone-danger-background-hover)",
|
|
117
|
+
borderHover: "var(--cdt-tone-danger-border-hover)"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
106
120
|
dataviz: {
|
|
107
121
|
series: {
|
|
108
122
|
"1": "var(--cdt-dataviz-series-1)",
|
|
@@ -169,7 +183,12 @@ var tokens = {
|
|
|
169
183
|
fast: "var(--cdt-motion-fast)",
|
|
170
184
|
standard: "var(--cdt-motion-standard)",
|
|
171
185
|
bounce: "var(--cdt-motion-bounce)",
|
|
172
|
-
spin: "var(--cdt-motion-spin)"
|
|
186
|
+
spin: "var(--cdt-motion-spin)",
|
|
187
|
+
instant: "var(--cdt-motion-instant)",
|
|
188
|
+
exit: "var(--cdt-motion-exit)",
|
|
189
|
+
slow: "var(--cdt-motion-slow)",
|
|
190
|
+
spring: "var(--cdt-motion-spring)",
|
|
191
|
+
stagger: "var(--cdt-motion-stagger)"
|
|
173
192
|
},
|
|
174
193
|
button: {
|
|
175
194
|
minHeight: "var(--cdt-button-min-height)",
|
package/dist/tokens.css
CHANGED
|
@@ -69,6 +69,15 @@
|
|
|
69
69
|
--cdt-state-disabled: #18202c;
|
|
70
70
|
--cdt-state-disabled-policy: #422006;
|
|
71
71
|
|
|
72
|
+
--cdt-tone-accent-background: #172131;
|
|
73
|
+
--cdt-tone-accent-border: #1f2944;
|
|
74
|
+
--cdt-tone-accent-background-hover: #1d2840;
|
|
75
|
+
--cdt-tone-accent-border-hover: #394682;
|
|
76
|
+
--cdt-tone-danger-background: #1d202c;
|
|
77
|
+
--cdt-tone-danger-border: #312630;
|
|
78
|
+
--cdt-tone-danger-background-hover: #2d252f;
|
|
79
|
+
--cdt-tone-danger-border-hover: #72363a;
|
|
80
|
+
|
|
72
81
|
--cdt-dataviz-series-1: #e88171;
|
|
73
82
|
--cdt-dataviz-series-2: #1db198;
|
|
74
83
|
--cdt-dataviz-series-3: #e979ad;
|
|
@@ -145,6 +154,11 @@
|
|
|
145
154
|
--cdt-motion-standard: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
146
155
|
--cdt-motion-bounce: 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
147
156
|
--cdt-motion-spin: 1000ms linear;
|
|
157
|
+
--cdt-motion-instant: 90ms cubic-bezier(0.2, 0, 0, 1);
|
|
158
|
+
--cdt-motion-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
159
|
+
--cdt-motion-slow: 420ms cubic-bezier(0.05, 0.7, 0.1, 1);
|
|
160
|
+
--cdt-motion-spring: 520ms linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1);
|
|
161
|
+
--cdt-motion-stagger: 45ms;
|
|
148
162
|
|
|
149
163
|
--cdt-button-min-height: 40px;
|
|
150
164
|
--cdt-button-min-height-compact: 42px;
|
|
@@ -302,7 +316,7 @@
|
|
|
302
316
|
--cdt-overlay-drawer-background: #141d2a;
|
|
303
317
|
--cdt-overlay-drawer-width: 500px;
|
|
304
318
|
--cdt-overlay-enter: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
305
|
-
--cdt-overlay-exit:
|
|
319
|
+
--cdt-overlay-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
306
320
|
|
|
307
321
|
--cdt-page-heading-size: clamp(24px, 3vw, 32px);
|
|
308
322
|
--cdt-page-heading-line-height: 1.16;
|
|
@@ -422,6 +436,15 @@
|
|
|
422
436
|
--cdt-state-disabled: #e2e8f0;
|
|
423
437
|
--cdt-state-disabled-policy: #fef3c7;
|
|
424
438
|
|
|
439
|
+
--cdt-tone-accent-background: #f3f6fc;
|
|
440
|
+
--cdt-tone-accent-border: #e0e6fa;
|
|
441
|
+
--cdt-tone-accent-background-hover: #e4e9fa;
|
|
442
|
+
--cdt-tone-accent-border-hover: #a7b5ef;
|
|
443
|
+
--cdt-tone-danger-background: #fbf4f4;
|
|
444
|
+
--cdt-tone-danger-border: #f9e0dd;
|
|
445
|
+
--cdt-tone-danger-background-hover: #f9e4e2;
|
|
446
|
+
--cdt-tone-danger-border-hover: #eea39a;
|
|
447
|
+
|
|
425
448
|
--cdt-dataviz-series-1: #d45946;
|
|
426
449
|
--cdt-dataviz-series-2: #228f7d;
|
|
427
450
|
--cdt-dataviz-series-3: #d54e8d;
|
|
@@ -498,6 +521,11 @@
|
|
|
498
521
|
--cdt-motion-standard: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
499
522
|
--cdt-motion-bounce: 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
500
523
|
--cdt-motion-spin: 1000ms linear;
|
|
524
|
+
--cdt-motion-instant: 90ms cubic-bezier(0.2, 0, 0, 1);
|
|
525
|
+
--cdt-motion-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
526
|
+
--cdt-motion-slow: 420ms cubic-bezier(0.05, 0.7, 0.1, 1);
|
|
527
|
+
--cdt-motion-spring: 520ms linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1);
|
|
528
|
+
--cdt-motion-stagger: 45ms;
|
|
501
529
|
|
|
502
530
|
--cdt-button-min-height: 40px;
|
|
503
531
|
--cdt-button-min-height-compact: 42px;
|
|
@@ -655,7 +683,7 @@
|
|
|
655
683
|
--cdt-overlay-drawer-background: #fbfcfd;
|
|
656
684
|
--cdt-overlay-drawer-width: 500px;
|
|
657
685
|
--cdt-overlay-enter: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
658
|
-
--cdt-overlay-exit:
|
|
686
|
+
--cdt-overlay-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
659
687
|
|
|
660
688
|
--cdt-page-heading-size: clamp(24px, 3vw, 32px);
|
|
661
689
|
--cdt-page-heading-line-height: 1.16;
|
|
@@ -776,6 +804,15 @@
|
|
|
776
804
|
--cdt-state-disabled: #e2e8f0;
|
|
777
805
|
--cdt-state-disabled-policy: #fef3c7;
|
|
778
806
|
|
|
807
|
+
--cdt-tone-accent-background: #f3f6fc;
|
|
808
|
+
--cdt-tone-accent-border: #e0e6fa;
|
|
809
|
+
--cdt-tone-accent-background-hover: #e4e9fa;
|
|
810
|
+
--cdt-tone-accent-border-hover: #a7b5ef;
|
|
811
|
+
--cdt-tone-danger-background: #fbf4f4;
|
|
812
|
+
--cdt-tone-danger-border: #f9e0dd;
|
|
813
|
+
--cdt-tone-danger-background-hover: #f9e4e2;
|
|
814
|
+
--cdt-tone-danger-border-hover: #eea39a;
|
|
815
|
+
|
|
779
816
|
--cdt-dataviz-series-1: #d45946;
|
|
780
817
|
--cdt-dataviz-series-2: #228f7d;
|
|
781
818
|
--cdt-dataviz-series-3: #d54e8d;
|
|
@@ -852,6 +889,11 @@
|
|
|
852
889
|
--cdt-motion-standard: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
853
890
|
--cdt-motion-bounce: 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
854
891
|
--cdt-motion-spin: 1000ms linear;
|
|
892
|
+
--cdt-motion-instant: 90ms cubic-bezier(0.2, 0, 0, 1);
|
|
893
|
+
--cdt-motion-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
894
|
+
--cdt-motion-slow: 420ms cubic-bezier(0.05, 0.7, 0.1, 1);
|
|
895
|
+
--cdt-motion-spring: 520ms linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1);
|
|
896
|
+
--cdt-motion-stagger: 45ms;
|
|
855
897
|
|
|
856
898
|
--cdt-button-min-height: 40px;
|
|
857
899
|
--cdt-button-min-height-compact: 42px;
|
|
@@ -1009,7 +1051,7 @@
|
|
|
1009
1051
|
--cdt-overlay-drawer-background: #fbfcfd;
|
|
1010
1052
|
--cdt-overlay-drawer-width: 500px;
|
|
1011
1053
|
--cdt-overlay-enter: 240ms cubic-bezier(0.2, 0, 0, 1);
|
|
1012
|
-
--cdt-overlay-exit:
|
|
1054
|
+
--cdt-overlay-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
|
|
1013
1055
|
|
|
1014
1056
|
--cdt-page-heading-size: clamp(24px, 3vw, 32px);
|
|
1015
1057
|
--cdt-page-heading-line-height: 1.16;
|
package/dist/tokens.d.ts
CHANGED
|
@@ -105,6 +105,20 @@ declare const tokens: {
|
|
|
105
105
|
readonly disabled: "var(--cdt-state-disabled)";
|
|
106
106
|
readonly disabledPolicy: "var(--cdt-state-disabled-policy)";
|
|
107
107
|
};
|
|
108
|
+
readonly tone: {
|
|
109
|
+
readonly accent: {
|
|
110
|
+
readonly background: "var(--cdt-tone-accent-background)";
|
|
111
|
+
readonly border: "var(--cdt-tone-accent-border)";
|
|
112
|
+
readonly backgroundHover: "var(--cdt-tone-accent-background-hover)";
|
|
113
|
+
readonly borderHover: "var(--cdt-tone-accent-border-hover)";
|
|
114
|
+
};
|
|
115
|
+
readonly danger: {
|
|
116
|
+
readonly background: "var(--cdt-tone-danger-background)";
|
|
117
|
+
readonly border: "var(--cdt-tone-danger-border)";
|
|
118
|
+
readonly backgroundHover: "var(--cdt-tone-danger-background-hover)";
|
|
119
|
+
readonly borderHover: "var(--cdt-tone-danger-border-hover)";
|
|
120
|
+
};
|
|
121
|
+
};
|
|
108
122
|
readonly dataviz: {
|
|
109
123
|
readonly series: {
|
|
110
124
|
readonly "1": "var(--cdt-dataviz-series-1)";
|
|
@@ -172,6 +186,11 @@ declare const tokens: {
|
|
|
172
186
|
readonly standard: "var(--cdt-motion-standard)";
|
|
173
187
|
readonly bounce: "var(--cdt-motion-bounce)";
|
|
174
188
|
readonly spin: "var(--cdt-motion-spin)";
|
|
189
|
+
readonly instant: "var(--cdt-motion-instant)";
|
|
190
|
+
readonly exit: "var(--cdt-motion-exit)";
|
|
191
|
+
readonly slow: "var(--cdt-motion-slow)";
|
|
192
|
+
readonly spring: "var(--cdt-motion-spring)";
|
|
193
|
+
readonly stagger: "var(--cdt-motion-stagger)";
|
|
175
194
|
};
|
|
176
195
|
readonly button: {
|
|
177
196
|
readonly minHeight: "var(--cdt-button-min-height)";
|
package/dist/tokens.js
CHANGED
|
@@ -99,6 +99,20 @@ var tokens = {
|
|
|
99
99
|
disabled: "var(--cdt-state-disabled)",
|
|
100
100
|
disabledPolicy: "var(--cdt-state-disabled-policy)"
|
|
101
101
|
},
|
|
102
|
+
tone: {
|
|
103
|
+
accent: {
|
|
104
|
+
background: "var(--cdt-tone-accent-background)",
|
|
105
|
+
border: "var(--cdt-tone-accent-border)",
|
|
106
|
+
backgroundHover: "var(--cdt-tone-accent-background-hover)",
|
|
107
|
+
borderHover: "var(--cdt-tone-accent-border-hover)"
|
|
108
|
+
},
|
|
109
|
+
danger: {
|
|
110
|
+
background: "var(--cdt-tone-danger-background)",
|
|
111
|
+
border: "var(--cdt-tone-danger-border)",
|
|
112
|
+
backgroundHover: "var(--cdt-tone-danger-background-hover)",
|
|
113
|
+
borderHover: "var(--cdt-tone-danger-border-hover)"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
102
116
|
dataviz: {
|
|
103
117
|
series: {
|
|
104
118
|
"1": "var(--cdt-dataviz-series-1)",
|
|
@@ -165,7 +179,12 @@ var tokens = {
|
|
|
165
179
|
fast: "var(--cdt-motion-fast)",
|
|
166
180
|
standard: "var(--cdt-motion-standard)",
|
|
167
181
|
bounce: "var(--cdt-motion-bounce)",
|
|
168
|
-
spin: "var(--cdt-motion-spin)"
|
|
182
|
+
spin: "var(--cdt-motion-spin)",
|
|
183
|
+
instant: "var(--cdt-motion-instant)",
|
|
184
|
+
exit: "var(--cdt-motion-exit)",
|
|
185
|
+
slow: "var(--cdt-motion-slow)",
|
|
186
|
+
spring: "var(--cdt-motion-spring)",
|
|
187
|
+
stagger: "var(--cdt-motion-stagger)"
|
|
169
188
|
},
|
|
170
189
|
button: {
|
|
171
190
|
minHeight: "var(--cdt-button-min-height)",
|
package/dist/tokens.json
CHANGED
|
@@ -582,6 +582,94 @@
|
|
|
582
582
|
"light": "#fef3c7"
|
|
583
583
|
}
|
|
584
584
|
},
|
|
585
|
+
{
|
|
586
|
+
"key": "tone.accent.background",
|
|
587
|
+
"cssName": "--cdt-tone-accent-background",
|
|
588
|
+
"tier": "semantic",
|
|
589
|
+
"usage": "decorative",
|
|
590
|
+
"description": "Secondary accent-tone button rest fill: 4% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
591
|
+
"values": {
|
|
592
|
+
"dark": "#172131",
|
|
593
|
+
"light": "#f3f6fc"
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"key": "tone.accent.border",
|
|
598
|
+
"cssName": "--cdt-tone-accent-border",
|
|
599
|
+
"tier": "semantic",
|
|
600
|
+
"usage": "decorative",
|
|
601
|
+
"description": "Secondary accent-tone button rest edge: 14% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
602
|
+
"values": {
|
|
603
|
+
"dark": "#1f2944",
|
|
604
|
+
"light": "#e0e6fa"
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"key": "tone.accent.backgroundHover",
|
|
609
|
+
"cssName": "--cdt-tone-accent-background-hover",
|
|
610
|
+
"tier": "semantic",
|
|
611
|
+
"usage": "decorative",
|
|
612
|
+
"description": "Secondary accent-tone button hover fill: 12% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
613
|
+
"values": {
|
|
614
|
+
"dark": "#1d2840",
|
|
615
|
+
"light": "#e4e9fa"
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"key": "tone.accent.borderHover",
|
|
620
|
+
"cssName": "--cdt-tone-accent-border-hover",
|
|
621
|
+
"tier": "semantic",
|
|
622
|
+
"usage": "decorative",
|
|
623
|
+
"description": "Secondary accent-tone button hover edge: 45% of `accent` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
624
|
+
"values": {
|
|
625
|
+
"dark": "#394682",
|
|
626
|
+
"light": "#a7b5ef"
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
"key": "tone.danger.background",
|
|
631
|
+
"cssName": "--cdt-tone-danger-background",
|
|
632
|
+
"tier": "semantic",
|
|
633
|
+
"usage": "decorative",
|
|
634
|
+
"description": "Secondary danger-tone button rest fill: 4% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
635
|
+
"values": {
|
|
636
|
+
"dark": "#1d202c",
|
|
637
|
+
"light": "#fbf4f4"
|
|
638
|
+
}
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
"key": "tone.danger.border",
|
|
642
|
+
"cssName": "--cdt-tone-danger-border",
|
|
643
|
+
"tier": "semantic",
|
|
644
|
+
"usage": "decorative",
|
|
645
|
+
"description": "Secondary danger-tone button rest edge: 14% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
646
|
+
"values": {
|
|
647
|
+
"dark": "#312630",
|
|
648
|
+
"light": "#f9e0dd"
|
|
649
|
+
}
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"key": "tone.danger.backgroundHover",
|
|
653
|
+
"cssName": "--cdt-tone-danger-background-hover",
|
|
654
|
+
"tier": "semantic",
|
|
655
|
+
"usage": "decorative",
|
|
656
|
+
"description": "Secondary danger-tone button hover fill: 12% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
657
|
+
"values": {
|
|
658
|
+
"dark": "#2d252f",
|
|
659
|
+
"light": "#f9e4e2"
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"key": "tone.danger.borderHover",
|
|
664
|
+
"cssName": "--cdt-tone-danger-border-hover",
|
|
665
|
+
"tier": "semantic",
|
|
666
|
+
"usage": "decorative",
|
|
667
|
+
"description": "Secondary danger-tone button hover edge: 45% of `status.danger` over `surface.raised`, mixed in OKLab at build time (CR-050).",
|
|
668
|
+
"values": {
|
|
669
|
+
"dark": "#72363a",
|
|
670
|
+
"light": "#eea39a"
|
|
671
|
+
}
|
|
672
|
+
},
|
|
585
673
|
{
|
|
586
674
|
"key": "dataviz.series.1",
|
|
587
675
|
"cssName": "--cdt-dataviz-series-1",
|
|
@@ -1357,6 +1445,61 @@
|
|
|
1357
1445
|
"light": "1000ms linear"
|
|
1358
1446
|
}
|
|
1359
1447
|
},
|
|
1448
|
+
{
|
|
1449
|
+
"key": "motion.instant",
|
|
1450
|
+
"cssName": "--cdt-motion-instant",
|
|
1451
|
+
"tier": "semantic",
|
|
1452
|
+
"usage": "decorative",
|
|
1453
|
+
"description": "Press feedback and pointer-tracking highlights.",
|
|
1454
|
+
"values": {
|
|
1455
|
+
"dark": "90ms cubic-bezier(0.2, 0, 0, 1)",
|
|
1456
|
+
"light": "90ms cubic-bezier(0.2, 0, 0, 1)"
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1459
|
+
{
|
|
1460
|
+
"key": "motion.exit",
|
|
1461
|
+
"cssName": "--cdt-motion-exit",
|
|
1462
|
+
"tier": "semantic",
|
|
1463
|
+
"usage": "decorative",
|
|
1464
|
+
"description": "Overlay, popover and drawer exits.",
|
|
1465
|
+
"values": {
|
|
1466
|
+
"dark": "160ms cubic-bezier(0.4, 0, 1, 1)",
|
|
1467
|
+
"light": "160ms cubic-bezier(0.4, 0, 1, 1)"
|
|
1468
|
+
}
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"key": "motion.slow",
|
|
1472
|
+
"cssName": "--cdt-motion-slow",
|
|
1473
|
+
"tier": "semantic",
|
|
1474
|
+
"usage": "decorative",
|
|
1475
|
+
"description": "Drawers and other large surfaces entering.",
|
|
1476
|
+
"values": {
|
|
1477
|
+
"dark": "420ms cubic-bezier(0.05, 0.7, 0.1, 1)",
|
|
1478
|
+
"light": "420ms cubic-bezier(0.05, 0.7, 0.1, 1)"
|
|
1479
|
+
}
|
|
1480
|
+
},
|
|
1481
|
+
{
|
|
1482
|
+
"key": "motion.spring",
|
|
1483
|
+
"cssName": "--cdt-motion-spring",
|
|
1484
|
+
"tier": "semantic",
|
|
1485
|
+
"usage": "decorative",
|
|
1486
|
+
"description": "Spring settle for dialogs, popovers and checked indicators (entrances only).",
|
|
1487
|
+
"values": {
|
|
1488
|
+
"dark": "520ms linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1)",
|
|
1489
|
+
"light": "520ms linear(0, 0.075 5%, 0.242 10%, 0.435 15%, 0.616 20%, 0.766 25%, 0.878 30%, 0.967 36%, 1.015 42%, 1.037 50%, 1.033 60%, 1.012 75%, 1)"
|
|
1490
|
+
}
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"key": "motion.stagger",
|
|
1494
|
+
"cssName": "--cdt-motion-stagger",
|
|
1495
|
+
"tier": "semantic",
|
|
1496
|
+
"usage": "decorative",
|
|
1497
|
+
"description": "Delay step between items of a staged entrance; a duration, never an easing.",
|
|
1498
|
+
"values": {
|
|
1499
|
+
"dark": "45ms",
|
|
1500
|
+
"light": "45ms"
|
|
1501
|
+
}
|
|
1502
|
+
},
|
|
1360
1503
|
{
|
|
1361
1504
|
"key": "button.minHeight",
|
|
1362
1505
|
"cssName": "--cdt-button-min-height",
|
|
@@ -3053,10 +3196,10 @@
|
|
|
3053
3196
|
"tier": "component",
|
|
3054
3197
|
"usage": "decorative",
|
|
3055
3198
|
"description": "Overlay exit.",
|
|
3056
|
-
"alias": "motion.
|
|
3199
|
+
"alias": "motion.exit",
|
|
3057
3200
|
"values": {
|
|
3058
|
-
"dark": "
|
|
3059
|
-
"light": "
|
|
3201
|
+
"dark": "160ms cubic-bezier(0.4, 0, 1, 1)",
|
|
3202
|
+
"light": "160ms cubic-bezier(0.4, 0, 1, 1)"
|
|
3060
3203
|
}
|
|
3061
3204
|
},
|
|
3062
3205
|
{
|
package/package.json
CHANGED