@oxyhq/bloom 0.81.0 → 0.83.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/lib/commonjs/theme/color-policy.js +77 -11
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/commonjs/theme/color-presets.js +85 -25
- package/lib/commonjs/theme/color-presets.js.map +1 -1
- package/lib/commonjs/theme/index.js +12 -0
- package/lib/commonjs/theme/index.js.map +1 -1
- package/lib/module/theme/color-policy.js +77 -11
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/module/theme/color-presets.js +84 -24
- package/lib/module/theme/color-presets.js.map +1 -1
- package/lib/module/theme/index.js +1 -1
- package/lib/module/theme/index.js.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-presets.d.ts +26 -3
- package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/index.d.ts +2 -2
- package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-presets.d.ts +26 -3
- package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/module/theme/index.d.ts +2 -2
- package/lib/typescript/module/theme/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/BloomThemeProvider.test.tsx +1 -1
- package/src/__tests__/theme.test.ts +2 -2
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +1160 -680
- package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +712 -432
- package/src/theme/__tests__/color-preset-gates.test.ts +50 -0
- package/src/theme/__tests__/policy-legibility.test.ts +46 -12
- package/src/theme/color-policy.ts +82 -13
- package/src/theme/color-presets.ts +80 -22
- package/src/theme/index.ts +3 -1
|
@@ -86,10 +86,31 @@ const foregroundFor = argb => contrastOf(argb, true) >= AA ? 'rgb(255 255 255)'
|
|
|
86
86
|
const noLegibleForeground = argb => contrastOf(argb, true) < AA && contrastOf(argb, false) < AA;
|
|
87
87
|
|
|
88
88
|
/** The tone a white-label fill sits at in LIGHT mode. */
|
|
89
|
-
const
|
|
89
|
+
const FILL_TONE_FLOOR = 45;
|
|
90
90
|
|
|
91
91
|
/** The tone a white-label fill sits at in DARK: the ceiling white text allows. */
|
|
92
|
-
const
|
|
92
|
+
const FILL_TONE_SEARCH_CEILING = 56;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* How much DEEPER the same brand sits on a light page than on a dark one.
|
|
96
|
+
*
|
|
97
|
+
* Not decoration: a colour on a near-white page has nothing to read against, so
|
|
98
|
+
* the mode difference is what makes a theme a theme rather than one palette shown
|
|
99
|
+
* twice. Dropping it is a regression that looks like a simplification — light and
|
|
100
|
+
* dark collapse onto the same fill for every seed that is not already bright, and
|
|
101
|
+
* the two modes stop being distinguishable at all.
|
|
102
|
+
*/
|
|
103
|
+
const LIGHT_DEPTH_STEP = 5;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* How deep a light-mode fill may go. Deliberately BELOW the search's lower bound,
|
|
107
|
+
* which those two used to share — and sharing them silently voided the depth step
|
|
108
|
+
* for any seed whose dark fill already sits at that bound. A high-chroma seed is
|
|
109
|
+
* exactly that case: pink loses its white label above tone 45, so dark cannot rise
|
|
110
|
+
* to make room and light must descend instead, or the two modes render the
|
|
111
|
+
* identical fill.
|
|
112
|
+
*/
|
|
113
|
+
const LIGHT_FILL_FLOOR = 40;
|
|
93
114
|
|
|
94
115
|
/** How far a fill may be dragged from its natural tone before the colour is lost. */
|
|
95
116
|
const TONE_BUDGET = 25;
|
|
@@ -230,6 +251,47 @@ function vividHueNear(hue) {
|
|
|
230
251
|
return bestChroma - baseChroma >= VIVID_SNAP_MIN_GAIN ? bestHue : hue;
|
|
231
252
|
}
|
|
232
253
|
|
|
254
|
+
/**
|
|
255
|
+
* The most vivid tone a palette reaches while a WHITE label still clears AA on
|
|
256
|
+
* it — searched per HUE instead of assumed.
|
|
257
|
+
*
|
|
258
|
+
* A single tone for every hue leaves chroma on the table for some and takes it
|
|
259
|
+
* from others, because the sRGB gamut is not a cylinder: from tone 45 upward an
|
|
260
|
+
* orange keeps gaining chroma until white runs out at ~49.5 (59 -> 84), while a
|
|
261
|
+
* violet has already passed its peak and LOSES chroma over the same interval
|
|
262
|
+
* (91 -> 86). The old flat 45 spent none of the contrast headroom it had — every
|
|
263
|
+
* preset sat at 5.38 when 4.5 was the requirement — and orange paid for that
|
|
264
|
+
* twice, since its hue is also one of the gamut's narrow ones.
|
|
265
|
+
*
|
|
266
|
+
* The floor is what keeps this from trading lightness for chroma: a hue that
|
|
267
|
+
* peaks far below 45 stays at 45 rather than descending into a near-black slab
|
|
268
|
+
* that happens to be saturated. So the search can only ever improve a fill or
|
|
269
|
+
* leave it exactly where it was.
|
|
270
|
+
*
|
|
271
|
+
* Contrast is measured on the QUANTIZED colour, not the engine's continuous
|
|
272
|
+
* tone-ratio: an earlier iteration chose tones by the latter and shipped 135
|
|
273
|
+
* pairs at a measured 4.49.
|
|
274
|
+
*/
|
|
275
|
+
function vividLegibleTone(palette) {
|
|
276
|
+
let bestTone = FILL_TONE_FLOOR;
|
|
277
|
+
let bestChroma = -1;
|
|
278
|
+
for (let tone = FILL_TONE_FLOOR; tone <= FILL_TONE_SEARCH_CEILING; tone += 0.5) {
|
|
279
|
+
const argb = palette.tone(tone);
|
|
280
|
+
if (contrastOf(argb, true) < AA) continue;
|
|
281
|
+
const chroma = _hct.Hct.fromInt(argb).chroma;
|
|
282
|
+
// A tie keeps the DEEPEST tone. Ties are common rather than exotic — any seed
|
|
283
|
+
// whose chroma sits below the gamut ceiling across this whole range has a flat
|
|
284
|
+
// curve here — and breaking them toward the lightest end instead changes no
|
|
285
|
+
// preset's output, because the light-mode floor below already supplies the
|
|
286
|
+
// separation that would have bought. Mutation-checked, not assumed.
|
|
287
|
+
if (chroma > bestChroma) {
|
|
288
|
+
bestChroma = chroma;
|
|
289
|
+
bestTone = tone;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return bestTone;
|
|
293
|
+
}
|
|
294
|
+
|
|
233
295
|
/**
|
|
234
296
|
* The tone a BRAND fill sits at.
|
|
235
297
|
*
|
|
@@ -248,11 +310,11 @@ function whiteLabelTone(palette, seedTone, isDark) {
|
|
|
248
310
|
// smear there, indistinguishable from the same colour in dark, which is not a
|
|
249
311
|
// theme at all. Coming down is what makes faircoin a deep green in light and a
|
|
250
312
|
// bright lime in dark.
|
|
251
|
-
if (!isDark) return
|
|
313
|
+
if (!isDark) return Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP);
|
|
252
314
|
// DARK: the budget applies. Most brands come down to where white fits, but a
|
|
253
315
|
// seed that is already light cannot without ceasing to be itself, so it keeps
|
|
254
316
|
// its own tone and takes a black label. That is the eleven-and-two pattern.
|
|
255
|
-
const candidate = Math.max(
|
|
317
|
+
const candidate = Math.max(vividLegibleTone(palette), seedTone - TONE_BUDGET);
|
|
256
318
|
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : Math.max(seedTone, DARK_SEED_FLOOR);
|
|
257
319
|
}
|
|
258
320
|
|
|
@@ -263,10 +325,10 @@ function whiteLabelTone(palette, seedTone, isDark) {
|
|
|
263
325
|
* peaks dark comes down and carries white.
|
|
264
326
|
*/
|
|
265
327
|
function accentTone(hue, isDark) {
|
|
266
|
-
if (!isDark) return LIGHT_FILL_TONE;
|
|
267
|
-
const peak = Math.max(peakTone(hue), DARK_ACCENT_FLOOR);
|
|
268
328
|
const palette = _tonalPalette.TonalPalette.fromHueAndChroma(hue, ACCENT_CHROMA);
|
|
269
|
-
|
|
329
|
+
if (!isDark) return Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP);
|
|
330
|
+
const peak = Math.max(peakTone(hue), DARK_ACCENT_FLOOR);
|
|
331
|
+
const candidate = Math.max(vividLegibleTone(palette), peak - TONE_BUDGET);
|
|
270
332
|
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : peak;
|
|
271
333
|
}
|
|
272
334
|
|
|
@@ -333,13 +395,17 @@ function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
333
395
|
// dark fill sit at the seed's own tone instead makes it brighter, but every one
|
|
334
396
|
// of those labels turns black, which costs more than the brightness buys.
|
|
335
397
|
const monochrome = seed.chroma <= MONOCHROME_MAX_CHROMA;
|
|
336
|
-
//
|
|
337
|
-
//
|
|
398
|
+
// BOTH modes key off the seed itself, so the fill carries the brand's SATURATION
|
|
399
|
+
// as well as its hue. Light used to force the hue to maximum chroma, which reads
|
|
400
|
+
// as "the seed only chose a hue" — and that silently renames a colour: a muted
|
|
401
|
+
// blue-grey seed resolved to a vivid cyan, and a brown seed to an orange, since
|
|
402
|
+
// both differ from a saturated neighbour by chroma alone. A deliberately soft
|
|
403
|
+
// brand now stays soft instead of being argued with.
|
|
338
404
|
// A monochrome seed has no chroma to preserve either way, and its fill goes to
|
|
339
405
|
// the far end of the scale rather than the white-label ceiling: a mid-grey
|
|
340
406
|
// button reads as disabled, where near-black on white reads as the primary
|
|
341
407
|
// action.
|
|
342
|
-
const brandPalette = monochrome ? _tonalPalette.TonalPalette.fromHueAndChroma(0, 0) :
|
|
408
|
+
const brandPalette = monochrome ? _tonalPalette.TonalPalette.fromHueAndChroma(0, 0) : _tonalPalette.TonalPalette.fromInt((0, _index.argbFromHex)(seedHex));
|
|
343
409
|
const primary = fillPair(brandPalette, monochrome ? isDark ? MONOCHROME_FILL_TONE.dark : MONOCHROME_FILL_TONE.light : whiteLabelTone(brandPalette, seed.tone, isDark));
|
|
344
410
|
const tokens = {
|
|
345
411
|
'--primary': primary.fill,
|
|
@@ -416,7 +482,7 @@ function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
416
482
|
for (const [role, hex] of Object.entries(STATUS_SEEDS)) {
|
|
417
483
|
const status = _hct.Hct.fromInt((0, _index.argbFromHex)(hex));
|
|
418
484
|
const palette = _tonalPalette.TonalPalette.fromHueAndChroma(status.hue, status.chroma);
|
|
419
|
-
const pair = fillPair(palette, isDark ?
|
|
485
|
+
const pair = fillPair(palette, isDark ? vividLegibleTone(palette) : Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP));
|
|
420
486
|
tokens[`--${role}`] = pair.fill;
|
|
421
487
|
tokens[`--${role}-foreground`] = pair.foreground;
|
|
422
488
|
tokens[`--${role}-text`] = rgb(_tonalPalette.TonalPalette.fromHueAndChroma(status.hue, TEXT_CHROMA).tone(isDark ? TEXT_TONE.dark : TEXT_TONE.light));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_index","require","_hct","_tonalPalette","_colorUtils","STATUS_SEEDS","exports","success","error","warning","info","AA","rgb","argb","redFromArgb","greenFromArgb","blueFromArgb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FILL_TONE","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","MONOCHROME_MAX_CHROMA","isColourlessSeed","seedHex","Hct","fromInt","argbFromHex","chroma","MONOCHROME_FILL_TONE","MONOCHROME_SECONDARY_TONE","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","TonalPalette","fromHueAndChroma","bestTone","bestChroma","tone","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","whiteLabelTone","seedTone","isDark","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","roles","pinned","seed","monochrome","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_index","require","_hct","_tonalPalette","_colorUtils","STATUS_SEEDS","exports","success","error","warning","info","AA","rgb","argb","redFromArgb","greenFromArgb","blueFromArgb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","FILL_TONE_FLOOR","FILL_TONE_SEARCH_CEILING","LIGHT_DEPTH_STEP","LIGHT_FILL_FLOOR","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","MONOCHROME_MAX_CHROMA","isColourlessSeed","seedHex","Hct","fromInt","argbFromHex","chroma","MONOCHROME_FILL_TONE","MONOCHROME_SECONDARY_TONE","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","TonalPalette","fromHueAndChroma","bestTone","bestChroma","tone","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","vividLegibleTone","whiteLabelTone","seedTone","isDark","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","roles","pinned","seed","monochrome","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.PREMIUM_COLOR_NAMES = exports.HEX_TO_APP_COLOR = exports.APP_COLOR_PRESETS = exports.APP_COLOR_NAMES = void 0;
|
|
6
|
+
exports.PREMIUM_COLOR_NAMES = exports.HEX_TO_APP_COLOR = exports.HANDLE_COLOR_NAMES = exports.FREE_COLOR_NAMES = exports.APP_COLOR_PRESETS = exports.APP_COLOR_NAMES = void 0;
|
|
7
7
|
exports.hexToAppColorName = hexToAppColorName;
|
|
8
8
|
/**
|
|
9
9
|
* A single colour preset: a brand SEED colour plus the tonal scheme variant to
|
|
@@ -16,6 +16,14 @@ exports.hexToAppColorName = hexToAppColorName;
|
|
|
16
16
|
* maps those roles onto Bloom's canonical token names. A user-picked colour
|
|
17
17
|
* flows through the identical path — a preset is just a fixed seed.
|
|
18
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* Why a preset is not offered to every user. Absent means it is.
|
|
21
|
+
*
|
|
22
|
+
* The two are NOT interchangeable and must not collapse back into one list: a
|
|
23
|
+
* `handle` preset belongs to a specific account and cannot be bought, while a
|
|
24
|
+
* `premium` one is exactly what is bought. Conflating them is how the picker
|
|
25
|
+
* came to offer both of Oxy's reserved brand colours to everybody.
|
|
26
|
+
*/
|
|
19
27
|
|
|
20
28
|
/**
|
|
21
29
|
* Historically each preset carried a full light/dark map of raw HSL triples.
|
|
@@ -24,24 +32,25 @@ exports.hexToAppColorName = hexToAppColorName;
|
|
|
24
32
|
* resolved `--token -> value` record that `getPresetVars` produces).
|
|
25
33
|
*/
|
|
26
34
|
|
|
27
|
-
const APP_COLOR_NAMES = exports.APP_COLOR_NAMES = ['teal', 'blue', 'green', '
|
|
28
|
-
|
|
29
|
-
/** Premium-exclusive presets, hidden from the standard color picker. */
|
|
30
|
-
const PREMIUM_COLOR_NAMES = exports.PREMIUM_COLOR_NAMES = ['oxy', 'faircoin'];
|
|
35
|
+
const APP_COLOR_NAMES = exports.APP_COLOR_NAMES = ['teal', 'blue', 'green', 'yellow', 'red', 'purple', 'pink', 'sky', 'orange', 'mint', 'oxy', 'faircoin', 'pumpkin', 'gray', 'brown', 'peach', 'rose', 'mono'];
|
|
31
36
|
const HEX_TO_APP_COLOR = exports.HEX_TO_APP_COLOR = {
|
|
32
37
|
'#005c67': 'teal',
|
|
33
|
-
'#
|
|
38
|
+
'#0085fe': 'blue',
|
|
34
39
|
'#10b981': 'green',
|
|
35
|
-
'#
|
|
36
|
-
'#ffc300': 'yellow',
|
|
40
|
+
'#fcdc00': 'yellow',
|
|
37
41
|
'#ef4444': 'red',
|
|
38
|
-
'#
|
|
39
|
-
'#
|
|
40
|
-
'#
|
|
41
|
-
'#
|
|
42
|
+
'#b866ff': 'purple',
|
|
43
|
+
'#ff3c7f': 'pink',
|
|
44
|
+
'#03a9f4': 'sky',
|
|
45
|
+
'#ff5722': 'orange',
|
|
42
46
|
'#14b8a6': 'mint',
|
|
43
47
|
'#c46ede': 'oxy',
|
|
44
48
|
'#9ffb50': 'faircoin',
|
|
49
|
+
'#ff9800': 'pumpkin',
|
|
50
|
+
'#607d8b': 'gray',
|
|
51
|
+
'#813519': 'brown',
|
|
52
|
+
'#ffb28d': 'peach',
|
|
53
|
+
'#fcaffe': 'rose',
|
|
45
54
|
'#000000': 'mono'
|
|
46
55
|
};
|
|
47
56
|
function hexToAppColorName(hex) {
|
|
@@ -62,7 +71,7 @@ const APP_COLOR_PRESETS = exports.APP_COLOR_PRESETS = {
|
|
|
62
71
|
},
|
|
63
72
|
blue: {
|
|
64
73
|
name: 'blue',
|
|
65
|
-
hex: '#
|
|
74
|
+
hex: '#0085fe',
|
|
66
75
|
variant: 'vivid'
|
|
67
76
|
},
|
|
68
77
|
green: {
|
|
@@ -70,14 +79,9 @@ const APP_COLOR_PRESETS = exports.APP_COLOR_PRESETS = {
|
|
|
70
79
|
hex: '#10b981',
|
|
71
80
|
variant: 'vivid'
|
|
72
81
|
},
|
|
73
|
-
amber: {
|
|
74
|
-
name: 'amber',
|
|
75
|
-
hex: '#f59e0b',
|
|
76
|
-
variant: 'vivid'
|
|
77
|
-
},
|
|
78
82
|
yellow: {
|
|
79
83
|
name: 'yellow',
|
|
80
|
-
hex: '#
|
|
84
|
+
hex: '#fcdc00',
|
|
81
85
|
variant: 'vivid'
|
|
82
86
|
},
|
|
83
87
|
red: {
|
|
@@ -87,22 +91,28 @@ const APP_COLOR_PRESETS = exports.APP_COLOR_PRESETS = {
|
|
|
87
91
|
},
|
|
88
92
|
purple: {
|
|
89
93
|
name: 'purple',
|
|
90
|
-
hex: '#
|
|
94
|
+
hex: '#b866ff',
|
|
91
95
|
variant: 'vivid'
|
|
92
96
|
},
|
|
93
97
|
pink: {
|
|
94
98
|
name: 'pink',
|
|
95
|
-
hex: '#
|
|
99
|
+
hex: '#ff3c7f',
|
|
96
100
|
variant: 'vivid'
|
|
97
101
|
},
|
|
98
102
|
sky: {
|
|
99
103
|
name: 'sky',
|
|
100
|
-
hex: '#
|
|
104
|
+
hex: '#03a9f4',
|
|
101
105
|
variant: 'vivid'
|
|
102
106
|
},
|
|
107
|
+
// Deliberately NOT Tailwind's orange-500 (`#f97316`). That seed sits at HCT hue
|
|
108
|
+
// 46, which reads as orange only because it is also light: at hue 46 the sRGB
|
|
109
|
+
// gamut allows a chroma of just 62 at the tones a white label needs (<= 49), so
|
|
110
|
+
// the brand fill resolved to `rgb(177 76 0)` — a brown. Hue 34 carries a chroma
|
|
111
|
+
// of 84 at that same tone, with the same white label and the same contrast
|
|
112
|
+
// headroom, so the fill reads as orange instead of paying for the hue twice.
|
|
103
113
|
orange: {
|
|
104
114
|
name: 'orange',
|
|
105
|
-
hex: '#
|
|
115
|
+
hex: '#ff5722',
|
|
106
116
|
variant: 'vivid'
|
|
107
117
|
},
|
|
108
118
|
mint: {
|
|
@@ -113,11 +123,38 @@ const APP_COLOR_PRESETS = exports.APP_COLOR_PRESETS = {
|
|
|
113
123
|
oxy: {
|
|
114
124
|
name: 'oxy',
|
|
115
125
|
hex: '#c46ede',
|
|
116
|
-
variant: 'vivid'
|
|
126
|
+
variant: 'vivid',
|
|
127
|
+
gate: 'handle'
|
|
117
128
|
},
|
|
118
129
|
faircoin: {
|
|
119
130
|
name: 'faircoin',
|
|
120
131
|
hex: '#9ffb50',
|
|
132
|
+
variant: 'vivid',
|
|
133
|
+
gate: 'handle'
|
|
134
|
+
},
|
|
135
|
+
pumpkin: {
|
|
136
|
+
name: 'pumpkin',
|
|
137
|
+
hex: '#ff9800',
|
|
138
|
+
variant: 'vivid'
|
|
139
|
+
},
|
|
140
|
+
gray: {
|
|
141
|
+
name: 'gray',
|
|
142
|
+
hex: '#607d8b',
|
|
143
|
+
variant: 'vivid'
|
|
144
|
+
},
|
|
145
|
+
brown: {
|
|
146
|
+
name: 'brown',
|
|
147
|
+
hex: '#813519',
|
|
148
|
+
variant: 'vivid'
|
|
149
|
+
},
|
|
150
|
+
peach: {
|
|
151
|
+
name: 'peach',
|
|
152
|
+
hex: '#ffb28d',
|
|
153
|
+
variant: 'vivid'
|
|
154
|
+
},
|
|
155
|
+
rose: {
|
|
156
|
+
name: 'rose',
|
|
157
|
+
hex: '#fcaffe',
|
|
121
158
|
variant: 'vivid'
|
|
122
159
|
},
|
|
123
160
|
/**
|
|
@@ -129,7 +166,30 @@ const APP_COLOR_PRESETS = exports.APP_COLOR_PRESETS = {
|
|
|
129
166
|
mono: {
|
|
130
167
|
name: 'mono',
|
|
131
168
|
hex: '#000000',
|
|
132
|
-
variant: 'monochrome'
|
|
169
|
+
variant: 'monochrome',
|
|
170
|
+
gate: 'premium'
|
|
133
171
|
}
|
|
134
172
|
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The three gate groups, DERIVED from the presets rather than listed again, so a
|
|
176
|
+
* preset cannot be gated in one place and offered in another. Together they
|
|
177
|
+
* partition {@link APP_COLOR_NAMES} exactly — asserted in
|
|
178
|
+
* `__tests__/color-preset-gates.test.ts`, since a preset silently missing from
|
|
179
|
+
* every group would simply vanish from a picker with no error anywhere.
|
|
180
|
+
*
|
|
181
|
+
* A consumer builds its visible list from these; it must NOT start from
|
|
182
|
+
* `APP_COLOR_NAMES` and add the unlocked ones, which yields the gated presets to
|
|
183
|
+
* everybody and duplicates whatever the viewer did unlock.
|
|
184
|
+
*/
|
|
185
|
+
const namesGatedBy = gate => APP_COLOR_NAMES.filter(name => APP_COLOR_PRESETS[name].gate === gate);
|
|
186
|
+
|
|
187
|
+
/** Available to every user, signed in or not. */
|
|
188
|
+
const FREE_COLOR_NAMES = exports.FREE_COLOR_NAMES = namesGatedBy(undefined);
|
|
189
|
+
|
|
190
|
+
/** Reserved for the account whose brand it is (`oxy`, `faircoin`) — not for sale. */
|
|
191
|
+
const HANDLE_COLOR_NAMES = exports.HANDLE_COLOR_NAMES = namesGatedBy('handle');
|
|
192
|
+
|
|
193
|
+
/** Sold with a subscription. */
|
|
194
|
+
const PREMIUM_COLOR_NAMES = exports.PREMIUM_COLOR_NAMES = namesGatedBy('premium');
|
|
135
195
|
//# sourceMappingURL=color-presets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["APP_COLOR_NAMES","exports","
|
|
1
|
+
{"version":3,"names":["APP_COLOR_NAMES","exports","HEX_TO_APP_COLOR","hexToAppColorName","hex","toLowerCase","APP_COLOR_PRESETS","teal","name","variant","blue","green","yellow","red","purple","pink","sky","orange","mint","oxy","gate","faircoin","pumpkin","gray","brown","peach","rose","mono","namesGatedBy","filter","FREE_COLOR_NAMES","undefined","HANDLE_COLOR_NAMES","PREMIUM_COLOR_NAMES"],"sourceRoot":"../../../src","sources":["theme/color-presets.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -33,6 +33,18 @@ Object.defineProperty(exports, "BloomThemeProvider", {
|
|
|
33
33
|
return _BloomThemeProvider.BloomThemeProvider;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "FREE_COLOR_NAMES", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _colorPresets.FREE_COLOR_NAMES;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "HANDLE_COLOR_NAMES", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _colorPresets.HANDLE_COLOR_NAMES;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
36
48
|
Object.defineProperty(exports, "HEX_TO_APP_COLOR", {
|
|
37
49
|
enumerable: true,
|
|
38
50
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_BloomThemeProvider","require","_colorScope","_seedScope","_seedScope2","_index","_buildTheme","_buildThemeFromSeed","_gradients","_useTheme","_ambientStore","_useNavigationTheme","_colorPresets","_colorUtils","_presetVars","_applyDarkClass","_setColorSchemeSafe","_initCssInterop","_persistence"],"sourceRoot":"../../../src","sources":["theme/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_BloomThemeProvider","require","_colorScope","_seedScope","_seedScope2","_index","_buildTheme","_buildThemeFromSeed","_gradients","_useTheme","_ambientStore","_useNavigationTheme","_colorPresets","_colorUtils","_presetVars","_applyDarkClass","_setColorSchemeSafe","_initCssInterop","_persistence"],"sourceRoot":"../../../src","sources":["theme/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAKA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAKA,IAAAI,MAAA,GAAAJ,OAAA;AAaA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAN,OAAA;AAEA,IAAAO,UAAA,GAAAP,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,aAAA,GAAAT,OAAA;AAOA,IAAAU,mBAAA,GAAAV,OAAA;AAIA,IAAAW,aAAA,GAAAX,OAAA;AASA,IAAAY,WAAA,GAAAZ,OAAA;AAEA,IAAAa,WAAA,GAAAb,OAAA;AAEA,IAAAc,eAAA,GAAAd,OAAA;AACA,IAAAe,mBAAA,GAAAf,OAAA;AACA,IAAAgB,eAAA,GAAAhB,OAAA;AAEA,IAAAiB,YAAA,GAAAjB,OAAA","ignoreList":[]}
|
|
@@ -80,10 +80,31 @@ const foregroundFor = argb => contrastOf(argb, true) >= AA ? 'rgb(255 255 255)'
|
|
|
80
80
|
const noLegibleForeground = argb => contrastOf(argb, true) < AA && contrastOf(argb, false) < AA;
|
|
81
81
|
|
|
82
82
|
/** The tone a white-label fill sits at in LIGHT mode. */
|
|
83
|
-
const
|
|
83
|
+
const FILL_TONE_FLOOR = 45;
|
|
84
84
|
|
|
85
85
|
/** The tone a white-label fill sits at in DARK: the ceiling white text allows. */
|
|
86
|
-
const
|
|
86
|
+
const FILL_TONE_SEARCH_CEILING = 56;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* How much DEEPER the same brand sits on a light page than on a dark one.
|
|
90
|
+
*
|
|
91
|
+
* Not decoration: a colour on a near-white page has nothing to read against, so
|
|
92
|
+
* the mode difference is what makes a theme a theme rather than one palette shown
|
|
93
|
+
* twice. Dropping it is a regression that looks like a simplification — light and
|
|
94
|
+
* dark collapse onto the same fill for every seed that is not already bright, and
|
|
95
|
+
* the two modes stop being distinguishable at all.
|
|
96
|
+
*/
|
|
97
|
+
const LIGHT_DEPTH_STEP = 5;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* How deep a light-mode fill may go. Deliberately BELOW the search's lower bound,
|
|
101
|
+
* which those two used to share — and sharing them silently voided the depth step
|
|
102
|
+
* for any seed whose dark fill already sits at that bound. A high-chroma seed is
|
|
103
|
+
* exactly that case: pink loses its white label above tone 45, so dark cannot rise
|
|
104
|
+
* to make room and light must descend instead, or the two modes render the
|
|
105
|
+
* identical fill.
|
|
106
|
+
*/
|
|
107
|
+
const LIGHT_FILL_FLOOR = 40;
|
|
87
108
|
|
|
88
109
|
/** How far a fill may be dragged from its natural tone before the colour is lost. */
|
|
89
110
|
const TONE_BUDGET = 25;
|
|
@@ -224,6 +245,47 @@ function vividHueNear(hue) {
|
|
|
224
245
|
return bestChroma - baseChroma >= VIVID_SNAP_MIN_GAIN ? bestHue : hue;
|
|
225
246
|
}
|
|
226
247
|
|
|
248
|
+
/**
|
|
249
|
+
* The most vivid tone a palette reaches while a WHITE label still clears AA on
|
|
250
|
+
* it — searched per HUE instead of assumed.
|
|
251
|
+
*
|
|
252
|
+
* A single tone for every hue leaves chroma on the table for some and takes it
|
|
253
|
+
* from others, because the sRGB gamut is not a cylinder: from tone 45 upward an
|
|
254
|
+
* orange keeps gaining chroma until white runs out at ~49.5 (59 -> 84), while a
|
|
255
|
+
* violet has already passed its peak and LOSES chroma over the same interval
|
|
256
|
+
* (91 -> 86). The old flat 45 spent none of the contrast headroom it had — every
|
|
257
|
+
* preset sat at 5.38 when 4.5 was the requirement — and orange paid for that
|
|
258
|
+
* twice, since its hue is also one of the gamut's narrow ones.
|
|
259
|
+
*
|
|
260
|
+
* The floor is what keeps this from trading lightness for chroma: a hue that
|
|
261
|
+
* peaks far below 45 stays at 45 rather than descending into a near-black slab
|
|
262
|
+
* that happens to be saturated. So the search can only ever improve a fill or
|
|
263
|
+
* leave it exactly where it was.
|
|
264
|
+
*
|
|
265
|
+
* Contrast is measured on the QUANTIZED colour, not the engine's continuous
|
|
266
|
+
* tone-ratio: an earlier iteration chose tones by the latter and shipped 135
|
|
267
|
+
* pairs at a measured 4.49.
|
|
268
|
+
*/
|
|
269
|
+
function vividLegibleTone(palette) {
|
|
270
|
+
let bestTone = FILL_TONE_FLOOR;
|
|
271
|
+
let bestChroma = -1;
|
|
272
|
+
for (let tone = FILL_TONE_FLOOR; tone <= FILL_TONE_SEARCH_CEILING; tone += 0.5) {
|
|
273
|
+
const argb = palette.tone(tone);
|
|
274
|
+
if (contrastOf(argb, true) < AA) continue;
|
|
275
|
+
const chroma = Hct.fromInt(argb).chroma;
|
|
276
|
+
// A tie keeps the DEEPEST tone. Ties are common rather than exotic — any seed
|
|
277
|
+
// whose chroma sits below the gamut ceiling across this whole range has a flat
|
|
278
|
+
// curve here — and breaking them toward the lightest end instead changes no
|
|
279
|
+
// preset's output, because the light-mode floor below already supplies the
|
|
280
|
+
// separation that would have bought. Mutation-checked, not assumed.
|
|
281
|
+
if (chroma > bestChroma) {
|
|
282
|
+
bestChroma = chroma;
|
|
283
|
+
bestTone = tone;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return bestTone;
|
|
287
|
+
}
|
|
288
|
+
|
|
227
289
|
/**
|
|
228
290
|
* The tone a BRAND fill sits at.
|
|
229
291
|
*
|
|
@@ -242,11 +304,11 @@ function whiteLabelTone(palette, seedTone, isDark) {
|
|
|
242
304
|
// smear there, indistinguishable from the same colour in dark, which is not a
|
|
243
305
|
// theme at all. Coming down is what makes faircoin a deep green in light and a
|
|
244
306
|
// bright lime in dark.
|
|
245
|
-
if (!isDark) return
|
|
307
|
+
if (!isDark) return Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP);
|
|
246
308
|
// DARK: the budget applies. Most brands come down to where white fits, but a
|
|
247
309
|
// seed that is already light cannot without ceasing to be itself, so it keeps
|
|
248
310
|
// its own tone and takes a black label. That is the eleven-and-two pattern.
|
|
249
|
-
const candidate = Math.max(
|
|
311
|
+
const candidate = Math.max(vividLegibleTone(palette), seedTone - TONE_BUDGET);
|
|
250
312
|
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : Math.max(seedTone, DARK_SEED_FLOOR);
|
|
251
313
|
}
|
|
252
314
|
|
|
@@ -257,10 +319,10 @@ function whiteLabelTone(palette, seedTone, isDark) {
|
|
|
257
319
|
* peaks dark comes down and carries white.
|
|
258
320
|
*/
|
|
259
321
|
function accentTone(hue, isDark) {
|
|
260
|
-
if (!isDark) return LIGHT_FILL_TONE;
|
|
261
|
-
const peak = Math.max(peakTone(hue), DARK_ACCENT_FLOOR);
|
|
262
322
|
const palette = TonalPalette.fromHueAndChroma(hue, ACCENT_CHROMA);
|
|
263
|
-
|
|
323
|
+
if (!isDark) return Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP);
|
|
324
|
+
const peak = Math.max(peakTone(hue), DARK_ACCENT_FLOOR);
|
|
325
|
+
const candidate = Math.max(vividLegibleTone(palette), peak - TONE_BUDGET);
|
|
264
326
|
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : peak;
|
|
265
327
|
}
|
|
266
328
|
|
|
@@ -327,13 +389,17 @@ export function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
327
389
|
// dark fill sit at the seed's own tone instead makes it brighter, but every one
|
|
328
390
|
// of those labels turns black, which costs more than the brightness buys.
|
|
329
391
|
const monochrome = seed.chroma <= MONOCHROME_MAX_CHROMA;
|
|
330
|
-
//
|
|
331
|
-
//
|
|
392
|
+
// BOTH modes key off the seed itself, so the fill carries the brand's SATURATION
|
|
393
|
+
// as well as its hue. Light used to force the hue to maximum chroma, which reads
|
|
394
|
+
// as "the seed only chose a hue" — and that silently renames a colour: a muted
|
|
395
|
+
// blue-grey seed resolved to a vivid cyan, and a brown seed to an orange, since
|
|
396
|
+
// both differ from a saturated neighbour by chroma alone. A deliberately soft
|
|
397
|
+
// brand now stays soft instead of being argued with.
|
|
332
398
|
// A monochrome seed has no chroma to preserve either way, and its fill goes to
|
|
333
399
|
// the far end of the scale rather than the white-label ceiling: a mid-grey
|
|
334
400
|
// button reads as disabled, where near-black on white reads as the primary
|
|
335
401
|
// action.
|
|
336
|
-
const brandPalette = monochrome ? TonalPalette.fromHueAndChroma(0, 0) :
|
|
402
|
+
const brandPalette = monochrome ? TonalPalette.fromHueAndChroma(0, 0) : TonalPalette.fromInt(argbFromHex(seedHex));
|
|
337
403
|
const primary = fillPair(brandPalette, monochrome ? isDark ? MONOCHROME_FILL_TONE.dark : MONOCHROME_FILL_TONE.light : whiteLabelTone(brandPalette, seed.tone, isDark));
|
|
338
404
|
const tokens = {
|
|
339
405
|
'--primary': primary.fill,
|
|
@@ -410,7 +476,7 @@ export function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
410
476
|
for (const [role, hex] of Object.entries(STATUS_SEEDS)) {
|
|
411
477
|
const status = Hct.fromInt(argbFromHex(hex));
|
|
412
478
|
const palette = TonalPalette.fromHueAndChroma(status.hue, status.chroma);
|
|
413
|
-
const pair = fillPair(palette, isDark ?
|
|
479
|
+
const pair = fillPair(palette, isDark ? vividLegibleTone(palette) : Math.max(LIGHT_FILL_FLOOR, vividLegibleTone(palette) - LIGHT_DEPTH_STEP));
|
|
414
480
|
tokens[`--${role}`] = pair.fill;
|
|
415
481
|
tokens[`--${role}-foreground`] = pair.foreground;
|
|
416
482
|
tokens[`--${role}-text`] = rgb(TonalPalette.fromHueAndChroma(status.hue, TEXT_CHROMA).tone(isDark ? TEXT_TONE.dark : TEXT_TONE.light));
|