@protonradio/proton-ui 0.11.2 → 0.11.4

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 (72) hide show
  1. package/README.md +2 -42
  2. package/dist/Button-D5vY_uZz.js.map +1 -1
  3. package/dist/Button-R07nvJbw.mjs.map +1 -1
  4. package/dist/color2k-CpDB_dpw.mjs +168 -0
  5. package/dist/color2k-CpDB_dpw.mjs.map +1 -0
  6. package/dist/color2k-DCgwXUem.js +2 -0
  7. package/dist/color2k-DCgwXUem.js.map +1 -0
  8. package/dist/{colors.es.js → colors-CWaj9dFz.mjs} +7 -7
  9. package/dist/colors-CWaj9dFz.mjs.map +1 -0
  10. package/dist/colors-CebzFjpe.js +2 -0
  11. package/dist/colors-CebzFjpe.js.map +1 -0
  12. package/dist/colors-Ceyo4oCJ.mjs +34 -0
  13. package/dist/colors-Ceyo4oCJ.mjs.map +1 -0
  14. package/dist/colors-CmSJBHaf.js +2 -0
  15. package/dist/colors-CmSJBHaf.js.map +1 -0
  16. package/dist/colors-DL1dYffC.js +2 -0
  17. package/dist/colors-DL1dYffC.js.map +1 -0
  18. package/dist/colors-DMkDnu4U.mjs +34 -0
  19. package/dist/colors-DMkDnu4U.mjs.map +1 -0
  20. package/dist/constants.cjs.js +1 -1
  21. package/dist/constants.cjs.js.map +1 -1
  22. package/dist/constants.d.ts +0 -12
  23. package/dist/constants.es.js +0 -3
  24. package/dist/constants.es.js.map +1 -1
  25. package/dist/dark.d.ts +87 -0
  26. package/dist/hooks.cjs.js +1 -1
  27. package/dist/hooks.cjs.js.map +1 -1
  28. package/dist/hooks.es.js +12 -11
  29. package/dist/hooks.es.js.map +1 -1
  30. package/dist/image-CUSfY1_T.js +2 -0
  31. package/dist/image-CUSfY1_T.js.map +1 -0
  32. package/dist/{image-GZPhSCuF.mjs → image-DFyN0Kd9.mjs} +47 -45
  33. package/dist/image-DFyN0Kd9.mjs.map +1 -0
  34. package/dist/index.cjs.js +3 -3
  35. package/dist/index.cjs.js.map +1 -1
  36. package/dist/index.d.ts +4 -4
  37. package/dist/index.es.js +66 -63
  38. package/dist/index.es.js.map +1 -1
  39. package/dist/light.d.ts +78 -0
  40. package/dist/theme/dark.cjs.js +2 -0
  41. package/dist/theme/dark.cjs.js.map +1 -0
  42. package/dist/theme/dark.d.ts +2 -0
  43. package/dist/theme/dark.es.js +58 -0
  44. package/dist/theme/dark.es.js.map +1 -0
  45. package/dist/theme/light.cjs.js +2 -0
  46. package/dist/theme/light.cjs.js.map +1 -0
  47. package/dist/theme/light.d.ts +2 -0
  48. package/dist/theme/light.es.js +58 -0
  49. package/dist/theme/light.es.js.map +1 -0
  50. package/dist/theme.cjs.js +1 -1
  51. package/dist/theme.cjs.js.map +1 -1
  52. package/dist/theme.d.ts +12 -33
  53. package/dist/theme.es.js +16 -20
  54. package/dist/theme.es.js.map +1 -1
  55. package/dist/utils.cjs.js +1 -1
  56. package/dist/utils.es.js +2 -2
  57. package/package.json +21 -16
  58. package/dist/colors.cjs.js +0 -2
  59. package/dist/colors.cjs.js.map +0 -1
  60. package/dist/colors.d.ts +0 -42
  61. package/dist/colors.es.js.map +0 -1
  62. package/dist/image-C7s3ABus.js +0 -2
  63. package/dist/image-C7s3ABus.js.map +0 -1
  64. package/dist/image-GZPhSCuF.mjs.map +0 -1
  65. package/dist/index-CMjT6Imo.js +0 -2
  66. package/dist/index-CMjT6Imo.js.map +0 -1
  67. package/dist/index-Clgyr6Mk.mjs +0 -317
  68. package/dist/index-Clgyr6Mk.mjs.map +0 -1
  69. package/dist/theme-DQsfWeLo.mjs +0 -12
  70. package/dist/theme-DQsfWeLo.mjs.map +0 -1
  71. package/dist/theme-Dc0Ahjq9.js +0 -2
  72. package/dist/theme-Dc0Ahjq9.js.map +0 -1
@@ -1,21 +1,23 @@
1
- import { d as E, s as R, e as m, f as F, a as x, g as i, h as s, l as S, b as d, i as f, j as G, k as C } from "./index-Clgyr6Mk.mjs";
1
+ import { d as E, s as R, e as m, f as F, a as h, g as s, l as S, b as d, h as M, i as x } from "./color2k-CpDB_dpw.mjs";
2
+ import { a as C } from "./colors-DMkDnu4U.mjs";
3
+ import { a as i } from "./colors-Ceyo4oCJ.mjs";
2
4
  import P from "colorthief";
3
- const Y = (t) => {
4
- const a = x(t), e = G("#FFFFFF", a, "#000000"), n = Array.from({ length: 12 }, (I, D) => {
5
- const h = e(D / 11);
6
- return E(h, 85e-4);
5
+ const K = (e) => {
6
+ const a = h(e), t = x("#FFFFFF", a, "#000000"), n = Array.from({ length: 12 }, (I, D) => {
7
+ const f = t(D / 11);
8
+ return E(f, 85e-4);
7
9
  }), o = n.map(
8
- (I) => R(M(I), 5e-3)
9
- ), T = m(R(F(a, 180), 1)), c = G("#FFFFFF", T, "#000000"), l = Array.from({ length: 12 }, (I, D) => {
10
- const h = c(D / 11);
11
- return E(h, 0.1);
10
+ (I) => R(_(I), 5e-3)
11
+ ), T = m(R(F(a, 180), 1)), c = x("#FFFFFF", T, "#000000"), l = Array.from({ length: 12 }, (I, D) => {
12
+ const f = c(D / 11);
13
+ return E(f, 0.1);
12
14
  }), u = l.map(
13
- (I) => E(M(I), 0.22)
15
+ (I) => E(_(I), 0.22)
14
16
  ), A = U(
15
17
  R(o[5], 0.115)
16
18
  ), H = E(u[4], 0.02);
17
19
  return {
18
- BASE_COLOR: x(t),
20
+ BASE_COLOR: h(e),
19
21
  BRAND: {
20
22
  PRIMARY: A,
21
23
  PRIMARY_LIGHT: r(A, 0.25, {
@@ -134,59 +136,59 @@ const Y = (t) => {
134
136
  WHITE: i.WHITE
135
137
  }
136
138
  };
137
- }, r = (t, a, e = { min: 0.03, max: 0.97 }) => {
138
- let n = t, o = s(n);
139
- if (e.min < 0 && (e.min = 0), e.max > 1 && (e.max = 1), e.min >= e.max)
139
+ }, r = (e, a, t = { min: 0.03, max: 0.97 }) => {
140
+ let n = e, o = s(n);
141
+ if (t.min < 0 && (t.min = 0), t.max > 1 && (t.max = 1), t.min >= t.max)
140
142
  throw new Error("Invalid range: min must be less than max");
141
143
  if (a > 0) {
142
- const c = e.max - o;
144
+ const c = t.max - o;
143
145
  if (c <= 0) return m(n);
144
146
  const l = a * (c / (1 - o));
145
147
  n = S(n, l);
146
148
  } else if (a < 0) {
147
- const c = o - e.min;
149
+ const c = o - t.min;
148
150
  if (c <= 0) return m(n);
149
151
  const l = a * (c / o);
150
152
  n = d(n, Math.abs(l));
151
153
  }
152
154
  const T = s(n);
153
- return (T > e.max || T < e.min) && (n = _(n, e)), m(n);
154
- }, _ = (t, a) => {
155
- let e = t, n = s(e);
155
+ return (T > t.max || T < t.min) && (n = G(n, t)), m(n);
156
+ }, G = (e, a) => {
157
+ let t = e, n = s(t);
156
158
  for (; n > a.max; )
157
- e = d(e, 0.05), n = s(e);
159
+ t = d(t, 0.05), n = s(t);
158
160
  for (; n < a.min; )
159
- e = S(e, 0.05), n = s(e);
160
- return m(e);
161
- }, L = (t) => {
162
- for (; f(t, "readable", C.DARK); )
163
- t = S(t, 0.01);
164
- return m(t);
165
- }, U = (t) => {
166
- for (; f(C.SUPER_LIGHT, "readable", t); )
167
- t = d(t, 0.01);
161
+ t = S(t, 0.05), n = s(t);
168
162
  return m(t);
169
- }, M = (t) => {
170
- let a = t, e = s(m(a)), n = 0;
163
+ }, L = (e) => {
164
+ for (; M(e, "readable", C.DARK); )
165
+ e = S(e, 0.01);
166
+ return m(e);
167
+ }, U = (e) => {
168
+ for (; M(C.SUPER_LIGHT, "readable", e); )
169
+ e = d(e, 0.01);
170
+ return m(e);
171
+ }, _ = (e) => {
172
+ let a = e, t = s(m(a)), n = 0;
171
173
  const o = 6;
172
- for (; e < 0.16 && n < o; )
173
- n++, a = S(a, 0.1), e = s(m(a));
174
- for (; e > 0.6 && n < o; )
175
- n++, a = d(a, 0.1), e = s(m(a));
174
+ for (; t < 0.16 && n < o; )
175
+ n++, a = S(a, 0.1), t = s(m(a));
176
+ for (; t > 0.6 && n < o; )
177
+ n++, a = d(a, 0.1), t = s(m(a));
176
178
  return m(a);
177
179
  };
178
- function K(t) {
179
- return t instanceof HTMLImageElement ? Promise.resolve(g(t)) : y(t);
180
+ function j(e) {
181
+ return e instanceof HTMLImageElement ? Promise.resolve(g(e)) : y(e);
180
182
  }
181
- function g(t) {
183
+ function g(e) {
182
184
  try {
183
- return new P().getColor(t);
185
+ return new P().getColor(e);
184
186
  } catch {
185
187
  return [255, 255, 255];
186
188
  }
187
189
  }
188
- function y(t) {
189
- return new Promise((a, e) => {
190
+ function y(e) {
191
+ return new Promise((a, t) => {
190
192
  const n = document.createElement("img");
191
193
  n.crossOrigin = "anonymous", n.onload = () => {
192
194
  try {
@@ -195,11 +197,11 @@ function y(t) {
195
197
  } catch {
196
198
  a([255, 255, 255]);
197
199
  }
198
- }, n.onerror = () => e(new Error("Failed to load image")), n.src = t;
200
+ }, n.onerror = () => t(new Error("Failed to load image")), n.src = e;
199
201
  });
200
202
  }
201
203
  export {
202
- K as a,
203
- Y as g
204
+ j as a,
205
+ K as g
204
206
  };
205
- //# sourceMappingURL=image-GZPhSCuF.mjs.map
207
+ //# sourceMappingURL=image-DFyN0Kd9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-DFyN0Kd9.mjs","sources":["../src/utils/palette.ts","../src/utils/image.ts"],"sourcesContent":["import {\r\n adjustHue,\r\n darken,\r\n getLuminance,\r\n getScale,\r\n hasBadContrast,\r\n lighten,\r\n toRgba,\r\n} from \"color2k\";\r\nimport { ProtonPalette, RGBArray } from \"../design/types\";\r\nimport { arrayToRgbString, desaturate, saturate } from \"./color2k\";\r\nimport { LIGHT_GRAYSCALE } from \"../design/lightTheme/colors\";\r\nimport { DARK_GRAYSCALE } from \"../design/darkTheme/colors\";\r\n\r\n/**\r\n * Generates a complete color palette based on a primary color input.\r\n * The palette includes primary and secondary color scales with varying shades.\r\n *\r\n * @param primaryColor - The base RGB color array to generate the palette from\r\n * @returns A Palette object containing:\r\n * - BRAND colors (primary, light primary, and secondary)\r\n * - PRIMARY scale (7 shades from super dark to super light)\r\n * - SECONDARY scale (7 shades from super dark to super light)\r\n *\r\n * The function:\r\n * 1. Creates a 12-color scale from white to the primary color to black\r\n * 2. Generates a complementary secondary color by shifting the hue 180 degrees\r\n * 3. Creates another 12-color scale for the secondary color\r\n * 4. Maps specific positions from these scales to create the final palette structure\r\n */\r\nexport const generatePalette = (baseColor: RGBArray): ProtonPalette => {\r\n const primaryRgba = arrayToRgbString(baseColor);\r\n\r\n const primaryScaleFunc = getScale(\"#FFFFFF\", primaryRgba, \"#000000\");\r\n const primaryScale = Array.from({ length: 12 }, (_, i) => {\r\n const color = primaryScaleFunc(i / 11);\r\n return desaturate(color, 0.0085);\r\n });\r\n\r\n const adjustedPrimaryScale = primaryScale.map((color) =>\r\n saturate(adjustBrightnessForLuminance(color), 0.005)\r\n );\r\n\r\n const secondaryColor = toRgba(saturate(adjustHue(primaryRgba, 180), 1));\r\n\r\n const secondaryScaleFunc = getScale(\"#FFFFFF\", secondaryColor, \"#000000\");\r\n const secondaryScale = Array.from({ length: 12 }, (_, i) => {\r\n const color = secondaryScaleFunc(i / 11);\r\n return desaturate(color, 0.1);\r\n });\r\n\r\n const adjustedSecondaryScale = secondaryScale.map((color) =>\r\n desaturate(adjustBrightnessForLuminance(color), 0.22)\r\n );\r\n\r\n const brandPrimary = darkenForContrast(\r\n saturate(adjustedPrimaryScale[5], 0.115)\r\n );\r\n const brandSecondary = desaturate(adjustedSecondaryScale[4], 0.02);\r\n\r\n return {\r\n BASE_COLOR: arrayToRgbString(baseColor),\r\n BRAND: {\r\n PRIMARY: brandPrimary,\r\n PRIMARY_LIGHT: lightenWithinRange(brandPrimary, 0.25, {\r\n min: 0.6,\r\n max: 0.8,\r\n }),\r\n PRIMARY_SUPER_LIGHT: lightenWithinRange(brandPrimary, 0.15, {\r\n min: 0.8,\r\n max: 0.9,\r\n }),\r\n SECONDARY: brandSecondary,\r\n SECONDARY_LIGHT: lightenWithinRange(brandSecondary, 0.25, {\r\n min: 0.6,\r\n max: 0.8,\r\n }),\r\n SECONDARY_SUPER_LIGHT: lightenWithinRange(brandSecondary, 0.15, {\r\n min: 0.8,\r\n max: 0.9,\r\n }),\r\n },\r\n PRIMARY: {\r\n //backgrounds\r\n SUPER_DARK: lightenWithinRange(\r\n lightenForContrast(primaryScale[9]),\r\n -0.6,\r\n {\r\n min: 0.0,\r\n max: 0.02,\r\n }\r\n ),\r\n DARK: lightenWithinRange(lightenForContrast(primaryScale[8]), -0.4, {\r\n min: 0.01,\r\n max: 0.02,\r\n }),\r\n //interactive components\r\n MEDIUM: lightenWithinRange(adjustedPrimaryScale[7], -0.2, {\r\n min: 0.0,\r\n max: 0.11,\r\n }),\r\n //borders and seperators\r\n MEDIUM_LIGHT: lightenWithinRange(\r\n desaturate(adjustedPrimaryScale[6], 0.1),\r\n 0.08\r\n ),\r\n //solid colors\r\n LIGHT: lightenWithinRange(saturate(adjustedPrimaryScale[5], 0.1), 0.16),\r\n //accessible text\r\n LIGHTEST: lightenWithinRange(\r\n saturate(adjustedPrimaryScale[3], 0.2),\r\n 0.12,\r\n {\r\n min: 0.5,\r\n max: 0.9,\r\n }\r\n ),\r\n SUPER_LIGHT: lightenWithinRange(adjustedPrimaryScale[1], 0.02, {\r\n min: 0.76,\r\n max: 0.92,\r\n }),\r\n WHITE: lightenWithinRange(adjustedPrimaryScale[1], 0.11, {\r\n min: 0.9,\r\n max: 0.98,\r\n }),\r\n },\r\n SECONDARY: {\r\n //backgrounds\r\n SUPER_DARK: lightenWithinRange(\r\n lightenForContrast(secondaryScale[9]),\r\n -0.6,\r\n {\r\n min: 0.0,\r\n max: 0.02,\r\n }\r\n ),\r\n DARK: lightenWithinRange(lightenForContrast(secondaryScale[8]), -0.4, {\r\n min: 0.01,\r\n max: 0.02,\r\n }),\r\n // interactive components\r\n MEDIUM: lightenWithinRange(adjustedSecondaryScale[7], -0.2, {\r\n min: 0.0,\r\n max: 0.11,\r\n }),\r\n //borders and seperators\r\n MEDIUM_LIGHT: lightenWithinRange(adjustedSecondaryScale[6], 0.1),\r\n //solid colors\r\n LIGHT: lightenWithinRange(saturate(adjustedSecondaryScale[5], 0.1), 0.16),\r\n //accessible text\r\n LIGHTEST: lightenWithinRange(\r\n saturate(adjustedSecondaryScale[3], 0.2),\r\n 0.12,\r\n {\r\n min: 0.5,\r\n max: 0.9,\r\n }\r\n ),\r\n SUPER_LIGHT: lightenWithinRange(adjustedSecondaryScale[1], 0.02, {\r\n min: 0.76,\r\n max: 0.92,\r\n }),\r\n WHITE: lightenWithinRange(adjustedSecondaryScale[1], 0.11, {\r\n min: 0.9,\r\n max: 0.98,\r\n }),\r\n },\r\n //TODO: make theme aware grayscale color scale\r\n //Can we remove the basecolor after this?\r\n GRAYSCALE: {\r\n SUPER_DARK: DARK_GRAYSCALE.SUPER_DARK,\r\n DARK: DARK_GRAYSCALE.DARK,\r\n MEDIUM: DARK_GRAYSCALE.MEDIUM,\r\n MEDIUM_LIGHT: DARK_GRAYSCALE.MEDIUM_LIGHT,\r\n LIGHT: DARK_GRAYSCALE.LIGHT,\r\n LIGHTEST: DARK_GRAYSCALE.LIGHTEST,\r\n SUPER_LIGHT: DARK_GRAYSCALE.SUPER_LIGHT,\r\n WHITE: DARK_GRAYSCALE.WHITE,\r\n },\r\n };\r\n};\r\n\r\nconst lightenWithinRange = (\r\n color: string,\r\n amount: number,\r\n range: { min: number; max: number } = { min: 0.03, max: 0.97 }\r\n): string => {\r\n let adjustedColor = color;\r\n let currentLuminance = getLuminance(adjustedColor);\r\n\r\n // Validate range bounds\r\n if (range.min < 0) range.min = 0;\r\n if (range.max > 1) range.max = 1;\r\n if (range.min >= range.max) {\r\n throw new Error(\"Invalid range: min must be less than max\");\r\n }\r\n\r\n // For lightening (positive amount)\r\n if (amount > 0) {\r\n // Calculate how much we can lighten before hitting max\r\n const remainingLuminance = range.max - currentLuminance;\r\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\r\n\r\n // Scale the amount based on remaining room to lighten\r\n const scaledAmount = amount * (remainingLuminance / (1 - currentLuminance));\r\n adjustedColor = lighten(adjustedColor, scaledAmount);\r\n }\r\n // For darkening (negative amount)\r\n else if (amount < 0) {\r\n // Calculate how much we can darken before hitting min\r\n const remainingLuminance = currentLuminance - range.min;\r\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\r\n\r\n // Scale the amount based on remaining room to darken\r\n const scaledAmount = amount * (remainingLuminance / currentLuminance);\r\n adjustedColor = darken(adjustedColor, Math.abs(scaledAmount));\r\n }\r\n\r\n // Verify final luminance is within bounds\r\n const finalLuminance = getLuminance(adjustedColor);\r\n if (finalLuminance > range.max) {\r\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\r\n } else if (finalLuminance < range.min) {\r\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\r\n }\r\n\r\n return toRgba(adjustedColor);\r\n};\r\n\r\nconst adjustBrightnessWithinRange = (\r\n color: string,\r\n range: { min: number; max: number }\r\n): string => {\r\n let adjustedColor = color;\r\n let luminance = getLuminance(adjustedColor);\r\n\r\n // Darken if too bright\r\n while (luminance > range.max) {\r\n adjustedColor = darken(adjustedColor, 0.05);\r\n luminance = getLuminance(adjustedColor);\r\n }\r\n\r\n // Lighten if too dark\r\n while (luminance < range.min) {\r\n adjustedColor = lighten(adjustedColor, 0.05);\r\n luminance = getLuminance(adjustedColor);\r\n }\r\n\r\n return toRgba(adjustedColor);\r\n};\r\n\r\nconst lightenForContrast = (color: string): string => {\r\n while (hasBadContrast(color, \"readable\", LIGHT_GRAYSCALE.DARK)) {\r\n color = lighten(color, 0.01);\r\n }\r\n return toRgba(color);\r\n};\r\n\r\nconst darkenForContrast = (color: string): string => {\r\n while (hasBadContrast(LIGHT_GRAYSCALE.SUPER_LIGHT, \"readable\", color)) {\r\n color = darken(color, 0.01);\r\n }\r\n return toRgba(color);\r\n};\r\n\r\nconst adjustBrightnessForLuminance = (color: string): string => {\r\n let currentColor = color;\r\n let currentLuminance = getLuminance(toRgba(currentColor));\r\n let adjustmentAttempts = 0;\r\n const MAX_ATTEMPTS = 6;\r\n\r\n while (currentLuminance < 0.16 && adjustmentAttempts < MAX_ATTEMPTS) {\r\n adjustmentAttempts++;\r\n currentColor = lighten(currentColor, 0.1);\r\n currentLuminance = getLuminance(toRgba(currentColor));\r\n }\r\n\r\n while (currentLuminance > 0.6 && adjustmentAttempts < MAX_ATTEMPTS) {\r\n adjustmentAttempts++;\r\n currentColor = darken(currentColor, 0.1);\r\n currentLuminance = getLuminance(toRgba(currentColor));\r\n }\r\n\r\n return toRgba(currentColor);\r\n};\r\n","import ColorThief from \"colorthief\";\r\nimport type { RGBArray } from \"../design/types\";\r\n\r\n/**\r\n * Gets the dominant color of an image. Avoids issues with low contrast colors.\r\n * @reference https://github.com/lokesh/color-thief/issues/40\r\n * @param image - The image to get the dominant color from.\r\n * @returns A Promise that resolves to an RGB array.\r\n */\r\nexport function getDominantColor(image: HTMLImageElement): Promise<RGBArray>;\r\nexport function getDominantColor(image: string): Promise<RGBArray>;\r\nexport function getDominantColor(\r\n image: HTMLImageElement | string\r\n): Promise<RGBArray> {\r\n if (image instanceof HTMLImageElement) {\r\n return Promise.resolve(getDominantColorFromImage(image));\r\n } else {\r\n return getDominantColorFromImageUrl(image);\r\n }\r\n}\r\n\r\nfunction getDominantColorFromImage(image: HTMLImageElement): RGBArray {\r\n try {\r\n const colorThief = new ColorThief();\r\n const baseColor = colorThief.getColor(image);\r\n return baseColor;\r\n } catch {\r\n return [255, 255, 255];\r\n }\r\n}\r\n\r\nfunction getDominantColorFromImageUrl(url: string): Promise<RGBArray> {\r\n return new Promise((resolve, reject) => {\r\n const imgElement = document.createElement(\"img\");\r\n imgElement.crossOrigin = \"anonymous\";\r\n\r\n imgElement.onload = () => {\r\n try {\r\n const baseColor = new ColorThief().getColor(imgElement);\r\n resolve(baseColor);\r\n } catch {\r\n resolve([255, 255, 255]);\r\n }\r\n };\r\n\r\n imgElement.onerror = () => reject(new Error(\"Failed to load image\"));\r\n imgElement.src = url;\r\n });\r\n}\r\n"],"names":["generatePalette","baseColor","primaryRgba","arrayToRgbString","primaryScaleFunc","getScale","primaryScale","_","i","color","desaturate","adjustedPrimaryScale","saturate","adjustBrightnessForLuminance","secondaryColor","toRgba","adjustHue","secondaryScaleFunc","secondaryScale","adjustedSecondaryScale","brandPrimary","darkenForContrast","brandSecondary","lightenWithinRange","lightenForContrast","DARK_GRAYSCALE","amount","range","adjustedColor","currentLuminance","getLuminance","remainingLuminance","scaledAmount","lighten","darken","finalLuminance","adjustBrightnessWithinRange","luminance","hasBadContrast","LIGHT_GRAYSCALE","currentColor","adjustmentAttempts","MAX_ATTEMPTS","getDominantColor","image","getDominantColorFromImage","getDominantColorFromImageUrl","ColorThief","url","resolve","reject","imgElement"],"mappings":"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"}