@webmate-studio/builder 0.2.141 → 0.2.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/design-tokens-v2.js +21 -8
package/package.json
CHANGED
package/src/design-tokens-v2.js
CHANGED
|
@@ -74,6 +74,14 @@ export function generateColorScale(baseHex, curve) {
|
|
|
74
74
|
c = base.c;
|
|
75
75
|
} else {
|
|
76
76
|
c = computeChroma(L[i], L[8], base.c, stdDev, chromaScale);
|
|
77
|
+
|
|
78
|
+
// Neutraltöne: Helle Stufen extra dämpfen, damit Steps 2-5
|
|
79
|
+
// nicht zu farbig wirken. Nahe der Base bleibt volle Chroma.
|
|
80
|
+
if (isLowChroma && L[i] > L[8]) {
|
|
81
|
+
const distFromBase = (L[i] - L[8]) / (0.985 - L[8]); // 0 bei Base, 1 bei Step 1
|
|
82
|
+
const damping = 1.0 - 0.55 * distFromBase * distFromBase;
|
|
83
|
+
c *= damping;
|
|
84
|
+
}
|
|
77
85
|
}
|
|
78
86
|
|
|
79
87
|
const mapped = gamutMapOklch(L[i], c, base.h);
|
|
@@ -249,10 +257,10 @@ function buildLightnessRamp(baseL, isLowChroma = false) {
|
|
|
249
257
|
|
|
250
258
|
if (isLowChroma) {
|
|
251
259
|
// Neutraltöne: Step 12 muss sehr dunkel sein (Hauptschriftfarbe),
|
|
252
|
-
// Step 11 = Low-Contrast Text,
|
|
260
|
+
// Step 11 = Low-Contrast Text, gleichmäßigere Verteilung nach unten
|
|
253
261
|
const bottomL = 0.25;
|
|
254
262
|
const darkRange = safeBaseL - bottomL;
|
|
255
|
-
step10L = safeBaseL - darkRange * 0.
|
|
263
|
+
step10L = safeBaseL - darkRange * 0.20;
|
|
256
264
|
step11L = safeBaseL - darkRange * 0.55;
|
|
257
265
|
step12L = bottomL;
|
|
258
266
|
} else {
|
|
@@ -352,13 +360,18 @@ function computeChroma(stepL, baseL, baseC, stdDev, chromaScale) {
|
|
|
352
360
|
gaussian = 0.97 * Math.exp((-12 / stdDev) * edgeDiff * edgeDiff);
|
|
353
361
|
}
|
|
354
362
|
|
|
355
|
-
// Lightness-Begrenzung: Asymmetrisch
|
|
356
|
-
//
|
|
357
|
-
//
|
|
358
|
-
//
|
|
363
|
+
// Lightness-Begrenzung: Asymmetrisch + Chroma-abhängig
|
|
364
|
+
// Bei hochgesättigten Farben (Grün, Cyan) wirken schon kleine Chroma-Werte
|
|
365
|
+
// bei hoher Lightness "neonig". Der Einsatzpunkt wird daher bei hoher
|
|
366
|
+
// Base-Chroma nach unten verschoben.
|
|
367
|
+
// Helle Seite: Einsatz ab threshold (0.85 bei C=0, 0.75 bei C≥0.17)
|
|
368
|
+
// Dunkle Seite (L < 0.3): Chroma fällt moderat
|
|
369
|
+
// Mitte: volle Chroma möglich
|
|
370
|
+
const chromaFactor = Math.min(baseC / 0.17, 1.0); // 0 bei grau, 1 bei gesättigtem Grün
|
|
371
|
+
const lightThreshold = 0.85 - chromaFactor * 0.10; // 0.85 → 0.75
|
|
359
372
|
let lightnessLimit;
|
|
360
|
-
if (stepL >
|
|
361
|
-
const t = (stepL -
|
|
373
|
+
if (stepL > lightThreshold) {
|
|
374
|
+
const t = (stepL - lightThreshold) / (1.0 - lightThreshold);
|
|
362
375
|
lightnessLimit = 1.0 - t * t;
|
|
363
376
|
} else if (stepL < 0.3) {
|
|
364
377
|
const t = stepL / 0.3;
|