@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.
Files changed (67) hide show
  1. package/README.md +10 -0
  2. package/dist/components/ActionMenu/ActionMenu.cjs.js.map +1 -1
  3. package/dist/components/ActionMenu/ActionMenu.es.js.map +1 -1
  4. package/dist/components/Banner/Banner.cjs.js.map +1 -1
  5. package/dist/components/Banner/Banner.es.js.map +1 -1
  6. package/dist/components/Button/Button.cjs.js.map +1 -1
  7. package/dist/components/Button/Button.es.js.map +1 -1
  8. package/dist/components/ButtonGroup/ButtonGroup.cjs.js +1 -1
  9. package/dist/components/ButtonGroup/ButtonGroup.cjs.js.map +1 -1
  10. package/dist/components/ButtonGroup/ButtonGroup.es.js +10 -10
  11. package/dist/components/ButtonGroup/ButtonGroup.es.js.map +1 -1
  12. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.cjs.js.map +1 -1
  13. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.es.js.map +1 -1
  14. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.cjs.js.map +1 -1
  15. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.es.js.map +1 -1
  16. package/dist/components/Input/BaseInput/Input.cjs.js.map +1 -1
  17. package/dist/components/Input/BaseInput/Input.es.js.map +1 -1
  18. package/dist/components/Input/OTPInput/OTPInput.cjs.js.map +1 -1
  19. package/dist/components/Input/OTPInput/OTPInput.es.js.map +1 -1
  20. package/dist/components/Modal/Modal.cjs.js +1 -1
  21. package/dist/components/Modal/Modal.cjs.js.map +1 -1
  22. package/dist/components/Modal/Modal.es.js +18 -18
  23. package/dist/components/Modal/Modal.es.js.map +1 -1
  24. package/dist/components/Popover/Popover.cjs.js +1 -1
  25. package/dist/components/Popover/Popover.cjs.js.map +1 -1
  26. package/dist/components/Popover/Popover.es.js +21 -14
  27. package/dist/components/Popover/Popover.es.js.map +1 -1
  28. package/dist/components/ScreenOverlay/ScreenOverlay.cjs.js.map +1 -1
  29. package/dist/components/ScreenOverlay/ScreenOverlay.es.js.map +1 -1
  30. package/dist/components/Select/Select.cjs.js.map +1 -1
  31. package/dist/components/Select/Select.es.js.map +1 -1
  32. package/dist/components/Text/TextEllipsis/TextEllipsis.cjs.js.map +1 -1
  33. package/dist/components/Text/TextEllipsis/TextEllipsis.es.js.map +1 -1
  34. package/dist/components/Tooltip/ResponsiveTooltip.cjs.js.map +1 -1
  35. package/dist/components/Tooltip/ResponsiveTooltip.es.js.map +1 -1
  36. package/dist/constants/breakpoint.cjs.js.map +1 -1
  37. package/dist/constants/breakpoint.es.js.map +1 -1
  38. package/dist/constants.d.ts +2 -0
  39. package/dist/dark.d.ts +0 -1
  40. package/dist/design/darkTheme/colors.cjs.js +1 -1
  41. package/dist/design/darkTheme/colors.cjs.js.map +1 -1
  42. package/dist/design/darkTheme/colors.es.js +7 -8
  43. package/dist/design/darkTheme/colors.es.js.map +1 -1
  44. package/dist/design/generateStylesheet.cjs.js.map +1 -1
  45. package/dist/design/generateStylesheet.es.js +0 -1
  46. package/dist/design/generateStylesheet.es.js.map +1 -1
  47. package/dist/design/lightTheme/colors.cjs.js +1 -1
  48. package/dist/design/lightTheme/colors.cjs.js.map +1 -1
  49. package/dist/design/lightTheme/colors.es.js +10 -11
  50. package/dist/design/lightTheme/colors.es.js.map +1 -1
  51. package/dist/hooks/useBreakpoint.cjs.js.map +1 -1
  52. package/dist/hooks/useBreakpoint.es.js.map +1 -1
  53. package/dist/hooks/useMergedRef.cjs.js.map +1 -1
  54. package/dist/hooks/useMergedRef.es.js.map +1 -1
  55. package/dist/hooks.d.ts +1 -3
  56. package/dist/index.cjs.js +1 -1
  57. package/dist/index.d.ts +20 -16
  58. package/dist/index.es.js +13 -13
  59. package/dist/light.d.ts +0 -1
  60. package/dist/style.css +1 -1
  61. package/dist/theme.d.ts +0 -1
  62. package/dist/utils/palette.cjs.js +1 -1
  63. package/dist/utils/palette.cjs.js.map +1 -1
  64. package/dist/utils/palette.es.js +64 -77
  65. package/dist/utils/palette.es.js.map +1 -1
  66. package/dist/utils.d.ts +0 -1
  67. 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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"}
@@ -1,44 +1,43 @@
1
- import { toRgba as r, adjustHue as f, getScale as _, getLuminance as c, lighten as A, darken as L, hasBadContrast as U } from "../node_modules/color2k/dist/index.exports.import.es.es.js";
2
- import { desaturate as S, saturate as E, arrayToRgbString as D } from "./color2k.es.js";
3
- import { LIGHT_GRAYSCALE as F } from "../design/lightTheme/colors.es.js";
4
- import { DARK_GRAYSCALE as s } from "../design/darkTheme/colors.es.js";
5
- const K = (m) => {
6
- const e = D(m), n = _("#FFFFFF", e, "#000000"), t = Array.from({ length: 12 }, (u, x) => {
7
- const G = n(x / 11);
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
- (u) => E(P(u), 5e-3)
11
- ), T = r(E(f(e, 180), 1)), o = _("#FFFFFF", T, "#000000"), R = Array.from({ length: 12 }, (u, x) => {
12
- const G = o(x / 11);
13
- return S(G, 0.1);
14
- }), I = R.map(
15
- (u) => S(P(u), 0.22)
16
- ), d = h(
17
- E(i[5], 0.115)
18
- ), H = h(
19
- S(I[5], 0.102)
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: D(m),
21
+ BASE_COLOR: F(m),
23
22
  BRAND: {
24
- PRIMARY: d,
25
- PRIMARY_LIGHT: l(
26
- a(d, 0.08, {
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(d, 0.15, {
30
+ PRIMARY_SUPER_LIGHT: a(E, 0.15, {
32
31
  min: 0.8,
33
32
  max: 0.89
34
33
  }),
35
- SECONDARY: H,
36
- SECONDARY_LIGHT: a(H, 0.08, {
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: l(
41
- a(H, 0.15, {
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
- l(t[9]),
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(l(t[8]), -0.4, {
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(E(i[5], 0.1), 0.16),
71
+ LIGHT: a(u(i[5], 0.1), 0.16),
73
72
  //accessible text
74
73
  LIGHTEST: a(
75
- E(i[3], 0.2),
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
- l(R[9]),
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(l(R[8]), -0.4, {
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(I[7], -0.2, {
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(I[6], 0.1),
110
+ MEDIUM_LIGHT: a(l[6], 0.1),
112
111
  //solid colors
113
- LIGHT: a(E(I[5], 0.1), 0.16),
112
+ LIGHT: a(u(l[5], 0.1), 0.16),
114
113
  //accessible text
115
114
  LIGHTEST: a(
116
- E(I[3], 0.2),
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(I[1], 0.02, {
122
+ SUPER_LIGHT: a(l[1], 0.02, {
124
123
  min: 0.76,
125
124
  max: 0.92
126
125
  }),
127
- WHITE: a(I[1], 0.11, {
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 = c(t);
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 o = n.max - i;
151
- if (o <= 0) return r(t);
152
- const R = e * (o / (1 - i));
153
- t = A(t, R);
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 o = i - n.min;
156
- if (o <= 0) return r(t);
157
- const R = e * (o / i);
158
- t = L(t, Math.abs(R));
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 T = c(t);
161
- return (T > n.max || T < n.min) && (t = M(t, n)), r(t);
162
- }, M = (m, e) => {
163
- let n = m, t = c(n);
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 = L(n, 0.05), t = c(n);
152
+ n = A(n, 0.05), t = s(n);
166
153
  for (; t < e.min; )
167
- n = A(n, 0.05), t = c(n);
154
+ n = I(n, 0.05), t = s(n);
168
155
  return r(n);
169
- }, l = (m) => {
170
- for (; U(m, "readable", F.DARK); )
171
- m = A(m, 0.01);
156
+ }, R = (m) => {
157
+ for (; M(m, "readable", P.DARK); )
158
+ m = I(m, 0.01);
172
159
  return r(m);
173
- }, h = (m) => {
174
- for (; U(F.SUPER_LIGHT, "readable", m); )
175
- m = L(m, 0.01);
160
+ }, f = (m) => {
161
+ for (; M(P.SUPER_LIGHT, "readable", m); )
162
+ m = A(m, 0.01);
176
163
  return r(m);
177
- }, P = (m) => {
178
- let e = m, n = c(r(e)), t = 0;
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 = A(e, 0.1), n = c(r(e));
168
+ t++, e = I(e, 0.1), n = s(r(e));
182
169
  for (; n > 0.6 && t < i; )
183
- t++, e = L(e, 0.1), n = c(r(e));
170
+ t++, e = A(e, 0.1), n = s(r(e));
184
171
  return r(e);
185
172
  };
186
173
  export {
187
- K as generatePalette
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
@@ -111,7 +111,6 @@ declare type ProtonPalette = {
111
111
  };
112
112
  PRIMARY: ProtonColorScale;
113
113
  SECONDARY: ProtonColorScale;
114
- GRAYSCALE: ProtonColorScale;
115
114
  };
116
115
 
117
116
  declare type RGBArray = [number, number, number];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@protonradio/proton-ui",
3
- "version": "0.12.5",
3
+ "version": "0.12.7",
4
4
  "description": "",
5
5
  "main": "./dist/proton-ui.umd.js",
6
6
  "module": "./dist/proton-ui.es.js",