@ankhorage/zora 0.16.2 → 1.0.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/CHANGELOG.md +74 -0
- package/README.md +27 -22
- package/dist/components/heading/resolveHeadingRecipe.d.ts +2 -2
- package/dist/components/heading/resolveHeadingRecipe.d.ts.map +1 -1
- package/dist/components/heading/resolveHeadingRecipe.js.map +1 -1
- package/dist/components/text/resolveTextRecipe.d.ts +2 -2
- package/dist/components/text/resolveTextRecipe.d.ts.map +1 -1
- package/dist/components/text/resolveTextRecipe.js.map +1 -1
- package/dist/patterns/theme-composer/ThemeComposer.d.ts.map +1 -1
- package/dist/patterns/theme-composer/ThemeComposer.js +101 -86
- package/dist/patterns/theme-composer/ThemeComposer.js.map +1 -1
- package/dist/patterns/theme-composer/index.d.ts +1 -1
- package/dist/patterns/theme-composer/index.d.ts.map +1 -1
- package/dist/patterns/theme-composer/index.js.map +1 -1
- package/dist/patterns/theme-composer/types.d.ts +3 -13
- package/dist/patterns/theme-composer/types.d.ts.map +1 -1
- package/dist/patterns/theme-composer/types.js.map +1 -1
- package/dist/theme/createZoraThemeConfig.d.ts +1 -1
- package/dist/theme/createZoraThemeConfig.d.ts.map +1 -1
- package/dist/theme/createZoraThemeConfig.js +5 -6
- package/dist/theme/createZoraThemeConfig.js.map +1 -1
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.d.ts +16 -11
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js +1 -20
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/useZoraTheme.d.ts +1 -1
- package/dist/theme/zoraDefaultTheme.js +1 -1
- package/dist/theme/zoraDefaultTheme.js.map +1 -1
- package/package.json +4 -4
- package/src/components/heading/resolveHeadingRecipe.test.ts +30 -5
- package/src/components/heading/resolveHeadingRecipe.ts +6 -6
- package/src/components/text/resolveTextRecipe.test.ts +30 -5
- package/src/components/text/resolveTextRecipe.ts +6 -6
- package/src/patterns/theme-composer/ThemeComposer.test.ts +128 -114
- package/src/patterns/theme-composer/ThemeComposer.tsx +130 -128
- package/src/patterns/theme-composer/index.ts +1 -6
- package/src/patterns/theme-composer/types.ts +4 -15
- package/src/showcaseCoverage.test.ts +14 -0
- package/src/theme/createZoraThemeConfig.test.ts +51 -26
- package/src/theme/createZoraThemeConfig.ts +7 -7
- package/src/theme/index.ts +1 -3
- package/src/theme/types.ts +22 -34
- package/src/theme/zoraDefaultTheme.ts +1 -1
- package/dist/internal/color/colorToneRecipes.d.ts +0 -23
- package/dist/internal/color/colorToneRecipes.d.ts.map +0 -1
- package/dist/internal/color/colorToneRecipes.js +0 -139
- package/dist/internal/color/colorToneRecipes.js.map +0 -1
- package/dist/internal/color/harmony.d.ts +0 -12
- package/dist/internal/color/harmony.d.ts.map +0 -1
- package/dist/internal/color/harmony.js +0 -69
- package/dist/internal/color/harmony.js.map +0 -1
- package/dist/internal/color/hue.d.ts +0 -3
- package/dist/internal/color/hue.d.ts.map +0 -1
- package/dist/internal/color/hue.js +0 -7
- package/dist/internal/color/hue.js.map +0 -1
- package/dist/internal/color/index.d.ts +0 -10
- package/dist/internal/color/index.d.ts.map +0 -1
- package/dist/internal/color/index.js +0 -10
- package/dist/internal/color/index.js.map +0 -1
- package/dist/internal/color/oklch.d.ts +0 -6
- package/dist/internal/color/oklch.d.ts.map +0 -1
- package/dist/internal/color/oklch.js +0 -50
- package/dist/internal/color/oklch.js.map +0 -1
- package/dist/internal/color/primary.d.ts +0 -3
- package/dist/internal/color/primary.d.ts.map +0 -1
- package/dist/internal/color/primary.js +0 -44
- package/dist/internal/color/primary.js.map +0 -1
- package/dist/internal/color/roleHues.d.ts +0 -15
- package/dist/internal/color/roleHues.d.ts.map +0 -1
- package/dist/internal/color/roleHues.js +0 -103
- package/dist/internal/color/roleHues.js.map +0 -1
- package/dist/internal/color/roleScales.d.ts +0 -20
- package/dist/internal/color/roleScales.d.ts.map +0 -1
- package/dist/internal/color/roleScales.js +0 -79
- package/dist/internal/color/roleScales.js.map +0 -1
- package/dist/internal/color/scales.d.ts +0 -19
- package/dist/internal/color/scales.d.ts.map +0 -1
- package/dist/internal/color/scales.js +0 -135
- package/dist/internal/color/scales.js.map +0 -1
- package/dist/internal/color/semanticTokens.d.ts +0 -28
- package/dist/internal/color/semanticTokens.d.ts.map +0 -1
- package/dist/internal/color/semanticTokens.js +0 -84
- package/dist/internal/color/semanticTokens.js.map +0 -1
- package/dist/internal/color/types.d.ts +0 -10
- package/dist/internal/color/types.d.ts.map +0 -1
- package/dist/internal/color/types.js +0 -4
- package/dist/internal/color/types.js.map +0 -1
- package/dist/patterns/theme-composer/recommendations.d.ts +0 -14
- package/dist/patterns/theme-composer/recommendations.d.ts.map +0 -1
- package/dist/patterns/theme-composer/recommendations.js +0 -58
- package/dist/patterns/theme-composer/recommendations.js.map +0 -1
- package/src/internal/color/colorToneRecipes.test.ts +0 -89
- package/src/internal/color/colorToneRecipes.ts +0 -167
- package/src/internal/color/harmony.test.ts +0 -145
- package/src/internal/color/harmony.ts +0 -96
- package/src/internal/color/hue.test.ts +0 -28
- package/src/internal/color/hue.ts +0 -7
- package/src/internal/color/index.ts +0 -44
- package/src/internal/color/oklch.ts +0 -65
- package/src/internal/color/primary.test.ts +0 -105
- package/src/internal/color/primary.ts +0 -64
- package/src/internal/color/roleHues.test.ts +0 -197
- package/src/internal/color/roleHues.ts +0 -142
- package/src/internal/color/roleScales.test.ts +0 -220
- package/src/internal/color/roleScales.ts +0 -127
- package/src/internal/color/scales.test.ts +0 -151
- package/src/internal/color/scales.ts +0 -194
- package/src/internal/color/semanticTokens.test.ts +0 -170
- package/src/internal/color/semanticTokens.ts +0 -114
- package/src/internal/color/types.ts +0 -15
- package/src/patterns/theme-composer/recommendations.ts +0 -85
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { converter, formatHex, parse, toGamut } from 'culori';
|
|
2
|
-
import { normalizeHueDegrees } from './hue';
|
|
3
|
-
const toOklch = converter('oklch');
|
|
4
|
-
const gamutMapToSrgb = toGamut('rgb', 'oklch');
|
|
5
|
-
function isSixDigitHexColor(value) {
|
|
6
|
-
return /^#[0-9a-fA-F]{6}$/.test(value);
|
|
7
|
-
}
|
|
8
|
-
export function parseHexToOklch(hex) {
|
|
9
|
-
if (!isSixDigitHexColor(hex)) {
|
|
10
|
-
throw new Error(`Expected a 6-digit hex color like '#0f766e', got '${String(hex)}'.`);
|
|
11
|
-
}
|
|
12
|
-
const parsed = parse(hex);
|
|
13
|
-
if (!parsed) {
|
|
14
|
-
throw new Error(`Unable to parse hex color '${String(hex)}'.`);
|
|
15
|
-
}
|
|
16
|
-
const oklch = toOklch(parsed);
|
|
17
|
-
if (typeof oklch.l !== 'number' || typeof oklch.c !== 'number') {
|
|
18
|
-
throw new Error(`Unable to convert hex color '${String(hex)}' to OKLCH.`);
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
l: oklch.l,
|
|
22
|
-
c: oklch.c,
|
|
23
|
-
h: normalizeHueDegrees(typeof oklch.h === 'number' ? oklch.h : 0),
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export function formatOklchAsHex(color) {
|
|
27
|
-
const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });
|
|
28
|
-
const hex = formatHex(mapped);
|
|
29
|
-
if (!hex || !isSixDigitHexColor(hex)) {
|
|
30
|
-
throw new Error('Unable to format OKLCH color as a 6-digit hex value.');
|
|
31
|
-
}
|
|
32
|
-
const normalized = hex.toLowerCase();
|
|
33
|
-
if (!isSixDigitHexColor(normalized)) {
|
|
34
|
-
throw new Error('Unable to format OKLCH color as a 6-digit hex value.');
|
|
35
|
-
}
|
|
36
|
-
return normalized;
|
|
37
|
-
}
|
|
38
|
-
export function clampOklchToGamut(color) {
|
|
39
|
-
const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });
|
|
40
|
-
const clamped = toOklch(mapped);
|
|
41
|
-
if (typeof clamped.l !== 'number' || typeof clamped.c !== 'number') {
|
|
42
|
-
throw new Error('Unable to clamp OKLCH color to sRGB gamut.');
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
l: clamped.l,
|
|
46
|
-
c: clamped.c,
|
|
47
|
-
h: normalizeHueDegrees(typeof clamped.h === 'number' ? clamped.h : 0),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=oklch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../../src/internal/color/oklch.ts"],"names":[],"mappings":"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","sourcesContent":["import { converter, formatHex, parse, toGamut } from 'culori';\n\nimport type { ZoraHexColor } from '../../theme/types';\nimport { normalizeHueDegrees } from './hue';\nimport type { ZoraOklchColor } from './types';\n\nconst toOklch = converter('oklch');\nconst gamutMapToSrgb = toGamut('rgb', 'oklch');\n\nfunction isSixDigitHexColor(value: string): value is ZoraHexColor {\n return /^#[0-9a-fA-F]{6}$/.test(value);\n}\n\nexport function parseHexToOklch(hex: ZoraHexColor): ZoraOklchColor {\n if (!isSixDigitHexColor(hex)) {\n throw new Error(`Expected a 6-digit hex color like '#0f766e', got '${String(hex)}'.`);\n }\n\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`Unable to parse hex color '${String(hex)}'.`);\n }\n\n const oklch = toOklch(parsed);\n if (typeof oklch.l !== 'number' || typeof oklch.c !== 'number') {\n throw new Error(`Unable to convert hex color '${String(hex)}' to OKLCH.`);\n }\n\n return {\n l: oklch.l,\n c: oklch.c,\n h: normalizeHueDegrees(typeof oklch.h === 'number' ? oklch.h : 0),\n };\n}\n\nexport function formatOklchAsHex(color: ZoraOklchColor): ZoraHexColor {\n const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });\n const hex = formatHex(mapped);\n\n if (!hex || !isSixDigitHexColor(hex)) {\n throw new Error('Unable to format OKLCH color as a 6-digit hex value.');\n }\n\n const normalized = hex.toLowerCase();\n if (!isSixDigitHexColor(normalized)) {\n throw new Error('Unable to format OKLCH color as a 6-digit hex value.');\n }\n\n return normalized;\n}\n\nexport function clampOklchToGamut(color: ZoraOklchColor): ZoraOklchColor {\n const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });\n const clamped = toOklch(mapped);\n\n if (typeof clamped.l !== 'number' || typeof clamped.c !== 'number') {\n throw new Error('Unable to clamp OKLCH color to sRGB gamut.');\n }\n\n return {\n l: clamped.l,\n c: clamped.c,\n h: normalizeHueDegrees(typeof clamped.h === 'number' ? clamped.h : 0),\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../../src/internal/color/primary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA2BrE,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,aAAa,GAClB,YAAY,CAiCd"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';
|
|
2
|
-
const FALLBACK_PRIMARY_COLOR = '#0f766e';
|
|
3
|
-
const LIGHT_PRIMARY_LIGHTNESS_TARGET = 0.52;
|
|
4
|
-
const DARK_PRIMARY_LIGHTNESS_TARGET = 0.72;
|
|
5
|
-
const MIN_PRIMARY_CHROMA = 0.04;
|
|
6
|
-
const MAX_LIGHT_PRIMARY_CHROMA = 0.18;
|
|
7
|
-
const MAX_DARK_PRIMARY_CHROMA = 0.2;
|
|
8
|
-
const LIGHTNESS_BLEND = 0.85;
|
|
9
|
-
function clampNumber(value, min, max) {
|
|
10
|
-
return Math.max(min, Math.min(value, max));
|
|
11
|
-
}
|
|
12
|
-
function resolveModePrimaryTargetLightness(mode) {
|
|
13
|
-
return mode === 'dark' ? DARK_PRIMARY_LIGHTNESS_TARGET : LIGHT_PRIMARY_LIGHTNESS_TARGET;
|
|
14
|
-
}
|
|
15
|
-
function resolveModePrimaryMaxChroma(mode) {
|
|
16
|
-
return mode === 'dark' ? MAX_DARK_PRIMARY_CHROMA : MAX_LIGHT_PRIMARY_CHROMA;
|
|
17
|
-
}
|
|
18
|
-
export function resolveModePrimaryColor(primaryColor, mode) {
|
|
19
|
-
let seed;
|
|
20
|
-
try {
|
|
21
|
-
seed = parseHexToOklch(primaryColor);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
-
if (process.env.NODE_ENV === 'production') {
|
|
26
|
-
console.warn(`Invalid ZORA primaryColor '${primaryColor}'. Falling back. ${message}`);
|
|
27
|
-
return resolveModePrimaryColor(FALLBACK_PRIMARY_COLOR, mode);
|
|
28
|
-
}
|
|
29
|
-
throw error instanceof Error ? error : new Error(message);
|
|
30
|
-
}
|
|
31
|
-
const targetLightness = resolveModePrimaryTargetLightness(mode);
|
|
32
|
-
const maxChroma = resolveModePrimaryMaxChroma(mode);
|
|
33
|
-
const blendedLightness = seed.l + (targetLightness - seed.l) * LIGHTNESS_BLEND;
|
|
34
|
-
const boundedLightness = clampNumber(blendedLightness, 0.12, 0.92);
|
|
35
|
-
const cappedChroma = clampNumber(seed.c, 0, maxChroma);
|
|
36
|
-
const boundedChroma = seed.c < MIN_PRIMARY_CHROMA ? cappedChroma : Math.max(cappedChroma, MIN_PRIMARY_CHROMA);
|
|
37
|
-
const derived = clampOklchToGamut({
|
|
38
|
-
l: boundedLightness,
|
|
39
|
-
c: boundedChroma,
|
|
40
|
-
h: seed.h,
|
|
41
|
-
});
|
|
42
|
-
return formatOklchAsHex(derived);
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=primary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primary.js","sourceRoot":"","sources":["../../../src/internal/color/primary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/E,MAAM,sBAAsB,GAAiB,SAAS,CAAC;AAEvD,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAC5C,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,SAAS,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAmB;IAC5D,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,8BAA8B,CAAC;AAC1F,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAmB;IACtD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAA0B,EAC1B,IAAmB;IAEnB,IAAI,IAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,8BAA8B,YAAY,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACtF,OAAO,uBAAuB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,eAAe,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;IAC/E,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GACjB,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAChC,CAAC,EAAE,gBAAgB;QACnB,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import type { ZoraHexColor, ZoraThemeMode } from '../../theme/types';\nimport { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';\nimport type { ZoraOklchColor } from './types';\n\nconst FALLBACK_PRIMARY_COLOR: ZoraHexColor = '#0f766e';\n\nconst LIGHT_PRIMARY_LIGHTNESS_TARGET = 0.52;\nconst DARK_PRIMARY_LIGHTNESS_TARGET = 0.72;\n\nconst MIN_PRIMARY_CHROMA = 0.04;\nconst MAX_LIGHT_PRIMARY_CHROMA = 0.18;\nconst MAX_DARK_PRIMARY_CHROMA = 0.2;\n\nconst LIGHTNESS_BLEND = 0.85;\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction resolveModePrimaryTargetLightness(mode: ZoraThemeMode): number {\n return mode === 'dark' ? DARK_PRIMARY_LIGHTNESS_TARGET : LIGHT_PRIMARY_LIGHTNESS_TARGET;\n}\n\nfunction resolveModePrimaryMaxChroma(mode: ZoraThemeMode): number {\n return mode === 'dark' ? MAX_DARK_PRIMARY_CHROMA : MAX_LIGHT_PRIMARY_CHROMA;\n}\n\nexport function resolveModePrimaryColor(\n primaryColor: ZoraHexColor,\n mode: ZoraThemeMode,\n): ZoraHexColor {\n let seed: ZoraOklchColor;\n\n try {\n seed = parseHexToOklch(primaryColor);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (process.env.NODE_ENV === 'production') {\n console.warn(`Invalid ZORA primaryColor '${primaryColor}'. Falling back. ${message}`);\n return resolveModePrimaryColor(FALLBACK_PRIMARY_COLOR, mode);\n }\n\n throw error instanceof Error ? error : new Error(message);\n }\n\n const targetLightness = resolveModePrimaryTargetLightness(mode);\n const maxChroma = resolveModePrimaryMaxChroma(mode);\n\n const blendedLightness = seed.l + (targetLightness - seed.l) * LIGHTNESS_BLEND;\n const boundedLightness = clampNumber(blendedLightness, 0.12, 0.92);\n\n const cappedChroma = clampNumber(seed.c, 0, maxChroma);\n const boundedChroma =\n seed.c < MIN_PRIMARY_CHROMA ? cappedChroma : Math.max(cappedChroma, MIN_PRIMARY_CHROMA);\n\n const derived = clampOklchToGamut({\n l: boundedLightness,\n c: boundedChroma,\n h: seed.h,\n });\n\n return formatOklchAsHex(derived);\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ZoraColorHarmony } from '../../theme/types';
|
|
2
|
-
import type { ZoraComputedHarmony, ZoraHarmonySlotId } from './harmony';
|
|
3
|
-
export type ZoraHueRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';
|
|
4
|
-
export interface ZoraHueRoleAssignment {
|
|
5
|
-
role: ZoraHueRoleId;
|
|
6
|
-
hue: number;
|
|
7
|
-
sourceSlotId: ZoraHarmonySlotId;
|
|
8
|
-
}
|
|
9
|
-
export interface ZoraComputedHueRoles {
|
|
10
|
-
harmony: ZoraColorHarmony;
|
|
11
|
-
assignments: readonly ZoraHueRoleAssignment[];
|
|
12
|
-
}
|
|
13
|
-
export declare function assignZoraHarmonyRoleHues(harmony: ZoraComputedHarmony): ZoraComputedHueRoles;
|
|
14
|
-
export declare function getZoraHueRoleAssignment(roles: ZoraComputedHueRoles, role: ZoraHueRoleId): ZoraHueRoleAssignment;
|
|
15
|
-
//# sourceMappingURL=roleHues.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roleHues.d.ts","sourceRoot":"","sources":["../../../src/internal/color/roleHues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAmB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGzF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC/C;AAmCD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB,CA8E5F;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,aAAa,GAClB,qBAAqB,CAQvB"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { normalizeHueDegrees } from './hue';
|
|
2
|
-
function findSlot(harmony, id) {
|
|
3
|
-
return harmony.orderedSlots.find((slot) => slot.id === id);
|
|
4
|
-
}
|
|
5
|
-
function requireBaseSlot(harmony) {
|
|
6
|
-
const base = findSlot(harmony, 'base');
|
|
7
|
-
if (!base) {
|
|
8
|
-
throw new Error(`[zora] Expected harmony to include a base slot (kind: ${harmony.kind}).`);
|
|
9
|
-
}
|
|
10
|
-
return base;
|
|
11
|
-
}
|
|
12
|
-
function assignRole(role, harmony, preferred, fallback = 'base') {
|
|
13
|
-
const base = requireBaseSlot(harmony);
|
|
14
|
-
const preferredSlot = findSlot(harmony, preferred);
|
|
15
|
-
const fallbackSlot = findSlot(harmony, fallback);
|
|
16
|
-
const chosenSlot = preferredSlot ?? fallbackSlot ?? base;
|
|
17
|
-
return {
|
|
18
|
-
role,
|
|
19
|
-
hue: normalizeHueDegrees(chosenSlot.hue),
|
|
20
|
-
sourceSlotId: chosenSlot.id,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function assignZoraHarmonyRoleHues(harmony) {
|
|
24
|
-
const { kind } = harmony;
|
|
25
|
-
if (kind === 'monochromatic') {
|
|
26
|
-
return {
|
|
27
|
-
harmony: kind,
|
|
28
|
-
assignments: [
|
|
29
|
-
assignRole('primary', harmony, 'base'),
|
|
30
|
-
assignRole('secondary', harmony, 'base'),
|
|
31
|
-
assignRole('accent', harmony, 'base'),
|
|
32
|
-
assignRole('highlight', harmony, 'base'),
|
|
33
|
-
assignRole('surfaceTint', harmony, 'base'),
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
if (kind === 'complementary') {
|
|
38
|
-
return {
|
|
39
|
-
harmony: kind,
|
|
40
|
-
assignments: [
|
|
41
|
-
assignRole('primary', harmony, 'base'),
|
|
42
|
-
assignRole('secondary', harmony, 'base'),
|
|
43
|
-
assignRole('accent', harmony, 'a'),
|
|
44
|
-
assignRole('highlight', harmony, 'a'),
|
|
45
|
-
assignRole('surfaceTint', harmony, 'base'),
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
if (kind === 'analogous') {
|
|
50
|
-
return {
|
|
51
|
-
harmony: kind,
|
|
52
|
-
assignments: [
|
|
53
|
-
assignRole('primary', harmony, 'base'),
|
|
54
|
-
assignRole('secondary', harmony, 'a'),
|
|
55
|
-
assignRole('accent', harmony, 'b', 'a'),
|
|
56
|
-
assignRole('highlight', harmony, 'b', 'a'),
|
|
57
|
-
assignRole('surfaceTint', harmony, 'a'),
|
|
58
|
-
],
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
if (kind === 'splitComplementary') {
|
|
62
|
-
return {
|
|
63
|
-
harmony: kind,
|
|
64
|
-
assignments: [
|
|
65
|
-
assignRole('primary', harmony, 'base'),
|
|
66
|
-
assignRole('secondary', harmony, 'a'),
|
|
67
|
-
assignRole('accent', harmony, 'b', 'a'),
|
|
68
|
-
assignRole('highlight', harmony, 'b', 'a'),
|
|
69
|
-
assignRole('surfaceTint', harmony, 'base'),
|
|
70
|
-
],
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
if (kind === 'triadic') {
|
|
74
|
-
return {
|
|
75
|
-
harmony: kind,
|
|
76
|
-
assignments: [
|
|
77
|
-
assignRole('primary', harmony, 'base'),
|
|
78
|
-
assignRole('secondary', harmony, 'a'),
|
|
79
|
-
assignRole('accent', harmony, 'b', 'a'),
|
|
80
|
-
assignRole('highlight', harmony, 'b', 'a'),
|
|
81
|
-
assignRole('surfaceTint', harmony, 'base'),
|
|
82
|
-
],
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
harmony: kind,
|
|
87
|
-
assignments: [
|
|
88
|
-
assignRole('primary', harmony, 'base'),
|
|
89
|
-
assignRole('secondary', harmony, 'a'),
|
|
90
|
-
assignRole('accent', harmony, 'b', 'a'),
|
|
91
|
-
assignRole('highlight', harmony, 'c', 'b'),
|
|
92
|
-
assignRole('surfaceTint', harmony, 'base'),
|
|
93
|
-
],
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
export function getZoraHueRoleAssignment(roles, role) {
|
|
97
|
-
const found = roles.assignments.find((assignment) => assignment.role === role);
|
|
98
|
-
if (!found) {
|
|
99
|
-
throw new Error(`[zora] Expected a hue-role assignment for "${role}" (harmony: ${roles.harmony}).`);
|
|
100
|
-
}
|
|
101
|
-
return found;
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=roleHues.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roleHues.js","sourceRoot":"","sources":["../../../src/internal/color/roleHues.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZoraColorHarmony } from '../../theme/types';\nimport type { ZoraComputedHarmony, ZoraHarmonySlot, ZoraHarmonySlotId } from './harmony';\nimport { normalizeHueDegrees } from './hue';\n\nexport type ZoraHueRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';\n\nexport interface ZoraHueRoleAssignment {\n role: ZoraHueRoleId;\n hue: number;\n sourceSlotId: ZoraHarmonySlotId;\n}\n\nexport interface ZoraComputedHueRoles {\n harmony: ZoraColorHarmony;\n assignments: readonly ZoraHueRoleAssignment[];\n}\n\nfunction findSlot(\n harmony: ZoraComputedHarmony,\n id: ZoraHarmonySlotId,\n): ZoraHarmonySlot | undefined {\n return harmony.orderedSlots.find((slot) => slot.id === id);\n}\n\nfunction requireBaseSlot(harmony: ZoraComputedHarmony): ZoraHarmonySlot {\n const base = findSlot(harmony, 'base');\n if (!base) {\n throw new Error(`[zora] Expected harmony to include a base slot (kind: ${harmony.kind}).`);\n }\n return base;\n}\n\nfunction assignRole(\n role: ZoraHueRoleId,\n harmony: ZoraComputedHarmony,\n preferred: ZoraHarmonySlotId,\n fallback: ZoraHarmonySlotId = 'base',\n): ZoraHueRoleAssignment {\n const base = requireBaseSlot(harmony);\n const preferredSlot = findSlot(harmony, preferred);\n const fallbackSlot = findSlot(harmony, fallback);\n const chosenSlot = preferredSlot ?? fallbackSlot ?? base;\n\n return {\n role,\n hue: normalizeHueDegrees(chosenSlot.hue),\n sourceSlotId: chosenSlot.id,\n };\n}\n\nexport function assignZoraHarmonyRoleHues(harmony: ZoraComputedHarmony): ZoraComputedHueRoles {\n const { kind } = harmony;\n\n if (kind === 'monochromatic') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'base'),\n assignRole('accent', harmony, 'base'),\n assignRole('highlight', harmony, 'base'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'complementary') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'base'),\n assignRole('accent', harmony, 'a'),\n assignRole('highlight', harmony, 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'analogous') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'a'),\n ],\n };\n }\n\n if (kind === 'splitComplementary') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'triadic') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'c', 'b'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n}\n\nexport function getZoraHueRoleAssignment(\n roles: ZoraComputedHueRoles,\n role: ZoraHueRoleId,\n): ZoraHueRoleAssignment {\n const found = roles.assignments.find((assignment) => assignment.role === role);\n if (!found) {\n throw new Error(\n `[zora] Expected a hue-role assignment for \"${role}\" (harmony: ${roles.harmony}).`,\n );\n }\n return found;\n}\n"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ZoraColorTone, ZoraHexColor } from '../../theme/types';
|
|
2
|
-
import { type ZoraComputedHueRoles } from './roleHues';
|
|
3
|
-
import type { ZoraColorScale } from './types';
|
|
4
|
-
export type ZoraColorScaleRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint' | 'neutral';
|
|
5
|
-
export declare const ZORA_COLOR_SCALE_ROLE_ORDER: readonly ZoraColorScaleRoleId[];
|
|
6
|
-
export interface ZoraRoleColorScale {
|
|
7
|
-
role: ZoraColorScaleRoleId;
|
|
8
|
-
sourceHue?: number;
|
|
9
|
-
scale: ZoraColorScale;
|
|
10
|
-
}
|
|
11
|
-
export interface ZoraComputedRoleColorScales {
|
|
12
|
-
roles: readonly ZoraRoleColorScale[];
|
|
13
|
-
}
|
|
14
|
-
export declare function getZoraRoleColorScale(scales: ZoraComputedRoleColorScales, role: ZoraColorScaleRoleId): ZoraRoleColorScale;
|
|
15
|
-
export declare function createZoraRoleColorScales(options: {
|
|
16
|
-
hueRoles: ZoraComputedHueRoles;
|
|
17
|
-
seed: ZoraHexColor;
|
|
18
|
-
colorTone: ZoraColorTone;
|
|
19
|
-
}): ZoraComputedRoleColorScales;
|
|
20
|
-
//# sourceMappingURL=roleScales.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roleScales.d.ts","sourceRoot":"","sources":["../../../src/internal/color/roleScales.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,GACX,aAAa,GACb,SAAS,CAAC;AAEd,eAAO,MAAM,2BAA2B,EAAE,SAAS,oBAAoB,EAOtE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,2BAA2B,EACnC,IAAI,EAAE,oBAAoB,GACzB,kBAAkB,CAMpB;AA6BD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;CAC1B,GAAG,2BAA2B,CAyC9B"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { getZoraColorToneRecipe } from './colorToneRecipes';
|
|
2
|
-
import { parseHexToOklch } from './oklch';
|
|
3
|
-
import { getZoraHueRoleAssignment, } from './roleHues';
|
|
4
|
-
import { createZoraHueScale, createZoraNeutralScale, } from './scales';
|
|
5
|
-
export const ZORA_COLOR_SCALE_ROLE_ORDER = [
|
|
6
|
-
'primary',
|
|
7
|
-
'secondary',
|
|
8
|
-
'accent',
|
|
9
|
-
'highlight',
|
|
10
|
-
'surfaceTint',
|
|
11
|
-
'neutral',
|
|
12
|
-
];
|
|
13
|
-
export function getZoraRoleColorScale(scales, role) {
|
|
14
|
-
const found = scales.roles.find((entry) => entry.role === role);
|
|
15
|
-
if (!found) {
|
|
16
|
-
throw new Error(`[zora] Expected role color scales to include "${role}".`);
|
|
17
|
-
}
|
|
18
|
-
return found;
|
|
19
|
-
}
|
|
20
|
-
function resolveSeedChroma(seed) {
|
|
21
|
-
return parseHexToOklch(seed).c;
|
|
22
|
-
}
|
|
23
|
-
function createHueBackedRoleScale(options) {
|
|
24
|
-
const assignment = getZoraHueRoleAssignment(options.hueRoles, options.role);
|
|
25
|
-
const colorToneRecipe = getZoraColorToneRecipe(options.colorTone);
|
|
26
|
-
const hueScaleRole = options.role;
|
|
27
|
-
const hueScaleOptions = {
|
|
28
|
-
hue: assignment.hue,
|
|
29
|
-
seedChroma: options.seedChroma,
|
|
30
|
-
role: hueScaleRole,
|
|
31
|
-
colorToneRecipe,
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
role: options.role,
|
|
35
|
-
sourceHue: assignment.hue,
|
|
36
|
-
scale: createZoraHueScale(hueScaleOptions),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export function createZoraRoleColorScales(options) {
|
|
40
|
-
const seedChroma = resolveSeedChroma(options.seed);
|
|
41
|
-
const roles = [
|
|
42
|
-
createHueBackedRoleScale({
|
|
43
|
-
colorTone: options.colorTone,
|
|
44
|
-
hueRoles: options.hueRoles,
|
|
45
|
-
seedChroma,
|
|
46
|
-
role: 'primary',
|
|
47
|
-
}),
|
|
48
|
-
createHueBackedRoleScale({
|
|
49
|
-
colorTone: options.colorTone,
|
|
50
|
-
hueRoles: options.hueRoles,
|
|
51
|
-
seedChroma,
|
|
52
|
-
role: 'secondary',
|
|
53
|
-
}),
|
|
54
|
-
createHueBackedRoleScale({
|
|
55
|
-
colorTone: options.colorTone,
|
|
56
|
-
hueRoles: options.hueRoles,
|
|
57
|
-
seedChroma,
|
|
58
|
-
role: 'accent',
|
|
59
|
-
}),
|
|
60
|
-
createHueBackedRoleScale({
|
|
61
|
-
colorTone: options.colorTone,
|
|
62
|
-
hueRoles: options.hueRoles,
|
|
63
|
-
seedChroma,
|
|
64
|
-
role: 'highlight',
|
|
65
|
-
}),
|
|
66
|
-
createHueBackedRoleScale({
|
|
67
|
-
colorTone: options.colorTone,
|
|
68
|
-
hueRoles: options.hueRoles,
|
|
69
|
-
seedChroma,
|
|
70
|
-
role: 'surfaceTint',
|
|
71
|
-
}),
|
|
72
|
-
{
|
|
73
|
-
role: 'neutral',
|
|
74
|
-
scale: createZoraNeutralScale(options.seed),
|
|
75
|
-
},
|
|
76
|
-
];
|
|
77
|
-
return { roles };
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=roleScales.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roleScales.js","sourceRoot":"","sources":["../../../src/internal/color/roleScales.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EACL,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAElB,sBAAsB,GAEvB,MAAM,UAAU,CAAC;AAWlB,MAAM,CAAC,MAAM,2BAA2B,GAAoC;IAC1E,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;IACX,aAAa;IACb,SAAS;CACV,CAAC;AAYF,MAAM,UAAU,qBAAqB,CACnC,MAAmC,EACnC,IAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,IAAI,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAKjC;IACC,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,YAAY,GAAuB,OAAO,CAAC,IAAI,CAAC;IACtD,MAAM,eAAe,GAA8B;QACjD,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,YAAY;QAClB,eAAe;KAChB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAIzC;IACC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAyB;QAClC,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,SAAS;SAChB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,QAAQ;SACf,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,aAAa;SACpB,CAAC;QACF;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5C;KACF,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import type { ZoraColorTone, ZoraHexColor } from '../../theme/types';\nimport { getZoraColorToneRecipe } from './colorToneRecipes';\nimport { parseHexToOklch } from './oklch';\nimport {\n getZoraHueRoleAssignment,\n type ZoraComputedHueRoles,\n type ZoraHueRoleId,\n} from './roleHues';\nimport {\n createZoraHueScale,\n type CreateZoraHueScaleOptions,\n createZoraNeutralScale,\n type ZoraHueScaleRoleId,\n} from './scales';\nimport type { ZoraColorScale } from './types';\n\nexport type ZoraColorScaleRoleId =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'highlight'\n | 'surfaceTint'\n | 'neutral';\n\nexport const ZORA_COLOR_SCALE_ROLE_ORDER: readonly ZoraColorScaleRoleId[] = [\n 'primary',\n 'secondary',\n 'accent',\n 'highlight',\n 'surfaceTint',\n 'neutral',\n];\n\nexport interface ZoraRoleColorScale {\n role: ZoraColorScaleRoleId;\n sourceHue?: number;\n scale: ZoraColorScale;\n}\n\nexport interface ZoraComputedRoleColorScales {\n roles: readonly ZoraRoleColorScale[];\n}\n\nexport function getZoraRoleColorScale(\n scales: ZoraComputedRoleColorScales,\n role: ZoraColorScaleRoleId,\n): ZoraRoleColorScale {\n const found = scales.roles.find((entry) => entry.role === role);\n if (!found) {\n throw new Error(`[zora] Expected role color scales to include \"${role}\".`);\n }\n return found;\n}\n\nfunction resolveSeedChroma(seed: ZoraHexColor): number {\n return parseHexToOklch(seed).c;\n}\n\nfunction createHueBackedRoleScale(options: {\n colorTone: ZoraColorTone;\n hueRoles: ZoraComputedHueRoles;\n seedChroma: number;\n role: ZoraHueRoleId;\n}): ZoraRoleColorScale {\n const assignment = getZoraHueRoleAssignment(options.hueRoles, options.role);\n const colorToneRecipe = getZoraColorToneRecipe(options.colorTone);\n const hueScaleRole: ZoraHueScaleRoleId = options.role;\n const hueScaleOptions: CreateZoraHueScaleOptions = {\n hue: assignment.hue,\n seedChroma: options.seedChroma,\n role: hueScaleRole,\n colorToneRecipe,\n };\n\n return {\n role: options.role,\n sourceHue: assignment.hue,\n scale: createZoraHueScale(hueScaleOptions),\n };\n}\n\nexport function createZoraRoleColorScales(options: {\n hueRoles: ZoraComputedHueRoles;\n seed: ZoraHexColor;\n colorTone: ZoraColorTone;\n}): ZoraComputedRoleColorScales {\n const seedChroma = resolveSeedChroma(options.seed);\n\n const roles: ZoraRoleColorScale[] = [\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'primary',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'secondary',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'accent',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'highlight',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'surfaceTint',\n }),\n {\n role: 'neutral',\n scale: createZoraNeutralScale(options.seed),\n },\n ];\n\n return { roles };\n}\n"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { ZoraHexColor } from '../../theme/types';
|
|
2
|
-
import type { ZoraColorToneRecipe } from './colorToneRecipes';
|
|
3
|
-
import { type ZoraColorScale } from './types';
|
|
4
|
-
export interface CreateZoraColorScaleOptions {
|
|
5
|
-
seed: ZoraHexColor;
|
|
6
|
-
role?: 'primary' | 'neutral';
|
|
7
|
-
}
|
|
8
|
-
export type ZoraHueScaleRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';
|
|
9
|
-
export interface CreateZoraHueScaleOptions {
|
|
10
|
-
hue: number;
|
|
11
|
-
seedChroma: number;
|
|
12
|
-
role: ZoraHueScaleRoleId;
|
|
13
|
-
colorToneRecipe: ZoraColorToneRecipe;
|
|
14
|
-
}
|
|
15
|
-
export declare function createZoraColorScale(options: CreateZoraColorScaleOptions): ZoraColorScale;
|
|
16
|
-
export declare function createZoraPrimaryScale(seed: ZoraHexColor): ZoraColorScale;
|
|
17
|
-
export declare function createZoraNeutralScale(seed?: ZoraHexColor): ZoraColorScale;
|
|
18
|
-
export declare function createZoraHueScale(options: CreateZoraHueScaleOptions): ZoraColorScale;
|
|
19
|
-
//# sourceMappingURL=scales.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scales.d.ts","sourceRoot":"","sources":["../../../src/internal/color/scales.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,SAAS,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAElG,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;IACzB,eAAe,EAAE,mBAAmB,CAAC;CACtC;AA0JD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAKzF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,YAAwB,GAAG,cAAc,CAErF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,cAAc,CAMrF"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { getZoraColorToneRoleChromaFactor } from './colorToneRecipes';
|
|
2
|
-
import { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';
|
|
3
|
-
import {} from './types';
|
|
4
|
-
const PRIMARY_LIGHTNESS_BY_STEP = {
|
|
5
|
-
50: 0.97,
|
|
6
|
-
100: 0.93,
|
|
7
|
-
200: 0.86,
|
|
8
|
-
300: 0.78,
|
|
9
|
-
400: 0.68,
|
|
10
|
-
500: 0.58,
|
|
11
|
-
600: 0.5,
|
|
12
|
-
700: 0.42,
|
|
13
|
-
800: 0.34,
|
|
14
|
-
900: 0.27,
|
|
15
|
-
950: 0.2,
|
|
16
|
-
};
|
|
17
|
-
const NEUTRAL_LIGHTNESS_BY_STEP = {
|
|
18
|
-
50: 0.98,
|
|
19
|
-
100: 0.95,
|
|
20
|
-
200: 0.89,
|
|
21
|
-
300: 0.8,
|
|
22
|
-
400: 0.68,
|
|
23
|
-
500: 0.55,
|
|
24
|
-
600: 0.44,
|
|
25
|
-
700: 0.34,
|
|
26
|
-
800: 0.25,
|
|
27
|
-
900: 0.18,
|
|
28
|
-
950: 0.12,
|
|
29
|
-
};
|
|
30
|
-
const PRIMARY_CHROMA_MULTIPLIER_BY_STEP = {
|
|
31
|
-
50: 0.2,
|
|
32
|
-
100: 0.3,
|
|
33
|
-
200: 0.45,
|
|
34
|
-
300: 0.7,
|
|
35
|
-
400: 0.95,
|
|
36
|
-
500: 1,
|
|
37
|
-
600: 0.95,
|
|
38
|
-
700: 0.85,
|
|
39
|
-
800: 0.65,
|
|
40
|
-
900: 0.45,
|
|
41
|
-
950: 0.3,
|
|
42
|
-
};
|
|
43
|
-
const MAX_PRIMARY_SCALE_CHROMA = 0.2;
|
|
44
|
-
const MIN_PRIMARY_SCALE_CHROMA = 0.04;
|
|
45
|
-
const NEUTRAL_CHROMA = 0.012;
|
|
46
|
-
const DEFAULT_NEUTRAL_HUE_DEGREES = 260;
|
|
47
|
-
function clampNumber(value, min, max) {
|
|
48
|
-
return Math.max(min, Math.min(value, max));
|
|
49
|
-
}
|
|
50
|
-
function resolvePrimaryScaleChroma(seedChroma, step) {
|
|
51
|
-
const cappedSeedChroma = clampNumber(seedChroma, 0, MAX_PRIMARY_SCALE_CHROMA);
|
|
52
|
-
const multiplier = PRIMARY_CHROMA_MULTIPLIER_BY_STEP[step];
|
|
53
|
-
const scaled = cappedSeedChroma * multiplier;
|
|
54
|
-
const bounded = clampNumber(scaled, 0, MAX_PRIMARY_SCALE_CHROMA);
|
|
55
|
-
const shouldEnforceMin = step >= 300 && step <= 700 && seedChroma >= MIN_PRIMARY_SCALE_CHROMA;
|
|
56
|
-
return shouldEnforceMin ? Math.max(bounded, MIN_PRIMARY_SCALE_CHROMA) : bounded;
|
|
57
|
-
}
|
|
58
|
-
function resolveRoleScaleChroma(options) {
|
|
59
|
-
const cappedSeedChroma = clampNumber(options.seedChroma, 0, options.maxChroma);
|
|
60
|
-
const multiplier = PRIMARY_CHROMA_MULTIPLIER_BY_STEP[options.step];
|
|
61
|
-
const scaled = cappedSeedChroma * multiplier;
|
|
62
|
-
const bounded = clampNumber(scaled, 0, options.maxChroma);
|
|
63
|
-
const shouldEnforceMin = options.step >= 300 && options.step <= 700 && options.seedChroma >= options.minMidChroma;
|
|
64
|
-
return shouldEnforceMin ? Math.max(bounded, options.minMidChroma) : bounded;
|
|
65
|
-
}
|
|
66
|
-
function resolveHueScaleChroma(options, step) {
|
|
67
|
-
const factor = getZoraColorToneRoleChromaFactor(options.colorToneRecipe, options.role);
|
|
68
|
-
return resolveRoleScaleChroma({
|
|
69
|
-
seedChroma: options.seedChroma * factor,
|
|
70
|
-
step,
|
|
71
|
-
maxChroma: options.colorToneRecipe.maxChroma,
|
|
72
|
-
minMidChroma: options.colorToneRecipe.minMidChroma,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
function createScaleEntries(options) {
|
|
76
|
-
const seed = parseHexToOklch(options.seed);
|
|
77
|
-
if (options.role === 'neutral') {
|
|
78
|
-
const hue = typeof seed.h === 'number' ? seed.h : DEFAULT_NEUTRAL_HUE_DEGREES;
|
|
79
|
-
return createScaleFromRamp({
|
|
80
|
-
hue,
|
|
81
|
-
chroma: NEUTRAL_CHROMA,
|
|
82
|
-
lightnessByStep: NEUTRAL_LIGHTNESS_BY_STEP,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return createScaleFromRamp({
|
|
86
|
-
hue: seed.h,
|
|
87
|
-
chromaByStep: (step) => resolvePrimaryScaleChroma(seed.c, step),
|
|
88
|
-
lightnessByStep: PRIMARY_LIGHTNESS_BY_STEP,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
function createScaleColor(options, step) {
|
|
92
|
-
const lightness = options.lightnessByStep[step];
|
|
93
|
-
const chroma = typeof options.chromaByStep === 'function' ? options.chromaByStep(step) : (options.chroma ?? 0);
|
|
94
|
-
const clamped = clampOklchToGamut({
|
|
95
|
-
l: clampNumber(lightness, 0, 1),
|
|
96
|
-
c: clampNumber(chroma, 0, 1),
|
|
97
|
-
h: options.hue,
|
|
98
|
-
});
|
|
99
|
-
return formatOklchAsHex(clamped);
|
|
100
|
-
}
|
|
101
|
-
function createScaleFromRamp(options) {
|
|
102
|
-
return {
|
|
103
|
-
50: createScaleColor(options, 50),
|
|
104
|
-
100: createScaleColor(options, 100),
|
|
105
|
-
200: createScaleColor(options, 200),
|
|
106
|
-
300: createScaleColor(options, 300),
|
|
107
|
-
400: createScaleColor(options, 400),
|
|
108
|
-
500: createScaleColor(options, 500),
|
|
109
|
-
600: createScaleColor(options, 600),
|
|
110
|
-
700: createScaleColor(options, 700),
|
|
111
|
-
800: createScaleColor(options, 800),
|
|
112
|
-
900: createScaleColor(options, 900),
|
|
113
|
-
950: createScaleColor(options, 950),
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
export function createZoraColorScale(options) {
|
|
117
|
-
return createScaleEntries({
|
|
118
|
-
seed: options.seed,
|
|
119
|
-
role: options.role,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
export function createZoraPrimaryScale(seed) {
|
|
123
|
-
return createZoraColorScale({ seed, role: 'primary' });
|
|
124
|
-
}
|
|
125
|
-
export function createZoraNeutralScale(seed = '#94a3b8') {
|
|
126
|
-
return createZoraColorScale({ seed, role: 'neutral' });
|
|
127
|
-
}
|
|
128
|
-
export function createZoraHueScale(options) {
|
|
129
|
-
return createScaleFromRamp({
|
|
130
|
-
hue: options.hue,
|
|
131
|
-
chromaByStep: (step) => resolveHueScaleChroma(options, step),
|
|
132
|
-
lightnessByStep: PRIMARY_LIGHTNESS_BY_STEP,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=scales.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scales.js","sourceRoot":"","sources":["../../../src/internal/color/scales.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZoraHexColor } from '../../theme/types';\nimport type { ZoraColorToneRecipe } from './colorToneRecipes';\nimport { getZoraColorToneRoleChromaFactor } from './colorToneRecipes';\nimport { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';\nimport { type ZoraColorScale, type ZoraColorScaleStep } from './types';\n\nexport interface CreateZoraColorScaleOptions {\n seed: ZoraHexColor;\n role?: 'primary' | 'neutral';\n}\n\nexport type ZoraHueScaleRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';\n\nexport interface CreateZoraHueScaleOptions {\n hue: number;\n seedChroma: number;\n role: ZoraHueScaleRoleId;\n colorToneRecipe: ZoraColorToneRecipe;\n}\n\nconst PRIMARY_LIGHTNESS_BY_STEP: Record<ZoraColorScaleStep, number> = {\n 50: 0.97,\n 100: 0.93,\n 200: 0.86,\n 300: 0.78,\n 400: 0.68,\n 500: 0.58,\n 600: 0.5,\n 700: 0.42,\n 800: 0.34,\n 900: 0.27,\n 950: 0.2,\n};\n\nconst NEUTRAL_LIGHTNESS_BY_STEP: Record<ZoraColorScaleStep, number> = {\n 50: 0.98,\n 100: 0.95,\n 200: 0.89,\n 300: 0.8,\n 400: 0.68,\n 500: 0.55,\n 600: 0.44,\n 700: 0.34,\n 800: 0.25,\n 900: 0.18,\n 950: 0.12,\n};\n\nconst PRIMARY_CHROMA_MULTIPLIER_BY_STEP: Record<ZoraColorScaleStep, number> = {\n 50: 0.2,\n 100: 0.3,\n 200: 0.45,\n 300: 0.7,\n 400: 0.95,\n 500: 1,\n 600: 0.95,\n 700: 0.85,\n 800: 0.65,\n 900: 0.45,\n 950: 0.3,\n};\n\nconst MAX_PRIMARY_SCALE_CHROMA = 0.2;\nconst MIN_PRIMARY_SCALE_CHROMA = 0.04;\nconst NEUTRAL_CHROMA = 0.012;\nconst DEFAULT_NEUTRAL_HUE_DEGREES = 260;\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction resolvePrimaryScaleChroma(seedChroma: number, step: ZoraColorScaleStep): number {\n const cappedSeedChroma = clampNumber(seedChroma, 0, MAX_PRIMARY_SCALE_CHROMA);\n const multiplier = PRIMARY_CHROMA_MULTIPLIER_BY_STEP[step];\n const scaled = cappedSeedChroma * multiplier;\n\n const bounded = clampNumber(scaled, 0, MAX_PRIMARY_SCALE_CHROMA);\n const shouldEnforceMin = step >= 300 && step <= 700 && seedChroma >= MIN_PRIMARY_SCALE_CHROMA;\n\n return shouldEnforceMin ? Math.max(bounded, MIN_PRIMARY_SCALE_CHROMA) : bounded;\n}\n\nfunction resolveRoleScaleChroma(options: {\n seedChroma: number;\n step: ZoraColorScaleStep;\n maxChroma: number;\n minMidChroma: number;\n}): number {\n const cappedSeedChroma = clampNumber(options.seedChroma, 0, options.maxChroma);\n const multiplier = PRIMARY_CHROMA_MULTIPLIER_BY_STEP[options.step];\n const scaled = cappedSeedChroma * multiplier;\n const bounded = clampNumber(scaled, 0, options.maxChroma);\n const shouldEnforceMin =\n options.step >= 300 && options.step <= 700 && options.seedChroma >= options.minMidChroma;\n\n return shouldEnforceMin ? Math.max(bounded, options.minMidChroma) : bounded;\n}\n\nfunction resolveHueScaleChroma(\n options: CreateZoraHueScaleOptions,\n step: ZoraColorScaleStep,\n): number {\n const factor = getZoraColorToneRoleChromaFactor(options.colorToneRecipe, options.role);\n\n return resolveRoleScaleChroma({\n seedChroma: options.seedChroma * factor,\n step,\n maxChroma: options.colorToneRecipe.maxChroma,\n minMidChroma: options.colorToneRecipe.minMidChroma,\n });\n}\n\nfunction createScaleEntries(options: CreateZoraColorScaleOptions): ZoraColorScale {\n const seed = parseHexToOklch(options.seed);\n\n if (options.role === 'neutral') {\n const hue = typeof seed.h === 'number' ? seed.h : DEFAULT_NEUTRAL_HUE_DEGREES;\n\n return createScaleFromRamp({\n hue,\n chroma: NEUTRAL_CHROMA,\n lightnessByStep: NEUTRAL_LIGHTNESS_BY_STEP,\n });\n }\n\n return createScaleFromRamp({\n hue: seed.h,\n chromaByStep: (step) => resolvePrimaryScaleChroma(seed.c, step),\n lightnessByStep: PRIMARY_LIGHTNESS_BY_STEP,\n });\n}\n\ninterface CreateScaleFromRampOptions {\n hue: number;\n chroma?: number;\n chromaByStep?: (step: ZoraColorScaleStep) => number;\n lightnessByStep: Record<ZoraColorScaleStep, number>;\n}\n\nfunction createScaleColor(\n options: CreateScaleFromRampOptions,\n step: ZoraColorScaleStep,\n): ZoraHexColor {\n const lightness = options.lightnessByStep[step];\n const chroma =\n typeof options.chromaByStep === 'function' ? options.chromaByStep(step) : (options.chroma ?? 0);\n\n const clamped = clampOklchToGamut({\n l: clampNumber(lightness, 0, 1),\n c: clampNumber(chroma, 0, 1),\n h: options.hue,\n });\n\n return formatOklchAsHex(clamped);\n}\n\nfunction createScaleFromRamp(options: CreateScaleFromRampOptions): ZoraColorScale {\n return {\n 50: createScaleColor(options, 50),\n 100: createScaleColor(options, 100),\n 200: createScaleColor(options, 200),\n 300: createScaleColor(options, 300),\n 400: createScaleColor(options, 400),\n 500: createScaleColor(options, 500),\n 600: createScaleColor(options, 600),\n 700: createScaleColor(options, 700),\n 800: createScaleColor(options, 800),\n 900: createScaleColor(options, 900),\n 950: createScaleColor(options, 950),\n };\n}\n\nexport function createZoraColorScale(options: CreateZoraColorScaleOptions): ZoraColorScale {\n return createScaleEntries({\n seed: options.seed,\n role: options.role,\n });\n}\n\nexport function createZoraPrimaryScale(seed: ZoraHexColor): ZoraColorScale {\n return createZoraColorScale({ seed, role: 'primary' });\n}\n\nexport function createZoraNeutralScale(seed: ZoraHexColor = '#94a3b8'): ZoraColorScale {\n return createZoraColorScale({ seed, role: 'neutral' });\n}\n\nexport function createZoraHueScale(options: CreateZoraHueScaleOptions): ZoraColorScale {\n return createScaleFromRamp({\n hue: options.hue,\n chromaByStep: (step) => resolveHueScaleChroma(options, step),\n lightnessByStep: PRIMARY_LIGHTNESS_BY_STEP,\n });\n}\n"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { ZoraColorTone, ZoraHexColor, ZoraThemeMode } from '../../theme/types';
|
|
2
|
-
import { type ZoraComputedRoleColorScales } from './roleScales';
|
|
3
|
-
export interface ZoraSemanticColorTokens {
|
|
4
|
-
background: ZoraHexColor;
|
|
5
|
-
surface: ZoraHexColor;
|
|
6
|
-
surfaceRaised: ZoraHexColor;
|
|
7
|
-
surfaceTint: ZoraHexColor;
|
|
8
|
-
border: ZoraHexColor;
|
|
9
|
-
text: ZoraHexColor;
|
|
10
|
-
textMuted: ZoraHexColor;
|
|
11
|
-
primary: ZoraHexColor;
|
|
12
|
-
secondary: ZoraHexColor;
|
|
13
|
-
accent: ZoraHexColor;
|
|
14
|
-
highlight: ZoraHexColor;
|
|
15
|
-
onPrimary: ZoraHexColor;
|
|
16
|
-
onAccent: ZoraHexColor;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Selects the more readable of two candidate hex colors against a given background,
|
|
20
|
-
* using OKLCH lightness as a simple contrast proxy.
|
|
21
|
-
*/
|
|
22
|
-
export declare function getReadableTextColor(background: ZoraHexColor, candidates: readonly [ZoraHexColor, ZoraHexColor]): ZoraHexColor;
|
|
23
|
-
export declare function createZoraSemanticColorTokens(options: {
|
|
24
|
-
roleScales: ZoraComputedRoleColorScales;
|
|
25
|
-
mode: ZoraThemeMode;
|
|
26
|
-
colorTone: ZoraColorTone;
|
|
27
|
-
}): ZoraSemanticColorTokens;
|
|
28
|
-
//# sourceMappingURL=semanticTokens.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semanticTokens.d.ts","sourceRoot":"","sources":["../../../src/internal/color/semanticTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAyB,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEvF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,GAChD,YAAY,CAMd;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,UAAU,EAAE,2BAA2B,CAAC;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;CAC1B,GAAG,uBAAuB,CA0E1B"}
|