@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,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildScheme = buildScheme;
7
+ exports.schemeExpressive = schemeExpressive;
8
+ exports.schemeNeutral = schemeNeutral;
9
+ exports.schemeTonalSpot = schemeTonalSpot;
10
+ exports.schemeVibrant = schemeVibrant;
11
+ var _dynamicScheme = require("./dynamic-scheme.js");
12
+ var _mathUtils = require("./math-utils.js");
13
+ var _tonalPalette = require("./tonal-palette.js");
14
+ var _variant = require("./variant.js");
15
+ /**
16
+ * Bloom colour engine — scheme variants.
17
+ *
18
+ * How each variant derives its five tonal palettes from the seed HCT. Faithful
19
+ * port of Material Color Utilities' `Scheme*` families (Apache-2.0), expressed
20
+ * as plain builder functions (our style) rather than subclasses. Fidelity/
21
+ * Content are intentionally left out — they need the temperature-cache complement
22
+ * and aren't useful for Bloom's fixed brand seeds.
23
+ */
24
+
25
+ const VIBRANT_HUES = [0.0, 41.0, 61.0, 101.0, 131.0, 181.0, 251.0, 301.0, 360.0];
26
+ const VIBRANT_SECONDARY_ROTATIONS = [18.0, 15.0, 10.0, 12.0, 15.0, 18.0, 15.0, 12.0, 12.0];
27
+ const VIBRANT_TERTIARY_ROTATIONS = [35.0, 30.0, 20.0, 25.0, 30.0, 35.0, 30.0, 25.0, 25.0];
28
+ const EXPRESSIVE_HUES = [0.0, 21.0, 51.0, 121.0, 151.0, 191.0, 271.0, 321.0, 360.0];
29
+ const EXPRESSIVE_SECONDARY_ROTATIONS = [45.0, 95.0, 45.0, 20.0, 45.0, 90.0, 45.0, 45.0, 45.0];
30
+ const EXPRESSIVE_TERTIARY_ROTATIONS = [120.0, 120.0, 20.0, 45.0, 20.0, 15.0, 20.0, 120.0, 120.0];
31
+
32
+ /** Maxed-out colourfulness at each position of the primary palette. */
33
+ function schemeVibrant(source, isDark, contrastLevel) {
34
+ return new _dynamicScheme.DynamicScheme({
35
+ sourceColorArgb: source.toInt(),
36
+ variant: _variant.Variant.VIBRANT,
37
+ contrastLevel,
38
+ isDark,
39
+ primaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 200.0),
40
+ secondaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(_dynamicScheme.DynamicScheme.getRotatedHue(source, VIBRANT_HUES, VIBRANT_SECONDARY_ROTATIONS), 24.0),
41
+ tertiaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(_dynamicScheme.DynamicScheme.getRotatedHue(source, VIBRANT_HUES, VIBRANT_TERTIARY_ROTATIONS), 32.0),
42
+ neutralPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 10.0),
43
+ neutralVariantPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 12.0)
44
+ });
45
+ }
46
+
47
+ /** Playful, intentionally detached from the seed hue (primary rotated 240°). */
48
+ function schemeExpressive(source, isDark, contrastLevel) {
49
+ return new _dynamicScheme.DynamicScheme({
50
+ sourceColorArgb: source.toInt(),
51
+ variant: _variant.Variant.EXPRESSIVE,
52
+ contrastLevel,
53
+ isDark,
54
+ primaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma((0, _mathUtils.sanitizeDegreesDouble)(source.hue + 240.0), 40.0),
55
+ secondaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(_dynamicScheme.DynamicScheme.getRotatedHue(source, EXPRESSIVE_HUES, EXPRESSIVE_SECONDARY_ROTATIONS), 24.0),
56
+ tertiaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(_dynamicScheme.DynamicScheme.getRotatedHue(source, EXPRESSIVE_HUES, EXPRESSIVE_TERTIARY_ROTATIONS), 32.0),
57
+ neutralPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue + 15, 8.0),
58
+ neutralVariantPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue + 15, 12.0)
59
+ });
60
+ }
61
+
62
+ /** The Material You default — a calm, balanced treatment of the seed. */
63
+ function schemeTonalSpot(source, isDark, contrastLevel) {
64
+ return new _dynamicScheme.DynamicScheme({
65
+ sourceColorArgb: source.toInt(),
66
+ variant: _variant.Variant.TONAL_SPOT,
67
+ contrastLevel,
68
+ isDark,
69
+ primaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 36.0),
70
+ secondaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 16.0),
71
+ tertiaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma((0, _mathUtils.sanitizeDegreesDouble)(source.hue + 60.0), 24.0),
72
+ neutralPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 6.0),
73
+ neutralVariantPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 8.0)
74
+ });
75
+ }
76
+
77
+ /** Near-greyscale — the seed hue is present only as a whisper. */
78
+ function schemeNeutral(source, isDark, contrastLevel) {
79
+ return new _dynamicScheme.DynamicScheme({
80
+ sourceColorArgb: source.toInt(),
81
+ variant: _variant.Variant.NEUTRAL,
82
+ contrastLevel,
83
+ isDark,
84
+ primaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 12.0),
85
+ secondaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 8.0),
86
+ tertiaryPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 16.0),
87
+ neutralPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 2.0),
88
+ neutralVariantPalette: _tonalPalette.TonalPalette.fromHueAndChroma(source.hue, 2.0)
89
+ });
90
+ }
91
+ const BUILDERS = {
92
+ vibrant: schemeVibrant,
93
+ expressive: schemeExpressive,
94
+ tonalSpot: schemeTonalSpot,
95
+ neutral: schemeNeutral
96
+ };
97
+
98
+ /** Build a scheme by variant name. */
99
+ function buildScheme(variant, source, isDark, contrastLevel = 0) {
100
+ return BUILDERS[variant](source, isDark, contrastLevel);
101
+ }
102
+ //# sourceMappingURL=scheme-variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_dynamicScheme","require","_mathUtils","_tonalPalette","_variant","VIBRANT_HUES","VIBRANT_SECONDARY_ROTATIONS","VIBRANT_TERTIARY_ROTATIONS","EXPRESSIVE_HUES","EXPRESSIVE_SECONDARY_ROTATIONS","EXPRESSIVE_TERTIARY_ROTATIONS","schemeVibrant","source","isDark","contrastLevel","DynamicScheme","sourceColorArgb","toInt","variant","Variant","VIBRANT","primaryPalette","TonalPalette","fromHueAndChroma","hue","secondaryPalette","getRotatedHue","tertiaryPalette","neutralPalette","neutralVariantPalette","schemeExpressive","EXPRESSIVE","sanitizeDegreesDouble","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,80 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.score = score;
7
+ var _hct = require("./hct.js");
8
+ var _mathUtils = require("./math-utils.js");
9
+ /**
10
+ * Bloom colour engine — seed scoring.
11
+ *
12
+ * Faithful port of Material Color Utilities' `Score` (Apache-2.0). Given a map
13
+ * of quantized colours → population, ranks them for theme suitability — favouring
14
+ * colours whose hue is well-represented in the image AND chromatic enough to make
15
+ * a good accent — and de-duplicates by hue. Returns the best seed candidates.
16
+ */
17
+
18
+ const TARGET_CHROMA = 48.0;
19
+ const WEIGHT_PROPORTION = 0.7;
20
+ const WEIGHT_CHROMA_ABOVE = 0.3;
21
+ const WEIGHT_CHROMA_BELOW = 0.1;
22
+ const CUTOFF_CHROMA = 5.0;
23
+ const CUTOFF_EXCITED_PROPORTION = 0.01;
24
+ /** Rank quantized colours as theme seeds. Best first. */
25
+ function score(colorsToPopulation, options = {}) {
26
+ const desired = options.desired ?? 4;
27
+ const fallbackColorARGB = options.fallbackColorARGB ?? 0xff4285f4;
28
+ const filter = options.filter ?? true;
29
+ const colorsHct = [];
30
+ const huePopulation = new Array(360).fill(0);
31
+ let populationSum = 0;
32
+ for (const [argb, population] of colorsToPopulation.entries()) {
33
+ const hct = _hct.Hct.fromInt(argb);
34
+ colorsHct.push(hct);
35
+ const hueIndex = Math.floor(hct.hue);
36
+ huePopulation[hueIndex] = (huePopulation[hueIndex] ?? 0) + population;
37
+ populationSum += population;
38
+ }
39
+ const hueExcitedProportions = new Array(360).fill(0.0);
40
+ for (let hue = 0; hue < 360; hue++) {
41
+ const proportion = (huePopulation[hue] ?? 0) / populationSum;
42
+ for (let i = hue - 14; i < hue + 16; i++) {
43
+ const index = (0, _mathUtils.sanitizeDegreesInt)(i);
44
+ hueExcitedProportions[index] = (hueExcitedProportions[index] ?? 0) + proportion;
45
+ }
46
+ }
47
+ const scoredHct = [];
48
+ for (const hct of colorsHct) {
49
+ const hue = (0, _mathUtils.sanitizeDegreesInt)(Math.round(hct.hue));
50
+ const proportion = hueExcitedProportions[hue] ?? 0;
51
+ if (filter && (hct.chroma < CUTOFF_CHROMA || proportion <= CUTOFF_EXCITED_PROPORTION)) {
52
+ continue;
53
+ }
54
+ const proportionScore = proportion * 100.0 * WEIGHT_PROPORTION;
55
+ const chromaWeight = hct.chroma < TARGET_CHROMA ? WEIGHT_CHROMA_BELOW : WEIGHT_CHROMA_ABOVE;
56
+ const chromaScore = (hct.chroma - TARGET_CHROMA) * chromaWeight;
57
+ scoredHct.push({
58
+ hct,
59
+ score: proportionScore + chromaScore
60
+ });
61
+ }
62
+ scoredHct.sort((a, b) => a.score > b.score ? -1 : a.score < b.score ? 1 : 0);
63
+ const chosenColors = [];
64
+ for (let differenceLimit = 90; differenceLimit >= 15; differenceLimit--) {
65
+ chosenColors.length = 0;
66
+ for (const {
67
+ hct
68
+ } of scoredHct) {
69
+ const duplicateHue = chosenColors.find(chosen => (0, _mathUtils.differenceDegrees)(hct.hue, chosen.hue) < differenceLimit);
70
+ if (!duplicateHue) chosenColors.push(hct);
71
+ if (chosenColors.length >= desired) break;
72
+ }
73
+ if (chosenColors.length >= desired) break;
74
+ }
75
+ const colors = [];
76
+ if (chosenColors.length === 0) colors.push(fallbackColorARGB);
77
+ for (const chosen of chosenColors) colors.push(chosen.toInt());
78
+ return colors;
79
+ }
80
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_hct","require","_mathUtils","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","Hct","fromInt","push","hueIndex","Math","floor","hue","hueExcitedProportions","proportion","i","index","sanitizeDegreesInt","scoredHct","round","chroma","proportionScore","chromaWeight","chromaScore","sort","a","b","chosenColors","differenceLimit","length","duplicateHue","find","chosen","differenceDegrees","colors","toInt"],"sourceRoot":"../../../../src","sources":["theme/color-engine/score.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.quantizeImage = quantizeImage;
7
+ exports.seedHexFromImagePixels = seedHexFromImagePixels;
8
+ exports.seedsFromImagePixels = seedsFromImagePixels;
9
+ var _index = require("./index.js");
10
+ var _labPointProvider = require("./lab-point-provider.js");
11
+ var _quantizerWu = require("./quantizer-wu.js");
12
+ var _quantizerMap = require("./quantizer-map.js");
13
+ var _score = require("./score.js");
14
+ /**
15
+ * Bloom colour engine — a seed colour from an image.
16
+ *
17
+ * The "theme from your photo/wallpaper" entry point. Wu-quantizes the pixels to
18
+ * a small representative palette, tallies each pixel to its nearest
19
+ * representative (a deterministic single assignment in L*a*b* — Bloom's stand-in
20
+ * for the reference's stochastic k-means, so results are reproducible), then
21
+ * scores the palette for theme suitability. Feed the top result straight into
22
+ * `generateRoleColors({ seed })`.
23
+ */
24
+
25
+ /**
26
+ * Quantize `pixels` to a representative palette with its populations. Uses Wu
27
+ * (deterministic) for the palette, then assigns every pixel to its nearest
28
+ * representative in L*a*b* — no randomness, so the same image always yields the
29
+ * same result.
30
+ */
31
+ function quantizeImage(pixels, maxColors = 128) {
32
+ const representatives = (0, _quantizerWu.quantizeWu)(pixels, maxColors);
33
+ if (representatives.length === 0) return new Map();
34
+ const repPoints = representatives.map(_labPointProvider.labFromInt);
35
+ const populations = new Array(representatives.length).fill(0);
36
+ for (const [pixel, count] of (0, _quantizerMap.countByColor)(pixels).entries()) {
37
+ const point = (0, _labPointProvider.labFromInt)(pixel);
38
+ let best = 0;
39
+ let bestDistance = Infinity;
40
+ for (let i = 0; i < repPoints.length; i++) {
41
+ const repPoint = repPoints[i];
42
+ if (repPoint === undefined) continue;
43
+ const d = (0, _labPointProvider.labDistance)(point, repPoint);
44
+ if (d < bestDistance) {
45
+ bestDistance = d;
46
+ best = i;
47
+ }
48
+ }
49
+ populations[best] = (populations[best] ?? 0) + count;
50
+ }
51
+ const result = new Map();
52
+ for (let i = 0; i < representatives.length; i++) {
53
+ const representative = representatives[i];
54
+ const population = populations[i] ?? 0;
55
+ if (representative !== undefined && population > 0) result.set(representative, population);
56
+ }
57
+ return result;
58
+ }
59
+
60
+ /** Ranked seed candidates (best first) extracted from an image's pixels (ARGB). */
61
+ function seedsFromImagePixels(pixels, options) {
62
+ return (0, _score.score)(quantizeImage(pixels), options);
63
+ }
64
+
65
+ /** The single best seed colour from an image, as `#rrggbb`. */
66
+ function seedHexFromImagePixels(pixels) {
67
+ const [top] = seedsFromImagePixels(pixels, {
68
+ desired: 1
69
+ });
70
+ if (top === undefined) throw new Error('no seed colour could be extracted');
71
+ return (0, _index.hexFromArgb)(top);
72
+ }
73
+ //# sourceMappingURL=seed-from-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_index","require","_labPointProvider","_quantizerWu","_quantizerMap","_score","quantizeImage","pixels","maxColors","representatives","quantizeWu","length","Map","repPoints","map","labFromInt","populations","Array","fill","pixel","count","countByColor","entries","point","best","bestDistance","Infinity","i","repPoint","undefined","d","labDistance","result","representative","population","set","seedsFromImagePixels","options","score","seedHexFromImagePixels","top","desired","Error","hexFromArgb"],"sourceRoot":"../../../../src","sources":["theme/color-engine/seed-from-image.ts"],"mappings":";;;;;;;;AAUA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,aAAaA,CAACC,MAAgB,EAAEC,SAAS,GAAG,GAAG,EAAuB;EACpF,MAAMC,eAAe,GAAG,IAAAC,uBAAU,EAACH,MAAM,EAAEC,SAAS,CAAC;EACrD,IAAIC,eAAe,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO,IAAIC,GAAG,CAAC,CAAC;EAClD,MAAMC,SAAqB,GAAGJ,eAAe,CAACK,GAAG,CAACC,4BAAU,CAAC;EAE7D,MAAMC,WAAW,GAAG,IAAIC,KAAK,CAASR,eAAe,CAACE,MAAM,CAAC,CAACO,IAAI,CAAC,CAAC,CAAC;EACrE,KAAK,MAAM,CAACC,KAAK,EAAEC,KAAK,CAAC,IAAI,IAAAC,0BAAY,EAACd,MAAM,CAAC,CAACe,OAAO,CAAC,CAAC,EAAE;IAC3D,MAAMC,KAAK,GAAG,IAAAR,4BAAU,EAACI,KAAK,CAAC;IAC/B,IAAIK,IAAI,GAAG,CAAC;IACZ,IAAIC,YAAY,GAAGC,QAAQ;IAC3B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,SAAS,CAACF,MAAM,EAAEgB,CAAC,EAAE,EAAE;MACzC,MAAMC,QAAQ,GAAGf,SAAS,CAACc,CAAC,CAAC;MAC7B,IAAIC,QAAQ,KAAKC,SAAS,EAAE;MAC5B,MAAMC,CAAC,GAAG,IAAAC,6BAAW,EAACR,KAAK,EAAEK,QAAQ,CAAC;MACtC,IAAIE,CAAC,GAAGL,YAAY,EAAE;QACpBA,YAAY,GAAGK,CAAC;QAChBN,IAAI,GAAGG,CAAC;MACV;IACF;IACAX,WAAW,CAACQ,IAAI,CAAC,GAAG,CAACR,WAAW,CAACQ,IAAI,CAAC,IAAI,CAAC,IAAIJ,KAAK;EACtD;EAEA,MAAMY,MAAM,GAAG,IAAIpB,GAAG,CAAiB,CAAC;EACxC,KAAK,IAAIe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlB,eAAe,CAACE,MAAM,EAAEgB,CAAC,EAAE,EAAE;IAC/C,MAAMM,cAAc,GAAGxB,eAAe,CAACkB,CAAC,CAAC;IACzC,MAAMO,UAAU,GAAGlB,WAAW,CAACW,CAAC,CAAC,IAAI,CAAC;IACtC,IAAIM,cAAc,KAAKJ,SAAS,IAAIK,UAAU,GAAG,CAAC,EAAEF,MAAM,CAACG,GAAG,CAACF,cAAc,EAAEC,UAAU,CAAC;EAC5F;EACA,OAAOF,MAAM;AACf;;AAEA;AACO,SAASI,oBAAoBA,CAAC7B,MAAgB,EAAE8B,OAAsB,EAAY;EACvF,OAAO,IAAAC,YAAK,EAAChC,aAAa,CAACC,MAAM,CAAC,EAAE8B,OAAO,CAAC;AAC9C;;AAEA;AACO,SAASE,sBAAsBA,CAAChC,MAAgB,EAAU;EAC/D,MAAM,CAACiC,GAAG,CAAC,GAAGJ,oBAAoB,CAAC7B,MAAM,EAAE;IAAEkC,OAAO,EAAE;EAAE,CAAC,CAAC;EAC1D,IAAID,GAAG,KAAKX,SAAS,EAAE,MAAM,IAAIa,KAAK,CAAC,mCAAmC,CAAC;EAC3E,OAAO,IAAAC,kBAAW,EAACH,GAAG,CAAC;AACzB","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TonalPalette = void 0;
7
+ var _hct = require("./hct.js");
8
+ /**
9
+ * Bloom colour engine — tonal palettes.
10
+ *
11
+ * Faithful port of Material Color Utilities' `TonalPalette` (Apache-2.0). A
12
+ * palette holds a fixed hue + chroma and yields a colour for any tone (0–100).
13
+ * Schemes build primary/secondary/tertiary/neutral palettes and read specific
14
+ * tones per role.
15
+ */
16
+
17
+ class TonalPalette {
18
+ cache = new Map();
19
+ constructor(hue, chroma, keyColor) {
20
+ this.hue = hue;
21
+ this.chroma = chroma;
22
+ this.keyColor = keyColor;
23
+ }
24
+ static fromInt(argb) {
25
+ return TonalPalette.fromHct(_hct.Hct.fromInt(argb));
26
+ }
27
+ static fromHct(hct) {
28
+ return new TonalPalette(hct.hue, hct.chroma, hct);
29
+ }
30
+ static fromHueAndChroma(hue, chroma) {
31
+ const keyColor = new KeyColor(hue, chroma).create();
32
+ return new TonalPalette(hue, chroma, keyColor);
33
+ }
34
+
35
+ /** ARGB of this palette at the given tone. */
36
+ tone(tone) {
37
+ let argb = this.cache.get(tone);
38
+ if (argb === undefined) {
39
+ argb = _hct.Hct.from(this.hue, this.chroma, tone).toInt();
40
+ this.cache.set(tone, argb);
41
+ }
42
+ return argb;
43
+ }
44
+
45
+ /** HCT of this palette at the given tone. */
46
+ getHct(tone) {
47
+ return _hct.Hct.fromInt(this.tone(tone));
48
+ }
49
+ }
50
+
51
+ /** The colour that represents a palette's hue + chroma (first from T50). */
52
+ exports.TonalPalette = TonalPalette;
53
+ class KeyColor {
54
+ chromaCache = new Map();
55
+ maxChromaValue = 200.0;
56
+ constructor(hue, requestedChroma) {
57
+ this.hue = hue;
58
+ this.requestedChroma = requestedChroma;
59
+ }
60
+ create() {
61
+ const pivotTone = 50;
62
+ const toneStepSize = 1;
63
+ const epsilon = 0.01;
64
+ let lowerTone = 0;
65
+ let upperTone = 100;
66
+ while (lowerTone < upperTone) {
67
+ const midTone = Math.floor((lowerTone + upperTone) / 2);
68
+ const isAscending = this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);
69
+ const sufficientChroma = this.maxChroma(midTone) >= this.requestedChroma - epsilon;
70
+ if (sufficientChroma) {
71
+ if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {
72
+ upperTone = midTone;
73
+ } else {
74
+ if (lowerTone === midTone) {
75
+ return _hct.Hct.from(this.hue, this.requestedChroma, lowerTone);
76
+ }
77
+ lowerTone = midTone;
78
+ }
79
+ } else if (isAscending) {
80
+ lowerTone = midTone + toneStepSize;
81
+ } else {
82
+ upperTone = midTone;
83
+ }
84
+ }
85
+ return _hct.Hct.from(this.hue, this.requestedChroma, lowerTone);
86
+ }
87
+ maxChroma(tone) {
88
+ const cached = this.chromaCache.get(tone);
89
+ if (cached !== undefined) return cached;
90
+ const chroma = _hct.Hct.from(this.hue, this.maxChromaValue, tone).chroma;
91
+ this.chromaCache.set(tone, chroma);
92
+ return chroma;
93
+ }
94
+ }
95
+ //# sourceMappingURL=tonal-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_hct","require","TonalPalette","cache","Map","constructor","hue","chroma","keyColor","fromInt","argb","fromHct","Hct","hct","fromHueAndChroma","KeyColor","create","tone","get","undefined","from","toInt","set","getHct","exports","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,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ToneDeltaPair = void 0;
7
+ /**
8
+ * Bloom colour engine — tone-delta pair.
9
+ *
10
+ * Faithful port of Material Color Utilities' `ToneDeltaPair` (Apache-2.0).
11
+ * Constrains two related roles to keep a minimum tonal distance in a given
12
+ * direction (e.g. a fixed colour must stay lighter than its dim variant), so
13
+ * paired roles never collapse into each other.
14
+ */
15
+
16
+ class ToneDeltaPair {
17
+ constructor(roleA, roleB, delta, polarity, stayTogether) {
18
+ this.roleA = roleA;
19
+ this.roleB = roleB;
20
+ this.delta = delta;
21
+ this.polarity = polarity;
22
+ this.stayTogether = stayTogether;
23
+ }
24
+ }
25
+ exports.ToneDeltaPair = ToneDeltaPair;
26
+ //# sourceMappingURL=tone-delta-pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ToneDeltaPair","constructor","roleA","roleB","delta","polarity","stayTogether","exports"],"sourceRoot":"../../../../src","sources":["theme/color-engine/tone-delta-pair.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKO,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;AAACC,OAAA,CAAAP,aAAA,GAAAA,aAAA","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Variant = void 0;
7
+ /**
8
+ * Bloom colour engine — scheme variants.
9
+ *
10
+ * The families of dynamic-colour scheme supported by the engine. Bloom exposes
11
+ * the useful subset (Vibrant, Expressive, TonalSpot, Neutral, Fidelity); the
12
+ * numeric values match Material Color Utilities so ported scheme logic lines up.
13
+ */
14
+ let Variant = exports.Variant = /*#__PURE__*/function (Variant) {
15
+ Variant[Variant["MONOCHROME"] = 0] = "MONOCHROME";
16
+ Variant[Variant["NEUTRAL"] = 1] = "NEUTRAL";
17
+ Variant[Variant["TONAL_SPOT"] = 2] = "TONAL_SPOT";
18
+ Variant[Variant["VIBRANT"] = 3] = "VIBRANT";
19
+ Variant[Variant["EXPRESSIVE"] = 4] = "EXPRESSIVE";
20
+ Variant[Variant["FIDELITY"] = 5] = "FIDELITY";
21
+ Variant[Variant["CONTENT"] = 6] = "CONTENT";
22
+ Variant[Variant["RAINBOW"] = 7] = "RAINBOW";
23
+ Variant[Variant["FRUIT_SALAD"] = 8] = "FRUIT_SALAD";
24
+ return Variant;
25
+ }({});
26
+ //# sourceMappingURL=variant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Variant","exports"],"sourceRoot":"../../../../src","sources":["theme/color-engine/variant.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAOYA,OAAO,GAAAC,OAAA,CAAAD,OAAA,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,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ViewingConditions = void 0;
7
+ var _colorUtils = require("./color-utils.js");
8
+ var _mathUtils = require("./math-utils.js");
9
+ /**
10
+ * Bloom colour engine — CAM16 viewing conditions.
11
+ *
12
+ * Faithful port of Material Color Utilities' `ViewingConditions` (Apache-2.0)
13
+ * into Bloom's own code. Caches the CAM16 intermediates that depend only on the
14
+ * environment (white point, adapting luminance, surround) so the appearance
15
+ * model can run fast. Bloom only ever uses the sRGB `DEFAULT`.
16
+ */
17
+
18
+ class ViewingConditions {
19
+ /** sRGB-like viewing conditions (the only ones Bloom uses). */
20
+ static get DEFAULT() {
21
+ return ViewingConditions._default ??= ViewingConditions.make();
22
+ }
23
+ constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {
24
+ this.n = n;
25
+ this.aw = aw;
26
+ this.nbb = nbb;
27
+ this.ncb = ncb;
28
+ this.c = c;
29
+ this.nc = nc;
30
+ this.rgbD = rgbD;
31
+ this.fl = fl;
32
+ this.fLRoot = fLRoot;
33
+ this.z = z;
34
+ }
35
+ static make(whitePoint = (0, _colorUtils.whitePointD65)(), adaptingLuminance = 200.0 / Math.PI * (0, _colorUtils.yFromLstar)(50.0) / 100.0, backgroundLstar = 50.0, surround = 2.0, discountingIlluminant = false) {
36
+ const xyz = whitePoint;
37
+ const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;
38
+ const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;
39
+ const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;
40
+ const f = 0.8 + surround / 10.0;
41
+ const c = f >= 0.9 ? (0, _mathUtils.lerp)(0.59, 0.69, (f - 0.9) * 10.0) : (0, _mathUtils.lerp)(0.525, 0.59, (f - 0.8) * 10.0);
42
+ let d = discountingIlluminant ? 1.0 : f * (1.0 - 1.0 / 3.6 * Math.exp((-adaptingLuminance - 42.0) / 92.0));
43
+ d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;
44
+ const nc = f;
45
+ const rgbD = [d * (100.0 / rW) + 1.0 - d, d * (100.0 / gW) + 1.0 - d, d * (100.0 / bW) + 1.0 - d];
46
+ const k = 1.0 / (5.0 * adaptingLuminance + 1.0);
47
+ const k4 = k * k * k * k;
48
+ const k4F = 1.0 - k4;
49
+ const fl = k4 * adaptingLuminance + 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);
50
+ const n = (0, _colorUtils.yFromLstar)(backgroundLstar) / whitePoint[1];
51
+ const z = 1.48 + Math.sqrt(n);
52
+ const nbb = 0.725 / Math.pow(n, 0.2);
53
+ const ncb = nbb;
54
+ 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)];
55
+ 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)];
56
+ const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;
57
+ return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);
58
+ }
59
+ }
60
+ exports.ViewingConditions = ViewingConditions;
61
+ //# sourceMappingURL=viewing-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_colorUtils","require","_mathUtils","ViewingConditions","DEFAULT","_default","make","constructor","n","aw","nbb","ncb","c","nc","rgbD","fl","fLRoot","z","whitePoint","whitePointD65","adaptingLuminance","Math","PI","yFromLstar","backgroundLstar","surround","discountingIlluminant","xyz","rW","gW","bW","f","lerp","d","exp","k","k4","k4F","cbrt","sqrt","pow","rgbAFactors","rgbA","exports"],"sourceRoot":"../../../../src","sources":["theme/color-engine/viewing-conditions.ts"],"mappings":"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","ignoreList":[]}