okchroma 0.1.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/LICENSE +21 -0
- package/README.md +135 -0
- package/dist-lib/index.cjs +3924 -0
- package/dist-lib/index.mjs +3901 -0
- package/dist-lib/types/engine/alphaPapers.d.ts +14 -0
- package/dist-lib/types/engine/archetypes.d.ts +13 -0
- package/dist-lib/types/engine/collision.d.ts +43 -0
- package/dist-lib/types/engine/colorEngine.d.ts +109 -0
- package/dist-lib/types/engine/colorMath.d.ts +181 -0
- package/dist-lib/types/engine/constraints.d.ts +18 -0
- package/dist-lib/types/engine/cssRender.d.ts +32 -0
- package/dist-lib/types/engine/darkChromaCurve.d.ts +2 -0
- package/dist-lib/types/engine/figmaRender.d.ts +34 -0
- package/dist-lib/types/engine/neutralCurve.d.ts +5 -0
- package/dist-lib/types/engine/p2.d.ts +12 -0
- package/dist-lib/types/engine/perceptualL.d.ts +11 -0
- package/dist-lib/types/engine/requirements/dtcg.d.ts +44 -0
- package/dist-lib/types/engine/requirements/producers.d.ts +160 -0
- package/dist-lib/types/engine/requirements/profiles.d.ts +7 -0
- package/dist-lib/types/engine/requirements/resolve.d.ts +46 -0
- package/dist-lib/types/engine/requirements/spec.d.ts +65 -0
- package/dist-lib/types/engine/resolve.d.ts +129 -0
- package/dist-lib/types/engine/signalShift.d.ts +8 -0
- package/dist-lib/types/engine/signals.d.ts +19 -0
- package/dist-lib/types/engine/stopTable.d.ts +76 -0
- package/dist-lib/types/engine/tokenDescriptions.d.ts +18 -0
- package/dist-lib/types/engine/tokenNames.d.ts +21 -0
- package/dist-lib/types/index.d.ts +11 -0
- package/package.json +68 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GeneratedScale } from './colorEngine';
|
|
2
|
+
export type AlphaMode = 'light' | 'dark';
|
|
3
|
+
export interface AlphaPaper {
|
|
4
|
+
stop: number;
|
|
5
|
+
name: string;
|
|
6
|
+
overlayHex: string;
|
|
7
|
+
alpha: number;
|
|
8
|
+
capped?: 'gamut' | 'ink-bars';
|
|
9
|
+
}
|
|
10
|
+
export declare const ALPHA_TOL_APP = 1;
|
|
11
|
+
export declare const ALPHA_LIFT_FRACTION = 0.5;
|
|
12
|
+
export declare const compositeHex: (fg: string, bg: string, a: number) => string;
|
|
13
|
+
export declare function alphaSep(familyScales: GeneratedScale[]): number;
|
|
14
|
+
export declare function alphaPapersFor(scale: GeneratedScale, neutral: GeneratedScale, mode: AlphaMode, sep: number): AlphaPaper[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Archetype = 'near-black' | 'dark' | 'rich' | 'vivid' | 'bright' | 'light';
|
|
2
|
+
export declare const ARCHETYPES: Array<{
|
|
3
|
+
name: Archetype;
|
|
4
|
+
min: number;
|
|
5
|
+
max: number;
|
|
6
|
+
medianL: number;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function classifyArchetype(L: number): Archetype;
|
|
9
|
+
export declare function medianLForArchetype(archetype: Archetype): number;
|
|
10
|
+
export declare function hoverL(L: number): number;
|
|
11
|
+
export declare function pressedL(L: number): number;
|
|
12
|
+
export declare function stateStepL(restL: number, _mode: 'light' | 'dark', k: 1 | 2): number;
|
|
13
|
+
export declare function stateFillL(restL: number, mode: 'light' | 'dark', k: 1 | 2): number;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { GeneratedScale, ColorStop } from './colorEngine';
|
|
2
|
+
import type { SignalDef } from './signals';
|
|
3
|
+
export declare const HUE_GATE_DEG = 30;
|
|
4
|
+
export declare const DELTA_E_THRESHOLD = 0.16;
|
|
5
|
+
export declare const DARK_DELTA_E_THRESHOLD = 0.1;
|
|
6
|
+
export { RED_GATE, redGateDist } from './colorMath';
|
|
7
|
+
export type Mode = 'light' | 'dark';
|
|
8
|
+
export interface CollisionCheck {
|
|
9
|
+
signal: SignalDef['name'];
|
|
10
|
+
mode: Mode;
|
|
11
|
+
dHue: number;
|
|
12
|
+
hueGate: boolean;
|
|
13
|
+
deltaE: number;
|
|
14
|
+
collides: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function stopDeltaE(s1: ColorStop, s2: ColorStop): number;
|
|
17
|
+
export declare function checkCollision(brand: GeneratedScale, signalScale: GeneratedScale, signalDef: SignalDef, mode: Mode): CollisionCheck;
|
|
18
|
+
export declare const HUE_COLLISION_WASH_DEG = 15;
|
|
19
|
+
export declare const HUE_COLLISION_MIN_V = 0.5;
|
|
20
|
+
export declare const SECONDARY_NOTE_MIN_V: number;
|
|
21
|
+
export interface HueCollisionCheck {
|
|
22
|
+
signal: SignalDef['name'];
|
|
23
|
+
dHueWash: {
|
|
24
|
+
light: number;
|
|
25
|
+
dark: number;
|
|
26
|
+
};
|
|
27
|
+
washDeltaE: {
|
|
28
|
+
light: number;
|
|
29
|
+
dark: number;
|
|
30
|
+
};
|
|
31
|
+
vividness: number;
|
|
32
|
+
collides: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function checkHueCollision(brand: GeneratedScale, signalScale: GeneratedScale, signalDef: SignalDef, opts?: {
|
|
35
|
+
minV?: number;
|
|
36
|
+
}): HueCollisionCheck;
|
|
37
|
+
export declare const YELLOW_SPLIT_H = 96;
|
|
38
|
+
export declare function warningVariant(brand: GeneratedScale, warningScale: GeneratedScale, warningDef: SignalDef): 'lemon' | 'macaroni' | null;
|
|
39
|
+
export interface BrandCollisionReport {
|
|
40
|
+
checks: CollisionCheck[];
|
|
41
|
+
collidesWith: SignalDef['name'][];
|
|
42
|
+
}
|
|
43
|
+
export declare function checkAllCollisions(brand: GeneratedScale, signalScales: Map<SignalDef['name'], GeneratedScale>): BrandCollisionReport;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { type Archetype } from './archetypes';
|
|
2
|
+
import { type DarkCtaKind } from './stopTable';
|
|
3
|
+
import { type NeutralLevel } from './neutralCurve';
|
|
4
|
+
export type { NeutralLevel } from './neutralCurve';
|
|
5
|
+
export { SUBTLE_SECONDARY_MULT, SUBTLE_SECONDARY_MULT_CANDIDATES } from './neutralCurve';
|
|
6
|
+
import { type ColorStop } from './colorMath';
|
|
7
|
+
export { goldSpineHue, torsionedHue, hexToOklch, RED_COOL_DEG, redCoolWeight, inRedBand, RED_PIVOT_H, redRepelShiftDeg, inRedRepelBand, } from './colorMath';
|
|
8
|
+
export type { ColorStop } from './colorMath';
|
|
9
|
+
import { type ContrastProfile } from './requirements/profiles';
|
|
10
|
+
export type { ContrastProfile } from './requirements/profiles';
|
|
11
|
+
export interface GeneratedScale {
|
|
12
|
+
name: string;
|
|
13
|
+
archetype: Archetype;
|
|
14
|
+
brandL: number;
|
|
15
|
+
brandC: number;
|
|
16
|
+
brandH: number;
|
|
17
|
+
onFillTextIsWhite: boolean;
|
|
18
|
+
onFillTextIsWhiteDark: boolean;
|
|
19
|
+
light: ColorStop[];
|
|
20
|
+
dark: ColorStop[];
|
|
21
|
+
cta: ColorStop;
|
|
22
|
+
ctaHover: ColorStop;
|
|
23
|
+
ctaPressed: ColorStop;
|
|
24
|
+
ctaDark: ColorStop;
|
|
25
|
+
ctaHoverDark: ColorStop;
|
|
26
|
+
ctaPressedDark: ColorStop;
|
|
27
|
+
ctaRepelled?: {
|
|
28
|
+
light: boolean;
|
|
29
|
+
dark: boolean;
|
|
30
|
+
};
|
|
31
|
+
identityHex?: string;
|
|
32
|
+
paper0?: ColorStop;
|
|
33
|
+
paper0Dark?: ColorStop;
|
|
34
|
+
ink0?: ColorStop;
|
|
35
|
+
ink0Dark?: ColorStop;
|
|
36
|
+
}
|
|
37
|
+
export interface GenerateOptions {
|
|
38
|
+
hueShiftDeg?: number;
|
|
39
|
+
chromaScale?: number;
|
|
40
|
+
subtleChromaScale?: number;
|
|
41
|
+
darkFillMinL?: number;
|
|
42
|
+
enforceOnFillContrast?: boolean;
|
|
43
|
+
coolRedDark?: boolean;
|
|
44
|
+
suppressRedCool?: boolean;
|
|
45
|
+
goldBoost?: boolean;
|
|
46
|
+
signalWarmDrift?: boolean;
|
|
47
|
+
style?: 'default' | 'deeper' | 'full-chroma';
|
|
48
|
+
chromaCurve?: (L: number, mode: 'light' | 'dark') => number;
|
|
49
|
+
darkChromaCurve?: (L: number, H: number, brandC: number, ctaC?: number) => number;
|
|
50
|
+
darkCtaC?: DarkCtaKind;
|
|
51
|
+
ctaSolve?: {
|
|
52
|
+
seed: {
|
|
53
|
+
L: number;
|
|
54
|
+
C: number;
|
|
55
|
+
H: number;
|
|
56
|
+
};
|
|
57
|
+
red: {
|
|
58
|
+
L: number;
|
|
59
|
+
C: number;
|
|
60
|
+
H: number;
|
|
61
|
+
};
|
|
62
|
+
redDark: {
|
|
63
|
+
L: number;
|
|
64
|
+
C: number;
|
|
65
|
+
H: number;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
heat?: number;
|
|
69
|
+
darkCtaFlatApp?: number;
|
|
70
|
+
contrastProfile?: ContrastProfile;
|
|
71
|
+
apcaClearance?: boolean;
|
|
72
|
+
apcaClearanceLc?: number;
|
|
73
|
+
deltaLightStops?: {
|
|
74
|
+
stop: number;
|
|
75
|
+
L: number;
|
|
76
|
+
C: number;
|
|
77
|
+
H: number;
|
|
78
|
+
}[];
|
|
79
|
+
deltaCarry?: boolean;
|
|
80
|
+
inkGround?: {
|
|
81
|
+
light: {
|
|
82
|
+
L: number;
|
|
83
|
+
C: number;
|
|
84
|
+
H: number;
|
|
85
|
+
};
|
|
86
|
+
dark: {
|
|
87
|
+
L: number;
|
|
88
|
+
C: number;
|
|
89
|
+
H: number;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
deltaHKPlace?: boolean;
|
|
93
|
+
deltaChromaEq?: boolean;
|
|
94
|
+
deltaLiftFloor?: boolean;
|
|
95
|
+
}
|
|
96
|
+
export declare function generateScale(hex: string, scaleName: string, forcedArchetype?: Archetype, opts?: GenerateOptions): GeneratedScale;
|
|
97
|
+
export type NeutralSource = 'secondary' | 'custom';
|
|
98
|
+
export declare function neutralTintHue(primaryH: number, source?: NeutralSource, secondaryH?: number, customHex?: string | null): number;
|
|
99
|
+
export declare function generateNeutralScale(brandH: number, level?: NeutralLevel, contrastProfile?: ContrastProfile): GeneratedScale;
|
|
100
|
+
export declare function generateSubtleSecondary(hex: string, opts?: {
|
|
101
|
+
contrastProfile?: ContrastProfile;
|
|
102
|
+
mult?: number;
|
|
103
|
+
pastelK?: number;
|
|
104
|
+
curve?: (L: number, mode: 'light' | 'dark') => number;
|
|
105
|
+
ctaL?: {
|
|
106
|
+
light: number;
|
|
107
|
+
dark: number;
|
|
108
|
+
};
|
|
109
|
+
}): GeneratedScale;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { type Gamut } from './constraints';
|
|
2
|
+
export declare function goldSpineHue(L: number): number;
|
|
3
|
+
export declare function torsionedHue(brandH: number, stopL: number, anchorL: number, offPathG: number): number;
|
|
4
|
+
export declare const SPINE_OFFPATH_SIGMA = 20;
|
|
5
|
+
export declare const sigmoid: (x: number) => number;
|
|
6
|
+
export declare const gauss: (x: number, sigma: number) => number;
|
|
7
|
+
export declare function hueDelta(h: number, center: number): number;
|
|
8
|
+
export declare function oklabDist(a: {
|
|
9
|
+
L: number;
|
|
10
|
+
C: number;
|
|
11
|
+
H: number;
|
|
12
|
+
}, b: {
|
|
13
|
+
L: number;
|
|
14
|
+
C: number;
|
|
15
|
+
H: number;
|
|
16
|
+
}): number;
|
|
17
|
+
export declare const RED_GATE: {
|
|
18
|
+
readonly wDark: 0.65;
|
|
19
|
+
readonly wLight: 1.6;
|
|
20
|
+
readonly wDust: 1.4;
|
|
21
|
+
readonly wGoldArc: 1.6;
|
|
22
|
+
readonly G: 0.09;
|
|
23
|
+
readonly releaseMargin: 0.005;
|
|
24
|
+
};
|
|
25
|
+
export declare function redGateDist(c: {
|
|
26
|
+
L: number;
|
|
27
|
+
C: number;
|
|
28
|
+
H: number;
|
|
29
|
+
}, red: {
|
|
30
|
+
L: number;
|
|
31
|
+
C: number;
|
|
32
|
+
H: number;
|
|
33
|
+
}): number;
|
|
34
|
+
export declare const RED_KEEP_BOX: {
|
|
35
|
+
readonly hLo: 20;
|
|
36
|
+
readonly hHi: 44;
|
|
37
|
+
readonly cMin: 0.18;
|
|
38
|
+
readonly lLo: 0.5;
|
|
39
|
+
readonly lHi: 0.62;
|
|
40
|
+
};
|
|
41
|
+
export declare function inRedKeepBox(L: number, C: number, H: number): boolean;
|
|
42
|
+
export declare const RED_VIVID_ARC: {
|
|
43
|
+
readonly hLo: 5;
|
|
44
|
+
readonly hHi: 50;
|
|
45
|
+
readonly vividMin: 0.85;
|
|
46
|
+
readonly lLo: 0.55;
|
|
47
|
+
readonly lHi: 0.75;
|
|
48
|
+
};
|
|
49
|
+
export declare function inRedVividArc(L: number, C: number, H: number): boolean;
|
|
50
|
+
export declare const RED_SOLVE: {
|
|
51
|
+
readonly wDark: 0.6;
|
|
52
|
+
readonly ring: 0.02;
|
|
53
|
+
readonly magentaDh: -14;
|
|
54
|
+
readonly magentaMinL: 0.53;
|
|
55
|
+
readonly magentaUpRatio: 2.5;
|
|
56
|
+
readonly vividMin: 0.85;
|
|
57
|
+
readonly goldDh: 1.5;
|
|
58
|
+
readonly vividMinL: 0.53;
|
|
59
|
+
readonly trueRedBrightCut: 0.67;
|
|
60
|
+
readonly brickHLo: 20;
|
|
61
|
+
readonly brickHHi: 50;
|
|
62
|
+
readonly brickLLo: 0.36;
|
|
63
|
+
readonly brickLHi: 0.52;
|
|
64
|
+
readonly brickVividMin: 0.55;
|
|
65
|
+
readonly brickCool: -4;
|
|
66
|
+
readonly brickCoolGold: -3;
|
|
67
|
+
readonly brickDesat: 0.85;
|
|
68
|
+
readonly brickExtraDeep: 0.02;
|
|
69
|
+
readonly coreL: readonly [0.49, 0.47, 0.45];
|
|
70
|
+
readonly edgeL: readonly [0.65, 0.68, 0.71, 0.75];
|
|
71
|
+
readonly redHuesWarmBrand: readonly [28, 24, 33.3, 38];
|
|
72
|
+
readonly redHuesMagentaBrand: readonly [33.3, 38, 28];
|
|
73
|
+
readonly redHueMagentaDh: -15;
|
|
74
|
+
};
|
|
75
|
+
export declare function redSolveDist(c: {
|
|
76
|
+
L: number;
|
|
77
|
+
C: number;
|
|
78
|
+
H: number;
|
|
79
|
+
}, red: {
|
|
80
|
+
L: number;
|
|
81
|
+
C: number;
|
|
82
|
+
H: number;
|
|
83
|
+
}): number;
|
|
84
|
+
export declare function inBrickBand(L: number, C: number, H: number): boolean;
|
|
85
|
+
export declare const RED_SPLIT: {
|
|
86
|
+
readonly redDLBase: -0.1;
|
|
87
|
+
readonly redDLBump: -0.04;
|
|
88
|
+
readonly redDLSigma: 7;
|
|
89
|
+
readonly brandDLMax: 0.08;
|
|
90
|
+
readonly brandSigmaMagenta: 21.5;
|
|
91
|
+
readonly brandSigmaGold: 6;
|
|
92
|
+
readonly coolDeg: -5;
|
|
93
|
+
readonly coolKneeDh: 9;
|
|
94
|
+
readonly coolSoftness: 2.5;
|
|
95
|
+
};
|
|
96
|
+
export declare function vividSplit(dh: number): {
|
|
97
|
+
redDL: number;
|
|
98
|
+
brandDL: number;
|
|
99
|
+
redDH: number;
|
|
100
|
+
};
|
|
101
|
+
export declare const RED_DEEP_PIVOT = 0.5;
|
|
102
|
+
export declare const RED_VARIANT_L_MIN = 0.45;
|
|
103
|
+
export declare const RED_TORSION_CENTER_H = 35.5;
|
|
104
|
+
export declare const RED_TORSION_SOFTNESS = 3.5;
|
|
105
|
+
export declare const RED_BAND_LO_H = 12;
|
|
106
|
+
export declare const RED_BAND_LO_SOFTNESS = 2;
|
|
107
|
+
export declare const VIVID_C = 0.13;
|
|
108
|
+
export declare const LIGHT_DRIFT_COOL_HI = 88;
|
|
109
|
+
export declare const LIGHT_DRIFT_COOL_RANGE = 16;
|
|
110
|
+
export declare const BRAND_BELL_H = 95;
|
|
111
|
+
export declare const BRAND_BELL_SIGMA = 55;
|
|
112
|
+
export declare const BRAND_BELL_AMOUNT = 0.6;
|
|
113
|
+
export declare const BRAND_BELL_L_HI = 0.95;
|
|
114
|
+
export declare const BRAND_BELL_L_LO = 0.76;
|
|
115
|
+
export declare const BRAND_BELL_RED_H = 33.3;
|
|
116
|
+
export declare const BRAND_BELL_RED_SIGMA = 30;
|
|
117
|
+
export declare const HUE_NOISE_C = 0.008;
|
|
118
|
+
export declare const MUTED_BLEND_DENOM = 0.55;
|
|
119
|
+
export declare const CREAM_UPPER_H = 105;
|
|
120
|
+
export declare const CREAM_UPPER_SOFTNESS = 5;
|
|
121
|
+
export declare const DEEPER_BAND_H_LO = 55;
|
|
122
|
+
export declare const DEEPER_BAND_H_HI = 100;
|
|
123
|
+
export declare const DEEPER_BAND_H_SOFT = 4;
|
|
124
|
+
export declare const DEEPER_BAND_U_LO = 0.1;
|
|
125
|
+
export declare const DEEPER_BAND_U_HI = 0.7;
|
|
126
|
+
export declare const DEEPER_BAND_U_SOFT = 0.015;
|
|
127
|
+
export declare const DEEPER_STRENGTH = 0.85;
|
|
128
|
+
export declare const RED_COOL_DEG = 10.8;
|
|
129
|
+
export declare function redCoolWeight(brandH: number): number;
|
|
130
|
+
export declare function inRedBand(h: number): boolean;
|
|
131
|
+
export declare const RED_PIVOT_H = 33.3;
|
|
132
|
+
export declare const RED_WARM_EXIT_H = 44;
|
|
133
|
+
export declare const RED_WARM_EXIT_SOFTNESS = 3.5;
|
|
134
|
+
export declare const RED_REPEL_HI_H = 41.5;
|
|
135
|
+
export declare function inRedRepelBand(h: number): boolean;
|
|
136
|
+
export declare const RED_EXIT_FLOOR_H = 30.8;
|
|
137
|
+
export declare const RED_EXIT_FLOOR_SOFTNESS = 0.9;
|
|
138
|
+
export declare const RED_WARM_EXIT_FLOOR_H = 35.3;
|
|
139
|
+
export declare const RED_WARM_EXIT_FLOOR_SOFTNESS = 0.8;
|
|
140
|
+
export declare const RED_PIVOT_EXIT_DEG = 14;
|
|
141
|
+
export declare function redRepelShiftDeg(brandH: number): number;
|
|
142
|
+
export declare function maxChromaAt(L: number, H: number, gamut?: Gamut): number;
|
|
143
|
+
export declare function medianGamutCAt(L: number, gamut?: Gamut): number;
|
|
144
|
+
export declare function hexToOklch(hex: string): {
|
|
145
|
+
L: number;
|
|
146
|
+
C: number;
|
|
147
|
+
H: number;
|
|
148
|
+
};
|
|
149
|
+
export declare function oklchToSrgbUnclamped(L: number, C: number, H: number): {
|
|
150
|
+
r: number;
|
|
151
|
+
g: number;
|
|
152
|
+
b: number;
|
|
153
|
+
};
|
|
154
|
+
export declare function srgbEmitChannels(s: {
|
|
155
|
+
L: number;
|
|
156
|
+
C: number;
|
|
157
|
+
H: number;
|
|
158
|
+
}): {
|
|
159
|
+
r: number;
|
|
160
|
+
g: number;
|
|
161
|
+
b: number;
|
|
162
|
+
};
|
|
163
|
+
export declare const masterEmitChannels: (s: {
|
|
164
|
+
L: number;
|
|
165
|
+
C: number;
|
|
166
|
+
H: number;
|
|
167
|
+
}) => [number, number, number];
|
|
168
|
+
export interface ColorStop {
|
|
169
|
+
stop: number;
|
|
170
|
+
L: number;
|
|
171
|
+
C: number;
|
|
172
|
+
H: number;
|
|
173
|
+
r: number;
|
|
174
|
+
g: number;
|
|
175
|
+
b: number;
|
|
176
|
+
}
|
|
177
|
+
export declare function applyChromaFloor(C: number, multiplier: number, floorBase: number, floorStrength: number): number;
|
|
178
|
+
export declare const DARK_FLOOR_FULL_C = 0.022;
|
|
179
|
+
export declare const DARK_FLOOR_MUTED_MAX_C = 0.04;
|
|
180
|
+
export declare function makeStop(stop: number, L: number, C: number, H: number, gamut?: Gamut): ColorStop;
|
|
181
|
+
export declare function onTextIsWhite(Y: number, L: number, C: number, H: number, enforce: boolean, ratioFloor?: number): boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type Gamut = 'srgb' | 'p3';
|
|
2
|
+
export declare const MASTER_GAMUT: Gamut;
|
|
3
|
+
export declare function oklchToLinearRgb(L: number, C: number, H: number): [number, number, number];
|
|
4
|
+
export declare function oklchToXyz(L: number, C: number, H: number): [number, number, number];
|
|
5
|
+
export declare function oklchToLinearP3(L: number, C: number, H: number): [number, number, number];
|
|
6
|
+
export declare const linearChannels: (L: number, C: number, H: number, gamut: Gamut) => [number, number, number];
|
|
7
|
+
export declare function encodedChannels(L: number, C: number, H: number, gamut?: Gamut): [number, number, number];
|
|
8
|
+
export declare function wcagY(L: number, C: number, H: number, gamut?: Gamut): number;
|
|
9
|
+
export declare function contrastRatio(Y1: number, Y2: number): number;
|
|
10
|
+
export declare function legalRatio(L: number, C: number, H: number, otherY: number): number;
|
|
11
|
+
export declare function shippedY(L: number, C: number, H: number): number;
|
|
12
|
+
export declare function findLForY(targetY: number, C: number, H: number, gamut?: Gamut): number;
|
|
13
|
+
export declare function findLForContrast(startL: number, C: number, H: number, bgY: number, targetContrast: number): number;
|
|
14
|
+
export declare function findLForContrastUp(startL: number, C: number, H: number, bgY: number, targetContrast: number): number;
|
|
15
|
+
export declare function apcaY(r: number, g: number, b: number, gamut?: Gamut): number;
|
|
16
|
+
export declare function apcaLc(txtY: number, bgY: number): number;
|
|
17
|
+
export declare function findMaxLForContrast(C: number, H: number, bgY: number, targetContrast: number): number;
|
|
18
|
+
export declare function clampChromaToGamut(L: number, C: number, H: number, gamut?: Gamut): number;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type GeneratedScale, type ColorStop, type NeutralLevel, type ContrastProfile } from './colorEngine';
|
|
2
|
+
import { type ResolvedBrand, type SecondaryStyle } from './resolve';
|
|
3
|
+
export declare function toHex(r: number, g: number, b: number): string;
|
|
4
|
+
export declare const stopHex: (s: ColorStop) => string;
|
|
5
|
+
export declare const P3_SUPPORTS = "@supports (color: color(display-p3 1 1 1))";
|
|
6
|
+
export declare const P3_MEDIA = "@media (color-gamut: p3)";
|
|
7
|
+
export declare function stopsToVars(stops: ColorStop[], prefix: string): string;
|
|
8
|
+
export declare const CTA_BORDER_LC_FLOOR = 15;
|
|
9
|
+
export declare function pageStopFor(neutral: GeneratedScale, mode: 'light' | 'dark'): ColorStop | undefined;
|
|
10
|
+
export declare const OFFSET_ALPHAS: {
|
|
11
|
+
readonly 6: 0.06;
|
|
12
|
+
readonly 8: 0.08;
|
|
13
|
+
readonly 16: 0.16;
|
|
14
|
+
};
|
|
15
|
+
export type OffsetRung = keyof typeof OFFSET_ALPHAS;
|
|
16
|
+
export declare const ctaBorderRung: (prefix: string) => OffsetRung;
|
|
17
|
+
export declare const offsetLeafName: (rung: OffsetRung) => string;
|
|
18
|
+
export declare const offsetVarName: (rung: OffsetRung) => string;
|
|
19
|
+
export declare const offsetTokenPath: (rung: OffsetRung) => string;
|
|
20
|
+
export declare const TRANSPARENT_VAR = "--alpha-transparent";
|
|
21
|
+
export declare const offsetRgba: (rung: OffsetRung, mode: "light" | "dark") => string;
|
|
22
|
+
export declare const alphaRootVars: (mode: "light" | "dark") => string[];
|
|
23
|
+
export declare function ctaPageLc(s: GeneratedScale, mode: 'light' | 'dark', page: ColorStop): number;
|
|
24
|
+
export declare function ctaNeedsBorder(s: GeneratedScale, mode: 'light' | 'dark', page: ColorStop | undefined): boolean;
|
|
25
|
+
export declare function brandKindBody(prefix: string, s: GeneratedScale, mode: 'light' | 'dark', page: ColorStop | undefined): string[];
|
|
26
|
+
export declare function brandKindP3Body(prefix: string, s: GeneratedScale, mode: 'light' | 'dark'): string[];
|
|
27
|
+
export declare function neutralCss(selector: string, brandH: number, level?: NeutralLevel, contrastProfile?: ContrastProfile, ctaBorder?: boolean): string;
|
|
28
|
+
export declare function signalsCss(contrastProfile?: ContrastProfile): string;
|
|
29
|
+
export declare function annotationNote(r: ResolvedBrand, opts?: {
|
|
30
|
+
archetypeOverride?: string;
|
|
31
|
+
}): string;
|
|
32
|
+
export declare function brandCss(slug: string, displayName: string, r: ResolvedBrand, secondary?: GeneratedScale | null, noteSuffix?: string, neutralLevel?: NeutralLevel, contrastProfile?: ContrastProfile, secondaryStyle?: SecondaryStyle, ctaEscape?: boolean, linkHex?: string | null, ctaBorder?: boolean, neutralH?: number): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type GeneratedScale, type NeutralLevel, type ContrastProfile } from './colorEngine';
|
|
2
|
+
import { type ResolvedBrand, type SecondaryStyle } from './resolve';
|
|
3
|
+
export interface FigmaColorToken {
|
|
4
|
+
$type: 'color';
|
|
5
|
+
$value: {
|
|
6
|
+
colorSpace: 'srgb';
|
|
7
|
+
components: [number, number, number];
|
|
8
|
+
alpha: number;
|
|
9
|
+
hex: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export type FigmaGroup = {
|
|
13
|
+
[key: string]: FigmaColorToken | FigmaGroup;
|
|
14
|
+
};
|
|
15
|
+
export declare function groupEntries(g: FigmaGroup): Array<[string, FigmaColorToken | FigmaGroup]>;
|
|
16
|
+
export declare function putLeaf(g: FigmaGroup, flat: string, tok: FigmaColorToken): void;
|
|
17
|
+
export interface ThemeInput {
|
|
18
|
+
secondary?: GeneratedScale | null;
|
|
19
|
+
secondaryStyle?: SecondaryStyle;
|
|
20
|
+
neutralLevel?: NeutralLevel;
|
|
21
|
+
neutralH?: number;
|
|
22
|
+
signals: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
scale: GeneratedScale;
|
|
25
|
+
}>;
|
|
26
|
+
contrastProfile?: ContrastProfile;
|
|
27
|
+
ctaEscape?: boolean;
|
|
28
|
+
linkHex?: string | null;
|
|
29
|
+
ctaBorder?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function themeToFigma(r: ResolvedBrand, input: ThemeInput): {
|
|
32
|
+
light: FigmaGroup;
|
|
33
|
+
dark: FigmaGroup;
|
|
34
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type NeutralLevel = 'pure' | 'default' | 'medium' | 'branded';
|
|
2
|
+
export declare function neutralChromaCurve(brandH: number, level?: NeutralLevel): (L: number, mode: 'light' | 'dark') => number;
|
|
3
|
+
export declare const SUBTLE_SECONDARY_MULT = 4.5;
|
|
4
|
+
export declare const SUBTLE_SECONDARY_MULT_CANDIDATES: number[];
|
|
5
|
+
export declare function subtleSecondaryChromaCurve(brandH: number, mult?: number): (L: number, mode: 'light' | 'dark') => number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const P2_D = 0.12;
|
|
2
|
+
export declare const P2_D_UP = 0.11;
|
|
3
|
+
export declare const P2_D_FALLBACK = 0.115;
|
|
4
|
+
export declare function p2Diff(a: {
|
|
5
|
+
L: number;
|
|
6
|
+
C: number;
|
|
7
|
+
H: number;
|
|
8
|
+
}, b: {
|
|
9
|
+
L: number;
|
|
10
|
+
C: number;
|
|
11
|
+
H: number;
|
|
12
|
+
}): number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Gamut } from './constraints';
|
|
2
|
+
export declare const lstarFromY: (Y: number) => number;
|
|
3
|
+
export declare function apparentL(L: number, C: number, H: number, gamut?: Gamut): number;
|
|
4
|
+
export declare const grayApparentL: (L: number, gamut?: Gamut) => number;
|
|
5
|
+
export declare function solveLForApparent(target: number, C: number, H: number, gamut?: Gamut): number;
|
|
6
|
+
export declare function solveCForApparent(L: number, H: number, target: number, gamut?: Gamut): number;
|
|
7
|
+
export declare const KEEP_LIGHT = 1;
|
|
8
|
+
export declare const KEEP_DARK = 1;
|
|
9
|
+
export declare function meanBoost(rootL: number, C: number, gamut?: Gamut): number;
|
|
10
|
+
export declare function perceptualRungL(rootL: number, C: number, H: number, keep?: number, gamut?: Gamut, targetC?: number): number;
|
|
11
|
+
export declare function perceptualDarkC(L: number, H: number, nativeC: number, keep?: number, gamut?: Gamut): number;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { StopReq, RoleReq, ModeSpec } from './spec';
|
|
2
|
+
import { type ResolvedRamp } from './resolve';
|
|
3
|
+
export declare const EXT_KEY = "org.okchroma.requirement";
|
|
4
|
+
export declare const RESOLVER_ID = "okchroma-reqtoken@2";
|
|
5
|
+
export type DtcgColorValue = {
|
|
6
|
+
colorSpace: 'srgb';
|
|
7
|
+
components: [number, number, number];
|
|
8
|
+
alpha: 1;
|
|
9
|
+
hex: string;
|
|
10
|
+
};
|
|
11
|
+
type ExtCommon = {
|
|
12
|
+
resolver: string;
|
|
13
|
+
seed: string;
|
|
14
|
+
mode: 'light' | 'dark';
|
|
15
|
+
};
|
|
16
|
+
export type DtcgRequirementToken = {
|
|
17
|
+
$type: 'color';
|
|
18
|
+
$value: DtcgColorValue;
|
|
19
|
+
$extensions: {
|
|
20
|
+
[EXT_KEY]: ExtCommon & (StopReq | RoleReq);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type DtcgSeedToken = {
|
|
24
|
+
$type: 'color';
|
|
25
|
+
$value: DtcgColorValue;
|
|
26
|
+
};
|
|
27
|
+
export type DtcgRampGroup = {
|
|
28
|
+
seed: DtcgSeedToken;
|
|
29
|
+
$extensions?: {
|
|
30
|
+
[EXT_KEY]: {
|
|
31
|
+
resolver: string;
|
|
32
|
+
ons: ModeSpec['ons'];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
};
|
|
37
|
+
export declare function emitDtcgRamp(hex: string, mode: 'light' | 'dark', groupName: string, spec?: ModeSpec): DtcgRampGroup;
|
|
38
|
+
export declare function parseToken(token: DtcgRequirementToken): {
|
|
39
|
+
req: StopReq | RoleReq;
|
|
40
|
+
seedRef: string;
|
|
41
|
+
mode: 'light' | 'dark';
|
|
42
|
+
};
|
|
43
|
+
export declare function resolveDtcgRamp(group: DtcgRampGroup): ResolvedRamp;
|
|
44
|
+
export {};
|