@oxyhq/bloom 0.74.1 → 0.74.3
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 +20 -7
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/module/theme/color-policy.js +20 -7
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/theme/__tests__/policy-legibility.test.ts +2 -1
- package/src/theme/color-policy.ts +20 -8
|
@@ -87,9 +87,20 @@ const noLegibleForeground = argb => contrastOf(argb, true) < AA && contrastOf(ar
|
|
|
87
87
|
/** The tone a white-label fill sits at in LIGHT mode. */
|
|
88
88
|
const LIGHT_FILL_TONE = 45;
|
|
89
89
|
|
|
90
|
-
/** No dark-mode fill sits below this: under it a colour goes heavy on black. */
|
|
90
|
+
/** No dark-mode BRAND fill sits below this: under it a colour goes heavy on black. */
|
|
91
91
|
const DARK_FLOOR = 58;
|
|
92
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Accent fills sit at their hue's PEAK tone in dark — where the hue is most
|
|
95
|
+
* itself, so a lime reads as lime rather than olive.
|
|
96
|
+
*
|
|
97
|
+
* The cost is fixed and cannot be engineered away: peaks for that family live
|
|
98
|
+
* around tone 88, and white text needs a fill at or below 49, so these buttons
|
|
99
|
+
* carry a BLACK label. Capping the tone to win the white label back turns the
|
|
100
|
+
* same accents dull — measured on blue, rgb(252 220 0) becomes rgb(134 116 0).
|
|
101
|
+
* The bright colour is the deliberate choice.
|
|
102
|
+
*/
|
|
103
|
+
|
|
93
104
|
/** Chroma ceiling for an accent FILL — the brand palette's own maximum, not the gamut's. */
|
|
94
105
|
const ACCENT_CHROMA = 80;
|
|
95
106
|
|
|
@@ -277,12 +288,14 @@ function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
277
288
|
// analyzer runs there — Bloom ships it yet only reaches it on the fidelity
|
|
278
289
|
// path, which no Bloom variant uses, so a rotated accent could land in the
|
|
279
290
|
// band with nothing to lift it out.
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
//
|
|
285
|
-
//
|
|
291
|
+
// Bloom's own tone policy governs this, and M3's `fixIfDisliked` deliberately
|
|
292
|
+
// does not get a say. That heuristic flags dark yellow-greens and lifts them
|
|
293
|
+
// to tone 70 — a remedy calibrated for M3's tone assignments, where nothing
|
|
294
|
+
// depends on staying under the ceiling white text needs. Here everything does:
|
|
295
|
+
// a 25-tone lift puts the fill above it and flips a compose button's label to
|
|
296
|
+
// black. The accent chroma cap already keeps these hues out of neon territory,
|
|
297
|
+
// and the hue itself is the caller's brand rather than ours to move. The
|
|
298
|
+
// analyzer still runs where it was designed to, inside `color-roles`.
|
|
286
299
|
const tone = isDark ? Math.max(peakTone(hue), DARK_FLOOR) : LIGHT_FILL_TONE;
|
|
287
300
|
const pair = fillPair(fillPalette, tone);
|
|
288
301
|
tokens[`--${role}`] = pair.fill;
|
|
@@ -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_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","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","chroma","Hct","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","argbFromHex","secondary","tertiary","buildPolicyTokens","seedHex","isDark","roles","pinned","seed","brandPalette","primary","max","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":";;;;;;;AAwBA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;
|
|
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_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","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","chroma","Hct","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","argbFromHex","secondary","tertiary","buildPolicyTokens","seedHex","isDark","roles","pinned","seed","brandPalette","primary","max","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":[]}
|
|
@@ -82,9 +82,20 @@ const noLegibleForeground = argb => contrastOf(argb, true) < AA && contrastOf(ar
|
|
|
82
82
|
/** The tone a white-label fill sits at in LIGHT mode. */
|
|
83
83
|
const LIGHT_FILL_TONE = 45;
|
|
84
84
|
|
|
85
|
-
/** No dark-mode fill sits below this: under it a colour goes heavy on black. */
|
|
85
|
+
/** No dark-mode BRAND fill sits below this: under it a colour goes heavy on black. */
|
|
86
86
|
const DARK_FLOOR = 58;
|
|
87
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Accent fills sit at their hue's PEAK tone in dark — where the hue is most
|
|
90
|
+
* itself, so a lime reads as lime rather than olive.
|
|
91
|
+
*
|
|
92
|
+
* The cost is fixed and cannot be engineered away: peaks for that family live
|
|
93
|
+
* around tone 88, and white text needs a fill at or below 49, so these buttons
|
|
94
|
+
* carry a BLACK label. Capping the tone to win the white label back turns the
|
|
95
|
+
* same accents dull — measured on blue, rgb(252 220 0) becomes rgb(134 116 0).
|
|
96
|
+
* The bright colour is the deliberate choice.
|
|
97
|
+
*/
|
|
98
|
+
|
|
88
99
|
/** Chroma ceiling for an accent FILL — the brand palette's own maximum, not the gamut's. */
|
|
89
100
|
const ACCENT_CHROMA = 80;
|
|
90
101
|
|
|
@@ -272,12 +283,14 @@ export function buildPolicyTokens(seedHex, isDark, roles, pinned = {}) {
|
|
|
272
283
|
// analyzer runs there — Bloom ships it yet only reaches it on the fidelity
|
|
273
284
|
// path, which no Bloom variant uses, so a rotated accent could land in the
|
|
274
285
|
// band with nothing to lift it out.
|
|
275
|
-
//
|
|
276
|
-
//
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
286
|
+
// Bloom's own tone policy governs this, and M3's `fixIfDisliked` deliberately
|
|
287
|
+
// does not get a say. That heuristic flags dark yellow-greens and lifts them
|
|
288
|
+
// to tone 70 — a remedy calibrated for M3's tone assignments, where nothing
|
|
289
|
+
// depends on staying under the ceiling white text needs. Here everything does:
|
|
290
|
+
// a 25-tone lift puts the fill above it and flips a compose button's label to
|
|
291
|
+
// black. The accent chroma cap already keeps these hues out of neon territory,
|
|
292
|
+
// and the hue itself is the caller's brand rather than ours to move. The
|
|
293
|
+
// analyzer still runs where it was designed to, inside `color-roles`.
|
|
281
294
|
const tone = isDark ? Math.max(peakTone(hue), DARK_FLOOR) : LIGHT_FILL_TONE;
|
|
282
295
|
const pair = fillPair(fillPalette, tone);
|
|
283
296
|
tokens[`--${role}`] = pair.fill;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","seedHex","isDark","roles","pinned","seed","brandPalette","primary","max","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":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAW,QAAyB,yBAAgB;AAC7D,SAASC,GAAG,QAAQ,uBAAoB;AACxC,SAASC,YAAY,QAAQ,iCAA8B;
|
|
1
|
+
{"version":3,"names":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","seedHex","isDark","roles","pinned","seed","brandPalette","primary","max","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK9D,sFAAsF;AACtF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA6LlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAAkB,GACzB,YAAY,CAgHd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK9D,sFAAsF;AACtF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA6LlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAAkB,GACzB,YAAY,CAgHd"}
|
package/package.json
CHANGED
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
import { argbFromHex, type RoleColors } from './color-engine';
|
|
26
26
|
import { Hct } from './color-engine/hct';
|
|
27
27
|
import { TonalPalette } from './color-engine/tonal-palette';
|
|
28
|
-
import { fixIfDisliked } from './color-engine/dislike-analyzer';
|
|
29
28
|
import { blueFromArgb, greenFromArgb, redFromArgb } from './color-engine/color-utils';
|
|
30
29
|
|
|
31
30
|
/** Semantic status seeds. Only hue and chroma survive; tones come from the policy. */
|
|
@@ -95,9 +94,20 @@ const noLegibleForeground = (argb: number): boolean =>
|
|
|
95
94
|
/** The tone a white-label fill sits at in LIGHT mode. */
|
|
96
95
|
const LIGHT_FILL_TONE = 45;
|
|
97
96
|
|
|
98
|
-
/** No dark-mode fill sits below this: under it a colour goes heavy on black. */
|
|
97
|
+
/** No dark-mode BRAND fill sits below this: under it a colour goes heavy on black. */
|
|
99
98
|
const DARK_FLOOR = 58;
|
|
100
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Accent fills sit at their hue's PEAK tone in dark — where the hue is most
|
|
102
|
+
* itself, so a lime reads as lime rather than olive.
|
|
103
|
+
*
|
|
104
|
+
* The cost is fixed and cannot be engineered away: peaks for that family live
|
|
105
|
+
* around tone 88, and white text needs a fill at or below 49, so these buttons
|
|
106
|
+
* carry a BLACK label. Capping the tone to win the white label back turns the
|
|
107
|
+
* same accents dull — measured on blue, rgb(252 220 0) becomes rgb(134 116 0).
|
|
108
|
+
* The bright colour is the deliberate choice.
|
|
109
|
+
*/
|
|
110
|
+
|
|
101
111
|
/** Chroma ceiling for an accent FILL — the brand palette's own maximum, not the gamut's. */
|
|
102
112
|
const ACCENT_CHROMA = 80;
|
|
103
113
|
|
|
@@ -291,12 +301,14 @@ export function buildPolicyTokens(
|
|
|
291
301
|
// analyzer runs there — Bloom ships it yet only reaches it on the fidelity
|
|
292
302
|
// path, which no Bloom variant uses, so a rotated accent could land in the
|
|
293
303
|
// band with nothing to lift it out.
|
|
294
|
-
//
|
|
295
|
-
//
|
|
296
|
-
//
|
|
297
|
-
//
|
|
298
|
-
//
|
|
299
|
-
//
|
|
304
|
+
// Bloom's own tone policy governs this, and M3's `fixIfDisliked` deliberately
|
|
305
|
+
// does not get a say. That heuristic flags dark yellow-greens and lifts them
|
|
306
|
+
// to tone 70 — a remedy calibrated for M3's tone assignments, where nothing
|
|
307
|
+
// depends on staying under the ceiling white text needs. Here everything does:
|
|
308
|
+
// a 25-tone lift puts the fill above it and flips a compose button's label to
|
|
309
|
+
// black. The accent chroma cap already keeps these hues out of neon territory,
|
|
310
|
+
// and the hue itself is the caller's brand rather than ours to move. The
|
|
311
|
+
// analyzer still runs where it was designed to, inside `color-roles`.
|
|
300
312
|
const tone = isDark ? Math.max(peakTone(hue), DARK_FLOOR) : LIGHT_FILL_TONE;
|
|
301
313
|
const pair = fillPair(fillPalette, tone);
|
|
302
314
|
tokens[`--${role}`] = pair.fill;
|