@skbkontur/colors 1.1.2-c8467.0 → 1.1.2-d1791.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/constants/abney-correction.d.ts +2 -0
- package/dist/cjs/constants/abney-correction.js +1105 -0
- package/dist/cjs/constants/chroma-settings.d.ts +2 -0
- package/dist/cjs/constants/chroma-settings.js +105 -0
- package/dist/cjs/constants/default-swatch.d.ts +107 -0
- package/dist/cjs/constants/default-swatch.js +110 -0
- package/dist/cjs/constants/logo-lightness.d.ts +1 -0
- package/dist/cjs/constants/logo-lightness.js +4 -0
- package/dist/cjs/constants/promo-hue-shift.d.ts +3 -0
- package/dist/cjs/constants/promo-hue-shift.js +14 -0
- package/dist/cjs/constants/warning-hue-patch.d.ts +3 -0
- package/dist/cjs/constants/warning-hue-patch.js +25 -0
- package/dist/cjs/get-base-tokens.d.ts +17 -0
- package/dist/cjs/get-base-tokens.js +223 -0
- package/dist/cjs/get-default-tokens.d.ts +1278 -0
- package/dist/cjs/get-default-tokens.js +1284 -0
- package/dist/cjs/get-tokens.d.ts +15 -0
- package/dist/cjs/get-tokens.js +13 -0
- package/dist/cjs/helpers/get-logo.d.ts +6 -0
- package/dist/cjs/helpers/get-logo.js +29 -0
- package/dist/cjs/helpers/get-palette.d.ts +49 -0
- package/dist/cjs/helpers/get-palette.js +242 -0
- package/dist/cjs/helpers/get-promo.d.ts +6 -0
- package/dist/cjs/helpers/get-promo.js +58 -0
- package/dist/cjs/types/base-tokens.d.ts +53 -0
- package/dist/cjs/types/base-tokens.js +2 -0
- package/dist/cjs/types/generator-tokens.d.ts +43 -0
- package/dist/cjs/types/generator-tokens.js +2 -0
- package/dist/esm/constants/abney-correction.d.ts +2 -0
- package/dist/esm/constants/abney-correction.js +1102 -0
- package/dist/esm/constants/chroma-settings.d.ts +2 -0
- package/dist/esm/constants/chroma-settings.js +102 -0
- package/dist/esm/constants/default-swatch.d.ts +107 -0
- package/dist/esm/constants/default-swatch.js +107 -0
- package/dist/esm/constants/logo-lightness.d.ts +1 -0
- package/dist/esm/constants/logo-lightness.js +1 -0
- package/dist/esm/constants/promo-hue-shift.d.ts +3 -0
- package/dist/esm/constants/promo-hue-shift.js +11 -0
- package/dist/esm/constants/warning-hue-patch.d.ts +3 -0
- package/dist/esm/constants/warning-hue-patch.js +22 -0
- package/dist/esm/get-base-tokens.d.ts +17 -0
- package/dist/esm/get-base-tokens.js +189 -0
- package/dist/esm/get-default-tokens.d.ts +1278 -0
- package/dist/esm/get-default-tokens.js +1280 -0
- package/dist/esm/get-tokens.d.ts +15 -0
- package/dist/esm/get-tokens.js +9 -0
- package/dist/esm/helpers/get-logo.d.ts +6 -0
- package/dist/esm/helpers/get-logo.js +25 -0
- package/dist/esm/helpers/get-palette.d.ts +49 -0
- package/dist/esm/helpers/get-palette.js +210 -0
- package/dist/esm/helpers/get-promo.d.ts +6 -0
- package/dist/esm/helpers/get-promo.js +53 -0
- package/dist/esm/types/base-tokens.d.ts +53 -0
- package/dist/esm/types/base-tokens.js +1 -0
- package/dist/esm/types/generator-tokens.d.ts +43 -0
- package/dist/esm/types/generator-tokens.js +1 -0
- package/package.json +13 -8
- package/colors.css +0 -160
- package/colors.less +0 -158
- package/colors.scss +0 -158
- package/dist/cjs/colors.d.ts +0 -161
- package/dist/cjs/colors.js +0 -163
- package/dist/esm/colors.d.ts +0 -161
- package/dist/esm/colors.js +0 -160
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ConfigOptions } from './get-base-tokens';
|
|
2
|
+
import { getDefaultTokens } from './get-default-tokens';
|
|
3
|
+
import type { BaseTokens } from './types/base-tokens';
|
|
4
|
+
export interface Themed<T> {
|
|
5
|
+
light: T;
|
|
6
|
+
dark: T;
|
|
7
|
+
}
|
|
8
|
+
export type DefaultTokens = ReturnType<typeof getDefaultTokens>;
|
|
9
|
+
export interface SemanticConfigOptions<DefaultTokens> extends ConfigOptions {
|
|
10
|
+
overrides?: (base: BaseTokens) => Themed<DefaultTokens>;
|
|
11
|
+
}
|
|
12
|
+
export declare function getTokens(params: SemanticConfigOptions<DefaultTokens>): DefaultTokens;
|
|
13
|
+
export declare function getTokens<T>(params: SemanticConfigOptions<T> & {
|
|
14
|
+
overrides: (base: BaseTokens) => Themed<T>;
|
|
15
|
+
}): Themed<T>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTokens = void 0;
|
|
4
|
+
var get_base_tokens_1 = require("./get-base-tokens");
|
|
5
|
+
var get_default_tokens_1 = require("./get-default-tokens");
|
|
6
|
+
function getTokens(params) {
|
|
7
|
+
var base = (0, get_base_tokens_1.getBaseTokens)(params);
|
|
8
|
+
if (params.overrides) {
|
|
9
|
+
return params.overrides(base);
|
|
10
|
+
}
|
|
11
|
+
return (0, get_default_tokens_1.getDefaultTokens)(base);
|
|
12
|
+
}
|
|
13
|
+
exports.getTokens = getTokens;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLogo = void 0;
|
|
4
|
+
var culori_1 = require("culori");
|
|
5
|
+
var logo_lightness_1 = require("../constants/logo-lightness");
|
|
6
|
+
function getLogo(hex) {
|
|
7
|
+
var toOklch = (0, culori_1.converter)('oklch');
|
|
8
|
+
var oklchColor = toOklch(hex);
|
|
9
|
+
var lightThemeLogoColor = hex;
|
|
10
|
+
if (!oklchColor) {
|
|
11
|
+
var fallbackColor = "oklch(".concat(logo_lightness_1.MIN_LOGO_LIGHTNESS, "% 0 0)");
|
|
12
|
+
return { light: hex, dark: fallbackColor };
|
|
13
|
+
}
|
|
14
|
+
var _a = oklchColor.l, l = _a === void 0 ? 0 : _a, _b = oklchColor.c, c = _b === void 0 ? 0 : _b;
|
|
15
|
+
var h = oklchColor.h;
|
|
16
|
+
var safeH = h === undefined || isNaN(h) ? 0 : h;
|
|
17
|
+
l = l || 0;
|
|
18
|
+
c = c || 0;
|
|
19
|
+
var percentL = l * 100;
|
|
20
|
+
if (percentL < logo_lightness_1.MIN_LOGO_LIGHTNESS) {
|
|
21
|
+
l = logo_lightness_1.MIN_LOGO_LIGHTNESS / 100;
|
|
22
|
+
}
|
|
23
|
+
var darkThemeLogoColor = "oklch(".concat(l.toFixed(3), " ").concat(c.toFixed(3), " ").concat(safeH.toFixed(0), ")");
|
|
24
|
+
return {
|
|
25
|
+
light: lightThemeLogoColor,
|
|
26
|
+
dark: darkThemeLogoColor,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
exports.getLogo = getLogo;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { GeneratorColorAbneyCorrection, GeneratorColorChromaSettingsGroup, GeneratorColorPalette, GeneratorColorWarningHuePatch } from '../types/generator-tokens';
|
|
2
|
+
interface GeneratePaletteParams {
|
|
3
|
+
color: string;
|
|
4
|
+
type?: 'default' | 'warning';
|
|
5
|
+
settings?: {
|
|
6
|
+
chromaSettings?: GeneratorColorChromaSettingsGroup;
|
|
7
|
+
abneyCorrection?: GeneratorColorAbneyCorrection;
|
|
8
|
+
promoHueShifts?: {
|
|
9
|
+
[hueRange: number]: number;
|
|
10
|
+
};
|
|
11
|
+
warningHuePatch?: GeneratorColorWarningHuePatch;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function getPalette({ color, type, settings: customSettings, }: GeneratePaletteParams): GeneratorColorPalette;
|
|
15
|
+
export declare function getAbneyHueShift(lightness: number, currentHue: number, abneyData: GeneratorColorAbneyCorrection): number;
|
|
16
|
+
export declare function applyAbneyShift(lightness: number, currentHue: number, abneyData: GeneratorColorAbneyCorrection): number;
|
|
17
|
+
export declare function applyWarningHuePatch(currentHue: number, lightness: number, warningHuePatchData: GeneratorColorWarningHuePatch, isWarningMode: boolean): number;
|
|
18
|
+
export declare function calculateBaseHueAndCorrectionRange(inputColorString: string, abneyData: GeneratorColorAbneyCorrection): {
|
|
19
|
+
baseHue: number;
|
|
20
|
+
correctionLightness: number;
|
|
21
|
+
correctionHueRange: number;
|
|
22
|
+
} | null;
|
|
23
|
+
export declare function calcOnBrand(hex: string): {
|
|
24
|
+
4: string;
|
|
25
|
+
8: string;
|
|
26
|
+
12: string;
|
|
27
|
+
16: string;
|
|
28
|
+
20: string;
|
|
29
|
+
24: string;
|
|
30
|
+
28: string;
|
|
31
|
+
32: string;
|
|
32
|
+
36: string;
|
|
33
|
+
40: string;
|
|
34
|
+
44: string;
|
|
35
|
+
48: string;
|
|
36
|
+
52: string;
|
|
37
|
+
56: string;
|
|
38
|
+
60: string;
|
|
39
|
+
64: string;
|
|
40
|
+
68: string;
|
|
41
|
+
72: string;
|
|
42
|
+
76: string;
|
|
43
|
+
80: string;
|
|
44
|
+
84: string;
|
|
45
|
+
88: string;
|
|
46
|
+
92: string;
|
|
47
|
+
96: string;
|
|
48
|
+
};
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
37
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
38
|
+
if (ar || !(i in from)) {
|
|
39
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
40
|
+
ar[i] = from[i];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.calcOnBrand = exports.calculateBaseHueAndCorrectionRange = exports.applyWarningHuePatch = exports.applyAbneyShift = exports.getAbneyHueShift = exports.getPalette = void 0;
|
|
47
|
+
var culori_1 = require("culori");
|
|
48
|
+
var apca_w3_1 = require("apca-w3");
|
|
49
|
+
var DefaultSwatch = __importStar(require("../constants/default-swatch"));
|
|
50
|
+
var chroma_settings_1 = require("../constants/chroma-settings");
|
|
51
|
+
var abney_correction_1 = require("../constants/abney-correction");
|
|
52
|
+
var promo_hue_shift_1 = require("../constants/promo-hue-shift");
|
|
53
|
+
var warning_hue_patch_1 = require("../constants/warning-hue-patch");
|
|
54
|
+
function getPalette(_a) {
|
|
55
|
+
var color = _a.color, _b = _a.type, type = _b === void 0 ? 'default' : _b, customSettings = _a.settings;
|
|
56
|
+
var defaultSettings = {
|
|
57
|
+
chromaSettings: chroma_settings_1.CHROMA_SETTINGS,
|
|
58
|
+
abneyCorrection: abney_correction_1.ABNEY_CORRECTION,
|
|
59
|
+
promoHueShifts: promo_hue_shift_1.PROMO_HUE_SHIFTS,
|
|
60
|
+
warningHuePatch: warning_hue_patch_1.WARNING_HUE_PATCH,
|
|
61
|
+
};
|
|
62
|
+
var settings = __assign(__assign({}, defaultSettings), customSettings);
|
|
63
|
+
var toOklch = (0, culori_1.converter)('oklch');
|
|
64
|
+
var oklchColor = toOklch(color);
|
|
65
|
+
var currentHue = (oklchColor === null || oklchColor === void 0 ? void 0 : oklchColor.h) || 0;
|
|
66
|
+
var toNorm = function (x) { return x / 100; };
|
|
67
|
+
var calculateChromaValue = function (rel, min, max, baseChromaMax) {
|
|
68
|
+
var raw = (baseChromaMax * rel) / 100;
|
|
69
|
+
var value = raw;
|
|
70
|
+
if (min !== undefined) {
|
|
71
|
+
value = Math.max(toNorm(min), value);
|
|
72
|
+
}
|
|
73
|
+
if (max !== undefined) {
|
|
74
|
+
value = Math.min(toNorm(max), value);
|
|
75
|
+
}
|
|
76
|
+
return Math.min(value, baseChromaMax);
|
|
77
|
+
};
|
|
78
|
+
var result = {
|
|
79
|
+
vivid: {},
|
|
80
|
+
normal: {},
|
|
81
|
+
dim: {},
|
|
82
|
+
};
|
|
83
|
+
var isWarning = type === 'warning';
|
|
84
|
+
for (var Lstr in settings.chromaSettings) {
|
|
85
|
+
var L = +Lstr;
|
|
86
|
+
if (L === 100) {
|
|
87
|
+
result.vivid[L] = "oklch(100% 0 0)";
|
|
88
|
+
result.normal[L] = "oklch(100% 0 0)";
|
|
89
|
+
result.dim[L] = "oklch(100% 0 0)";
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
var hueAfterWarningPatch = applyWarningHuePatch(currentHue, L, settings.warningHuePatch, isWarning);
|
|
93
|
+
var appliedHueShift = applyAbneyShift(L, hueAfterWarningPatch, settings.abneyCorrection);
|
|
94
|
+
var chromaMax = (0, culori_1.clampChroma)({ mode: 'oklch', l: L / 100, c: 1, h: appliedHueShift }, 'oklch').c;
|
|
95
|
+
var currentParams = settings.chromaSettings[L];
|
|
96
|
+
var vividN = calculateChromaValue(currentParams.vivid.rel, currentParams.vivid.min, currentParams.vivid.max, chromaMax);
|
|
97
|
+
var normN = calculateChromaValue(currentParams.normal.rel, currentParams.normal.min, currentParams.normal.max, chromaMax);
|
|
98
|
+
var dimN = calculateChromaValue(currentParams.dim.rel, currentParams.dim.min, currentParams.dim.max, chromaMax);
|
|
99
|
+
result.vivid[L] = "oklch(".concat(L, "% ").concat(vividN.toFixed(3), " ").concat(appliedHueShift.toFixed(0), ")");
|
|
100
|
+
result.normal[L] = "oklch(".concat(L, "% ").concat(normN.toFixed(3), " ").concat(appliedHueShift.toFixed(0), ")");
|
|
101
|
+
result.dim[L] = "oklch(".concat(L, "% ").concat(dimN.toFixed(3), " ").concat(appliedHueShift.toFixed(0), ")");
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
exports.getPalette = getPalette;
|
|
106
|
+
function getAbneyHueShift(lightness, currentHue, abneyData) {
|
|
107
|
+
var lightnessData = abneyData[lightness];
|
|
108
|
+
if (!lightnessData) {
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
var hueRanges = Object.keys(lightnessData)
|
|
112
|
+
.map(Number)
|
|
113
|
+
.sort(function (a, b) { return a - b; });
|
|
114
|
+
var selectedHueRange = hueRanges[0];
|
|
115
|
+
for (var i = 0; i < hueRanges.length; i++) {
|
|
116
|
+
var startRange = hueRanges[i];
|
|
117
|
+
var endRange = hueRanges[i + 1] !== undefined ? hueRanges[i + 1] : 360;
|
|
118
|
+
if (currentHue >= startRange && currentHue < endRange) {
|
|
119
|
+
selectedHueRange = startRange;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (i === hueRanges.length - 1 && currentHue >= startRange && currentHue < 360) {
|
|
123
|
+
selectedHueRange = startRange;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return lightnessData[selectedHueRange] !== undefined ? lightnessData[selectedHueRange] : 0;
|
|
128
|
+
}
|
|
129
|
+
exports.getAbneyHueShift = getAbneyHueShift;
|
|
130
|
+
function applyAbneyShift(lightness, currentHue, abneyData) {
|
|
131
|
+
var abneyShift = getAbneyHueShift(lightness, currentHue, abneyData);
|
|
132
|
+
return (currentHue + abneyShift + 360) % 360;
|
|
133
|
+
}
|
|
134
|
+
exports.applyAbneyShift = applyAbneyShift;
|
|
135
|
+
function applyWarningHuePatch(currentHue, lightness, warningHuePatchData, isWarningMode) {
|
|
136
|
+
if (isWarningMode) {
|
|
137
|
+
var patch = warningHuePatchData[lightness];
|
|
138
|
+
if (patch !== undefined) {
|
|
139
|
+
return (currentHue + patch + 360) % 360;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return currentHue;
|
|
143
|
+
}
|
|
144
|
+
exports.applyWarningHuePatch = applyWarningHuePatch;
|
|
145
|
+
function findClosestLightnessStep(targetL, availableLightnessSteps) {
|
|
146
|
+
if (availableLightnessSteps.length === 0) {
|
|
147
|
+
return targetL;
|
|
148
|
+
}
|
|
149
|
+
var sortedSteps = __spreadArray([], availableLightnessSteps, true).sort(function (a, b) { return a - b; });
|
|
150
|
+
var closestStep = sortedSteps[0];
|
|
151
|
+
var minDiff = Math.abs(targetL - closestStep);
|
|
152
|
+
for (var i = 1; i < sortedSteps.length; i++) {
|
|
153
|
+
var currentStep = sortedSteps[i];
|
|
154
|
+
var diff = Math.abs(targetL - currentStep);
|
|
155
|
+
if (diff < minDiff || (diff === minDiff && currentStep > closestStep)) {
|
|
156
|
+
minDiff = diff;
|
|
157
|
+
closestStep = currentStep;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return closestStep;
|
|
161
|
+
}
|
|
162
|
+
function calculateBaseHueAndCorrectionRange(inputColorString, abneyData) {
|
|
163
|
+
try {
|
|
164
|
+
var toOklch = (0, culori_1.converter)('oklch');
|
|
165
|
+
var oklch = toOklch(inputColorString);
|
|
166
|
+
if (!oklch) {
|
|
167
|
+
console.warn("Could not parse color string: ".concat(inputColorString));
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
var targetLightness = Math.round(oklch.l * 100);
|
|
171
|
+
var targetHue_1 = oklch.h;
|
|
172
|
+
if (isNaN(targetHue_1)) {
|
|
173
|
+
console.warn("Achromatic color detected (".concat(inputColorString, "). Defaulting hue to 0."));
|
|
174
|
+
targetHue_1 = 0;
|
|
175
|
+
}
|
|
176
|
+
var availableLightnessSteps = Object.keys(abneyData).map(Number);
|
|
177
|
+
if (availableLightnessSteps.length === 0) {
|
|
178
|
+
console.warn('Abney correction data is empty, cannot calculate base hue.');
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
var closestLightness = findClosestLightnessStep(targetLightness, availableLightnessSteps);
|
|
182
|
+
var lightnessCorrectionData = abneyData[closestLightness];
|
|
183
|
+
if (!lightnessCorrectionData) {
|
|
184
|
+
console.warn("No Abney correction data for lightness ".concat(closestLightness, "."));
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
var correctedHueMap_1 = Object.entries(lightnessCorrectionData).map(function (_a) {
|
|
188
|
+
var rawHueStr = _a[0], shift = _a[1];
|
|
189
|
+
var rawHue = Number(rawHueStr);
|
|
190
|
+
return {
|
|
191
|
+
rawHue: rawHue,
|
|
192
|
+
shift: shift,
|
|
193
|
+
correctedHue: (rawHue + shift + 360) % 360,
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
correctedHueMap_1.sort(function (a, b) {
|
|
197
|
+
if (a.correctedHue !== b.correctedHue) {
|
|
198
|
+
return a.correctedHue - b.correctedHue;
|
|
199
|
+
}
|
|
200
|
+
return a.rawHue - b.rawHue;
|
|
201
|
+
});
|
|
202
|
+
if (correctedHueMap_1.length === 0) {
|
|
203
|
+
console.warn("No hue ranges defined for lightness ".concat(closestLightness, "."));
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
var findCorrectRange = function () {
|
|
207
|
+
var nextRangeIndex = correctedHueMap_1.findIndex(function (range) { return range.correctedHue > targetHue_1; });
|
|
208
|
+
if (nextRangeIndex === 0) {
|
|
209
|
+
return correctedHueMap_1[correctedHueMap_1.length - 1];
|
|
210
|
+
}
|
|
211
|
+
if (nextRangeIndex > 0) {
|
|
212
|
+
return correctedHueMap_1[nextRangeIndex - 1];
|
|
213
|
+
}
|
|
214
|
+
return correctedHueMap_1[correctedHueMap_1.length - 1];
|
|
215
|
+
};
|
|
216
|
+
var selectedRange = findCorrectRange();
|
|
217
|
+
if (!selectedRange) {
|
|
218
|
+
console.error('Could not determine the correct hue range.');
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
var baseHue = (targetHue_1 - selectedRange.shift + 360) % 360;
|
|
222
|
+
return {
|
|
223
|
+
baseHue: baseHue,
|
|
224
|
+
correctionLightness: closestLightness,
|
|
225
|
+
correctionHueRange: selectedRange.rawHue,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
console.error('Error calculating base hue:', error);
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.calculateBaseHueAndCorrectionRange = calculateBaseHueAndCorrectionRange;
|
|
234
|
+
function calcOnBrand(hex) {
|
|
235
|
+
var whiteContrast = Number((0, apca_w3_1.calcAPCA)('#fff', hex));
|
|
236
|
+
var blackContrast = Number((0, apca_w3_1.calcAPCA)('#000', hex));
|
|
237
|
+
if (whiteContrast - 10 > blackContrast) {
|
|
238
|
+
return DefaultSwatch.whiteAlpha;
|
|
239
|
+
}
|
|
240
|
+
return DefaultSwatch.blackAlpha;
|
|
241
|
+
}
|
|
242
|
+
exports.calcOnBrand = calcOnBrand;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPromoHueShift = exports.getPromo = void 0;
|
|
4
|
+
var culori_1 = require("culori");
|
|
5
|
+
var promo_hue_shift_1 = require("../constants/promo-hue-shift");
|
|
6
|
+
function getPromo(color, hueShifts) {
|
|
7
|
+
if (hueShifts === void 0) { hueShifts = promo_hue_shift_1.PROMO_HUE_SHIFTS; }
|
|
8
|
+
try {
|
|
9
|
+
var toOklch = (0, culori_1.converter)('oklch');
|
|
10
|
+
var oklchColor = toOklch(color);
|
|
11
|
+
if (!oklchColor) {
|
|
12
|
+
throw new Error("Invalid color string: ".concat(color));
|
|
13
|
+
}
|
|
14
|
+
var currentHue = oklchColor.h;
|
|
15
|
+
var promoHueShift = getPromoHueShift(currentHue, hueShifts);
|
|
16
|
+
var correctedHue = (currentHue + promoHueShift + 360) % 360;
|
|
17
|
+
var promoLightness = oklchColor.l * 100;
|
|
18
|
+
if (promoLightness >= 50) {
|
|
19
|
+
promoLightness = promoLightness - 32;
|
|
20
|
+
}
|
|
21
|
+
promoLightness = Math.min(Math.max(promoLightness, 30), 34);
|
|
22
|
+
var promoChroma = 0.1;
|
|
23
|
+
var finalLightness = Math.round(promoLightness) / 100;
|
|
24
|
+
var finalChroma = Math.round(promoChroma * 100) / 100;
|
|
25
|
+
var promoOklch = {
|
|
26
|
+
mode: 'oklch',
|
|
27
|
+
l: finalLightness,
|
|
28
|
+
c: finalChroma,
|
|
29
|
+
h: correctedHue,
|
|
30
|
+
};
|
|
31
|
+
return (0, culori_1.formatHex)((0, culori_1.clampChroma)(promoOklch, 'oklch'));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error('Error generating promo palette:', error);
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.getPromo = getPromo;
|
|
39
|
+
function getPromoHueShift(currentHue, promoHueShifts) {
|
|
40
|
+
var hueRanges = Object.keys(promoHueShifts)
|
|
41
|
+
.map(Number)
|
|
42
|
+
.sort(function (a, b) { return a - b; });
|
|
43
|
+
var selectedHueRange = hueRanges[0];
|
|
44
|
+
for (var i = 0; i < hueRanges.length; i++) {
|
|
45
|
+
var startRange = hueRanges[i];
|
|
46
|
+
var endRange = hueRanges[i + 1] !== undefined ? hueRanges[i + 1] : 360;
|
|
47
|
+
if (currentHue >= startRange && currentHue < endRange) {
|
|
48
|
+
selectedHueRange = startRange;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (i === hueRanges.length - 1 && (currentHue >= startRange || currentHue < hueRanges[0])) {
|
|
52
|
+
selectedHueRange = startRange;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return promoHueShifts[selectedHueRange] !== undefined ? promoHueShifts[selectedHueRange] : 0;
|
|
57
|
+
}
|
|
58
|
+
exports.getPromoHueShift = getPromoHueShift;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface BaseTokens {
|
|
2
|
+
brandLogo: ThemedValue;
|
|
3
|
+
brandPromo: ThemedValue;
|
|
4
|
+
brand: {
|
|
5
|
+
original: ThemedValue;
|
|
6
|
+
interactions: {
|
|
7
|
+
hover: ThemedValue;
|
|
8
|
+
pressed: ThemedValue;
|
|
9
|
+
};
|
|
10
|
+
palette: ColorPalette;
|
|
11
|
+
};
|
|
12
|
+
accent: {
|
|
13
|
+
original: ThemedValue;
|
|
14
|
+
interactions: {
|
|
15
|
+
hover: ThemedValue;
|
|
16
|
+
pressed: ThemedValue;
|
|
17
|
+
};
|
|
18
|
+
palette?: ColorPalette;
|
|
19
|
+
};
|
|
20
|
+
warning: ColorPalette;
|
|
21
|
+
error: ColorPalette;
|
|
22
|
+
success: ColorPalette;
|
|
23
|
+
gray: ColorWithScale<GrayScale>;
|
|
24
|
+
whiteAlpha: ColorWithScale<AlphaScale>;
|
|
25
|
+
blackAlpha: ColorWithScale<AlphaScale>;
|
|
26
|
+
onBrand: ColorWithScale<AlphaScale>;
|
|
27
|
+
customizable: {
|
|
28
|
+
red: ColorPalette;
|
|
29
|
+
orange: ColorPalette;
|
|
30
|
+
green: ColorPalette;
|
|
31
|
+
mint: ColorPalette;
|
|
32
|
+
blue: ColorPalette;
|
|
33
|
+
blueDeep: ColorPalette;
|
|
34
|
+
violet: ColorPalette;
|
|
35
|
+
purple: ColorPalette;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface ColorPalette {
|
|
39
|
+
vivid: ColorWithScale<ChromaScale>;
|
|
40
|
+
normal: ColorWithScale<ChromaScale>;
|
|
41
|
+
dim: ColorWithScale<ChromaScale>;
|
|
42
|
+
}
|
|
43
|
+
type ChromaScale = 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 96;
|
|
44
|
+
type AlphaScale = 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 96;
|
|
45
|
+
type GrayScale = 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 96 | 98 | 100;
|
|
46
|
+
type ColorWithScale<T extends string | number> = {
|
|
47
|
+
[K in T]: string;
|
|
48
|
+
};
|
|
49
|
+
interface ThemedValue {
|
|
50
|
+
light: string;
|
|
51
|
+
dark: string;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface GeneratorColorChromaSettingsGroup {
|
|
2
|
+
[key: number]: {
|
|
3
|
+
vivid: GeneratorColorChromaSettings;
|
|
4
|
+
normal: GeneratorColorChromaSettings;
|
|
5
|
+
dim: GeneratorColorChromaSettings;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface GeneratorColorChromaSettings {
|
|
9
|
+
rel: number;
|
|
10
|
+
min?: number;
|
|
11
|
+
max?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GeneratorColorPalette {
|
|
14
|
+
vivid: {
|
|
15
|
+
[key: number]: string;
|
|
16
|
+
};
|
|
17
|
+
normal: {
|
|
18
|
+
[key: number]: string;
|
|
19
|
+
};
|
|
20
|
+
dim: {
|
|
21
|
+
[key: number]: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface GeneratorColorAbneyCorrection {
|
|
25
|
+
[lightness: number]: {
|
|
26
|
+
[hueShiftRange: number]: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface GeneratorColorWarningHuePatch {
|
|
30
|
+
[lightness: number]: number;
|
|
31
|
+
}
|
|
32
|
+
export interface GeneratorPaletteParams {
|
|
33
|
+
color: string;
|
|
34
|
+
type?: 'default' | 'warning' | 'promo';
|
|
35
|
+
settings?: {
|
|
36
|
+
chromaSettings?: GeneratorColorChromaSettingsGroup;
|
|
37
|
+
abneyCorrection?: GeneratorColorAbneyCorrection;
|
|
38
|
+
promoHueShifts?: {
|
|
39
|
+
[hueRange: number]: number;
|
|
40
|
+
};
|
|
41
|
+
warningHuePatch?: GeneratorColorWarningHuePatch;
|
|
42
|
+
};
|
|
43
|
+
}
|