@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.
- package/README.md +2 -42
- package/dist/Button-D5vY_uZz.js.map +1 -1
- package/dist/Button-R07nvJbw.mjs.map +1 -1
- package/dist/color2k-CpDB_dpw.mjs +168 -0
- package/dist/color2k-CpDB_dpw.mjs.map +1 -0
- package/dist/color2k-DCgwXUem.js +2 -0
- package/dist/color2k-DCgwXUem.js.map +1 -0
- package/dist/{colors.es.js → colors-CWaj9dFz.mjs} +7 -7
- package/dist/colors-CWaj9dFz.mjs.map +1 -0
- package/dist/colors-CebzFjpe.js +2 -0
- package/dist/colors-CebzFjpe.js.map +1 -0
- package/dist/colors-Ceyo4oCJ.mjs +34 -0
- package/dist/colors-Ceyo4oCJ.mjs.map +1 -0
- package/dist/colors-CmSJBHaf.js +2 -0
- package/dist/colors-CmSJBHaf.js.map +1 -0
- package/dist/colors-DL1dYffC.js +2 -0
- package/dist/colors-DL1dYffC.js.map +1 -0
- package/dist/colors-DMkDnu4U.mjs +34 -0
- package/dist/colors-DMkDnu4U.mjs.map +1 -0
- package/dist/constants.cjs.js +1 -1
- package/dist/constants.cjs.js.map +1 -1
- package/dist/constants.d.ts +0 -12
- package/dist/constants.es.js +0 -3
- package/dist/constants.es.js.map +1 -1
- package/dist/dark.d.ts +87 -0
- package/dist/hooks.cjs.js +1 -1
- package/dist/hooks.cjs.js.map +1 -1
- package/dist/hooks.es.js +12 -11
- package/dist/hooks.es.js.map +1 -1
- package/dist/image-CUSfY1_T.js +2 -0
- package/dist/image-CUSfY1_T.js.map +1 -0
- package/dist/{image-GZPhSCuF.mjs → image-DFyN0Kd9.mjs} +47 -45
- package/dist/image-DFyN0Kd9.mjs.map +1 -0
- package/dist/index.cjs.js +3 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.es.js +66 -63
- package/dist/index.es.js.map +1 -1
- package/dist/light.d.ts +78 -0
- package/dist/theme/dark.cjs.js +2 -0
- package/dist/theme/dark.cjs.js.map +1 -0
- package/dist/theme/dark.d.ts +2 -0
- package/dist/theme/dark.es.js +58 -0
- package/dist/theme/dark.es.js.map +1 -0
- package/dist/theme/light.cjs.js +2 -0
- package/dist/theme/light.cjs.js.map +1 -0
- package/dist/theme/light.d.ts +2 -0
- package/dist/theme/light.es.js +58 -0
- package/dist/theme/light.es.js.map +1 -0
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.cjs.js.map +1 -1
- package/dist/theme.d.ts +12 -33
- package/dist/theme.es.js +16 -20
- package/dist/theme.es.js.map +1 -1
- package/dist/utils.cjs.js +1 -1
- package/dist/utils.es.js +2 -2
- package/package.json +21 -16
- package/dist/colors.cjs.js +0 -2
- package/dist/colors.cjs.js.map +0 -1
- package/dist/colors.d.ts +0 -42
- package/dist/colors.es.js.map +0 -1
- package/dist/image-C7s3ABus.js +0 -2
- package/dist/image-C7s3ABus.js.map +0 -1
- package/dist/image-GZPhSCuF.mjs.map +0 -1
- package/dist/index-CMjT6Imo.js +0 -2
- package/dist/index-CMjT6Imo.js.map +0 -1
- package/dist/index-Clgyr6Mk.mjs +0 -317
- package/dist/index-Clgyr6Mk.mjs.map +0 -1
- package/dist/theme-DQsfWeLo.mjs +0 -12
- package/dist/theme-DQsfWeLo.mjs.map +0 -1
- package/dist/theme-Dc0Ahjq9.js +0 -2
- 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
|
|
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
|
|
4
|
-
const a =
|
|
5
|
-
const
|
|
6
|
-
return E(
|
|
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(
|
|
9
|
-
), T = m(R(F(a, 180), 1)), c =
|
|
10
|
-
const
|
|
11
|
-
return E(
|
|
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(
|
|
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:
|
|
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 = (
|
|
138
|
-
let n =
|
|
139
|
-
if (
|
|
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 =
|
|
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 -
|
|
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 >
|
|
154
|
-
},
|
|
155
|
-
let
|
|
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
|
-
|
|
159
|
+
t = d(t, 0.05), n = s(t);
|
|
158
160
|
for (; n < a.min; )
|
|
159
|
-
|
|
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
|
-
},
|
|
170
|
-
|
|
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 (;
|
|
173
|
-
n++, a = S(a, 0.1),
|
|
174
|
-
for (;
|
|
175
|
-
n++, a = d(a, 0.1),
|
|
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
|
|
179
|
-
return
|
|
180
|
+
function j(e) {
|
|
181
|
+
return e instanceof HTMLImageElement ? Promise.resolve(g(e)) : y(e);
|
|
180
182
|
}
|
|
181
|
-
function g(
|
|
183
|
+
function g(e) {
|
|
182
184
|
try {
|
|
183
|
-
return new P().getColor(
|
|
185
|
+
return new P().getColor(e);
|
|
184
186
|
} catch {
|
|
185
187
|
return [255, 255, 255];
|
|
186
188
|
}
|
|
187
189
|
}
|
|
188
|
-
function y(
|
|
189
|
-
return new Promise((a,
|
|
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 = () =>
|
|
200
|
+
}, n.onerror = () => t(new Error("Failed to load image")), n.src = e;
|
|
199
201
|
});
|
|
200
202
|
}
|
|
201
203
|
export {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
j as a,
|
|
205
|
+
K as g
|
|
204
206
|
};
|
|
205
|
-
//# sourceMappingURL=image-
|
|
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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"}
|