@oxyhq/bloom 0.36.0 → 0.37.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.
Files changed (235) hide show
  1. package/lib/commonjs/theme/build-theme.js +31 -43
  2. package/lib/commonjs/theme/build-theme.js.map +1 -1
  3. package/lib/commonjs/theme/color-engine/cam16.js +161 -0
  4. package/lib/commonjs/theme/color-engine/cam16.js.map +1 -0
  5. package/lib/commonjs/theme/color-engine/color-role.js +183 -0
  6. package/lib/commonjs/theme/color-engine/color-role.js.map +1 -0
  7. package/lib/commonjs/theme/color-engine/color-roles.js +416 -0
  8. package/lib/commonjs/theme/color-engine/color-roles.js.map +1 -0
  9. package/lib/commonjs/theme/color-engine/color-utils.js +157 -0
  10. package/lib/commonjs/theme/color-engine/color-utils.js.map +1 -0
  11. package/lib/commonjs/theme/color-engine/contrast-curve.js +32 -0
  12. package/lib/commonjs/theme/color-engine/contrast-curve.js.map +1 -0
  13. package/lib/commonjs/theme/color-engine/contrast.js +70 -0
  14. package/lib/commonjs/theme/color-engine/contrast.js.map +1 -0
  15. package/lib/commonjs/theme/color-engine/dislike-analyzer.js +26 -0
  16. package/lib/commonjs/theme/color-engine/dislike-analyzer.js.map +1 -0
  17. package/lib/commonjs/theme/color-engine/dynamic-scheme.js +70 -0
  18. package/lib/commonjs/theme/color-engine/dynamic-scheme.js.map +1 -0
  19. package/lib/commonjs/theme/color-engine/hct-solver.js +236 -0
  20. package/lib/commonjs/theme/color-engine/hct-solver.js.map +1 -0
  21. package/lib/commonjs/theme/color-engine/hct.js +67 -0
  22. package/lib/commonjs/theme/color-engine/hct.js.map +1 -0
  23. package/lib/commonjs/theme/color-engine/index.js +173 -0
  24. package/lib/commonjs/theme/color-engine/index.js.map +1 -0
  25. package/lib/commonjs/theme/color-engine/lab-point-provider.js +32 -0
  26. package/lib/commonjs/theme/color-engine/lab-point-provider.js.map +1 -0
  27. package/lib/commonjs/theme/color-engine/math-utils.js +77 -0
  28. package/lib/commonjs/theme/color-engine/math-utils.js.map +1 -0
  29. package/lib/commonjs/theme/color-engine/quantizer-map.js +24 -0
  30. package/lib/commonjs/theme/color-engine/quantizer-map.js.map +1 -0
  31. package/lib/commonjs/theme/color-engine/quantizer-wu.js +266 -0
  32. package/lib/commonjs/theme/color-engine/quantizer-wu.js.map +1 -0
  33. package/lib/commonjs/theme/color-engine/scheme-variants.js +102 -0
  34. package/lib/commonjs/theme/color-engine/scheme-variants.js.map +1 -0
  35. package/lib/commonjs/theme/color-engine/score.js +80 -0
  36. package/lib/commonjs/theme/color-engine/score.js.map +1 -0
  37. package/lib/commonjs/theme/color-engine/seed-from-image.js +73 -0
  38. package/lib/commonjs/theme/color-engine/seed-from-image.js.map +1 -0
  39. package/lib/commonjs/theme/color-engine/tonal-palette.js +95 -0
  40. package/lib/commonjs/theme/color-engine/tonal-palette.js.map +1 -0
  41. package/lib/commonjs/theme/color-engine/tone-delta-pair.js +26 -0
  42. package/lib/commonjs/theme/color-engine/tone-delta-pair.js.map +1 -0
  43. package/lib/commonjs/theme/color-engine/variant.js +26 -0
  44. package/lib/commonjs/theme/color-engine/variant.js.map +1 -0
  45. package/lib/commonjs/theme/color-engine/viewing-conditions.js +61 -0
  46. package/lib/commonjs/theme/color-engine/viewing-conditions.js.map +1 -0
  47. package/lib/commonjs/theme/color-presets.js +44 -572
  48. package/lib/commonjs/theme/color-presets.js.map +1 -1
  49. package/lib/commonjs/theme/preset-vars.js +64 -47
  50. package/lib/commonjs/theme/preset-vars.js.map +1 -1
  51. package/lib/module/theme/build-theme.js +32 -44
  52. package/lib/module/theme/build-theme.js.map +1 -1
  53. package/lib/module/theme/color-engine/cam16.js +155 -0
  54. package/lib/module/theme/color-engine/cam16.js.map +1 -0
  55. package/lib/module/theme/color-engine/color-role.js +177 -0
  56. package/lib/module/theme/color-engine/color-role.js.map +1 -0
  57. package/lib/module/theme/color-engine/color-roles.js +411 -0
  58. package/lib/module/theme/color-engine/color-roles.js.map +1 -0
  59. package/lib/module/theme/color-engine/color-utils.js +135 -0
  60. package/lib/module/theme/color-engine/color-utils.js.map +1 -0
  61. package/lib/module/theme/color-engine/contrast-curve.js +26 -0
  62. package/lib/module/theme/color-engine/contrast-curve.js.map +1 -0
  63. package/lib/module/theme/color-engine/contrast.js +61 -0
  64. package/lib/module/theme/color-engine/contrast.js.map +1 -0
  65. package/lib/module/theme/color-engine/dislike-analyzer.js +20 -0
  66. package/lib/module/theme/color-engine/dislike-analyzer.js.map +1 -0
  67. package/lib/module/theme/color-engine/dynamic-scheme.js +65 -0
  68. package/lib/module/theme/color-engine/dynamic-scheme.js.map +1 -0
  69. package/lib/module/theme/color-engine/hct-solver.js +231 -0
  70. package/lib/module/theme/color-engine/hct-solver.js.map +1 -0
  71. package/lib/module/theme/color-engine/hct.js +61 -0
  72. package/lib/module/theme/color-engine/hct.js.map +1 -0
  73. package/lib/module/theme/color-engine/index.js +57 -0
  74. package/lib/module/theme/color-engine/index.js.map +1 -0
  75. package/lib/module/theme/color-engine/lab-point-provider.js +25 -0
  76. package/lib/module/theme/color-engine/lab-point-provider.js.map +1 -0
  77. package/lib/module/theme/color-engine/math-utils.js +65 -0
  78. package/lib/module/theme/color-engine/math-utils.js.map +1 -0
  79. package/lib/module/theme/color-engine/quantizer-map.js +20 -0
  80. package/lib/module/theme/color-engine/quantizer-map.js.map +1 -0
  81. package/lib/module/theme/color-engine/quantizer-wu.js +261 -0
  82. package/lib/module/theme/color-engine/quantizer-wu.js.map +1 -0
  83. package/lib/module/theme/color-engine/scheme-variants.js +93 -0
  84. package/lib/module/theme/color-engine/scheme-variants.js.map +1 -0
  85. package/lib/module/theme/color-engine/score.js +75 -0
  86. package/lib/module/theme/color-engine/score.js.map +1 -0
  87. package/lib/module/theme/color-engine/seed-from-image.js +67 -0
  88. package/lib/module/theme/color-engine/seed-from-image.js.map +1 -0
  89. package/lib/module/theme/color-engine/tonal-palette.js +89 -0
  90. package/lib/module/theme/color-engine/tonal-palette.js.map +1 -0
  91. package/lib/module/theme/color-engine/tone-delta-pair.js +21 -0
  92. package/lib/module/theme/color-engine/tone-delta-pair.js.map +1 -0
  93. package/lib/module/theme/color-engine/variant.js +22 -0
  94. package/lib/module/theme/color-engine/variant.js.map +1 -0
  95. package/lib/module/theme/color-engine/viewing-conditions.js +55 -0
  96. package/lib/module/theme/color-engine/viewing-conditions.js.map +1 -0
  97. package/lib/module/theme/color-presets.js +44 -572
  98. package/lib/module/theme/color-presets.js.map +1 -1
  99. package/lib/module/theme/preset-vars.js +64 -46
  100. package/lib/module/theme/preset-vars.js.map +1 -1
  101. package/lib/typescript/commonjs/theme/build-theme.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/theme/color-engine/cam16.d.ts +26 -0
  103. package/lib/typescript/commonjs/theme/color-engine/cam16.d.ts.map +1 -0
  104. package/lib/typescript/commonjs/theme/color-engine/color-role.d.ts +36 -0
  105. package/lib/typescript/commonjs/theme/color-engine/color-role.d.ts.map +1 -0
  106. package/lib/typescript/commonjs/theme/color-engine/color-roles.d.ts +58 -0
  107. package/lib/typescript/commonjs/theme/color-engine/color-roles.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/theme/color-engine/color-utils.d.ts +32 -0
  109. package/lib/typescript/commonjs/theme/color-engine/color-utils.d.ts.map +1 -0
  110. package/lib/typescript/commonjs/theme/color-engine/contrast-curve.d.ts +9 -0
  111. package/lib/typescript/commonjs/theme/color-engine/contrast-curve.d.ts.map +1 -0
  112. package/lib/typescript/commonjs/theme/color-engine/contrast.d.ts +12 -0
  113. package/lib/typescript/commonjs/theme/color-engine/contrast.d.ts.map +1 -0
  114. package/lib/typescript/commonjs/theme/color-engine/dislike-analyzer.d.ts +11 -0
  115. package/lib/typescript/commonjs/theme/color-engine/dislike-analyzer.d.ts.map +1 -0
  116. package/lib/typescript/commonjs/theme/color-engine/dynamic-scheme.d.ts +47 -0
  117. package/lib/typescript/commonjs/theme/color-engine/dynamic-scheme.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/theme/color-engine/hct-solver.d.ts +6 -0
  119. package/lib/typescript/commonjs/theme/color-engine/hct-solver.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/theme/color-engine/hct.d.ts +20 -0
  121. package/lib/typescript/commonjs/theme/color-engine/hct.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/theme/color-engine/index.d.ts +44 -0
  123. package/lib/typescript/commonjs/theme/color-engine/index.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/theme/color-engine/lab-point-provider.d.ts +6 -0
  125. package/lib/typescript/commonjs/theme/color-engine/lab-point-provider.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/theme/color-engine/math-utils.d.ts +46 -0
  127. package/lib/typescript/commonjs/theme/color-engine/math-utils.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/theme/color-engine/quantizer-map.d.ts +3 -0
  129. package/lib/typescript/commonjs/theme/color-engine/quantizer-map.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/theme/color-engine/quantizer-wu.d.ts +3 -0
  131. package/lib/typescript/commonjs/theme/color-engine/quantizer-wu.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/theme/color-engine/scheme-variants.d.ts +23 -0
  133. package/lib/typescript/commonjs/theme/color-engine/scheme-variants.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/theme/color-engine/score.d.ts +8 -0
  135. package/lib/typescript/commonjs/theme/color-engine/score.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/theme/color-engine/seed-from-image.d.ts +13 -0
  137. package/lib/typescript/commonjs/theme/color-engine/seed-from-image.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/theme/color-engine/tonal-palette.d.ts +24 -0
  139. package/lib/typescript/commonjs/theme/color-engine/tonal-palette.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/theme/color-engine/tone-delta-pair.d.ts +19 -0
  141. package/lib/typescript/commonjs/theme/color-engine/tone-delta-pair.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/theme/color-engine/variant.d.ts +19 -0
  143. package/lib/typescript/commonjs/theme/color-engine/variant.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/theme/color-engine/viewing-conditions.d.ts +18 -0
  145. package/lib/typescript/commonjs/theme/color-engine/viewing-conditions.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/theme/color-presets.d.ts +25 -20
  147. package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/theme/preset-vars.d.ts +16 -12
  149. package/lib/typescript/commonjs/theme/preset-vars.d.ts.map +1 -1
  150. package/lib/typescript/module/theme/build-theme.d.ts.map +1 -1
  151. package/lib/typescript/module/theme/color-engine/cam16.d.ts +26 -0
  152. package/lib/typescript/module/theme/color-engine/cam16.d.ts.map +1 -0
  153. package/lib/typescript/module/theme/color-engine/color-role.d.ts +36 -0
  154. package/lib/typescript/module/theme/color-engine/color-role.d.ts.map +1 -0
  155. package/lib/typescript/module/theme/color-engine/color-roles.d.ts +58 -0
  156. package/lib/typescript/module/theme/color-engine/color-roles.d.ts.map +1 -0
  157. package/lib/typescript/module/theme/color-engine/color-utils.d.ts +32 -0
  158. package/lib/typescript/module/theme/color-engine/color-utils.d.ts.map +1 -0
  159. package/lib/typescript/module/theme/color-engine/contrast-curve.d.ts +9 -0
  160. package/lib/typescript/module/theme/color-engine/contrast-curve.d.ts.map +1 -0
  161. package/lib/typescript/module/theme/color-engine/contrast.d.ts +12 -0
  162. package/lib/typescript/module/theme/color-engine/contrast.d.ts.map +1 -0
  163. package/lib/typescript/module/theme/color-engine/dislike-analyzer.d.ts +11 -0
  164. package/lib/typescript/module/theme/color-engine/dislike-analyzer.d.ts.map +1 -0
  165. package/lib/typescript/module/theme/color-engine/dynamic-scheme.d.ts +47 -0
  166. package/lib/typescript/module/theme/color-engine/dynamic-scheme.d.ts.map +1 -0
  167. package/lib/typescript/module/theme/color-engine/hct-solver.d.ts +6 -0
  168. package/lib/typescript/module/theme/color-engine/hct-solver.d.ts.map +1 -0
  169. package/lib/typescript/module/theme/color-engine/hct.d.ts +20 -0
  170. package/lib/typescript/module/theme/color-engine/hct.d.ts.map +1 -0
  171. package/lib/typescript/module/theme/color-engine/index.d.ts +44 -0
  172. package/lib/typescript/module/theme/color-engine/index.d.ts.map +1 -0
  173. package/lib/typescript/module/theme/color-engine/lab-point-provider.d.ts +6 -0
  174. package/lib/typescript/module/theme/color-engine/lab-point-provider.d.ts.map +1 -0
  175. package/lib/typescript/module/theme/color-engine/math-utils.d.ts +46 -0
  176. package/lib/typescript/module/theme/color-engine/math-utils.d.ts.map +1 -0
  177. package/lib/typescript/module/theme/color-engine/quantizer-map.d.ts +3 -0
  178. package/lib/typescript/module/theme/color-engine/quantizer-map.d.ts.map +1 -0
  179. package/lib/typescript/module/theme/color-engine/quantizer-wu.d.ts +3 -0
  180. package/lib/typescript/module/theme/color-engine/quantizer-wu.d.ts.map +1 -0
  181. package/lib/typescript/module/theme/color-engine/scheme-variants.d.ts +23 -0
  182. package/lib/typescript/module/theme/color-engine/scheme-variants.d.ts.map +1 -0
  183. package/lib/typescript/module/theme/color-engine/score.d.ts +8 -0
  184. package/lib/typescript/module/theme/color-engine/score.d.ts.map +1 -0
  185. package/lib/typescript/module/theme/color-engine/seed-from-image.d.ts +13 -0
  186. package/lib/typescript/module/theme/color-engine/seed-from-image.d.ts.map +1 -0
  187. package/lib/typescript/module/theme/color-engine/tonal-palette.d.ts +24 -0
  188. package/lib/typescript/module/theme/color-engine/tonal-palette.d.ts.map +1 -0
  189. package/lib/typescript/module/theme/color-engine/tone-delta-pair.d.ts +19 -0
  190. package/lib/typescript/module/theme/color-engine/tone-delta-pair.d.ts.map +1 -0
  191. package/lib/typescript/module/theme/color-engine/variant.d.ts +19 -0
  192. package/lib/typescript/module/theme/color-engine/variant.d.ts.map +1 -0
  193. package/lib/typescript/module/theme/color-engine/viewing-conditions.d.ts +18 -0
  194. package/lib/typescript/module/theme/color-engine/viewing-conditions.d.ts.map +1 -0
  195. package/lib/typescript/module/theme/color-presets.d.ts +25 -20
  196. package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
  197. package/lib/typescript/module/theme/preset-vars.d.ts +16 -12
  198. package/lib/typescript/module/theme/preset-vars.d.ts.map +1 -1
  199. package/package.json +1 -1
  200. package/src/__tests__/BloomThemeProvider.test.tsx +9 -4
  201. package/src/__tests__/native-root-vars.test.ts +8 -4
  202. package/src/__tests__/preset-vars.test.ts +66 -37
  203. package/src/__tests__/theme.test.ts +20 -12
  204. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +509 -509
  205. package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +613 -613
  206. package/src/theme/__tests__/color-engine-golden.test.ts +81 -0
  207. package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
  208. package/src/theme/__tests__/golden-tokens.test.ts +6 -7
  209. package/src/theme/__tests__/runtime-contract.test.ts +8 -8
  210. package/src/theme/__tests__/theme-colors-parity.test.ts +44 -88
  211. package/src/theme/build-theme.ts +32 -44
  212. package/src/theme/color-engine/cam16.ts +179 -0
  213. package/src/theme/color-engine/color-role.ts +217 -0
  214. package/src/theme/color-engine/color-roles.ts +435 -0
  215. package/src/theme/color-engine/color-utils.ts +157 -0
  216. package/src/theme/color-engine/contrast-curve.ts +25 -0
  217. package/src/theme/color-engine/contrast.ts +59 -0
  218. package/src/theme/color-engine/dislike-analyzer.ts +19 -0
  219. package/src/theme/color-engine/dynamic-scheme.ts +90 -0
  220. package/src/theme/color-engine/hct-solver.ts +263 -0
  221. package/src/theme/color-engine/hct.ts +69 -0
  222. package/src/theme/color-engine/index.ts +73 -0
  223. package/src/theme/color-engine/lab-point-provider.ts +26 -0
  224. package/src/theme/color-engine/math-utils.ts +69 -0
  225. package/src/theme/color-engine/quantizer-map.ts +17 -0
  226. package/src/theme/color-engine/quantizer-wu.ts +320 -0
  227. package/src/theme/color-engine/scheme-variants.ts +113 -0
  228. package/src/theme/color-engine/score.ts +82 -0
  229. package/src/theme/color-engine/seed-from-image.ts +64 -0
  230. package/src/theme/color-engine/tonal-palette.ts +94 -0
  231. package/src/theme/color-engine/tone-delta-pair.ts +21 -0
  232. package/src/theme/color-engine/variant.ts +18 -0
  233. package/src/theme/color-engine/viewing-conditions.ts +77 -0
  234. package/src/theme/color-presets.ts +54 -631
  235. package/src/theme/preset-vars.ts +65 -49
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DynamicScheme","sanitizeDegreesDouble","TonalPalette","Variant","VIBRANT_HUES","VIBRANT_SECONDARY_ROTATIONS","VIBRANT_TERTIARY_ROTATIONS","EXPRESSIVE_HUES","EXPRESSIVE_SECONDARY_ROTATIONS","EXPRESSIVE_TERTIARY_ROTATIONS","schemeVibrant","source","isDark","contrastLevel","sourceColorArgb","toInt","variant","VIBRANT","primaryPalette","fromHueAndChroma","hue","secondaryPalette","getRotatedHue","tertiaryPalette","neutralPalette","neutralVariantPalette","schemeExpressive","EXPRESSIVE","schemeTonalSpot","TONAL_SPOT","schemeNeutral","NEUTRAL","BUILDERS","vibrant","expressive","tonalSpot","neutral","buildScheme"],"sourceRoot":"../../../../src","sources":["theme/color-engine/scheme-variants.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — seed scoring.
5
+ *
6
+ * Faithful port of Material Color Utilities' `Score` (Apache-2.0). Given a map
7
+ * of quantized colours → population, ranks them for theme suitability — favouring
8
+ * colours whose hue is well-represented in the image AND chromatic enough to make
9
+ * a good accent — and de-duplicates by hue. Returns the best seed candidates.
10
+ */
11
+ import { Hct } from "./hct.js";
12
+ import { differenceDegrees, sanitizeDegreesInt } from "./math-utils.js";
13
+ const TARGET_CHROMA = 48.0;
14
+ const WEIGHT_PROPORTION = 0.7;
15
+ const WEIGHT_CHROMA_ABOVE = 0.3;
16
+ const WEIGHT_CHROMA_BELOW = 0.1;
17
+ const CUTOFF_CHROMA = 5.0;
18
+ const CUTOFF_EXCITED_PROPORTION = 0.01;
19
+ /** Rank quantized colours as theme seeds. Best first. */
20
+ export function score(colorsToPopulation, options = {}) {
21
+ const desired = options.desired ?? 4;
22
+ const fallbackColorARGB = options.fallbackColorARGB ?? 0xff4285f4;
23
+ const filter = options.filter ?? true;
24
+ const colorsHct = [];
25
+ const huePopulation = new Array(360).fill(0);
26
+ let populationSum = 0;
27
+ for (const [argb, population] of colorsToPopulation.entries()) {
28
+ const hct = Hct.fromInt(argb);
29
+ colorsHct.push(hct);
30
+ const hueIndex = Math.floor(hct.hue);
31
+ huePopulation[hueIndex] = (huePopulation[hueIndex] ?? 0) + population;
32
+ populationSum += population;
33
+ }
34
+ const hueExcitedProportions = new Array(360).fill(0.0);
35
+ for (let hue = 0; hue < 360; hue++) {
36
+ const proportion = (huePopulation[hue] ?? 0) / populationSum;
37
+ for (let i = hue - 14; i < hue + 16; i++) {
38
+ const index = sanitizeDegreesInt(i);
39
+ hueExcitedProportions[index] = (hueExcitedProportions[index] ?? 0) + proportion;
40
+ }
41
+ }
42
+ const scoredHct = [];
43
+ for (const hct of colorsHct) {
44
+ const hue = sanitizeDegreesInt(Math.round(hct.hue));
45
+ const proportion = hueExcitedProportions[hue] ?? 0;
46
+ if (filter && (hct.chroma < CUTOFF_CHROMA || proportion <= CUTOFF_EXCITED_PROPORTION)) {
47
+ continue;
48
+ }
49
+ const proportionScore = proportion * 100.0 * WEIGHT_PROPORTION;
50
+ const chromaWeight = hct.chroma < TARGET_CHROMA ? WEIGHT_CHROMA_BELOW : WEIGHT_CHROMA_ABOVE;
51
+ const chromaScore = (hct.chroma - TARGET_CHROMA) * chromaWeight;
52
+ scoredHct.push({
53
+ hct,
54
+ score: proportionScore + chromaScore
55
+ });
56
+ }
57
+ scoredHct.sort((a, b) => a.score > b.score ? -1 : a.score < b.score ? 1 : 0);
58
+ const chosenColors = [];
59
+ for (let differenceLimit = 90; differenceLimit >= 15; differenceLimit--) {
60
+ chosenColors.length = 0;
61
+ for (const {
62
+ hct
63
+ } of scoredHct) {
64
+ const duplicateHue = chosenColors.find(chosen => differenceDegrees(hct.hue, chosen.hue) < differenceLimit);
65
+ if (!duplicateHue) chosenColors.push(hct);
66
+ if (chosenColors.length >= desired) break;
67
+ }
68
+ if (chosenColors.length >= desired) break;
69
+ }
70
+ const colors = [];
71
+ if (chosenColors.length === 0) colors.push(fallbackColorARGB);
72
+ for (const chosen of chosenColors) colors.push(chosen.toInt());
73
+ return colors;
74
+ }
75
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Hct","differenceDegrees","sanitizeDegreesInt","TARGET_CHROMA","WEIGHT_PROPORTION","WEIGHT_CHROMA_ABOVE","WEIGHT_CHROMA_BELOW","CUTOFF_CHROMA","CUTOFF_EXCITED_PROPORTION","score","colorsToPopulation","options","desired","fallbackColorARGB","filter","colorsHct","huePopulation","Array","fill","populationSum","argb","population","entries","hct","fromInt","push","hueIndex","Math","floor","hue","hueExcitedProportions","proportion","i","index","scoredHct","round","chroma","proportionScore","chromaWeight","chromaScore","sort","a","b","chosenColors","differenceLimit","length","duplicateHue","find","chosen","colors","toInt"],"sourceRoot":"../../../../src","sources":["theme/color-engine/score.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — a seed colour from an image.
5
+ *
6
+ * The "theme from your photo/wallpaper" entry point. Wu-quantizes the pixels to
7
+ * a small representative palette, tallies each pixel to its nearest
8
+ * representative (a deterministic single assignment in L*a*b* — Bloom's stand-in
9
+ * for the reference's stochastic k-means, so results are reproducible), then
10
+ * scores the palette for theme suitability. Feed the top result straight into
11
+ * `generateRoleColors({ seed })`.
12
+ */
13
+ import { hexFromArgb } from "./index.js";
14
+ import { labDistance, labFromInt } from "./lab-point-provider.js";
15
+ import { quantizeWu } from "./quantizer-wu.js";
16
+ import { countByColor } from "./quantizer-map.js";
17
+ import { score } from "./score.js";
18
+
19
+ /**
20
+ * Quantize `pixels` to a representative palette with its populations. Uses Wu
21
+ * (deterministic) for the palette, then assigns every pixel to its nearest
22
+ * representative in L*a*b* — no randomness, so the same image always yields the
23
+ * same result.
24
+ */
25
+ export function quantizeImage(pixels, maxColors = 128) {
26
+ const representatives = quantizeWu(pixels, maxColors);
27
+ if (representatives.length === 0) return new Map();
28
+ const repPoints = representatives.map(labFromInt);
29
+ const populations = new Array(representatives.length).fill(0);
30
+ for (const [pixel, count] of countByColor(pixels).entries()) {
31
+ const point = labFromInt(pixel);
32
+ let best = 0;
33
+ let bestDistance = Infinity;
34
+ for (let i = 0; i < repPoints.length; i++) {
35
+ const repPoint = repPoints[i];
36
+ if (repPoint === undefined) continue;
37
+ const d = labDistance(point, repPoint);
38
+ if (d < bestDistance) {
39
+ bestDistance = d;
40
+ best = i;
41
+ }
42
+ }
43
+ populations[best] = (populations[best] ?? 0) + count;
44
+ }
45
+ const result = new Map();
46
+ for (let i = 0; i < representatives.length; i++) {
47
+ const representative = representatives[i];
48
+ const population = populations[i] ?? 0;
49
+ if (representative !== undefined && population > 0) result.set(representative, population);
50
+ }
51
+ return result;
52
+ }
53
+
54
+ /** Ranked seed candidates (best first) extracted from an image's pixels (ARGB). */
55
+ export function seedsFromImagePixels(pixels, options) {
56
+ return score(quantizeImage(pixels), options);
57
+ }
58
+
59
+ /** The single best seed colour from an image, as `#rrggbb`. */
60
+ export function seedHexFromImagePixels(pixels) {
61
+ const [top] = seedsFromImagePixels(pixels, {
62
+ desired: 1
63
+ });
64
+ if (top === undefined) throw new Error('no seed colour could be extracted');
65
+ return hexFromArgb(top);
66
+ }
67
+ //# sourceMappingURL=seed-from-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["hexFromArgb","labDistance","labFromInt","quantizeWu","countByColor","score","quantizeImage","pixels","maxColors","representatives","length","Map","repPoints","map","populations","Array","fill","pixel","count","entries","point","best","bestDistance","Infinity","i","repPoint","undefined","d","result","representative","population","set","seedsFromImagePixels","options","seedHexFromImagePixels","top","desired","Error"],"sourceRoot":"../../../../src","sources":["theme/color-engine/seed-from-image.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,YAAS;AACrC,SAASC,WAAW,EAAEC,UAAU,QAAuB,yBAAsB;AAC7E,SAASC,UAAU,QAAQ,mBAAgB;AAC3C,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SAASC,KAAK,QAA2B,YAAS;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,MAAgB,EAAEC,SAAS,GAAG,GAAG,EAAuB;EACpF,MAAMC,eAAe,GAAGN,UAAU,CAACI,MAAM,EAAEC,SAAS,CAAC;EACrD,IAAIC,eAAe,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAIC,GAAG,CAAC,CAAC;EAClD,MAAMC,SAAqB,GAAGH,eAAe,CAACI,GAAG,CAACX,UAAU,CAAC;EAE7D,MAAMY,WAAW,GAAG,IAAIC,KAAK,CAASN,eAAe,CAACC,MAAM,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC;EACrE,KAAK,MAAM,CAACC,KAAK,EAAEC,KAAK,CAAC,IAAId,YAAY,CAACG,MAAM,CAAC,CAACY,OAAO,CAAC,CAAC,EAAE;IAC3D,MAAMC,KAAK,GAAGlB,UAAU,CAACe,KAAK,CAAC;IAC/B,IAAII,IAAI,GAAG,CAAC;IACZ,IAAIC,YAAY,GAAGC,QAAQ;IAC3B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGZ,SAAS,CAACF,MAAM,EAAEc,CAAC,EAAE,EAAE;MACzC,MAAMC,QAAQ,GAAGb,SAAS,CAACY,CAAC,CAAC;MAC7B,IAAIC,QAAQ,KAAKC,SAAS,EAAE;MAC5B,MAAMC,CAAC,GAAG1B,WAAW,CAACmB,KAAK,EAAEK,QAAQ,CAAC;MACtC,IAAIE,CAAC,GAAGL,YAAY,EAAE;QACpBA,YAAY,GAAGK,CAAC;QAChBN,IAAI,GAAGG,CAAC;MACV;IACF;IACAV,WAAW,CAACO,IAAI,CAAC,GAAG,CAACP,WAAW,CAACO,IAAI,CAAC,IAAI,CAAC,IAAIH,KAAK;EACtD;EAEA,MAAMU,MAAM,GAAG,IAAIjB,GAAG,CAAiB,CAAC;EACxC,KAAK,IAAIa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGf,eAAe,CAACC,MAAM,EAAEc,CAAC,EAAE,EAAE;IAC/C,MAAMK,cAAc,GAAGpB,eAAe,CAACe,CAAC,CAAC;IACzC,MAAMM,UAAU,GAAGhB,WAAW,CAACU,CAAC,CAAC,IAAI,CAAC;IACtC,IAAIK,cAAc,KAAKH,SAAS,IAAII,UAAU,GAAG,CAAC,EAAEF,MAAM,CAACG,GAAG,CAACF,cAAc,EAAEC,UAAU,CAAC;EAC5F;EACA,OAAOF,MAAM;AACf;;AAEA;AACA,OAAO,SAASI,oBAAoBA,CAACzB,MAAgB,EAAE0B,OAAsB,EAAY;EACvF,OAAO5B,KAAK,CAACC,aAAa,CAACC,MAAM,CAAC,EAAE0B,OAAO,CAAC;AAC9C;;AAEA;AACA,OAAO,SAASC,sBAAsBA,CAAC3B,MAAgB,EAAU;EAC/D,MAAM,CAAC4B,GAAG,CAAC,GAAGH,oBAAoB,CAACzB,MAAM,EAAE;IAAE6B,OAAO,EAAE;EAAE,CAAC,CAAC;EAC1D,IAAID,GAAG,KAAKT,SAAS,EAAE,MAAM,IAAIW,KAAK,CAAC,mCAAmC,CAAC;EAC3E,OAAOrC,WAAW,CAACmC,GAAG,CAAC;AACzB","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — tonal palettes.
5
+ *
6
+ * Faithful port of Material Color Utilities' `TonalPalette` (Apache-2.0). A
7
+ * palette holds a fixed hue + chroma and yields a colour for any tone (0–100).
8
+ * Schemes build primary/secondary/tertiary/neutral palettes and read specific
9
+ * tones per role.
10
+ */
11
+ import { Hct } from "./hct.js";
12
+ export class TonalPalette {
13
+ cache = new Map();
14
+ constructor(hue, chroma, keyColor) {
15
+ this.hue = hue;
16
+ this.chroma = chroma;
17
+ this.keyColor = keyColor;
18
+ }
19
+ static fromInt(argb) {
20
+ return TonalPalette.fromHct(Hct.fromInt(argb));
21
+ }
22
+ static fromHct(hct) {
23
+ return new TonalPalette(hct.hue, hct.chroma, hct);
24
+ }
25
+ static fromHueAndChroma(hue, chroma) {
26
+ const keyColor = new KeyColor(hue, chroma).create();
27
+ return new TonalPalette(hue, chroma, keyColor);
28
+ }
29
+
30
+ /** ARGB of this palette at the given tone. */
31
+ tone(tone) {
32
+ let argb = this.cache.get(tone);
33
+ if (argb === undefined) {
34
+ argb = Hct.from(this.hue, this.chroma, tone).toInt();
35
+ this.cache.set(tone, argb);
36
+ }
37
+ return argb;
38
+ }
39
+
40
+ /** HCT of this palette at the given tone. */
41
+ getHct(tone) {
42
+ return Hct.fromInt(this.tone(tone));
43
+ }
44
+ }
45
+
46
+ /** The colour that represents a palette's hue + chroma (first from T50). */
47
+ class KeyColor {
48
+ chromaCache = new Map();
49
+ maxChromaValue = 200.0;
50
+ constructor(hue, requestedChroma) {
51
+ this.hue = hue;
52
+ this.requestedChroma = requestedChroma;
53
+ }
54
+ create() {
55
+ const pivotTone = 50;
56
+ const toneStepSize = 1;
57
+ const epsilon = 0.01;
58
+ let lowerTone = 0;
59
+ let upperTone = 100;
60
+ while (lowerTone < upperTone) {
61
+ const midTone = Math.floor((lowerTone + upperTone) / 2);
62
+ const isAscending = this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);
63
+ const sufficientChroma = this.maxChroma(midTone) >= this.requestedChroma - epsilon;
64
+ if (sufficientChroma) {
65
+ if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {
66
+ upperTone = midTone;
67
+ } else {
68
+ if (lowerTone === midTone) {
69
+ return Hct.from(this.hue, this.requestedChroma, lowerTone);
70
+ }
71
+ lowerTone = midTone;
72
+ }
73
+ } else if (isAscending) {
74
+ lowerTone = midTone + toneStepSize;
75
+ } else {
76
+ upperTone = midTone;
77
+ }
78
+ }
79
+ return Hct.from(this.hue, this.requestedChroma, lowerTone);
80
+ }
81
+ maxChroma(tone) {
82
+ const cached = this.chromaCache.get(tone);
83
+ if (cached !== undefined) return cached;
84
+ const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;
85
+ this.chromaCache.set(tone, chroma);
86
+ return chroma;
87
+ }
88
+ }
89
+ //# sourceMappingURL=tonal-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Hct","TonalPalette","cache","Map","constructor","hue","chroma","keyColor","fromInt","argb","fromHct","hct","fromHueAndChroma","KeyColor","create","tone","get","undefined","from","toInt","set","getHct","chromaCache","maxChromaValue","requestedChroma","pivotTone","toneStepSize","epsilon","lowerTone","upperTone","midTone","Math","floor","isAscending","maxChroma","sufficientChroma","abs","cached"],"sourceRoot":"../../../../src","sources":["theme/color-engine/tonal-palette.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — tone-delta pair.
5
+ *
6
+ * Faithful port of Material Color Utilities' `ToneDeltaPair` (Apache-2.0).
7
+ * Constrains two related roles to keep a minimum tonal distance in a given
8
+ * direction (e.g. a fixed colour must stay lighter than its dim variant), so
9
+ * paired roles never collapse into each other.
10
+ */
11
+
12
+ export class ToneDeltaPair {
13
+ constructor(roleA, roleB, delta, polarity, stayTogether) {
14
+ this.roleA = roleA;
15
+ this.roleB = roleB;
16
+ this.delta = delta;
17
+ this.polarity = polarity;
18
+ this.stayTogether = stayTogether;
19
+ }
20
+ }
21
+ //# sourceMappingURL=tone-delta-pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ToneDeltaPair","constructor","roleA","roleB","delta","polarity","stayTogether"],"sourceRoot":"../../../../src","sources":["theme/color-engine/tone-delta-pair.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,OAAO,MAAMA,aAAa,CAAC;EACzBC,WAAWA,CACAC,KAAgB,EAChBC,KAAgB,EAChBC,KAAa,EACbC,QAAsB,EACtBC,YAAqB,EAC9B;IAAA,KALSJ,KAAgB,GAAhBA,KAAgB;IAAA,KAChBC,KAAgB,GAAhBA,KAAgB;IAAA,KAChBC,KAAa,GAAbA,KAAa;IAAA,KACbC,QAAsB,GAAtBA,QAAsB;IAAA,KACtBC,YAAqB,GAArBA,YAAqB;EAC7B;AACL","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — scheme variants.
5
+ *
6
+ * The families of dynamic-colour scheme supported by the engine. Bloom exposes
7
+ * the useful subset (Vibrant, Expressive, TonalSpot, Neutral, Fidelity); the
8
+ * numeric values match Material Color Utilities so ported scheme logic lines up.
9
+ */
10
+ export let Variant = /*#__PURE__*/function (Variant) {
11
+ Variant[Variant["MONOCHROME"] = 0] = "MONOCHROME";
12
+ Variant[Variant["NEUTRAL"] = 1] = "NEUTRAL";
13
+ Variant[Variant["TONAL_SPOT"] = 2] = "TONAL_SPOT";
14
+ Variant[Variant["VIBRANT"] = 3] = "VIBRANT";
15
+ Variant[Variant["EXPRESSIVE"] = 4] = "EXPRESSIVE";
16
+ Variant[Variant["FIDELITY"] = 5] = "FIDELITY";
17
+ Variant[Variant["CONTENT"] = 6] = "CONTENT";
18
+ Variant[Variant["RAINBOW"] = 7] = "RAINBOW";
19
+ Variant[Variant["FRUIT_SALAD"] = 8] = "FRUIT_SALAD";
20
+ return Variant;
21
+ }({});
22
+ //# sourceMappingURL=variant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Variant"],"sourceRoot":"../../../../src","sources":["theme/color-engine/variant.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,OAAO,0BAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAPA,OAAO,CAAPA,OAAO;EAAA,OAAPA,OAAO;AAAA","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Bloom colour engine — CAM16 viewing conditions.
5
+ *
6
+ * Faithful port of Material Color Utilities' `ViewingConditions` (Apache-2.0)
7
+ * into Bloom's own code. Caches the CAM16 intermediates that depend only on the
8
+ * environment (white point, adapting luminance, surround) so the appearance
9
+ * model can run fast. Bloom only ever uses the sRGB `DEFAULT`.
10
+ */
11
+ import { whitePointD65, yFromLstar } from "./color-utils.js";
12
+ import { lerp } from "./math-utils.js";
13
+ export class ViewingConditions {
14
+ /** sRGB-like viewing conditions (the only ones Bloom uses). */
15
+ static get DEFAULT() {
16
+ return ViewingConditions._default ??= ViewingConditions.make();
17
+ }
18
+ constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {
19
+ this.n = n;
20
+ this.aw = aw;
21
+ this.nbb = nbb;
22
+ this.ncb = ncb;
23
+ this.c = c;
24
+ this.nc = nc;
25
+ this.rgbD = rgbD;
26
+ this.fl = fl;
27
+ this.fLRoot = fLRoot;
28
+ this.z = z;
29
+ }
30
+ static make(whitePoint = whitePointD65(), adaptingLuminance = 200.0 / Math.PI * yFromLstar(50.0) / 100.0, backgroundLstar = 50.0, surround = 2.0, discountingIlluminant = false) {
31
+ const xyz = whitePoint;
32
+ const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;
33
+ const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;
34
+ const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;
35
+ const f = 0.8 + surround / 10.0;
36
+ const c = f >= 0.9 ? lerp(0.59, 0.69, (f - 0.9) * 10.0) : lerp(0.525, 0.59, (f - 0.8) * 10.0);
37
+ let d = discountingIlluminant ? 1.0 : f * (1.0 - 1.0 / 3.6 * Math.exp((-adaptingLuminance - 42.0) / 92.0));
38
+ d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;
39
+ const nc = f;
40
+ const rgbD = [d * (100.0 / rW) + 1.0 - d, d * (100.0 / gW) + 1.0 - d, d * (100.0 / bW) + 1.0 - d];
41
+ const k = 1.0 / (5.0 * adaptingLuminance + 1.0);
42
+ const k4 = k * k * k * k;
43
+ const k4F = 1.0 - k4;
44
+ const fl = k4 * adaptingLuminance + 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);
45
+ const n = yFromLstar(backgroundLstar) / whitePoint[1];
46
+ const z = 1.48 + Math.sqrt(n);
47
+ const nbb = 0.725 / Math.pow(n, 0.2);
48
+ const ncb = nbb;
49
+ const rgbAFactors = [Math.pow(fl * rgbD[0] * rW / 100.0, 0.42), Math.pow(fl * rgbD[1] * gW / 100.0, 0.42), Math.pow(fl * rgbD[2] * bW / 100.0, 0.42)];
50
+ const rgbA = [400.0 * rgbAFactors[0] / (rgbAFactors[0] + 27.13), 400.0 * rgbAFactors[1] / (rgbAFactors[1] + 27.13), 400.0 * rgbAFactors[2] / (rgbAFactors[2] + 27.13)];
51
+ const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;
52
+ return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);
53
+ }
54
+ }
55
+ //# sourceMappingURL=viewing-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["whitePointD65","yFromLstar","lerp","ViewingConditions","DEFAULT","_default","make","constructor","n","aw","nbb","ncb","c","nc","rgbD","fl","fLRoot","z","whitePoint","adaptingLuminance","Math","PI","backgroundLstar","surround","discountingIlluminant","xyz","rW","gW","bW","f","d","exp","k","k4","k4F","cbrt","sqrt","pow","rgbAFactors","rgbA"],"sourceRoot":"../../../../src","sources":["theme/color-engine/viewing-conditions.ts"],"mappings":"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","ignoreList":[]}