@protonradio/proton-ui 0.12.5 → 0.12.7
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 +10 -0
- package/dist/components/ActionMenu/ActionMenu.cjs.js.map +1 -1
- package/dist/components/ActionMenu/ActionMenu.es.js.map +1 -1
- package/dist/components/Banner/Banner.cjs.js.map +1 -1
- package/dist/components/Banner/Banner.es.js.map +1 -1
- package/dist/components/Button/Button.cjs.js.map +1 -1
- package/dist/components/Button/Button.es.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.cjs.js +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.cjs.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.es.js +10 -10
- package/dist/components/ButtonGroup/ButtonGroup.es.js.map +1 -1
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.cjs.js.map +1 -1
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.es.js.map +1 -1
- package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.cjs.js.map +1 -1
- package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.es.js.map +1 -1
- package/dist/components/Input/BaseInput/Input.cjs.js.map +1 -1
- package/dist/components/Input/BaseInput/Input.es.js.map +1 -1
- package/dist/components/Input/OTPInput/OTPInput.cjs.js.map +1 -1
- package/dist/components/Input/OTPInput/OTPInput.es.js.map +1 -1
- package/dist/components/Modal/Modal.cjs.js +1 -1
- package/dist/components/Modal/Modal.cjs.js.map +1 -1
- package/dist/components/Modal/Modal.es.js +18 -18
- package/dist/components/Modal/Modal.es.js.map +1 -1
- package/dist/components/Popover/Popover.cjs.js +1 -1
- package/dist/components/Popover/Popover.cjs.js.map +1 -1
- package/dist/components/Popover/Popover.es.js +21 -14
- package/dist/components/Popover/Popover.es.js.map +1 -1
- package/dist/components/ScreenOverlay/ScreenOverlay.cjs.js.map +1 -1
- package/dist/components/ScreenOverlay/ScreenOverlay.es.js.map +1 -1
- package/dist/components/Select/Select.cjs.js.map +1 -1
- package/dist/components/Select/Select.es.js.map +1 -1
- package/dist/components/Text/TextEllipsis/TextEllipsis.cjs.js.map +1 -1
- package/dist/components/Text/TextEllipsis/TextEllipsis.es.js.map +1 -1
- package/dist/components/Tooltip/ResponsiveTooltip.cjs.js.map +1 -1
- package/dist/components/Tooltip/ResponsiveTooltip.es.js.map +1 -1
- package/dist/constants/breakpoint.cjs.js.map +1 -1
- package/dist/constants/breakpoint.es.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/dark.d.ts +0 -1
- package/dist/design/darkTheme/colors.cjs.js +1 -1
- package/dist/design/darkTheme/colors.cjs.js.map +1 -1
- package/dist/design/darkTheme/colors.es.js +7 -8
- package/dist/design/darkTheme/colors.es.js.map +1 -1
- package/dist/design/generateStylesheet.cjs.js.map +1 -1
- package/dist/design/generateStylesheet.es.js +0 -1
- package/dist/design/generateStylesheet.es.js.map +1 -1
- package/dist/design/lightTheme/colors.cjs.js +1 -1
- package/dist/design/lightTheme/colors.cjs.js.map +1 -1
- package/dist/design/lightTheme/colors.es.js +10 -11
- package/dist/design/lightTheme/colors.es.js.map +1 -1
- package/dist/hooks/useBreakpoint.cjs.js.map +1 -1
- package/dist/hooks/useBreakpoint.es.js.map +1 -1
- package/dist/hooks/useMergedRef.cjs.js.map +1 -1
- package/dist/hooks/useMergedRef.es.js.map +1 -1
- package/dist/hooks.d.ts +1 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +20 -16
- package/dist/index.es.js +13 -13
- package/dist/light.d.ts +0 -1
- package/dist/style.css +1 -1
- package/dist/theme.d.ts +0 -1
- package/dist/utils/palette.cjs.js +1 -1
- package/dist/utils/palette.cjs.js.map +1 -1
- package/dist/utils/palette.es.js +64 -77
- package/dist/utils/palette.es.js.map +1 -1
- package/dist/utils.d.ts +0 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.cjs.js","sources":["../../src/utils/palette.ts"],"sourcesContent":["import {\n adjustHue,\n darken,\n getLuminance,\n getScale,\n hasBadContrast,\n lighten,\n toRgba,\n} from \"color2k\";\nimport { ProtonPalette, RGBArray } from \"../design/types\";\nimport { arrayToRgbString, desaturate, saturate } from \"./color2k\";\nimport { LIGHT_GRAYSCALE } from \"../design/lightTheme/colors\";\nimport { DARK_GRAYSCALE } from \"../design/darkTheme/colors\";\n\n/**\n * Generates a complete color palette based on a primary color input.\n * The palette includes primary and secondary color scales with varying shades.\n *\n * @param primaryColor - The base RGB color array to generate the palette from\n * @returns A Palette object containing:\n * - BRAND colors (primary, light primary, and secondary)\n * - PRIMARY scale (7 shades from super dark to super light)\n * - SECONDARY scale (7 shades from super dark to super light)\n *\n * The function:\n * 1. Creates a 12-color scale from white to the primary color to black\n * 2. Generates a complementary secondary color by shifting the hue 180 degrees\n * 3. Creates another 12-color scale for the secondary color\n * 4. Maps specific positions from these scales to create the final palette structure\n */\nexport const generatePalette = (baseColor: RGBArray): ProtonPalette => {\n const primaryRgba = arrayToRgbString(baseColor);\n\n const primaryScaleFunc = getScale(\"#FFFFFF\", primaryRgba, \"#000000\");\n const primaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = primaryScaleFunc(i / 11);\n return desaturate(color, 0.0085);\n });\n\n const adjustedPrimaryScale = primaryScale.map((color) =>\n saturate(adjustBrightnessForLuminance(color), 0.005),\n );\n\n const secondaryColor = toRgba(saturate(adjustHue(primaryRgba, 180), 1));\n\n const secondaryScaleFunc = getScale(\"#FFFFFF\", secondaryColor, \"#000000\");\n const secondaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = secondaryScaleFunc(i / 11);\n return desaturate(color, 0.1);\n });\n\n const adjustedSecondaryScale = secondaryScale.map((color) =>\n desaturate(adjustBrightnessForLuminance(color), 0.22),\n );\n\n const brandPrimary = darkenForContrast(\n saturate(adjustedPrimaryScale[5], 0.115),\n );\n const brandSecondary = darkenForContrast(\n desaturate(adjustedSecondaryScale[5], 0.102),\n );\n\n return {\n BASE_COLOR: arrayToRgbString(baseColor),\n BRAND: {\n PRIMARY: brandPrimary,\n PRIMARY_LIGHT: lightenForContrast(\n lightenWithinRange(brandPrimary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n ),\n PRIMARY_SUPER_LIGHT: lightenWithinRange(brandPrimary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n SECONDARY: brandSecondary,\n SECONDARY_LIGHT: lightenWithinRange(brandSecondary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n SECONDARY_SUPER_LIGHT: lightenForContrast(\n lightenWithinRange(brandSecondary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n ),\n },\n PRIMARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(primaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(primaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n //interactive components\n MEDIUM: lightenWithinRange(adjustedPrimaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(\n desaturate(adjustedPrimaryScale[6], 0.1),\n 0.08,\n ),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedPrimaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedPrimaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedPrimaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedPrimaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n SECONDARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(secondaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(secondaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n // interactive components\n MEDIUM: lightenWithinRange(adjustedSecondaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(adjustedSecondaryScale[6], 0.1),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedSecondaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedSecondaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedSecondaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedSecondaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n //TODO: make theme aware grayscale color scale\n //Can we remove the basecolor after this?\n GRAYSCALE: {\n SUPER_DARK: DARK_GRAYSCALE.SUPER_DARK,\n DARK: DARK_GRAYSCALE.DARK,\n MEDIUM: DARK_GRAYSCALE.MEDIUM,\n MEDIUM_LIGHT: DARK_GRAYSCALE.MEDIUM_LIGHT,\n LIGHT: DARK_GRAYSCALE.LIGHT,\n LIGHTEST: DARK_GRAYSCALE.LIGHTEST,\n SUPER_LIGHT: DARK_GRAYSCALE.SUPER_LIGHT,\n WHITE: DARK_GRAYSCALE.WHITE,\n },\n };\n};\n\nconst lightenWithinRange = (\n color: string,\n amount: number,\n range: { min: number; max: number } = { min: 0.03, max: 0.97 },\n): string => {\n let adjustedColor = color;\n let currentLuminance = getLuminance(adjustedColor);\n\n // Validate range bounds\n if (range.min < 0) range.min = 0;\n if (range.max > 1) range.max = 1;\n if (range.min >= range.max) {\n throw new Error(\"Invalid range: min must be less than max\");\n }\n\n // For lightening (positive amount)\n if (amount > 0) {\n // Calculate how much we can lighten before hitting max\n const remainingLuminance = range.max - currentLuminance;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to lighten\n const scaledAmount = amount * (remainingLuminance / (1 - currentLuminance));\n adjustedColor = lighten(adjustedColor, scaledAmount);\n }\n // For darkening (negative amount)\n else if (amount < 0) {\n // Calculate how much we can darken before hitting min\n const remainingLuminance = currentLuminance - range.min;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to darken\n const scaledAmount = amount * (remainingLuminance / currentLuminance);\n adjustedColor = darken(adjustedColor, Math.abs(scaledAmount));\n }\n\n // Verify final luminance is within bounds\n const finalLuminance = getLuminance(adjustedColor);\n if (finalLuminance > range.max) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n } else if (finalLuminance < range.min) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst adjustBrightnessWithinRange = (\n color: string,\n range: { min: number; max: number },\n): string => {\n let adjustedColor = color;\n let luminance = getLuminance(adjustedColor);\n\n // Darken if too bright\n while (luminance > range.max) {\n adjustedColor = darken(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n // Lighten if too dark\n while (luminance < range.min) {\n adjustedColor = lighten(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst lightenForContrast = (color: string): string => {\n while (hasBadContrast(color, \"readable\", LIGHT_GRAYSCALE.DARK)) {\n color = lighten(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst darkenForContrast = (color: string): string => {\n while (hasBadContrast(LIGHT_GRAYSCALE.SUPER_LIGHT, \"readable\", color)) {\n color = darken(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst adjustBrightnessForLuminance = (color: string): string => {\n let currentColor = color;\n let currentLuminance = getLuminance(toRgba(currentColor));\n let adjustmentAttempts = 0;\n const MAX_ATTEMPTS = 6;\n\n while (currentLuminance < 0.16 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = lighten(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n while (currentLuminance > 0.6 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = darken(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n return toRgba(currentColor);\n};\n"],"names":["generatePalette","baseColor","primaryRgba","arrayToRgbString","primaryScaleFunc","getScale","primaryScale","_","i","color","desaturate","adjustedPrimaryScale","saturate","adjustBrightnessForLuminance","secondaryColor","toRgba","adjustHue","secondaryScaleFunc","secondaryScale","adjustedSecondaryScale","brandPrimary","darkenForContrast","brandSecondary","lightenForContrast","lightenWithinRange","DARK_GRAYSCALE","amount","range","adjustedColor","currentLuminance","getLuminance","remainingLuminance","scaledAmount","lighten","darken","finalLuminance","adjustBrightnessWithinRange","luminance","hasBadContrast","LIGHT_GRAYSCALE","currentColor","adjustmentAttempts","MAX_ATTEMPTS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"palette.cjs.js","sources":["../../src/utils/palette.ts"],"sourcesContent":["import {\n adjustHue,\n darken,\n getLuminance,\n getScale,\n hasBadContrast,\n lighten,\n toRgba,\n} from \"color2k\";\nimport { ProtonPalette, RGBArray } from \"../design/types\";\nimport { arrayToRgbString, desaturate, saturate } from \"./color2k\";\nimport { LIGHT_GRAYSCALE } from \"../design/lightTheme/colors\";\n\n/**\n * Generates a complete color palette based on a primary color input.\n * The palette includes primary and secondary color scales with varying shades.\n *\n * @param primaryColor - The base RGB color array to generate the palette from\n * @returns A Palette object containing:\n * - BRAND colors (primary, light primary, and secondary)\n * - PRIMARY scale (7 shades from super dark to super light)\n * - SECONDARY scale (7 shades from super dark to super light)\n *\n * The function:\n * 1. Creates a 12-color scale from white to the primary color to black\n * 2. Generates a complementary secondary color by shifting the hue 180 degrees\n * 3. Creates another 12-color scale for the secondary color\n * 4. Maps specific positions from these scales to create the final palette structure\n */\nexport const generatePalette = (baseColor: RGBArray): ProtonPalette => {\n const primaryRgba = arrayToRgbString(baseColor);\n\n const primaryScaleFunc = getScale(\"#FFFFFF\", primaryRgba, \"#000000\");\n const primaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = primaryScaleFunc(i / 11);\n return desaturate(color, 0.0085);\n });\n\n const adjustedPrimaryScale = primaryScale.map((color) =>\n saturate(adjustBrightnessForLuminance(color), 0.005),\n );\n\n const secondaryColor = toRgba(saturate(adjustHue(primaryRgba, 180), 1));\n\n const secondaryScaleFunc = getScale(\"#FFFFFF\", secondaryColor, \"#000000\");\n const secondaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = secondaryScaleFunc(i / 11);\n return desaturate(color, 0.1);\n });\n\n const adjustedSecondaryScale = secondaryScale.map((color) =>\n desaturate(adjustBrightnessForLuminance(color), 0.22),\n );\n\n const brandPrimary = darkenForContrast(\n saturate(adjustedPrimaryScale[5], 0.115),\n );\n const brandSecondary = darkenForContrast(\n desaturate(adjustedSecondaryScale[5], 0.102),\n );\n\n return {\n BASE_COLOR: arrayToRgbString(baseColor),\n BRAND: {\n PRIMARY: brandPrimary,\n PRIMARY_LIGHT: lightenForContrast(\n lightenWithinRange(brandPrimary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n ),\n PRIMARY_SUPER_LIGHT: lightenWithinRange(brandPrimary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n SECONDARY: brandSecondary,\n SECONDARY_LIGHT: lightenWithinRange(brandSecondary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n SECONDARY_SUPER_LIGHT: lightenForContrast(\n lightenWithinRange(brandSecondary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n ),\n },\n PRIMARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(primaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(primaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n //interactive components\n MEDIUM: lightenWithinRange(adjustedPrimaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(\n desaturate(adjustedPrimaryScale[6], 0.1),\n 0.08,\n ),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedPrimaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedPrimaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedPrimaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedPrimaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n SECONDARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(secondaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(secondaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n // interactive components\n MEDIUM: lightenWithinRange(adjustedSecondaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(adjustedSecondaryScale[6], 0.1),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedSecondaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedSecondaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedSecondaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedSecondaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n };\n};\n\nconst lightenWithinRange = (\n color: string,\n amount: number,\n range: { min: number; max: number } = { min: 0.03, max: 0.97 },\n): string => {\n let adjustedColor = color;\n let currentLuminance = getLuminance(adjustedColor);\n\n // Validate range bounds\n if (range.min < 0) range.min = 0;\n if (range.max > 1) range.max = 1;\n if (range.min >= range.max) {\n throw new Error(\"Invalid range: min must be less than max\");\n }\n\n // For lightening (positive amount)\n if (amount > 0) {\n // Calculate how much we can lighten before hitting max\n const remainingLuminance = range.max - currentLuminance;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to lighten\n const scaledAmount = amount * (remainingLuminance / (1 - currentLuminance));\n adjustedColor = lighten(adjustedColor, scaledAmount);\n }\n // For darkening (negative amount)\n else if (amount < 0) {\n // Calculate how much we can darken before hitting min\n const remainingLuminance = currentLuminance - range.min;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to darken\n const scaledAmount = amount * (remainingLuminance / currentLuminance);\n adjustedColor = darken(adjustedColor, Math.abs(scaledAmount));\n }\n\n // Verify final luminance is within bounds\n const finalLuminance = getLuminance(adjustedColor);\n if (finalLuminance > range.max) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n } else if (finalLuminance < range.min) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst adjustBrightnessWithinRange = (\n color: string,\n range: { min: number; max: number },\n): string => {\n let adjustedColor = color;\n let luminance = getLuminance(adjustedColor);\n\n // Darken if too bright\n while (luminance > range.max) {\n adjustedColor = darken(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n // Lighten if too dark\n while (luminance < range.min) {\n adjustedColor = lighten(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst lightenForContrast = (color: string): string => {\n while (hasBadContrast(color, \"readable\", LIGHT_GRAYSCALE.DARK)) {\n color = lighten(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst darkenForContrast = (color: string): string => {\n while (hasBadContrast(LIGHT_GRAYSCALE.SUPER_LIGHT, \"readable\", color)) {\n color = darken(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst adjustBrightnessForLuminance = (color: string): string => {\n let currentColor = color;\n let currentLuminance = getLuminance(toRgba(currentColor));\n let adjustmentAttempts = 0;\n const MAX_ATTEMPTS = 6;\n\n while (currentLuminance < 0.16 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = lighten(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n while (currentLuminance > 0.6 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = darken(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n return toRgba(currentColor);\n};\n"],"names":["generatePalette","baseColor","primaryRgba","arrayToRgbString","primaryScaleFunc","getScale","primaryScale","_","i","color","desaturate","adjustedPrimaryScale","saturate","adjustBrightnessForLuminance","secondaryColor","toRgba","adjustHue","secondaryScaleFunc","secondaryScale","adjustedSecondaryScale","brandPrimary","darkenForContrast","brandSecondary","lightenForContrast","lightenWithinRange","amount","range","adjustedColor","currentLuminance","getLuminance","remainingLuminance","scaledAmount","lighten","darken","finalLuminance","adjustBrightnessWithinRange","luminance","hasBadContrast","LIGHT_GRAYSCALE","currentColor","adjustmentAttempts","MAX_ATTEMPTS"],"mappings":"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"}
|
package/dist/utils/palette.es.js
CHANGED
|
@@ -1,44 +1,43 @@
|
|
|
1
|
-
import { toRgba as r, adjustHue as
|
|
2
|
-
import { desaturate as S, saturate as
|
|
3
|
-
import { LIGHT_GRAYSCALE as
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return S(G, 85e-4);
|
|
1
|
+
import { toRgba as r, adjustHue as D, getScale as _, getLuminance as s, lighten as I, darken as A, hasBadContrast as M } from "../node_modules/color2k/dist/index.exports.import.es.es.js";
|
|
2
|
+
import { desaturate as S, saturate as u, arrayToRgbString as F } from "./color2k.es.js";
|
|
3
|
+
import { LIGHT_GRAYSCALE as P } from "../design/lightTheme/colors.es.js";
|
|
4
|
+
const p = (m) => {
|
|
5
|
+
const e = F(m), n = _("#FFFFFF", e, "#000000"), t = Array.from({ length: 12 }, (d, T) => {
|
|
6
|
+
const h = n(T / 11);
|
|
7
|
+
return S(h, 85e-4);
|
|
9
8
|
}), i = t.map(
|
|
10
|
-
(
|
|
11
|
-
),
|
|
12
|
-
const
|
|
13
|
-
return S(
|
|
14
|
-
}),
|
|
15
|
-
(
|
|
16
|
-
),
|
|
17
|
-
|
|
18
|
-
),
|
|
19
|
-
S(
|
|
9
|
+
(d) => u(G(d), 5e-3)
|
|
10
|
+
), x = r(u(D(e, 180), 1)), c = _("#FFFFFF", x, "#000000"), o = Array.from({ length: 12 }, (d, T) => {
|
|
11
|
+
const h = c(T / 11);
|
|
12
|
+
return S(h, 0.1);
|
|
13
|
+
}), l = o.map(
|
|
14
|
+
(d) => S(G(d), 0.22)
|
|
15
|
+
), E = f(
|
|
16
|
+
u(i[5], 0.115)
|
|
17
|
+
), L = f(
|
|
18
|
+
S(l[5], 0.102)
|
|
20
19
|
);
|
|
21
20
|
return {
|
|
22
|
-
BASE_COLOR:
|
|
21
|
+
BASE_COLOR: F(m),
|
|
23
22
|
BRAND: {
|
|
24
|
-
PRIMARY:
|
|
25
|
-
PRIMARY_LIGHT:
|
|
26
|
-
a(
|
|
23
|
+
PRIMARY: E,
|
|
24
|
+
PRIMARY_LIGHT: R(
|
|
25
|
+
a(E, 0.08, {
|
|
27
26
|
min: 0.55,
|
|
28
27
|
max: 0.8
|
|
29
28
|
})
|
|
30
29
|
),
|
|
31
|
-
PRIMARY_SUPER_LIGHT: a(
|
|
30
|
+
PRIMARY_SUPER_LIGHT: a(E, 0.15, {
|
|
32
31
|
min: 0.8,
|
|
33
32
|
max: 0.89
|
|
34
33
|
}),
|
|
35
|
-
SECONDARY:
|
|
36
|
-
SECONDARY_LIGHT: a(
|
|
34
|
+
SECONDARY: L,
|
|
35
|
+
SECONDARY_LIGHT: a(L, 0.08, {
|
|
37
36
|
min: 0.55,
|
|
38
37
|
max: 0.8
|
|
39
38
|
}),
|
|
40
|
-
SECONDARY_SUPER_LIGHT:
|
|
41
|
-
a(
|
|
39
|
+
SECONDARY_SUPER_LIGHT: R(
|
|
40
|
+
a(L, 0.15, {
|
|
42
41
|
min: 0.8,
|
|
43
42
|
max: 0.89
|
|
44
43
|
})
|
|
@@ -47,14 +46,14 @@ const K = (m) => {
|
|
|
47
46
|
PRIMARY: {
|
|
48
47
|
//backgrounds
|
|
49
48
|
SUPER_DARK: a(
|
|
50
|
-
|
|
49
|
+
R(t[9]),
|
|
51
50
|
-0.6,
|
|
52
51
|
{
|
|
53
52
|
min: 0,
|
|
54
53
|
max: 0.02
|
|
55
54
|
}
|
|
56
55
|
),
|
|
57
|
-
DARK: a(
|
|
56
|
+
DARK: a(R(t[8]), -0.4, {
|
|
58
57
|
min: 0.01,
|
|
59
58
|
max: 0.02
|
|
60
59
|
}),
|
|
@@ -69,10 +68,10 @@ const K = (m) => {
|
|
|
69
68
|
0.08
|
|
70
69
|
),
|
|
71
70
|
//solid colors
|
|
72
|
-
LIGHT: a(
|
|
71
|
+
LIGHT: a(u(i[5], 0.1), 0.16),
|
|
73
72
|
//accessible text
|
|
74
73
|
LIGHTEST: a(
|
|
75
|
-
|
|
74
|
+
u(i[3], 0.2),
|
|
76
75
|
0.12,
|
|
77
76
|
{
|
|
78
77
|
min: 0.5,
|
|
@@ -91,99 +90,87 @@ const K = (m) => {
|
|
|
91
90
|
SECONDARY: {
|
|
92
91
|
//backgrounds
|
|
93
92
|
SUPER_DARK: a(
|
|
94
|
-
|
|
93
|
+
R(o[9]),
|
|
95
94
|
-0.6,
|
|
96
95
|
{
|
|
97
96
|
min: 0,
|
|
98
97
|
max: 0.02
|
|
99
98
|
}
|
|
100
99
|
),
|
|
101
|
-
DARK: a(
|
|
100
|
+
DARK: a(R(o[8]), -0.4, {
|
|
102
101
|
min: 0.01,
|
|
103
102
|
max: 0.02
|
|
104
103
|
}),
|
|
105
104
|
// interactive components
|
|
106
|
-
MEDIUM: a(
|
|
105
|
+
MEDIUM: a(l[7], -0.2, {
|
|
107
106
|
min: 0,
|
|
108
107
|
max: 0.11
|
|
109
108
|
}),
|
|
110
109
|
//borders and seperators
|
|
111
|
-
MEDIUM_LIGHT: a(
|
|
110
|
+
MEDIUM_LIGHT: a(l[6], 0.1),
|
|
112
111
|
//solid colors
|
|
113
|
-
LIGHT: a(
|
|
112
|
+
LIGHT: a(u(l[5], 0.1), 0.16),
|
|
114
113
|
//accessible text
|
|
115
114
|
LIGHTEST: a(
|
|
116
|
-
|
|
115
|
+
u(l[3], 0.2),
|
|
117
116
|
0.12,
|
|
118
117
|
{
|
|
119
118
|
min: 0.5,
|
|
120
119
|
max: 0.9
|
|
121
120
|
}
|
|
122
121
|
),
|
|
123
|
-
SUPER_LIGHT: a(
|
|
122
|
+
SUPER_LIGHT: a(l[1], 0.02, {
|
|
124
123
|
min: 0.76,
|
|
125
124
|
max: 0.92
|
|
126
125
|
}),
|
|
127
|
-
WHITE: a(
|
|
126
|
+
WHITE: a(l[1], 0.11, {
|
|
128
127
|
min: 0.9,
|
|
129
128
|
max: 0.98
|
|
130
129
|
})
|
|
131
|
-
},
|
|
132
|
-
//TODO: make theme aware grayscale color scale
|
|
133
|
-
//Can we remove the basecolor after this?
|
|
134
|
-
GRAYSCALE: {
|
|
135
|
-
SUPER_DARK: s.SUPER_DARK,
|
|
136
|
-
DARK: s.DARK,
|
|
137
|
-
MEDIUM: s.MEDIUM,
|
|
138
|
-
MEDIUM_LIGHT: s.MEDIUM_LIGHT,
|
|
139
|
-
LIGHT: s.LIGHT,
|
|
140
|
-
LIGHTEST: s.LIGHTEST,
|
|
141
|
-
SUPER_LIGHT: s.SUPER_LIGHT,
|
|
142
|
-
WHITE: s.WHITE
|
|
143
130
|
}
|
|
144
131
|
};
|
|
145
132
|
}, a = (m, e, n = { min: 0.03, max: 0.97 }) => {
|
|
146
|
-
let t = m, i =
|
|
133
|
+
let t = m, i = s(t);
|
|
147
134
|
if (n.min < 0 && (n.min = 0), n.max > 1 && (n.max = 1), n.min >= n.max)
|
|
148
135
|
throw new Error("Invalid range: min must be less than max");
|
|
149
136
|
if (e > 0) {
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
const
|
|
153
|
-
t =
|
|
137
|
+
const c = n.max - i;
|
|
138
|
+
if (c <= 0) return r(t);
|
|
139
|
+
const o = e * (c / (1 - i));
|
|
140
|
+
t = I(t, o);
|
|
154
141
|
} else if (e < 0) {
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
157
|
-
const
|
|
158
|
-
t =
|
|
142
|
+
const c = i - n.min;
|
|
143
|
+
if (c <= 0) return r(t);
|
|
144
|
+
const o = e * (c / i);
|
|
145
|
+
t = A(t, Math.abs(o));
|
|
159
146
|
}
|
|
160
|
-
const
|
|
161
|
-
return (
|
|
162
|
-
},
|
|
163
|
-
let n = m, t =
|
|
147
|
+
const x = s(t);
|
|
148
|
+
return (x > n.max || x < n.min) && (t = H(t, n)), r(t);
|
|
149
|
+
}, H = (m, e) => {
|
|
150
|
+
let n = m, t = s(n);
|
|
164
151
|
for (; t > e.max; )
|
|
165
|
-
n =
|
|
152
|
+
n = A(n, 0.05), t = s(n);
|
|
166
153
|
for (; t < e.min; )
|
|
167
|
-
n =
|
|
154
|
+
n = I(n, 0.05), t = s(n);
|
|
168
155
|
return r(n);
|
|
169
|
-
},
|
|
170
|
-
for (;
|
|
171
|
-
m =
|
|
156
|
+
}, R = (m) => {
|
|
157
|
+
for (; M(m, "readable", P.DARK); )
|
|
158
|
+
m = I(m, 0.01);
|
|
172
159
|
return r(m);
|
|
173
|
-
},
|
|
174
|
-
for (;
|
|
175
|
-
m =
|
|
160
|
+
}, f = (m) => {
|
|
161
|
+
for (; M(P.SUPER_LIGHT, "readable", m); )
|
|
162
|
+
m = A(m, 0.01);
|
|
176
163
|
return r(m);
|
|
177
|
-
},
|
|
178
|
-
let e = m, n =
|
|
164
|
+
}, G = (m) => {
|
|
165
|
+
let e = m, n = s(r(e)), t = 0;
|
|
179
166
|
const i = 6;
|
|
180
167
|
for (; n < 0.16 && t < i; )
|
|
181
|
-
t++, e =
|
|
168
|
+
t++, e = I(e, 0.1), n = s(r(e));
|
|
182
169
|
for (; n > 0.6 && t < i; )
|
|
183
|
-
t++, e =
|
|
170
|
+
t++, e = A(e, 0.1), n = s(r(e));
|
|
184
171
|
return r(e);
|
|
185
172
|
};
|
|
186
173
|
export {
|
|
187
|
-
|
|
174
|
+
p as generatePalette
|
|
188
175
|
};
|
|
189
176
|
//# sourceMappingURL=palette.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.es.js","sources":["../../src/utils/palette.ts"],"sourcesContent":["import {\n adjustHue,\n darken,\n getLuminance,\n getScale,\n hasBadContrast,\n lighten,\n toRgba,\n} from \"color2k\";\nimport { ProtonPalette, RGBArray } from \"../design/types\";\nimport { arrayToRgbString, desaturate, saturate } from \"./color2k\";\nimport { LIGHT_GRAYSCALE } from \"../design/lightTheme/colors\";\nimport { DARK_GRAYSCALE } from \"../design/darkTheme/colors\";\n\n/**\n * Generates a complete color palette based on a primary color input.\n * The palette includes primary and secondary color scales with varying shades.\n *\n * @param primaryColor - The base RGB color array to generate the palette from\n * @returns A Palette object containing:\n * - BRAND colors (primary, light primary, and secondary)\n * - PRIMARY scale (7 shades from super dark to super light)\n * - SECONDARY scale (7 shades from super dark to super light)\n *\n * The function:\n * 1. Creates a 12-color scale from white to the primary color to black\n * 2. Generates a complementary secondary color by shifting the hue 180 degrees\n * 3. Creates another 12-color scale for the secondary color\n * 4. Maps specific positions from these scales to create the final palette structure\n */\nexport const generatePalette = (baseColor: RGBArray): ProtonPalette => {\n const primaryRgba = arrayToRgbString(baseColor);\n\n const primaryScaleFunc = getScale(\"#FFFFFF\", primaryRgba, \"#000000\");\n const primaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = primaryScaleFunc(i / 11);\n return desaturate(color, 0.0085);\n });\n\n const adjustedPrimaryScale = primaryScale.map((color) =>\n saturate(adjustBrightnessForLuminance(color), 0.005),\n );\n\n const secondaryColor = toRgba(saturate(adjustHue(primaryRgba, 180), 1));\n\n const secondaryScaleFunc = getScale(\"#FFFFFF\", secondaryColor, \"#000000\");\n const secondaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = secondaryScaleFunc(i / 11);\n return desaturate(color, 0.1);\n });\n\n const adjustedSecondaryScale = secondaryScale.map((color) =>\n desaturate(adjustBrightnessForLuminance(color), 0.22),\n );\n\n const brandPrimary = darkenForContrast(\n saturate(adjustedPrimaryScale[5], 0.115),\n );\n const brandSecondary = darkenForContrast(\n desaturate(adjustedSecondaryScale[5], 0.102),\n );\n\n return {\n BASE_COLOR: arrayToRgbString(baseColor),\n BRAND: {\n PRIMARY: brandPrimary,\n PRIMARY_LIGHT: lightenForContrast(\n lightenWithinRange(brandPrimary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n ),\n PRIMARY_SUPER_LIGHT: lightenWithinRange(brandPrimary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n SECONDARY: brandSecondary,\n SECONDARY_LIGHT: lightenWithinRange(brandSecondary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n SECONDARY_SUPER_LIGHT: lightenForContrast(\n lightenWithinRange(brandSecondary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n ),\n },\n PRIMARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(primaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(primaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n //interactive components\n MEDIUM: lightenWithinRange(adjustedPrimaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(\n desaturate(adjustedPrimaryScale[6], 0.1),\n 0.08,\n ),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedPrimaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedPrimaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedPrimaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedPrimaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n SECONDARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(secondaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(secondaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n // interactive components\n MEDIUM: lightenWithinRange(adjustedSecondaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(adjustedSecondaryScale[6], 0.1),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedSecondaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedSecondaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedSecondaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedSecondaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n //TODO: make theme aware grayscale color scale\n //Can we remove the basecolor after this?\n GRAYSCALE: {\n SUPER_DARK: DARK_GRAYSCALE.SUPER_DARK,\n DARK: DARK_GRAYSCALE.DARK,\n MEDIUM: DARK_GRAYSCALE.MEDIUM,\n MEDIUM_LIGHT: DARK_GRAYSCALE.MEDIUM_LIGHT,\n LIGHT: DARK_GRAYSCALE.LIGHT,\n LIGHTEST: DARK_GRAYSCALE.LIGHTEST,\n SUPER_LIGHT: DARK_GRAYSCALE.SUPER_LIGHT,\n WHITE: DARK_GRAYSCALE.WHITE,\n },\n };\n};\n\nconst lightenWithinRange = (\n color: string,\n amount: number,\n range: { min: number; max: number } = { min: 0.03, max: 0.97 },\n): string => {\n let adjustedColor = color;\n let currentLuminance = getLuminance(adjustedColor);\n\n // Validate range bounds\n if (range.min < 0) range.min = 0;\n if (range.max > 1) range.max = 1;\n if (range.min >= range.max) {\n throw new Error(\"Invalid range: min must be less than max\");\n }\n\n // For lightening (positive amount)\n if (amount > 0) {\n // Calculate how much we can lighten before hitting max\n const remainingLuminance = range.max - currentLuminance;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to lighten\n const scaledAmount = amount * (remainingLuminance / (1 - currentLuminance));\n adjustedColor = lighten(adjustedColor, scaledAmount);\n }\n // For darkening (negative amount)\n else if (amount < 0) {\n // Calculate how much we can darken before hitting min\n const remainingLuminance = currentLuminance - range.min;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to darken\n const scaledAmount = amount * (remainingLuminance / currentLuminance);\n adjustedColor = darken(adjustedColor, Math.abs(scaledAmount));\n }\n\n // Verify final luminance is within bounds\n const finalLuminance = getLuminance(adjustedColor);\n if (finalLuminance > range.max) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n } else if (finalLuminance < range.min) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst adjustBrightnessWithinRange = (\n color: string,\n range: { min: number; max: number },\n): string => {\n let adjustedColor = color;\n let luminance = getLuminance(adjustedColor);\n\n // Darken if too bright\n while (luminance > range.max) {\n adjustedColor = darken(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n // Lighten if too dark\n while (luminance < range.min) {\n adjustedColor = lighten(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst lightenForContrast = (color: string): string => {\n while (hasBadContrast(color, \"readable\", LIGHT_GRAYSCALE.DARK)) {\n color = lighten(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst darkenForContrast = (color: string): string => {\n while (hasBadContrast(LIGHT_GRAYSCALE.SUPER_LIGHT, \"readable\", color)) {\n color = darken(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst adjustBrightnessForLuminance = (color: string): string => {\n let currentColor = color;\n let currentLuminance = getLuminance(toRgba(currentColor));\n let adjustmentAttempts = 0;\n const MAX_ATTEMPTS = 6;\n\n while (currentLuminance < 0.16 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = lighten(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n while (currentLuminance > 0.6 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = darken(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n return toRgba(currentColor);\n};\n"],"names":["generatePalette","baseColor","primaryRgba","arrayToRgbString","primaryScaleFunc","getScale","primaryScale","_","i","color","desaturate","adjustedPrimaryScale","saturate","adjustBrightnessForLuminance","secondaryColor","toRgba","adjustHue","secondaryScaleFunc","secondaryScale","adjustedSecondaryScale","brandPrimary","darkenForContrast","brandSecondary","lightenForContrast","lightenWithinRange","DARK_GRAYSCALE","amount","range","adjustedColor","currentLuminance","getLuminance","remainingLuminance","scaledAmount","lighten","darken","finalLuminance","adjustBrightnessWithinRange","luminance","hasBadContrast","LIGHT_GRAYSCALE","currentColor","adjustmentAttempts","MAX_ATTEMPTS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"palette.es.js","sources":["../../src/utils/palette.ts"],"sourcesContent":["import {\n adjustHue,\n darken,\n getLuminance,\n getScale,\n hasBadContrast,\n lighten,\n toRgba,\n} from \"color2k\";\nimport { ProtonPalette, RGBArray } from \"../design/types\";\nimport { arrayToRgbString, desaturate, saturate } from \"./color2k\";\nimport { LIGHT_GRAYSCALE } from \"../design/lightTheme/colors\";\n\n/**\n * Generates a complete color palette based on a primary color input.\n * The palette includes primary and secondary color scales with varying shades.\n *\n * @param primaryColor - The base RGB color array to generate the palette from\n * @returns A Palette object containing:\n * - BRAND colors (primary, light primary, and secondary)\n * - PRIMARY scale (7 shades from super dark to super light)\n * - SECONDARY scale (7 shades from super dark to super light)\n *\n * The function:\n * 1. Creates a 12-color scale from white to the primary color to black\n * 2. Generates a complementary secondary color by shifting the hue 180 degrees\n * 3. Creates another 12-color scale for the secondary color\n * 4. Maps specific positions from these scales to create the final palette structure\n */\nexport const generatePalette = (baseColor: RGBArray): ProtonPalette => {\n const primaryRgba = arrayToRgbString(baseColor);\n\n const primaryScaleFunc = getScale(\"#FFFFFF\", primaryRgba, \"#000000\");\n const primaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = primaryScaleFunc(i / 11);\n return desaturate(color, 0.0085);\n });\n\n const adjustedPrimaryScale = primaryScale.map((color) =>\n saturate(adjustBrightnessForLuminance(color), 0.005),\n );\n\n const secondaryColor = toRgba(saturate(adjustHue(primaryRgba, 180), 1));\n\n const secondaryScaleFunc = getScale(\"#FFFFFF\", secondaryColor, \"#000000\");\n const secondaryScale = Array.from({ length: 12 }, (_, i) => {\n const color = secondaryScaleFunc(i / 11);\n return desaturate(color, 0.1);\n });\n\n const adjustedSecondaryScale = secondaryScale.map((color) =>\n desaturate(adjustBrightnessForLuminance(color), 0.22),\n );\n\n const brandPrimary = darkenForContrast(\n saturate(adjustedPrimaryScale[5], 0.115),\n );\n const brandSecondary = darkenForContrast(\n desaturate(adjustedSecondaryScale[5], 0.102),\n );\n\n return {\n BASE_COLOR: arrayToRgbString(baseColor),\n BRAND: {\n PRIMARY: brandPrimary,\n PRIMARY_LIGHT: lightenForContrast(\n lightenWithinRange(brandPrimary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n ),\n PRIMARY_SUPER_LIGHT: lightenWithinRange(brandPrimary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n SECONDARY: brandSecondary,\n SECONDARY_LIGHT: lightenWithinRange(brandSecondary, 0.08, {\n min: 0.55,\n max: 0.8,\n }),\n SECONDARY_SUPER_LIGHT: lightenForContrast(\n lightenWithinRange(brandSecondary, 0.15, {\n min: 0.8,\n max: 0.89,\n }),\n ),\n },\n PRIMARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(primaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(primaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n //interactive components\n MEDIUM: lightenWithinRange(adjustedPrimaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(\n desaturate(adjustedPrimaryScale[6], 0.1),\n 0.08,\n ),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedPrimaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedPrimaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedPrimaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedPrimaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n SECONDARY: {\n //backgrounds\n SUPER_DARK: lightenWithinRange(\n lightenForContrast(secondaryScale[9]),\n -0.6,\n {\n min: 0.0,\n max: 0.02,\n },\n ),\n DARK: lightenWithinRange(lightenForContrast(secondaryScale[8]), -0.4, {\n min: 0.01,\n max: 0.02,\n }),\n // interactive components\n MEDIUM: lightenWithinRange(adjustedSecondaryScale[7], -0.2, {\n min: 0.0,\n max: 0.11,\n }),\n //borders and seperators\n MEDIUM_LIGHT: lightenWithinRange(adjustedSecondaryScale[6], 0.1),\n //solid colors\n LIGHT: lightenWithinRange(saturate(adjustedSecondaryScale[5], 0.1), 0.16),\n //accessible text\n LIGHTEST: lightenWithinRange(\n saturate(adjustedSecondaryScale[3], 0.2),\n 0.12,\n {\n min: 0.5,\n max: 0.9,\n },\n ),\n SUPER_LIGHT: lightenWithinRange(adjustedSecondaryScale[1], 0.02, {\n min: 0.76,\n max: 0.92,\n }),\n WHITE: lightenWithinRange(adjustedSecondaryScale[1], 0.11, {\n min: 0.9,\n max: 0.98,\n }),\n },\n };\n};\n\nconst lightenWithinRange = (\n color: string,\n amount: number,\n range: { min: number; max: number } = { min: 0.03, max: 0.97 },\n): string => {\n let adjustedColor = color;\n let currentLuminance = getLuminance(adjustedColor);\n\n // Validate range bounds\n if (range.min < 0) range.min = 0;\n if (range.max > 1) range.max = 1;\n if (range.min >= range.max) {\n throw new Error(\"Invalid range: min must be less than max\");\n }\n\n // For lightening (positive amount)\n if (amount > 0) {\n // Calculate how much we can lighten before hitting max\n const remainingLuminance = range.max - currentLuminance;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to lighten\n const scaledAmount = amount * (remainingLuminance / (1 - currentLuminance));\n adjustedColor = lighten(adjustedColor, scaledAmount);\n }\n // For darkening (negative amount)\n else if (amount < 0) {\n // Calculate how much we can darken before hitting min\n const remainingLuminance = currentLuminance - range.min;\n if (remainingLuminance <= 0) return toRgba(adjustedColor);\n\n // Scale the amount based on remaining room to darken\n const scaledAmount = amount * (remainingLuminance / currentLuminance);\n adjustedColor = darken(adjustedColor, Math.abs(scaledAmount));\n }\n\n // Verify final luminance is within bounds\n const finalLuminance = getLuminance(adjustedColor);\n if (finalLuminance > range.max) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n } else if (finalLuminance < range.min) {\n adjustedColor = adjustBrightnessWithinRange(adjustedColor, range);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst adjustBrightnessWithinRange = (\n color: string,\n range: { min: number; max: number },\n): string => {\n let adjustedColor = color;\n let luminance = getLuminance(adjustedColor);\n\n // Darken if too bright\n while (luminance > range.max) {\n adjustedColor = darken(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n // Lighten if too dark\n while (luminance < range.min) {\n adjustedColor = lighten(adjustedColor, 0.05);\n luminance = getLuminance(adjustedColor);\n }\n\n return toRgba(adjustedColor);\n};\n\nconst lightenForContrast = (color: string): string => {\n while (hasBadContrast(color, \"readable\", LIGHT_GRAYSCALE.DARK)) {\n color = lighten(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst darkenForContrast = (color: string): string => {\n while (hasBadContrast(LIGHT_GRAYSCALE.SUPER_LIGHT, \"readable\", color)) {\n color = darken(color, 0.01);\n }\n return toRgba(color);\n};\n\nconst adjustBrightnessForLuminance = (color: string): string => {\n let currentColor = color;\n let currentLuminance = getLuminance(toRgba(currentColor));\n let adjustmentAttempts = 0;\n const MAX_ATTEMPTS = 6;\n\n while (currentLuminance < 0.16 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = lighten(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n while (currentLuminance > 0.6 && adjustmentAttempts < MAX_ATTEMPTS) {\n adjustmentAttempts++;\n currentColor = darken(currentColor, 0.1);\n currentLuminance = getLuminance(toRgba(currentColor));\n }\n\n return toRgba(currentColor);\n};\n"],"names":["generatePalette","baseColor","primaryRgba","arrayToRgbString","primaryScaleFunc","getScale","primaryScale","_","i","color","desaturate","adjustedPrimaryScale","saturate","adjustBrightnessForLuminance","secondaryColor","toRgba","adjustHue","secondaryScaleFunc","secondaryScale","adjustedSecondaryScale","brandPrimary","darkenForContrast","brandSecondary","lightenForContrast","lightenWithinRange","amount","range","adjustedColor","currentLuminance","getLuminance","remainingLuminance","scaledAmount","lighten","darken","finalLuminance","adjustBrightnessWithinRange","luminance","hasBadContrast","LIGHT_GRAYSCALE","currentColor","adjustmentAttempts","MAX_ATTEMPTS"],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED