{"version":3,"file":"static/chunks/app/(goodies)/gradient-generator/page-c5fc820bdb9a8a68.js","mappings":"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AAAA,EAAAA,EAAAA,CAASA,CAAC,CAC1B,CACE,CACE3Q,IAAK,IACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,GACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,CACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,EACb,EACA,CACEF,IAAK,GACLC,WAAY,IACZC,UAAW,EACb,EACA,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,GACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,EACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACA,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,CACb,EACA,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,CACb,EACA,CACEF,IAAK,EACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,GACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,GACLC,WAAY,IACZC,UAAW,EACb,EACD,CACD,CACE,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,EACLC,WAAY,EACZC,UAAW,CACb,EACA,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACA,CACEF,IAAK,IACLC,WAAY,IACZC,UAAW,GACb,EACD,CACD,CACE,CACEF,IAAK,GACLC,WAAY,EACZC,UAAW,EACb,EACA,CACEF,IAAK,IACLC,WAAY,EACZC,UAAW,EACb,EACD,CACF,IqB3aCiM,ErBibKwE,CAAAA,EAAAA,EAAAA,EAAAA,CAASA,CAAClZ,CqBjbH,CAACmZ,EACbjE,ErBobKkE,CAAAA,EAAAA,EAAAA,EAAAA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","sources":["webpack://_N_E/?2e0c","webpack://_N_E/./src/components/ClientOnly/ClientOnly.tsx","webpack://_N_E/./src/components/ClientOnly/index.ts","webpack://_N_E/./src/components/Goodies/GradientGenerator/GradientGenerator.helpers.ts","webpack://_N_E/./src/components/Goodies/GradientGenerator/LogoDoodle.tsx","webpack://_N_E/./src/components/Controls/BezierControl/BezierControl.helpers.js","webpack://_N_E/./src/components/Controls/BezierControl/Bezier.js","webpack://_N_E/./src/components/Controls/BezierControl/BezierControl.js","webpack://_N_E/./src/components/Controls/BezierControl/index.js","webpack://_N_E/./src/components/ColorPickerCompact/HueBar.tsx","webpack://_N_E/./src/components/ColorPickerCompact/SatLitGrid.helpers.ts","webpack://_N_E/./src/components/ColorPickerCompact/SatLitGrid.tsx","webpack://_N_E/./src/components/ColorPickerCompact/ColorPickerCompact.tsx","webpack://_N_E/./src/components/ColorPickerCompact/index.ts","webpack://_N_E/./src/components/Goodies/GradientGenerator/FloatingBoxTip.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/FloatingBox.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/ResponsiveColorPickerTooltip.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/ColorUnit.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/ColorsControl.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/AngleBackground.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/AngleControl.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/ModeToggle.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/ModeControl.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/Controls.tsx","webpack://_N_E/./src/components/Goodies/GradientGenerator/index.tsx","webpack://_N_E/./src/components/ModalBase/OverlayBase.tsx","webpack://_N_E/./src/components/ModalBase/ModalBase.tsx","webpack://_N_E/./src/components/ModalBase/index.ts","webpack://_N_E/./src/components/Paper/Paper.tsx","webpack://_N_E/./src/components/Paper/index.ts","webpack://_N_E/./src/components/Space/Space.tsx","webpack://_N_E/./src/components/Space/index.ts","webpack://_N_E/./src/hooks/use-mouse-position-within-element.ts","webpack://_N_E/./src/hooks/use-on-click-outside.ts","webpack://_N_E/./src/hooks/use-window-dimensions-client-only.ts","webpack://_N_E/./src/components/ColorPickerCompact/ColorPickerCompact.linaria.module.css","webpack://_N_E/./src/components/ColorPickerCompact/HueBar.linaria.module.css","webpack://_N_E/./src/components/ColorPickerCompact/SatLitGrid.linaria.module.css","webpack://_N_E/./src/components/Controls/BezierControl/Bezier.linaria.module.css","webpack://_N_E/./src/components/Controls/BezierControl/BezierControl.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/AngleBackground.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/AngleControl.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/ColorUnit.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/ColorsControl.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/Controls.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/FloatingBox.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/FloatingBoxTip.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/LogoDoodle.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/ModeControl.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/ModeToggle.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/ResponsiveColorPickerTooltip.linaria.module.css","webpack://_N_E/./src/components/Goodies/GradientGenerator/index.linaria.module.css","webpack://_N_E/./src/components/ModalBase/ModalBase.linaria.module.css","webpack://_N_E/./src/components/ModalBase/OverlayBase.linaria.module.css","webpack://_N_E/./src/components/Space/Space.linaria.module.css"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/CodeSnippet/AnnotatedContainer.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/CodeSnippet/CodeWrapper.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/CodeSnippet/SnippetJuggler.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/CodeSnippet/WithCopyButton.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Goodies/GradientGenerator/index.tsx\");\n","'use client';\n\nimport React from 'react';\n\nimport useHasMounted from '@/hooks/use-has-hydrated';\n\ninterface Props extends React.HTMLAttributes {\n children: React.ReactNode;\n}\n\nfunction ClientOnly({ children, ...delegated }: Props) {\n const hasMounted = useHasMounted();\n\n if (!hasMounted) {\n return null;\n }\n\n return
{children}
;\n}\n\nexport default ClientOnly;\n","export { default } from './ClientOnly';\n","import chroma from 'chroma-js';\n\nimport {\n random,\n normalize,\n getYValueForBezier,\n range,\n generateId,\n roundTo,\n sampleOne,\n} from '@/utils';\n\nexport interface Color {\n hue: number;\n saturation: number;\n lightness: number;\n}\n\nexport interface ColorWithId {\n id: string;\n color: Color | null;\n}\n\nexport interface XYPair {\n x: number;\n y: number;\n}\nexport type EasingCurve = [XYPair, XYPair];\n\nexport interface QueryParams {\n colors?: string;\n colorMode?: ColorMode;\n precision?: string;\n angle?: string;\n easingCurve?: string;\n}\n\nexport const MIN_PRECISION = 1;\nexport const MAX_PRECISION = 20;\n\nexport const MAXIMUM_NUM_OF_COLORS = 5;\n\nexport const VALID_COLOR_MODES = [\n 'lrgb',\n 'hsl',\n 'hsv',\n 'hcl',\n 'lab',\n] as const;\n\nexport type ColorMode = (typeof VALID_COLOR_MODES)[number];\n\ninterface CurvePreset {\n id: string;\n label: string;\n curve: EasingCurve;\n}\nexport const CURVE_PRESETS: Array = [\n {\n id: 'linear',\n label: 'Linear',\n curve: [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ],\n },\n {\n id: 'ease',\n label: 'Ease',\n curve: [\n { x: 0.333, y: 1 },\n { x: 0.666, y: 0 },\n ],\n },\n {\n id: 'fun',\n label: 'Fun',\n curve: [\n { x: 1.1, y: 1 },\n { x: -0.1, y: 0 },\n ],\n },\n];\n\nexport function generateGradient({\n colors,\n angle,\n colorMode,\n easingCurve,\n precision,\n}: {\n colors: Array;\n angle: number;\n colorMode: ColorMode;\n easingCurve: EasingCurve;\n precision: number;\n}) {\n const numOfStops = colors.length + Math.round(precision);\n\n const baseColors = colors\n .filter((c) => c.color)\n .map((c) => c.color) as Array;\n\n // Convert to Chroma\n const chromaColors = baseColors.map((color) => {\n return chroma(\n color.hue,\n color.saturation,\n color.lightness,\n 'hsl'\n );\n });\n\n const stops = chroma\n .scale(chromaColors)\n .mode(colorMode)\n .colors(numOfStops, 'hsl');\n\n // Apply this easing curve to these colors\n const formattedStops = stops.map((color, index) => {\n // For each value of X, running across the bottom axis,\n // we want to see how far away the bezier line is.\n const xTarget = index / (stops.length - 1);\n let y = getYValueForBezier(\n xTarget,\n 1 - easingCurve[0].y,\n easingCurve[0].x,\n 1 - easingCurve[1].y,\n easingCurve[1].x\n );\n\n y = Math.round(normalize(y, 0, 1, 0, 100));\n\n const hue = isNaN(color[0]) ? 0 : Math.round(color[0]);\n\n const hslString = `hsl(${hue}deg ${Math.round(\n color[1] * 100\n )}% ${Math.round(color[2] * 100)}%)`;\n\n return `${hslString} ${y}%`;\n });\n\n return `linear-gradient(\n ${angle}deg,\n ${formattedStops.join(',\\n ')}\n )`;\n}\n\nexport function generateCodeSnippet(gradientString: string) {\n return `\\\n.gradient {\n background-image: ${gradientString};\n}`;\n}\n\nexport function generateHSLString(color: Color) {\n const sat = roundTo(color.saturation * 100, 2);\n const lit = roundTo(color.lightness * 100, 2);\n\n return `hsl(${color.hue}deg ${sat}% ${lit}%)`;\n}\n\nfunction generateColorsArray(\n colors: Array\n): Array {\n const hslColors = colors.map((color) => {\n if (typeof color === 'string') {\n // If it's a string, it must be a hex code.\n const chromaColor = chroma(color);\n const hue = chromaColor.get('hsl.h');\n return {\n hue: isNaN(hue) ? 0 : hue,\n saturation: chromaColor.get('hsl.s'),\n lightness: chromaColor.get('hsl.l'),\n };\n } else {\n return color;\n }\n });\n\n const prepopulatedColors = hslColors.map((color) => ({\n color,\n id: generateId(),\n }));\n\n const remainingColors =\n MAXIMUM_NUM_OF_COLORS - prepopulatedColors.length;\n\n return [\n ...prepopulatedColors,\n ...range(remainingColors).map(() => ({\n color: null,\n id: generateId(),\n })),\n ];\n}\n\n// I'm feeling *very* lazy. Not bothering with any TS stuff.\nexport function encodeUrlString({\n colors,\n angle,\n colorMode,\n precision,\n easingCurve,\n}: any) {\n let output = '';\n\n const colorHexCodes = colors\n .filter((c: any) => c.color)\n .map((c: any) => {\n const chromaColor = chroma(\n c.color.hue,\n c.color.saturation,\n c.color.lightness,\n 'hsl'\n );\n\n return chromaColor.hex().replace('#', '');\n });\n\n output = `colors=${colorHexCodes.join('|')}`;\n output = `${output}&angle=${angle}`;\n output = `${output}&colorMode=${colorMode}`;\n output = `${output}&precision=${precision}`;\n\n const easingString = `${easingCurve[0].x}|${easingCurve[0].y}|${easingCurve[1].x}|${easingCurve[1].y}`;\n output = `${output}&easingCurve=${easingString}`;\n\n return output;\n}\n\nexport function getInitialValues(query: QueryParams = {}) {\n const initialColors = generateColorsArray(\n query.colors\n ? query.colors.split('|')\n : [\n {\n hue: 240,\n saturation: 1,\n lightness: 0.2,\n },\n {\n hue: 55,\n saturation: 1,\n lightness: 0.5,\n },\n ]\n );\n\n const initialColorMode: ColorMode = query.colorMode ?? 'hcl';\n const initialPrecision = Number(query.precision ?? 8);\n const initialAngle = Number(query.angle ?? 45);\n\n let initialEasingCurve: EasingCurve = [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ];\n\n if (query.easingCurve) {\n const queryValues = query.easingCurve.split('|');\n initialEasingCurve = [\n { x: Number(queryValues[0]), y: Number(queryValues[1]) },\n { x: Number(queryValues[2]), y: Number(queryValues[3]) },\n ];\n }\n\n return {\n initialColors,\n initialColorMode,\n initialPrecision,\n initialAngle,\n initialEasingCurve,\n };\n}\n\nexport function getRandomColorPalette(): Array {\n const rawColors = sampleOne([\n [\n {\n hue: 240,\n saturation: 1,\n lightness: 0.5,\n },\n {\n hue: 200,\n saturation: 0.54,\n lightness: 0.9,\n },\n ],\n [\n {\n hue: 300,\n saturation: 1,\n lightness: 0.1,\n },\n {\n hue: 150,\n saturation: 0.44,\n lightness: 0.72,\n },\n {\n hue: 60,\n saturation: 1,\n lightness: 0.5,\n },\n ],\n [\n {\n hue: 0,\n saturation: 1,\n lightness: 0.49,\n },\n {\n hue: 53,\n saturation: 1,\n lightness: 0.9,\n },\n {\n hue: 30,\n saturation: 1,\n lightness: 0.5,\n },\n {\n hue: 327,\n saturation: 0.6,\n lightness: 0.2,\n },\n ],\n [\n {\n hue: 270,\n saturation: 1,\n lightness: 0.07,\n },\n {\n hue: 105,\n saturation: 1,\n lightness: 0.95,\n },\n ],\n [\n {\n hue: 315,\n saturation: 0.88,\n lightness: 0.57,\n },\n {\n hue: 251,\n saturation: 0.87,\n lightness: 0.76,\n },\n {\n hue: 256,\n saturation: 0,\n lightness: 0,\n },\n ],\n [\n {\n hue: 315,\n saturation: 0.73,\n lightness: 0.1,\n },\n {\n hue: 17,\n saturation: 0.95,\n lightness: 0.5,\n },\n {\n hue: 50,\n saturation: 1,\n lightness: 0.7,\n },\n ],\n [\n {\n hue: 305,\n saturation: 1,\n lightness: 0.35,\n },\n {\n hue: 0,\n saturation: 1,\n lightness: 0.9,\n },\n ],\n [\n {\n hue: 49,\n saturation: 1,\n lightness: 0.69,\n },\n {\n hue: 259,\n saturation: 1,\n lightness: 0.15,\n },\n {\n hue: 183,\n saturation: 0.79,\n lightness: 0.36,\n },\n ],\n [\n {\n hue: 345,\n saturation: 1,\n lightness: 0.42,\n },\n {\n hue: 74,\n saturation: 0.71,\n lightness: 0.56,\n },\n {\n hue: 175,\n saturation: 1,\n lightness: 0.35,\n },\n {\n hue: 235,\n saturation: 0.79,\n lightness: 0.38,\n },\n {\n hue: 267,\n saturation: 1,\n lightness: 0.07,\n },\n ],\n [\n {\n hue: 267,\n saturation: 1,\n lightness: 0.07,\n },\n {\n hue: 0,\n saturation: 0.72,\n lightness: 0.48,\n },\n {\n hue: 174,\n saturation: 1,\n lightness: 0.96,\n },\n {\n hue: 231,\n saturation: 0.62,\n lightness: 0.46,\n },\n {\n hue: 235,\n saturation: 0.68,\n lightness: 0.04,\n },\n ],\n [\n {\n hue: 314,\n saturation: 1,\n lightness: 0.05,\n },\n {\n hue: 0,\n saturation: 1,\n lightness: 0.5,\n },\n {\n hue: 293,\n saturation: 1,\n lightness: 0.97,\n },\n ],\n [\n {\n hue: 0,\n saturation: 0,\n lightness: 0,\n },\n {\n hue: 0,\n saturation: 0,\n lightness: 0,\n },\n {\n hue: 0,\n saturation: 0.11,\n lightness: 0.25,\n },\n {\n hue: 35,\n saturation: 0.08,\n lightness: 0.62,\n },\n {\n hue: 50,\n saturation: 0.83,\n lightness: 0.9,\n },\n ],\n [\n {\n hue: 223,\n saturation: 0.68,\n lightness: 0.06,\n },\n {\n hue: 266,\n saturation: 1,\n lightness: 0.5,\n },\n {\n hue: 270,\n saturation: 0.27,\n lightness: 0.94,\n },\n ],\n [\n {\n hue: 0,\n saturation: 0,\n lightness: 1,\n },\n {\n hue: 57,\n saturation: 1,\n lightness: 0.6,\n },\n {\n hue: 210,\n saturation: 0.74,\n lightness: 0.35,\n },\n {\n hue: 253,\n saturation: 0.19,\n lightness: 0.09,\n },\n ],\n [\n {\n hue: 60,\n saturation: 1,\n lightness: 0.5,\n },\n {\n hue: 240,\n saturation: 1,\n lightness: 0.5,\n },\n ],\n ]);\n\n return generateColorsArray(rawColors);\n}\n\nexport function getRandomColorMode(): ColorMode {\n return sampleOne(VALID_COLOR_MODES);\n}\n\nexport function getRandomPrecision() {\n return random(MIN_PRECISION, MAX_PRECISION);\n}\nexport function getRandomAngle() {\n return sampleOne([\n 0,\n 0,\n 10,\n 35,\n 40,\n 45,\n 45,\n 45,\n 90,\n 90,\n 90,\n 90,\n 100,\n 120,\n 180,\n 175,\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n random(0, 360),\n ]);\n}\n\nexport function getRandomCurve(): EasingCurve {\n const presets = CURVE_PRESETS.map((preset) => preset.curve);\n\n return sampleOne([\n ...presets,\n [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ],\n [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ],\n [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ],\n [\n { x: 0.25, y: 0.75 },\n { x: 0.75, y: 0.25 },\n ],\n [\n { x: 0.75, y: 0.9 },\n { x: 0, y: 0.1 },\n ],\n [\n { x: 0.75, y: 1 },\n { x: 1, y: 0.75 },\n ],\n [\n { x: 0, y: 0.25 },\n { x: 1, y: 0.75 },\n ],\n [\n { x: 0, y: 0.25 },\n { x: 0.25, y: 0 },\n ],\n [\n { x: 1.25, y: -0.25 },\n { x: -0.1, y: -0.1 },\n ],\n [\n { x: 1, y: 1 },\n { x: 0, y: 1 },\n ],\n [\n { x: 0.33, y: 1 },\n { x: -0.1, y: -0.1 },\n ],\n [\n { x: Math.random(), y: Math.random() },\n { x: Math.random(), y: Math.random() },\n ],\n ]);\n}\n","import React from 'react';\nimport { styled } from '@linaria/react';\nimport { animated, useSprings } from 'react-spring';\n\nimport { range, normalize, clamp } from '@/utils';\nimport useMousePositionWithinElement from '@/hooks/use-mouse-position-within-element';\n\nconst BAR_WIDTH = 6;\nconst BAR_HEIGHT = 32;\nconst BAR_GAP = 1;\nconst MIN_SCALE = 1 / BAR_WIDTH / 2;\nconst MAX_SCALE = 1;\nconst MIN_OPACITY = 0.1;\nconst MAX_OPACITY = 0.75;\nconst SPRING_CONFIG = {\n tension: 300,\n friction: 20,\n};\n\ninterface Props {\n numOfBars?: number;\n onClick?: () => void;\n}\n\nfunction LogoDoodle({ numOfBars = 18, onClick }: Props) {\n const wrapperRef = React.useRef(null);\n const [status, setStatus] = React.useState('static');\n\n const onEnterBox = React.useCallback(() => {\n setStatus('by-mouse-position');\n }, []);\n const onLeaveBox = React.useCallback(() => {\n setStatus('static');\n }, []);\n\n const [mousePos, box] = useMousePositionWithinElement(wrapperRef, {\n buffer: 96,\n onEnterBox,\n onLeaveBox,\n });\n\n let barScales;\n if (status === 'by-mouse-position') {\n if (mousePos.x !== null && box !== null) {\n barScales = calculateInteractiveBarScales({\n numOfBars,\n xPosition: mousePos.x,\n box,\n });\n }\n } else if (status === 'active') {\n barScales = calculateActiveBarScales(numOfBars);\n } else {\n barScales = calculateStaticBarScales(numOfBars);\n }\n\n // @ts-ignore\n const springs = useSprings(numOfBars, barScales);\n\n return (\n setStatus('active')}\n onMouseUp={() => setStatus('by-mouse-position')}\n onMouseLeave={() => setStatus('by-mouse-position')}\n onClick={onClick}\n >\n {springs.map((style, index) => (\n // IDK why TS doesn't like this and IDC\n // @ts-ignore\n \n ))}\n \n );\n}\n\nfunction calculateStaticBarScales(numOfBars: number) {\n return range(numOfBars).map((index) => {\n const scale = normalize(\n index,\n 0,\n numOfBars - 1,\n MIN_SCALE,\n MAX_SCALE\n );\n const opacity = normalize(\n index,\n 0,\n numOfBars - 1,\n MIN_OPACITY,\n MAX_OPACITY\n );\n return {\n transform: `scaleX(${scale})`,\n opacity,\n config: SPRING_CONFIG,\n };\n });\n}\n\nfunction calculateActiveBarScales(numOfBars: number) {\n return range(numOfBars).map((index) => {\n return {\n transform: `scaleX(1)`,\n opacity: 1,\n config: {\n tension: 400,\n friction: 10,\n },\n };\n });\n}\n\nfunction calculateInteractiveBarScales({\n numOfBars,\n xPosition,\n box,\n}: {\n numOfBars: number;\n xPosition: number;\n box: DOMRect;\n}) {\n return range(numOfBars).map((index) => {\n const centerX =\n index * BAR_WIDTH + index * BAR_GAP + BAR_WIDTH / 2;\n\n const distance = Math.abs(xPosition - centerX);\n\n let scale = normalize(\n distance,\n 0,\n box.width * 0.8,\n MAX_SCALE,\n MIN_SCALE\n );\n scale = clamp(scale, MIN_SCALE, MAX_SCALE);\n\n let opacity = normalize(\n distance,\n 0,\n box.width * 0.8,\n MAX_OPACITY,\n MIN_OPACITY\n );\n opacity = clamp(scale, MIN_OPACITY, MAX_OPACITY);\n\n return {\n transform: `scaleX(${scale})`,\n opacity,\n config: SPRING_CONFIG,\n };\n });\n}\n\nconst Wrapper = styled.button`\n display: flex;\n gap: ${BAR_GAP}px;\n user-select: none;\n`;\n\nconst Bar = styled(animated.div)`\n height: ${BAR_HEIGHT}px;\n width: ${BAR_WIDTH}px;\n background: white;\n transform-origin: center center;\n will-change: transform;\n\n &:first-of-type {\n border-radius: ${BAR_WIDTH / 2}px 0 0 ${BAR_WIDTH / 2}px;\n }\n &:last-of-type {\n border-radius: 0 ${BAR_WIDTH / 2}px ${BAR_WIDTH / 2}px 0;\n }\n`;\n\nexport default LogoDoodle;\n","export function getDistance(firstPoint, secondPoint) {\n const deltaX = Math.abs(firstPoint.x - secondPoint.x);\n const deltaY = Math.abs(firstPoint.y - secondPoint.y);\n\n return Math.sqrt(deltaX ** 2 + deltaY ** 2);\n}\n","import React from 'react';\nimport { styled } from '@linaria/react';\nimport { animated, useSpring } from 'react-spring';\n\nimport { THUMB_FOCUS_GRADIENT } from '@/constants';\nimport { clamp, normalize } from '@/utils';\n\nimport usePrefersReducedMotion from '@/hooks/use-prefers-reduced-motion';\n\nimport { getDistance } from './BezierControl.helpers';\n\nfunction Bezier({ id, box, value, animateChanges, onChange }) {\n const [draggingIndex, setDraggingIndex] = React.useState(null);\n\n const firstHandleRef = React.useRef();\n const secondHandleRef = React.useRef();\n\n // We need to access value/onChange inside the effect, but if we list it as a dependency, it has to re-register all the event listeners. So we’ll cache them in refs:\n const valueRef = React.useRef(value);\n valueRef.current = value;\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const { width, height } = box;\n\n const exceedBoundsBy = 0.05;\n\n React.useEffect(() => {\n if (typeof draggingIndex !== 'number') {\n return;\n }\n\n const value = valueRef.current;\n const onChange = onChangeRef.current;\n\n function handleMouseMove(ev) {\n ev.preventDefault();\n let x, y;\n\n if (ev.touches) {\n const touch = ev.touches[0];\n [x, y] = [touch.clientX, touch.clientY];\n } else {\n [x, y] = [ev.clientX, ev.clientY];\n }\n\n // We need to turn the raw mouse data into\n const relativeX = x - box.left;\n const relativeY = y - box.top;\n\n let normalizedX = normalize(relativeX, 0, width, 0, 1);\n let normalizedY = normalize(relativeY, 0, height, 0, 1);\n\n normalizedX = clamp(\n normalizedX,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n normalizedY = clamp(\n normalizedY,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n\n const newValues = [...value];\n newValues[draggingIndex] = { x: normalizedX, y: normalizedY };\n\n onChange(newValues);\n }\n\n function handleMouseUp(ev) {\n setDraggingIndex(null);\n firstHandleRef.current?.blur();\n secondHandleRef.current?.blur();\n }\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('touchmove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n window.addEventListener('touchend', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('touchmove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n window.removeEventListener('touchend', handleMouseUp);\n };\n }, [draggingIndex, width, height, box.left, box.top]);\n\n // Our points will be in \"raw\" form, ranging from 0 to 1, based\n // on the bottom left corner. We need to transform them to fit\n // in our box.\n const [p1, p2] = value.map((point) => {\n return {\n x: point.x * width,\n y: point.y * height,\n };\n });\n\n function startDragging(ev, pointIndex) {\n ev.stopPropagation();\n ev.preventDefault();\n\n setDraggingIndex(pointIndex);\n }\n\n function handleClickEmptySpace(ev) {\n ev.preventDefault();\n\n // Figure out which handle we're closest to!\n let x, y;\n if (ev.touches) {\n const touch = ev.touches[0];\n [x, y] = [touch.clientX, touch.clientY];\n } else {\n [x, y] = [ev.clientX, ev.clientY];\n }\n\n // We need to turn the raw mouse data into\n const relativeX = x - box.left;\n const relativeY = y - box.top;\n const newPoint = {\n x: normalize(relativeX, 0, width, 0, 1),\n y: normalize(relativeY, 0, height, 0, 1),\n };\n\n const distanceFirstPoint = getDistance(newPoint, value[0]);\n const distanceSecondPoint = getDistance(newPoint, value[1]);\n\n const relevantPointIndex =\n distanceFirstPoint < distanceSecondPoint ? 0 : 1;\n\n // Update the handle to this point\n const newValues = [...value];\n newValues[draggingIndex] = newPoint;\n onChange(newValues);\n\n // Indicate that it's dragging\n setDraggingIndex(relevantPointIndex);\n }\n\n function handleKeyDown(ev, index) {\n if (!ev.key.match(/^Arrow/)) {\n return;\n }\n\n ev.preventDefault();\n const valueCopy = [...value];\n const pointCopy = { ...value[index] };\n\n switch (ev.key) {\n case 'ArrowUp': {\n pointCopy.y = clamp(\n pointCopy.y - 0.05,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n valueCopy[index] = pointCopy;\n onChange(valueCopy);\n return;\n }\n case 'ArrowDown': {\n pointCopy.y = clamp(\n pointCopy.y + 0.05,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n valueCopy[index] = pointCopy;\n onChange(valueCopy);\n return;\n }\n case 'ArrowLeft': {\n pointCopy.x = clamp(\n pointCopy.x - 0.05,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n valueCopy[index] = pointCopy;\n onChange(valueCopy);\n return;\n }\n case 'ArrowRight': {\n pointCopy.x = clamp(\n pointCopy.x + 0.05,\n 0 - exceedBoundsBy,\n 1 + exceedBoundsBy\n );\n valueCopy[index] = pointCopy;\n onChange(valueCopy);\n return;\n }\n }\n }\n\n const immediate = prefersReducedMotion || !animateChanges;\n\n const pathProps = useSpring({\n d: `\n M 0 ${height}\n C ${p1.x} ${p1.y}\n ${p2.x} ${p2.y}\n ${width} 0`,\n immediate,\n });\n\n const firstHandleButtonProps = useSpring({\n transform: `translate(${p1.x}px, ${p1.y}px)`,\n immediate,\n });\n const firstHandlePathProps = useSpring({\n x2: p1.x,\n y2: p1.y,\n immediate,\n });\n const secondHandleButtonProps = useSpring({\n transform: `translate(${p2.x}px, ${p2.y}px)`,\n immediate,\n });\n const secondHandlePathProps = useSpring({\n x2: p2.x,\n y2: p2.y,\n immediate,\n });\n\n return (\n \n \n \n \n \n \n startDragging(ev, 0)}\n onTouchStart={(ev) => startDragging(ev, 0)}\n onKeyDown={(ev) => handleKeyDown(ev, 0)}\n data-is-dragging={draggingIndex === 0 ? 'true' : undefined}\n style={firstHandleButtonProps}\n >\n \n \n startDragging(ev, 1)}\n onTouchStart={(ev) => startDragging(ev, 1)}\n onKeyDown={(ev) => handleKeyDown(ev, 1)}\n data-is-dragging={draggingIndex === 1 ? 'true' : undefined}\n style={secondHandleButtonProps}\n >\n \n \n \n );\n}\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst Svg = styled.svg`\n display: block;\n overflow: visible;\n`;\n\nconst Curve = styled(animated.path)`\n stroke: white;\n stroke-width: 5px;\n stroke-linecap: round;\n`;\n\nconst HandleButton = styled.button`\n position: absolute;\n top: 0;\n left: 0;\n width: 24px;\n height: 24px;\n cursor: var(--cursor);\n will-change: transform;\n\n &:focus {\n outline: none;\n }\n`;\n\nconst Handle = styled.div`\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: white;\n border: 2px solid var(--color-background);\n /* Center the button around the top-left corner of the container */\n transform: translate(-50%, -50%);\n\n ${HandleButton}:active &,\n ${HandleButton}[data-is-dragging=\"true\"] & {\n background: ${THUMB_FOCUS_GRADIENT};\n cursor: none;\n }\n\n ${HandleButton}:focus & {\n outline: 2px solid white;\n outline-offset: 2px;\n }\n`;\n\nconst HandleLine = styled(animated.line)`\n stroke: var(--color-gray-700);\n stroke-width: 3px;\n stroke-dasharray: 0, 6;\n stroke-linecap: round;\n will-change: transform;\n`;\n\nexport default Bezier;\n","/*\n TODO Dedupe from Demo/SliderControl?\n*/\nimport React from 'react';\nimport { styled } from '@linaria/react';\nimport useBoundingBox from '@/hooks/use-bounding-box';\n\nimport ControlWrapper from '../ControlWrapper';\nimport DottedControlBackground from '../DottedControlBackground';\nimport Bezier from './Bezier';\n\nfunction BezierControl({\n id,\n value,\n setValue,\n animateChanges,\n ...delegated\n}) {\n const wrapperRef = React.useRef();\n\n const box = useBoundingBox(wrapperRef);\n\n const firstHandleId = `${id}-first-handle`;\n\n const borderWidth = 3;\n\n return (\n \n \n \n \n {box && (\n setValue(v)}\n />\n )}\n \n \n \n );\n}\n\nconst InnerWrapper = styled.div`\n position: relative;\n width: 100%;\n aspect-ratio: 1 / 1;\n`;\n\nconst BezierWrapper = styled.div`\n position: absolute;\n top: calc(var(--inset-by));\n left: calc(var(--inset-by));\n right: calc(var(--inset-by));\n bottom: calc(var(--inset-by));\n touch-action: none;\n`;\n\nexport default React.memo(BezierControl);\n","export { default } from './BezierControl';\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\nimport { range, normalize, clamp } from '@/utils';\nimport useMousePositionWithinElement from '@/hooks/use-mouse-position-within-element';\n\ninterface Props {\n hue: number;\n saturation: number;\n lightness: number;\n thickness?: number;\n fadeDelay: number;\n onChange: (params: { hue: number }) => void;\n}\n\nconst HueBar = ({\n hue,\n saturation,\n lightness,\n thickness = 24,\n fadeDelay,\n onChange,\n}: Props) => {\n const wrapperRef = React.useRef(null);\n const [isMouseDown, setIsMouseDown] = React.useState(false);\n\n const [mousePosition, boundingBox] = useMousePositionWithinElement(\n wrapperRef,\n { buffer: 250 }\n );\n\n React.useEffect(() => {\n if (\n !isMouseDown ||\n typeof mousePosition.x !== 'number' ||\n !boundingBox\n ) {\n return;\n }\n\n const percentageThrough =\n (mousePosition.x / boundingBox.width) * 100;\n\n const hue = Math.round(\n clamp(normalize(percentageThrough, 0, 100, 0, 360), 0, 360)\n );\n\n onChange({ hue });\n }, [isMouseDown, mousePosition, boundingBox, onChange]);\n\n React.useEffect(() => {\n function handleMouseUp() {\n setIsMouseDown(false);\n }\n\n window.addEventListener('mouseup', handleMouseUp);\n window.addEventListener('touchend', handleMouseUp);\n document.addEventListener('mouseleave', handleMouseUp);\n\n return () => {\n window.removeEventListener('mouseup', handleMouseUp);\n window.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('mouseleave', handleMouseUp);\n };\n }, [isMouseDown]);\n\n function handleKeyDown(ev: React.KeyboardEvent) {\n switch (ev.key) {\n case 'ArrowLeft': {\n ev.preventDefault();\n\n onChange({ hue: (hue + 360 - 5) % 360 });\n\n return;\n }\n case 'ArrowRight': {\n ev.preventDefault();\n\n onChange({ hue: (hue + 5) % 360 });\n\n return;\n }\n }\n }\n\n const indicatorPosition =\n typeof hue === 'number' && normalize(hue, 0, 360, 0, 100);\n\n const backgroundGradientStops = generateHueGradient({\n saturation,\n lightness,\n });\n\n return (\n {\n // Prevent text selection\n ev.preventDefault();\n setIsMouseDown(true);\n }}\n onTouchStart={(ev) => {\n // Prevent text selection\n ev.preventDefault();\n setIsMouseDown(true);\n }}\n >\n {typeof hue === 'number' && (\n \n )}\n \n );\n};\n\nfunction generateHueGradient({\n saturation,\n lightness,\n}: {\n saturation: number;\n lightness: number;\n}) {\n const STEPS = 360;\n\n return range(STEPS)\n .map((i) => {\n const degree = normalize(i, 0, STEPS, 0, 360);\n return `hsl(${degree}deg, ${saturation * 100}%, ${\n lightness * 100\n }%)`;\n })\n .join(', ');\n}\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n height: var(--thickness);\n display: flex;\n justify-content: center;\n align-items: center;\n background: linear-gradient(90deg, var(--gradient-stops));\n border-radius: 4px;\n cursor: pointer;\n border: var(--white-border-thickness) solid white;\n touch-action: none;\n box-shadow: var(--shadow-elevation-medium);\n animation: fadeIn 250ms both;\n animation-delay: var(--fade-delay);\n`;\n\nconst Indicator = styled.button`\n position: absolute;\n top: 0;\n left: var(--percentage);\n width: 16px;\n height: calc(var(--thickness) + var(--white-border-thickness) * 2);\n border: 2px solid black;\n transform: translate(\n -50%,\n calc(var(--white-border-thickness) * -2)\n );\n transform-origin: center center;\n box-shadow: inset 0px 0px 0px 2px white;\n background: var(--indicator-background);\n cursor: grab;\n\n &:active {\n cursor: grabbing;\n }\n\n &:focus {\n outline-offset: 4px;\n }\n`;\n\nexport default HueBar;\n","import React from 'react';\n\nimport { normalize, clamp, roundTo } from '@/utils';\nimport useMousePositionWithinElement from '@/hooks/use-mouse-position-within-element';\n\nexport function usePointerInputMechanism({\n wrapperRef,\n onChange,\n}: {\n wrapperRef: React.RefObject;\n onChange: (params: {\n saturation: number;\n lightness: number;\n }) => void;\n}) {\n const [isMouseDown, setIsMouseDown] = React.useState(false);\n\n const [mousePosition, boundingBox] = useMousePositionWithinElement(\n wrapperRef,\n {\n buffer: 250,\n throttleBy: 20,\n }\n );\n\n // Primary input mechanism: using a mouse or pointer device\n React.useEffect(() => {\n if (\n !isMouseDown ||\n typeof mousePosition.x !== 'number' ||\n typeof mousePosition.y !== 'number' ||\n !boundingBox\n ) {\n return;\n }\n\n const saturation = roundTo(\n clamp(\n normalize(mousePosition.x, 0, boundingBox.width, 0, 1),\n 0,\n 1\n ),\n 3\n );\n\n const lightness = roundTo(\n clamp(\n normalize(mousePosition.y, 0, boundingBox.height, 1, 0),\n 0,\n 1\n ),\n 3\n );\n\n onChange({\n saturation,\n lightness,\n });\n }, [isMouseDown, mousePosition, boundingBox, onChange]);\n\n React.useEffect(() => {\n function handleMouseUp() {\n setIsMouseDown(false);\n }\n\n window.addEventListener('mouseup', handleMouseUp);\n window.addEventListener('touchend', handleMouseUp);\n document.addEventListener('mouseleave', handleMouseUp);\n\n return () => {\n window.removeEventListener('mouseup', handleMouseUp);\n window.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('mouseleave', handleMouseUp);\n };\n }, [isMouseDown]);\n\n const startTracking = (ev: React.MouseEvent | React.TouchEvent) => {\n // Disable text selection\n ev.preventDefault();\n ev.stopPropagation();\n\n setIsMouseDown(true);\n };\n\n return { isTracking: isMouseDown, startTracking };\n}\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\nimport { normalize } from '@/utils';\n\nimport { usePointerInputMechanism } from './SatLitGrid.helpers';\n\ninterface Props {\n hue: number;\n saturation: number;\n lightness: number;\n size: number;\n fadeDelay: number;\n onChange: (params: {\n saturation: number;\n lightness: number;\n }) => void;\n}\n\nconst SatLitGrid = ({\n hue,\n saturation,\n lightness,\n size,\n fadeDelay,\n onChange,\n}: Props) => {\n const wrapperRef = React.useRef(null);\n\n const { isTracking, startTracking } = usePointerInputMechanism({\n wrapperRef,\n onChange,\n });\n\n function handleKeyDown(ev: React.KeyboardEvent) {\n let satIncrement = 0;\n let litIncrement = 0;\n\n switch (ev.key) {\n case 'ArrowUp': {\n ev.preventDefault();\n litIncrement = 0.05;\n break;\n }\n case 'ArrowDown': {\n ev.preventDefault();\n litIncrement = -0.05;\n break;\n }\n case 'ArrowLeft': {\n ev.preventDefault();\n satIncrement = -0.05;\n break;\n }\n case 'ArrowRight': {\n ev.preventDefault();\n satIncrement = 0.05;\n break;\n }\n }\n\n onChange({\n saturation: saturation + satIncrement,\n lightness: lightness + litIncrement,\n });\n }\n\n const indicatorSize = 24;\n const indicatorBuffer = indicatorSize * 0.25;\n\n const x = normalize(\n saturation,\n 0,\n 1,\n indicatorBuffer,\n size - indicatorBuffer\n );\n const y = normalize(\n lightness,\n 0,\n 1,\n size - indicatorBuffer,\n indicatorBuffer\n );\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nconst Wrapper = styled.div`\n position: relative;\n`;\n\nconst GridWrapper = styled.div`\n position: relative;\n border-radius: 4px;\n border: var(--white-border-thickness) solid white;\n touch-action: none;\n box-shadow: var(--shadow-elevation-medium);\n animation: fadeIn 250ms both;\n animation-delay: var(--fade-delay);\n`;\n\nconst GradientOverlay = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n border-radius: 2px;\n`;\n\nconst BackgroundGradient = styled(GradientOverlay)`\n background: linear-gradient(\n to top,\n hsl(0deg 0% 0%),\n hsl(0deg 0% 100%)\n );\n`;\n\nconst ColorGradient = styled(GradientOverlay)`\n mix-blend-mode: overlay;\n background: linear-gradient(\n to right,\n hsl(var(--hue) 100% 50% / 0),\n hsl(var(--hue) 100% 50% / 1)\n );\n`;\n\nconst Indicator = styled.button`\n position: absolute;\n top: 0;\n left: 0;\n width: var(--size);\n height: var(--size);\n border: 2px solid black;\n border-radius: 50%;\n transform: translate(\n calc(-50% + var(--x) - var(--white-border-thickness)),\n calc(-50% + var(--y) - var(--white-border-thickness))\n );\n transform-origin: center center;\n cursor: grab;\n user-select: none;\n box-shadow: inset 0px 0px 0px 2px white;\n\n &:active {\n cursor: none;\n }\n\n &:focus {\n outline-offset: 4px;\n }\n`;\n\nexport default SatLitGrid;\n","import React from 'react';\nimport { styled } from '@linaria/react';\nimport chroma from 'chroma-js';\n\nimport HueBar from './HueBar';\nimport SatLitGrid from './SatLitGrid';\n\ninterface Props {\n color: { hue: number; saturation: number; lightness: number };\n unitSize: number;\n focusInputOnMount?: boolean;\n setColor: (color: {\n hue: number;\n saturation: number;\n lightness: number;\n }) => void;\n}\n\nconst CompactColorPicker = ({\n color,\n unitSize,\n focusInputOnMount,\n setColor,\n}: Props) => {\n const cachedColor = React.useRef(color);\n React.useEffect(() => {\n cachedColor.current = color;\n }, [color]);\n\n const colorHex = convertToHex(color);\n\n // I thought for a second that I could derive the hex value for the text input, but I can't because it's possible for users to type in invalid hex codes, and we still want to reflect that in the input. Also, we can't leave it as an uncontrolled input because updating the SatLitGrid and HueBar should update the text input.\n const [textInputValue, setTextInputValue] =\n React.useState(colorHex);\n\n const textInputRef = React.useRef(null);\n\n React.useEffect(() => {\n if (focusInputOnMount) {\n textInputRef.current?.focus({\n preventScroll: true,\n });\n textInputRef.current?.select();\n }\n // Intentionally omitting `focusInputOnMount`, since this prop should never change.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleTextInputChange = React.useCallback(\n function handleTextInputChange(\n ev: React.ChangeEvent\n ) {\n const { value } = ev.target;\n\n // No matter what, update the textInputValue state\n setTextInputValue(value.toUpperCase());\n\n // We don't want to update the *actual* color unless it's valid\n // though, to prevent everything from breaking while the user\n // is halfway through typing a hex code.\n\n const isValid = chroma.valid(value);\n\n if (!isValid) {\n // TODO: Should I have some sort of visual sign that it's\n // not valid?\n return;\n }\n\n setColor(convertToHSL(value));\n },\n [setColor]\n );\n\n // When the user drags the colors around, update the text input\n const handleHSLValueChange = React.useCallback(\n function handleHSLValueChange(newProps: {\n hue?: number;\n saturation?: number;\n lightness?: number;\n }) {\n const hue = newProps.hue ?? cachedColor.current.hue;\n const saturation =\n newProps.saturation ?? cachedColor.current.saturation;\n const lightness =\n newProps.lightness ?? cachedColor.current.lightness;\n\n setTextInputValue(convertToHex({ hue, saturation, lightness }));\n\n setColor({ hue, saturation, lightness });\n },\n [setColor]\n );\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nfunction convertToHex({\n hue: h,\n saturation: s,\n lightness: l,\n}: {\n hue: number;\n saturation: number;\n lightness: number;\n}) {\n return chroma(h, s, l, 'hsl').hex().toUpperCase();\n}\nfunction convertToHSL(hex: string) {\n const color = chroma(hex);\n\n return {\n hue: color.get('hsl.h'),\n saturation: color.get('hsl.s'),\n lightness: color.get('hsl.l'),\n };\n}\n\nconst Wrapper = styled.div`\n --gap: 32px;\n --white-border-thickness: 2px;\n width: var(--unit-size);\n color-scheme: light;\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nconst TextInput = styled.input`\n display: block;\n padding: 8px;\n font-size: 1.25rem;\n font-family: var(--font-family-mono);\n text-align: center;\n border: 2px solid white;\n border-radius: 4px;\n outline-offset: 4px;\n box-shadow: var(--shadow-elevation-medium);\n animation: fadeIn 250ms both;\n animation-delay: var(--fade-delay);\n`;\n\nexport default CompactColorPicker;\n","export { default } from './ColorPickerCompact';\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\ninterface Props extends React.SVGProps {\n width?: number;\n height?: number;\n}\n\nfunction Tip({ width = 64, height = 16, ...delegated }: Props) {\n return (\n \n \n \n );\n}\n\nconst Wrapper = styled.svg`\n display: block;\n\n path {\n fill: var(--background-color);\n }\n`;\n\nexport default Tip;\n","/*\n NOTE: I used @floating-ui/dom here, but it's the only file I use it in. I should either use this in other places (eg. Dropdown), or get rid of it.\n\n (That said, it's only ~8kb gzip, and only loaded on /gradient-generator, so it's not urgent.)\n*/\nimport React from 'react';\nimport { styled } from '@linaria/react';\nimport {\n computePosition,\n flip as flipMiddleware,\n offset as offsetMiddleware,\n ComputePositionReturn,\n} from '@floating-ui/dom';\nimport { motion, AnimatePresence } from 'framer-motion';\n\nimport Paper from '@/components/Paper';\n\nimport Tip from './FloatingBoxTip';\n\ninterface Props {\n wrapperRef: React.RefObject;\n isVisible: boolean;\n offset?: number;\n backgroundColor?: string;\n prefersReducedMotion: boolean;\n children: React.ReactNode;\n}\n\nfunction FloatingBox({\n wrapperRef,\n isVisible,\n offset = 16,\n backgroundColor = 'hsl(210deg 25% 92%)',\n prefersReducedMotion,\n children,\n}: Props) {\n const tooltipRef = React.useRef(null);\n\n const [tooltipPosition, setTooltipPosition] =\n // We aren't providing all of the necessary fields, but it's fine since this gets overwritten in an effect.\n // @ts-ignore\n React.useState({\n x: 0,\n y: 0,\n });\n\n React.useEffect(() => {\n async function calculateXY() {\n if (!isVisible || !wrapperRef.current || !tooltipRef.current) {\n return;\n }\n const tooltipPosition = await computePosition(\n wrapperRef.current,\n tooltipRef.current,\n {\n placement: 'top',\n middleware: [flipMiddleware(), offsetMiddleware(offset)],\n }\n );\n\n setTooltipPosition(tooltipPosition);\n }\n\n calculateXY();\n }, [offset, isVisible, wrapperRef]);\n\n const placement =\n tooltipPosition.placement === 'top' ? 'above' : 'below';\n\n let yOffset = 0;\n if (!prefersReducedMotion) {\n yOffset = placement === 'above' ? -25 : 25;\n }\n\n // NOTE: This doesn't work in dev mode thanks to Strict Mode.\n return (\n \n {isVisible && (\n \n \n {placement === 'above' ? : }\n\n {children}\n \n \n )}\n \n );\n}\n\nconst Wrapper = styled(motion.div)`\n position: absolute;\n left: 0;\n right: 0;\n margin: auto;\n width: fit-content;\n /* prettier-ignore */\n filter:\n drop-shadow(0px 0px 1px hsl(var(--shadow-color) / 0.2))\n drop-shadow(0px 0px 3px hsl(var(--shadow-color) / 0.2))\n drop-shadow(0px 0px 9px hsl(var(--shadow-color) / 0.2));\n will-change: transform;\n backface-visibility: hidden;\n`;\n\nconst TooltipBox = styled(Paper)`\n background: var(--background-color);\n padding: 16px;\n border-radius: 8px;\n`;\n\nconst PositionedTip = styled(Tip)`\n position: absolute;\n left: 0;\n right: 0;\n margin: auto;\n color: white;\n`;\n\nconst BottomTip = styled(PositionedTip)`\n bottom: 0;\n transform: translateY(calc(100% - 0.5px));\n`;\n\nconst TopTip = styled(PositionedTip)`\n top: 0;\n transform: translateY(calc(-100% + 0.5px)) rotate(180deg);\n`;\n\nexport default FloatingBox;\n","/** This is a client-only component! Not SSR safe */\nimport React from 'react';\nimport { styled } from '@linaria/react';\n\nimport { BREAKPOINT_SIZES } from '@/constants';\nimport { clampedNormalize } from '@/utils';\nimport useWindowDimensions from '@/hooks/use-window-dimensions-client-only';\nimport useOnClickOutside from '@/hooks/use-on-click-outside';\n\nimport ColorPickerCompact from '@/components/ColorPickerCompact';\nimport Modal from '@/components/ModalBase';\n\nimport type { Color } from './GradientGenerator.helpers';\nimport FloatingBox from './FloatingBox';\n\ninterface Props {\n wrapperRef: React.RefObject;\n isVisible: boolean;\n color: Color;\n prefersReducedMotion: boolean;\n setColor: (newColor: Color) => void;\n onDismiss: () => void;\n}\n\nfunction ResponsiveColorPickerTooltip({\n wrapperRef,\n isVisible,\n color,\n prefersReducedMotion,\n setColor,\n onDismiss,\n}: Props) {\n const windowDimensions = useWindowDimensions();\n\n if (!color) {\n return null;\n }\n\n const isMobile = windowDimensions.width <= BREAKPOINT_SIZES.md;\n\n return isMobile ? (\n \n ) : (\n \n );\n}\n\ntype MobileColorPickerProps = Omit<\n Props,\n 'wrapperRef' | 'prefersReducedMotion'\n>;\n\nfunction MobileColorPicker({\n isVisible,\n color,\n setColor,\n onDismiss,\n}: MobileColorPickerProps) {\n return (\n \n \n \n \n \n );\n}\n\ntype DesktopColorPickerProps = Props & {\n windowDimensions: { width: number; height: number };\n};\n\nfunction DesktopColorPicker({\n wrapperRef,\n isVisible,\n color,\n setColor,\n onDismiss,\n windowDimensions,\n prefersReducedMotion,\n}: DesktopColorPickerProps) {\n // Dismiss popup when clicking elsewhere\n useOnClickOutside(wrapperRef, () => {\n if (isVisible) {\n onDismiss();\n }\n });\n\n // Dismiss popup when \"Escape\" is hit\n React.useEffect(() => {\n if (!isVisible) {\n return;\n }\n\n function handleKeydown(ev: KeyboardEvent) {\n if (ev.key === 'Escape') {\n onDismiss();\n }\n }\n window.addEventListener('keydown', handleKeydown);\n\n return () => {\n window.removeEventListener('keydown', handleKeydown);\n };\n\n // NOTE: I should add `onDismiss` to the dep array, but it isn't memoized and I'm too lazy to fix it.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n\n const unitSize = clampedNormalize(\n windowDimensions.height,\n 400,\n 800,\n 150,\n 275\n );\n\n return (\n \n \n \n );\n}\n\nconst MobileColorPickerWrapper = styled.div`\n width: 100%;\n height: 100%;\n display: grid;\n place-content: center;\n transition: opacity 300ms;\n`;\n\nexport default React.memo(ResponsiveColorPickerTooltip);\n","import React from 'react';\nimport { styled } from '@linaria/react';\nimport { Reorder } from 'framer-motion';\nimport { Plus, X as XIcon } from 'lucide-react';\n\nimport { generateHSLString } from './GradientGenerator.helpers';\nimport ResponsiveColorPickerTooltip from './ResponsiveColorPickerTooltip';\nimport ClientOnly from '@/components/ClientOnly';\n\nimport type { Color, ColorWithId } from './GradientGenerator.helpers';\n\nconst dragSpring = {\n type: 'spring',\n stiffness: 270,\n damping: 30,\n restSpeed: 0.01,\n restDelta: 0.01,\n};\n\nexport type ColorUnitType =\n | 'existing-color'\n | 'add-new-button'\n | 'empty';\n\ninterface Props {\n item: ColorWithId;\n type: ColorUnitType;\n isEditing: boolean;\n isReordering: boolean;\n canBeDeleted: boolean;\n hasMounted: boolean;\n prefersReducedMotion: boolean;\n onClick: () => void;\n onDismiss: () => void;\n onDelete: () => void;\n onDragStart: (event: any) => void;\n onDragEnd: () => void;\n setColor: (newColor: Color) => void;\n}\n\nfunction ColorUnit({\n item,\n type,\n isEditing,\n isReordering,\n canBeDeleted,\n hasMounted,\n prefersReducedMotion,\n onClick,\n onDismiss,\n onDelete,\n onDragStart,\n onDragEnd,\n setColor,\n}: Props) {\n const { id, color } = item;\n\n const wrapperRef = React.useRef(null);\n\n // NOTE: This HTML structure is invalid, but I don't see an easy fix :/. The
  • should be directly inside the
      , but I need a wrapping element to contain the tooltip.\n return (\n \n \n {type === 'empty' ? (\n \n ) : (\n \n \n \n {type === 'add-new-button' && (\n \n \n \n )}\n \n )}\n {type === 'existing-color' &&\n canBeDeleted &&\n !isEditing &&\n !isReordering && (\n \n \n \n )}\n \n {color && (\n \n \n \n )}\n \n );\n}\n\nconst Wrapper = styled.div`\n position: relative;\n flex: 1;\n min-width: 48px;\n\n &[data-should-fade-in='true'] {\n animation: fadeIn 500ms 200ms both;\n }\n`;\n\nconst ListItem = styled(Reorder.Item)`\n position: relative;\n z-index: var(--z-index);\n will-change: transform;\n`;\n\nconst PreviewWrapper = styled.button`\n position: relative;\n z-index: 2;\n width: 100%;\n aspect-ratio: 1 / 1;\n /* Fallback height for legacy browsers */\n min-height: 60px;\n border-radius: 6px;\n border: 3px solid var(--border-color);\n background: var(--color-background);\n\n &:hover {\n border-color: var(--border-hover-color);\n }\n\n &:active {\n cursor: var(--active-cursor);\n }\n\n &:focus-visible {\n outline-offset: 6px;\n outline-color: white;\n }\n\n svg {\n display: block;\n }\n`;\n\nconst GrayBox = styled.div`\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 4px;\n background: white;\n opacity: 0.05;\n`;\n\nconst Background = styled.div`\n position: absolute;\n top: 3px;\n left: 3px;\n right: 3px;\n bottom: 3px;\n background: white;\n border-radius: 2px;\n opacity: var(--opacity);\n transition: opacity 250ms;\n`;\n\nconst ColorBox = styled.div`\n position: absolute;\n top: 3px;\n left: 3px;\n right: 3px;\n bottom: 3px;\n width: calc(100% - 3px * 2);\n height: calc(100% - 3px * 2);\n border-radius: 2px;\n background: var(--background);\n box-shadow: var(--shadow-elevation-medium);\n opacity: var(--opacity);\n transition: opacity 400ms 100ms;\n`;\n\nconst IconWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 32px;\n height: 32px;\n margin: auto;\n color: white;\n\n svg {\n display: block;\n }\n`;\n\nconst DeleteButton = styled.button`\n --size: 40px;\n position: absolute;\n z-index: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n width: var(--size);\n height: var(--size);\n margin: 0 auto;\n opacity: 0;\n border-radius: 50%;\n transform: translateY(var(--size));\n transition:\n opacity 200ms,\n transform 300ms;\n color: white;\n animation: fadeIn 300ms;\n\n @media (prefers-reduced-motion: no-preference) {\n transform: translateY(0px);\n }\n\n ${ListItem}:hover & {\n opacity: 1;\n transform: translateY(var(--size));\n outline-offset: -2px;\n }\n\n ${PreviewWrapper}:focus-visible + &, &:focus-visible {\n opacity: 1;\n transform: translateY(var(--size));\n outline-offset: -2px;\n outline-color: white;\n }\n\n svg {\n display: block;\n }\n`;\n\nexport default ColorUnit;\n","import React from 'react';\nimport { styled } from '@linaria/react';\nimport { Reorder } from 'framer-motion';\nimport { produce } from 'immer';\n\nimport { generateId } from '@/utils';\nimport usePrefersReducedMotion from '@/hooks/use-prefers-reduced-motion';\n\nimport ControlWrapper from '@/components/Controls/ControlWrapper';\n\nimport type { Color, ColorWithId } from './GradientGenerator.helpers';\nimport ColorUnit, { ColorUnitType } from './ColorUnit';\n\ninterface Props {\n id: string;\n colors: Array;\n setColors: React.Dispatch>>;\n}\n\nfunction ColorsControl({ id, colors, setColors }: Props) {\n const [editingColorIndex, setEditingColorIndex] = React.useState<\n number | null\n >(null);\n\n const hasMounted = React.useRef(false);\n const prefersReducedMotion = usePrefersReducedMotion();\n\n // We don't want to allow the user to edit a color while they're\n // dragging and dropping. It leads to confusing/glitchy UX.\n const [isReordering, setIsReordering] = React.useState(false);\n\n React.useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n const numOfValidColors = colors.filter(\n (item) => !!item.color\n ).length;\n\n function tweakColor(index: number, newColor: Color) {\n setColors((colors) => {\n return produce(colors, (draftColors) => {\n draftColors[index].color = newColor;\n });\n });\n }\n\n function deleteColor(index: number) {\n setColors((colors) => {\n // Don't allow deleting the last actual color.\n // This is a redundancy; it shouldn't even show the button\n // in this case!\n if (numOfValidColors <= 1) {\n return colors;\n }\n\n return produce(colors, (draftColors) => {\n draftColors.splice(index, 1);\n draftColors.push({\n color: null,\n id: generateId(),\n });\n });\n });\n }\n\n let addNewColorButtonIndex = colors.findIndex(\n (item) => !item.color\n );\n\n return (\n \n {\n // We don't want to allow the `null` colors to be in front\n // of the actual values.\n const actualColors = orderedColors.filter((c) => !!c.color);\n const emptyColors = orderedColors.filter((c) => !c.color);\n setColors([...actualColors, ...emptyColors]);\n }}\n >\n {colors.map((item, index) => {\n const { id, color } = item;\n\n const isEditing = index === editingColorIndex;\n\n let type: ColorUnitType;\n if (color) {\n type = 'existing-color';\n } else if (index === addNewColorButtonIndex) {\n type = 'add-new-button';\n } else {\n type = 'empty';\n }\n\n return (\n 1}\n hasMounted={hasMounted.current}\n prefersReducedMotion={prefersReducedMotion}\n onClick={() => {\n if (isReordering) {\n return;\n }\n\n if (type === 'existing-color') {\n setEditingColorIndex(isEditing ? null : index);\n } else if (type === 'add-new-button') {\n tweakColor(index, {\n hue: 0,\n saturation: 1,\n lightness: 0.5,\n });\n setEditingColorIndex(index);\n }\n }}\n onDismiss={() => {\n setEditingColorIndex(null);\n }}\n onDelete={() => {\n deleteColor(index);\n }}\n onDragStart={(ev) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n setIsReordering(true);\n\n // If the color tooltip is open, close it.\n // Otherwise, it'll weirdly switch to the other color\n // that occupies its position\n setEditingColorIndex(null);\n }}\n onDragEnd={() => {\n // Wait a small amount of time after dragging before\n // re-enabling color editing.\n window.setTimeout(() => {\n setIsReordering(false);\n }, 150);\n }}\n setColor={(newColor: Color) => {\n tweakColor(index, newColor);\n }}\n />\n );\n })}\n \n \n );\n}\n\nconst ColorList = styled(Reorder.Group)`\n display: flex;\n gap: 16px;\n padding: 0;\n list-style-type: none;\n isolation: isolate;\n`;\n\nexport default ColorsControl;\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\ninterface Props {\n width: number;\n height: number;\n borderWidth: number;\n}\n\nfunction AngleBackground({ width, height, borderWidth }: Props) {\n // The width/height are from the container, and will include\n // the border applied to the wrapper. Subtract that width to\n // get an accurate inner size.\n const trueWidth = width - borderWidth * 2;\n const trueHeight = height - borderWidth * 2;\n\n const radius = trueWidth / 2;\n\n const innerRingRadiuses = [\n radius * 0.8,\n radius * 0.6,\n radius * 0.4,\n radius * 0.2,\n ];\n\n return (\n \n \n \n {innerRingRadiuses.map((innerRadius, index) => (\n \n ))}\n \n );\n}\n\nconst Svg = styled.svg`\n display: block;\n overflow: visible;\n width: 100%;\n height: 100%;\n border: var(--border-width) solid var(--color-gray-300);\n border-radius: 50%;\n overflow: hidden;\n`;\n\nconst Axis = styled.line`\n stroke: var(--color-gray-200);\n stroke-width: 2px;\n`;\n\nexport default React.memo(AngleBackground);\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\nimport useBoundingBox from '@/hooks/use-bounding-box';\nimport {\n clamp,\n convertCartesianToPolar,\n convertRadiansToDegrees,\n roundToNearest,\n} from '@/utils';\n\nimport ControlWrapper from '@/components/Controls/ControlWrapper';\nimport ValuePreview from '@/components/Controls/ValuePreview';\nimport AngleBackground from './AngleBackground';\n\nconst OUTER_BORDER_WIDTH = 3;\n\ninterface Props {\n id: string;\n angle: number;\n precision?: number;\n setAngle: (angle: number) => void;\n}\n\nfunction AngleControl({ id, angle, precision = 5, setAngle }: Props) {\n const [isDragging, setIsDragging] = React.useState(false);\n\n const wrapperRef = React.useRef(null);\n\n const box = useBoundingBox(wrapperRef);\n\n React.useEffect(() => {\n if (!isDragging) {\n return;\n }\n\n function handleMouseUp() {\n setIsDragging(false);\n }\n\n function handleMouseMove(ev: MouseEvent | TouchEvent) {\n if (!box) {\n return;\n }\n\n const newAngle = deriveAngleFromMousePosition(\n ev,\n box,\n precision\n );\n setAngle(newAngle);\n }\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('touchmove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n window.addEventListener('touchend', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('touchmove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n window.removeEventListener('touchend', handleMouseUp);\n };\n }, [isDragging, box, precision, setAngle]);\n\n function handleStartDragging(\n ev: React.MouseEvent | React.TouchEvent\n ) {\n if (!box) {\n return;\n }\n\n ev.preventDefault();\n setIsDragging(true);\n\n const newAngle = deriveAngleFromMousePosition(ev, box, precision);\n setAngle(newAngle);\n }\n\n function handleKeyDown(ev: React.KeyboardEvent) {\n if (!ev.key.match(/^Arrow/)) {\n return;\n }\n\n ev.preventDefault();\n\n const newAngle = deriveAngleFromKeyArrow(ev.key, angle);\n\n if (typeof newAngle === 'number') {\n setAngle(newAngle);\n }\n }\n\n return (\n `${value}deg`}\n />\n }\n >\n \n \n {box && (\n \n )}\n \n \n \n \n \n \n \n \n \n\n \n \n \n );\n}\n\nfunction deriveAngleFromMousePosition(\n ev: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent,\n box: DOMRect,\n precision: number\n) {\n let x, y;\n\n const isTouchEvent = 'touches' in ev;\n if (isTouchEvent) {\n const touch = ev.touches[0];\n [x, y] = [touch.clientX, touch.clientY];\n } else {\n [x, y] = [ev.clientX, ev.clientY];\n }\n\n const relativeX = x - box.left;\n const relativeY = y - box.top;\n\n const centerX = box.width / 2;\n const centerY = box.height / 2;\n\n const [theta] = convertCartesianToPolar(\n [relativeX, relativeY],\n [centerX, centerY]\n );\n\n let angle = convertRadiansToDegrees(theta);\n\n // By default, our resulting angle is 90-degrees off.\n angle = (angle + 90) % 360;\n\n // In order to make it easier to select typical values like 90\n // degrees, we'll round to a given increment. By default, 5.\n // This means you can select 85, 90, 95. But not 89 or 91.\n angle = roundToNearest(angle, precision);\n\n // Avoid haviung both 360 and 0.\n if (angle === 360) {\n angle = 0;\n }\n\n return angle;\n}\n\nfunction deriveAngleFromKeyArrow(arrow: string, angle: number) {\n switch (arrow) {\n case 'ArrowUp': {\n // Ignore when we're at the extremes\n if (angle === 0) {\n return angle;\n } else if (angle >= 355) {\n return 0;\n }\n\n return angle < 180\n ? clamp(angle - 5, 0, 180)\n : clamp(angle + 5, 180, 355);\n }\n\n case 'ArrowDown': {\n if (angle === 180) {\n return angle;\n }\n\n return angle < 180\n ? clamp(angle + 5, 0, 180)\n : clamp(angle - 5, 180, 355);\n }\n case 'ArrowLeft': {\n if (angle === 270) {\n return angle;\n }\n if (angle < 5) {\n return angle + 355;\n }\n\n if (angle >= 0 && angle < 90) {\n return clamp(angle - 5, 0, 90);\n } else if (angle >= 90 && angle < 270) {\n return clamp(angle + 5, 90, 270);\n } else {\n return clamp(angle - 5, 270, 360);\n }\n }\n case 'ArrowRight': {\n if (angle === 90) {\n return angle;\n }\n if (angle >= 355) {\n return angle - 355;\n }\n\n if (angle >= 0 && angle < 90) {\n return clamp(angle + 5, 0, 90);\n } else if (angle >= 90 && angle < 270) {\n return clamp(angle - 5, 90, 270);\n } else {\n return clamp(angle + 5, 270, 360);\n }\n }\n }\n}\n\nconst Wrapper = styled.div`\n position: relative;\n touch-action: none;\n /*\n When dragging the angle, the box rotates.\n This can lead to a scrollburglar, because the corners of the\n box peek out beyond the container.\n */\n overflow: hidden;\n`;\n\nconst Background = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst VisualizationWrapper = styled.div`\n position: relative;\n width: 100%;\n aspect-ratio: 1 / 1;\n`;\n\nconst Svg = styled.svg`\n display: block;\n width: 100%;\n height: 100%;\n vector-effect: non-scaling-stroke;\n`;\n\nconst NeedleWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: rotate(var(--rotation));\n transform-origin: center center;\n`;\n\nconst Needle = styled.button`\n position: absolute;\n top: 5%;\n left: 0;\n right: 0;\n width: 5px;\n height: 60%;\n margin-left: auto;\n margin-right: auto;\n background: white;\n border-radius: 1000px;\n\n &:focus-visible {\n outline-offset: 4px;\n outline-color: white;\n }\n`;\n\nconst NeedleCap = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 24px;\n height: 24px;\n margin: auto;\n border-radius: 50%;\n background: var(--color-gray-300);\n border: 2px solid var(--color-background);\n`;\n\nexport default React.memo(AngleControl);\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\ninterface Props extends React.HTMLAttributes {\n name: string;\n checked: boolean;\n onToggle: () => void;\n children: React.ReactNode;\n}\n\nfunction ModeToggle({\n name,\n checked,\n onToggle,\n children,\n ...delegated\n}: Props) {\n const id = `${name}-${children}`;\n\n return (\n \n \n \n \n );\n}\n\nconst Wrapper = styled.div`\n position: relative;\n`;\n\nconst Input = styled.input`\n position: absolute;\n opacity: 0;\n pointer-events: none;\n`;\n\nconst Label = styled.label`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 4rem;\n border: 3px solid;\n border-radius: 6px;\n border-color: var(--color-gray-100);\n color: var(--color-gray-500);\n cursor: pointer;\n user-select: none;\n\n ${Input}:checked + & {\n border-color: var(--color-gray-300);\n color: var(--color-gray-900);\n }\n\n ${Input}:focus-visible + & {\n outline: 2px solid;\n outline-offset: 4px;\n }\n\n &:hover {\n border-color: var(--color-gray-200);\n color: var(--color-gray-700);\n }\n`;\n\nexport default ModeToggle;\n","import { styled } from '@linaria/react';\n\nimport ControlWrapper from '@/components/Controls/ControlWrapper';\n\nimport ModeToggle from './ModeToggle';\nimport {\n VALID_COLOR_MODES,\n ColorMode,\n} from './GradientGenerator.helpers';\n\ninterface Props {\n id: string;\n colorMode: ColorMode;\n setColorMode: (mode: ColorMode) => void;\n}\n\nfunction ModeControl({ id, colorMode, setColorMode }: Props) {\n return (\n \n \n {VALID_COLOR_MODES.map((mode) => {\n return (\n setColorMode(mode)}\n style={{ flex: 1 }}\n >\n {mode.toUpperCase()}\n \n );\n })}\n \n \n );\n}\n\nconst ModeList = styled.ul`\n display: flex;\n gap: 16px;\n list-style-type: none;\n padding: 0;\n`;\n\nexport default ModeControl;\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\nimport BezierControl from '@/components/Controls/BezierControl';\nimport SliderControl from '@/components/Controls/SliderControl';\nimport ColorsControl from './ColorsControl';\nimport AngleControl from './AngleControl';\nimport ModeControl from './ModeControl';\n\nimport {\n MIN_PRECISION,\n MAX_PRECISION,\n CURVE_PRESETS,\n ColorWithId,\n ColorMode,\n EasingCurve,\n} from './GradientGenerator.helpers';\n\ninterface Props {\n colors: Array;\n colorMode: ColorMode;\n precision: number;\n angle: number;\n easingCurve: EasingCurve;\n setColors: React.Dispatch>>;\n setColorMode: React.Dispatch>;\n setPrecision: React.Dispatch>;\n setAngle: React.Dispatch>;\n setEasingCurve: React.Dispatch>;\n}\n\nfunction Controls({\n colors,\n colorMode,\n precision,\n angle,\n easingCurve,\n setColors,\n setColorMode,\n setPrecision,\n setAngle,\n setEasingCurve,\n}: Props) {\n const id = React.useId();\n\n const [animateBezierChanges, setAnimateBezierChanges] =\n React.useState(false);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {\n setAnimateBezierChanges(false);\n setEasingCurve(v);\n }}\n />\n \n {CURVE_PRESETS.map((preset) => (\n {\n setAnimateBezierChanges(true);\n setEasingCurve(preset.curve);\n }}\n data-is-active={checkCurveEquality(\n easingCurve,\n preset.curve\n )}\n >\n {preset.label}\n \n ))}\n \n \n \n \n );\n}\n\nfunction checkCurveEquality(\n curve1: EasingCurve,\n curve2: EasingCurve\n) {\n return (\n curve1[0].x === curve2[0].x &&\n curve1[0].y === curve2[0].y &&\n curve1[1].x === curve2[1].x &&\n curve1[1].y === curve2[1].y\n );\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 32px;\n isolation: isolate;\n`;\n\nconst ColorsWrapper = styled.div`\n position: relative;\n z-index: 2;\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 48px;\n padding-top: 8px;\n`;\n\nconst Cell = styled.div`\n flex: 1;\n min-width: 155px;\n`;\n\nconst BezierPresets = styled.div`\n display: flex;\n gap: 8px;\n margin-top: 8px;\n`;\n\nconst Button = styled.button`\n padding: 4px 0px;\n font-size: 0.875rem;\n flex-grow: 1;\n display: flex;\n justify-content: center;\n border: 2px solid var(--color-gray-100);\n border-radius: 4px;\n color: white;\n\n &[data-is-active='true'] {\n background: var(--color-gray-100);\n }\n\n &:focus-visible {\n outline-color: white;\n outline-offset: 4px;\n }\n\n &:hover {\n border-color: var(--color-gray-300);\n }\n\n &:active {\n border-color: var(--color-gray-500);\n }\n`;\n\nexport default Controls;\n","'use client';\n\nimport React from 'react';\nimport { styled } from '@linaria/react';\nimport Image from 'next/image';\nimport { usePathname } from 'next/navigation';\nimport { Code, Link } from 'lucide-react';\n\nimport {\n THUMB_FOCUS_GRADIENT,\n BREAKPOINTS,\n DARK_COLORS,\n} from '@/constants';\nimport { copyToClipboard } from '@/utils';\n\nimport Space from '@/components/Space';\nimport Spacer from '@/components/Spacer';\nimport SiteFooter from '@/components/SiteFooter';\nimport GeneratorHeader from '@/components/Goodies/shared/GeneratorHeader';\nimport GeneratorNewsletterSignup from '@/components/Goodies/shared/GeneratorNewsletterSignup';\nimport CodeSnippetProvider from '@/components/CodeSnippet/CodeSnippetProvider';\nimport OverscrollColor from '@/components/OverscrollColor';\nimport FadeOnChange from '@/components/FadeOnChange';\n\nimport {\n generateGradient,\n generateCodeSnippet,\n encodeUrlString,\n getRandomColorPalette,\n getRandomColorMode,\n getRandomPrecision,\n getRandomAngle,\n getRandomCurve,\n ColorWithId,\n ColorMode,\n EasingCurve,\n} from './GradientGenerator.helpers';\nimport LogoDoodle from './LogoDoodle';\nimport Controls from './Controls';\n\ninterface Props {\n initialColors: Array;\n initialAngle: number;\n initialColorMode: ColorMode;\n initialEasingCurve: EasingCurve;\n initialPrecision: number;\n codeOutput: React.ReactNode;\n}\n\nfunction GradientGenerator({\n initialColors,\n initialColorMode,\n initialPrecision,\n initialAngle,\n initialEasingCurve,\n codeOutput,\n}: Props) {\n const pathname = usePathname();\n\n // Colors are stored in the following format:\n // { hue: 0-360, saturation: 0-1, lightness: 0-1 }\n // I need to keep it HSL rather than hex, because Hex doesn't have\n // context (greyscale colors like #FFF has no \"embedded\" hue or\n // saturation, meaning it jumps around as the user modifies colors\n // in HSL space)\n // Doing 0-1 instead of 0-100 for easy conversion with Chroma.\n const [colors, setColors] =\n React.useState>(initialColors);\n\n const [colorMode, setColorMode] =\n React.useState(initialColorMode);\n const [precision, setPrecision] =\n React.useState(initialPrecision);\n const [angle, setAngle] = React.useState(initialAngle);\n const [easingCurve, setEasingCurve] = React.useState(\n initialEasingCurve\n );\n\n const [copyCodeStatus, setCopyCodeStatus] = React.useState('idle');\n const [copyUrlStatus, setCopyUrlStatus] = React.useState('idle');\n\n React.useEffect(() => {\n let timeoutId: Number;\n if (copyCodeStatus === 'success') {\n timeoutId = window.setTimeout(() => {\n setCopyCodeStatus('idle');\n }, 2250);\n }\n\n return () => {\n if (typeof timeoutId === 'number') {\n window.clearTimeout(timeoutId);\n }\n };\n }, [copyCodeStatus]);\n\n React.useEffect(() => {\n let timeoutId: Number;\n if (copyUrlStatus === 'success') {\n timeoutId = window.setTimeout(() => {\n setCopyUrlStatus('idle');\n }, 2250);\n }\n\n return () => {\n if (typeof timeoutId === 'number') {\n window.clearTimeout(timeoutId);\n }\n };\n }, [copyUrlStatus]);\n\n const gradientString = React.useMemo(() => {\n return generateGradient({\n colors,\n angle,\n colorMode,\n easingCurve,\n precision,\n });\n }, [colors, angle, colorMode, easingCurve, precision]);\n const deferredGradientString =\n React.useDeferredValue(gradientString);\n\n const shuffle = React.useCallback(() => {\n setColors(getRandomColorPalette());\n setColorMode(getRandomColorMode());\n setPrecision(getRandomPrecision());\n setEasingCurve(getRandomCurve());\n setAngle(getRandomAngle());\n }, []);\n\n const generateUrlForClipboard = React.useCallback(() => {\n const urlString = encodeUrlString({\n colors,\n angle,\n colorMode,\n precision,\n easingCurve,\n });\n\n return `${window.location.origin}${pathname}?${urlString}`;\n }, [colors, angle, colorMode, precision, easingCurve, pathname]);\n\n const code = generateCodeSnippet(deferredGradientString);\n\n function handleCopyCode() {\n copyToClipboard(code).then(() => {\n setCopyCodeStatus('success');\n });\n }\n function handleCopyUrl() {\n const url = generateUrlForClipboard();\n\n copyToClipboard(url).then(() => {\n setCopyUrlStatus('success');\n });\n }\n\n return (\n \n \n\n \n \n \n\n \n\n \n \n \n \n
      \n \n

      Gradient Generator

      \n Beautiful, lush gradients ✨\n
      \n\n \n \n \n\n \n \n Your Gradient:\n \n \n \n {codeOutput}\n \n \n \n \n \n \n \n {copyUrlStatus === 'success'\n ? 'Copied!'\n : 'Copy URL'}\n \n \n \n\n \n \n \n \n {copyCodeStatus === 'success'\n ? 'Copied!'\n : 'Copy CSS'}\n \n \n \n \n \n
      \n\n \n\n \n \n \n\n \n
      \n );\n}\n\nconst Wrapper = styled(Space)`\n position: relative;\n min-height: 100vh;\n isolation: isolate;\n /* IMPORTANT: This stops the page scroll position from jumping around wildly when the controls are tweaked, causing the height of the code snippet to get bigger/smaller. */\n overflow-anchor: none !important;\n\n --background-values: 210deg 30% 8%;\n --color-background: hsl(var(--background-values)) !important;\n --shadow-color: 0deg 0% 0%;\n /* prettier-ignore */\n --shadow-elevation-very-low:\n 0px 0.4px 0.4px hsl(var(--shadow-color) / 0.09),\n 0px 0.6px 0.6px -1.6px hsl(var(--shadow-color) / 0.08),\n 0px 1.3px 1.3px -3.2px hsl(var(--shadow-color) / 0.07);\n /* prettier-ignore */\n --shadow-elevation-low:\n 0px 0.4px 0.4px hsl(var(--shadow-color) / 0.1),\n 0px 1px 1px -1.1px hsl(var(--shadow-color) / 0.09),\n 0.1px 2.6px 2.7px -2.1px hsl(var(--shadow-color) / 0.08),\n 0.2px 6.6px 6.7px -3.2px hsl(var(--shadow-color) / 0.07);\n /* prettier-ignore */\n --shadow-elevation-medium:\n 0px 0.4px 0.4px hsl(var(--shadow-color) / 0.125),\n 0px 1.4px 1.4px -0.5px hsl(var(--shadow-color) / 0.11),\n 0.1px 2.5px 2.6px -0.9px hsl(var(--shadow-color) / 0.10),\n 0.1px 4.3px 4.4px -1.4px hsl(var(--shadow-color) / 0.09),\n 0.2px 7.2px 7.3px -1.8px hsl(var(--shadow-color) / 0.08);\n\n @media ${BREAKPOINTS.mdAndSmaller} {\n --background-values: 0deg 0% 0%;\n }\n\n && {\n border-radius: 0px;\n }\n`;\n\nconst InnerWrapper = styled.div`\n display: grid;\n grid-gap: 64px 48px;\n grid-template-columns: 1fr minmax(350px, 1fr);\n grid-template-areas:\n 'demo header'\n 'demo controls'\n 'demo code';\n max-width: 1200px;\n margin: 0 auto;\n padding: 32px;\n padding-bottom: 128px;\n isolation: isolate;\n\n @media ${BREAKPOINTS.mdAndSmaller} {\n grid-template-columns: 1fr;\n grid-template-areas:\n 'header'\n 'demo'\n 'controls'\n 'code';\n padding: 16px;\n padding-bottom: 128px;\n }\n`;\n\nconst DemoWrapper = styled.div`\n grid-area: demo;\n position: sticky;\n z-index: 3;\n top: 32px;\n align-self: start;\n display: flex;\n justify-content: center;\n height: 100%;\n max-height: min(860px, calc(100vh - 32px * 2));\n padding: 8px;\n background-color: hsl(var(--background-values));\n filter: drop-shadow(0px 0px 16px var(--color-background));\n border: 1px solid var(--color-content-outline);\n border-radius: 16px;\n\n @media ${BREAKPOINTS.mdAndSmaller} {\n z-index: 10;\n top: 48px;\n padding: 0px;\n height: min(250px, 40vh);\n border-radius: 16px;\n box-shadow:\n 0px 0px 2px hsl(var(--background-values) / 0.2),\n 0px 0px 4px hsl(var(--background-values) / 0.2),\n 0px 0px 8px hsl(var(--background-values) / 0.2),\n 0px 0px 16px hsl(var(--background-values) / 0.2),\n 0px 0px 32px hsl(var(--background-values) / 0.2),\n 0px 0px 64px hsl(var(--background-values) / 0.3),\n 0px 0px 96px hsl(var(--background-values) / 0.3);\n }\n`;\n\nconst Demo = styled.div`\n flex: 1;\n background: var(--gradient);\n width: 100%;\n border-radius: 8px;\n`;\n\nconst Header = styled.header`\n position: relative;\n z-index: 3;\n grid-area: header;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding-top: 32px;\n isolation: isolate;\n\n h1 {\n position: relative;\n z-index: 2;\n font-size: 2rem;\n font-weight: var(--font-weight-bold);\n line-height: 1.2;\n color: initial;\n background-color: #ffb23e;\n background-image: ${THUMB_FOCUS_GRADIENT};\n background-size: 100%;\n background-clip: text;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n /* margin-top: -32px; */\n margin-top: 32px;\n /* prettier-ignore */\n filter:\n drop-shadow(0px 0px 2px hsl(var(--background-values) / 0.5))\n drop-shadow(0px 0px 4px hsl(var(--background-values) / 0.5))\n drop-shadow(0px 0px 8px hsl(var(--background-values) / 0.5))\n drop-shadow(0px 0px 16px hsl(var(--background-values) / 0.5))\n drop-shadow(0px 0px 32px hsl(var(--background-values) / 0.5))\n drop-shadow(0px 0px 64px hsl(var(--background-values) / 0.5));\n }\n`;\n\nconst Subtitle = styled.p`\n position: relative;\n z-index: 3;\n font-size: 1.25rem;\n text-align: center;\n max-width: 400px;\n margin: 8px auto 0;\n color: var(--color-gray-700);\n`;\n\nconst ControlsWrapper = styled.div`\n grid-area: controls;\n position: relative;\n z-index: 4;\n`;\n\nconst SlopesWrapper = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n bottom: 60px;\n width: 100%;\n opacity: 0.75;\n filter: blur(5px);\n\n @media ${BREAKPOINTS.mdAndSmaller} {\n /* The image needs to be pushed up further so that the email input has high-enough contrast, and isn't over a purple mountain. */\n bottom: 256px;\n\n /*\n On mobile, the background becomes solid black, and there's an awkward edge behind the footer, between the bottom of the slopes image and the page background. Add a gradient to smooth this out.\n */\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 200px;\n background: linear-gradient(\n to bottom,\n transparent,\n var(--color-background)\n );\n }\n }\n`;\n\nconst Slopes = styled(Image)`\n object-fit: cover;\n object-position: top center;\n`;\n\nconst OutputWrapper = styled.div`\n --scrollbar-bg: var(--syntax-bg);\n --scrollbar-thumb: var(--color-gray-300);\n grid-area: code;\n position: relative;\n z-index: 1;\n min-width: 0px;\n`;\nconst OutputHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n margin-bottom: 8px;\n user-select: none;\n`;\nconst OutputLabel = styled.div`\n font-weight: var(--font-weight-medium);\n`;\nconst CodeWrapper = styled.div`\n background: var(--color-background);\n outline: 1px solid var(--color-content-outline);\n border-radius: 8px;\n`;\n\nconst FooterWrapper = styled.div`\n padding-bottom: 32px;\n`;\n\nconst Actions = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: 16px;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n transform: translateY(calc(100% + 16px));\n`;\n\nconst ActionButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 8px 12px;\n font-size: 0.875rem;\n border: 1px solid var(--color-gray-300);\n border-radius: 4px;\n color: white;\n\n &:not(:disabled):hover {\n border-color: var(--color-gray-300);\n }\n\n &:focus {\n outline-offset: 4px;\n outline-color: white;\n }\n\n &:disabled {\n opacity: 1;\n color: white;\n cursor: default;\n }\n\n svg {\n display: block;\n }\n`;\n\nconst TextSpan = styled.span`\n display: block;\n min-width: 4.25rem;\n`;\n\nexport default GradientGenerator;\n","import * as React from 'react';\nimport { styled } from '@linaria/react';\n\nexport interface Props {\n isOpen: boolean;\n enterDuration?: number;\n exitDuration?: number;\n enterDelay?: number;\n exitDelay?: number;\n openOpacity?: number;\n handleDismiss: () => void;\n}\n\nfunction OverlayBase({\n isOpen,\n enterDuration = 1000,\n enterDelay = 0,\n exitDuration = 600,\n exitDelay = 400,\n openOpacity = 1,\n handleDismiss,\n}: Props) {\n return (\n \n );\n}\n\nconst Wrapper = styled.div`\n position: absolute;\n inset: 0;\n background-color: var(--color-muted-background);\n opacity: var(--opacity);\n transition: opacity var(--transition-duration);\n transition-delay: var(--transition-delay);\n pointer-events: auto;\n\n animation: fadeFromTransparent var(--transition-duration)\n var(--transition-delay) backwards;\n`;\n\nexport default OverlayBase;\n","import * as React from 'react';\nimport { styled } from '@linaria/react';\nimport FocusLock from 'react-focus-lock';\n\nimport InPortal from '@/components/InPortal';\nimport OverlayBase, { Props as OverlayProps } from './OverlayBase';\n\ntype DelegatedOverlayProps = Omit<\n OverlayProps,\n 'isOpen' | 'handleDismiss'\n>;\n\ninterface Props extends React.HTMLAttributes {\n isOpen: boolean;\n portalId?: string;\n skipPortal?: boolean;\n returnFocus?: boolean;\n allowScroll?: boolean;\n overlay?: React.ComponentType | null;\n overlayProps?: DelegatedOverlayProps;\n dismissDuration?: number;\n enableDismissAfter?: number;\n handleDismiss: () => void;\n children: React.ReactNode;\n}\n\nfunction ModalBase({\n isOpen,\n portalId,\n skipPortal,\n returnFocus = false,\n allowScroll = false,\n overlay: Overlay = OverlayBase,\n overlayProps = {},\n dismissDuration = 1000,\n enableDismissAfter = 0,\n handleDismiss,\n children,\n ...delegated\n}: Props) {\n const [isRendered, setIsRendered] = React.useState(isOpen);\n\n const lastOpenedTimestamp = React.useRef(0);\n React.useEffect(() => {\n if (isOpen) {\n lastOpenedTimestamp.current = Date.now();\n }\n }, [isOpen]);\n\n React.useEffect(() => {\n if (isOpen) {\n setIsRendered(true);\n return;\n }\n\n const timeoutId = setTimeout(() => {\n setIsRendered(false);\n }, dismissDuration);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [isOpen, isRendered, dismissDuration]);\n\n const handleDismissRef = React.useRef(handleDismiss);\n handleDismissRef.current = handleDismiss;\n\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n function handleKeyDown(ev: KeyboardEvent) {\n if (ev.key === 'Escape') {\n // In some cases, modals can't be dismissed for a short duration after opening, since doing so would create bugs or jank.\n const timeSinceOpen =\n Date.now() - lastOpenedTimestamp.current;\n const wasOpenedTooRecently =\n timeSinceOpen < enableDismissAfter;\n\n if (!wasOpenedTooRecently) {\n handleDismissRef.current();\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, enableDismissAfter]);\n\n if (!isRendered) {\n return null;\n }\n\n const elem = (\n \n {Overlay && (\n \n )}\n\n \n {children}\n \n \n );\n\n return skipPortal ? (\n elem\n ) : (\n {elem}\n );\n}\n\nconst Wrapper = styled.div`\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n isolation: isolate;\n pointer-events: none;\n`;\n\nconst ChildWrapper = styled.div`\n position: absolute;\n inset: 0;\n width: fit-content;\n height: fit-content;\n margin: auto;\n pointer-events: auto;\n`;\n\nexport default ModalBase;\n","export { default } from './ModalBase';\n","// NOTE: Going forwards, I should use ColorModeContainer directly. This feels like too silly an abstraction. There are 100+ callsites though, so I'm not worrying about it for now.\n\nimport ColorModeContainer, {\n type Props as ColorModeProps,\n} from '@/components/ColorModeContainer';\n\ntype Props = Omit;\n\nfunction Paper(props: Props) {\n return ;\n}\n\nexport default Paper;\n","export { default } from './Paper';\n","import { styled } from '@linaria/react';\n\nimport {\n DarkWrapper,\n type Props as ColorModeProps,\n} from '@/components/ColorModeContainer';\n\ntype Props = Omit;\n\nconst Space = styled(DarkWrapper)`\n border-radius: 8px;\n background-color: var(--color-background);\n color: var(--color-text);\n color-scheme: dark;\n`;\n\nexport default Space;\n","export { default } from './Space';\n","import * as React from 'react';\n\nimport { throttleV2 } from '@/utils';\nimport useBoundingBox from '@/hooks/use-bounding-box';\n\ninterface Options {\n buffer?: number;\n throttleBy?: number;\n excludeTouchEvents?: boolean;\n onEnterBox?: () => void;\n onLeaveBox?: () => void;\n}\n\ninterface MousePosition {\n x: number | null;\n y: number | null;\n}\n\nfunction useMousePositionWithinElement(\n ref: React.RefObject,\n {\n buffer = 0,\n throttleBy = 18,\n excludeTouchEvents,\n onEnterBox,\n onLeaveBox,\n }: Options = {}\n): [MousePosition, DOMRect | null] {\n const boundingBox = useBoundingBox(ref);\n const [mousePosition, setMousePosition] =\n React.useState({\n x: null,\n y: null,\n });\n const cachedIsWithinBox = React.useRef(false);\n\n const cachedOnEnterBox = React.useRef(onEnterBox);\n const cachedOnLeaveBox = React.useRef(onLeaveBox);\n cachedOnEnterBox.current = onEnterBox;\n cachedOnLeaveBox.current = onLeaveBox;\n\n React.useEffect(() => {\n const onEnterBox = cachedOnEnterBox.current;\n const onLeaveBox = cachedOnLeaveBox.current;\n\n const updatePosition = (ev: MouseEvent | Touch) => {\n // For mouse events, prevent the default text selection.\n if (isMouseEvent(ev)) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n const { clientX, clientY } = ev;\n\n if (!boundingBox) {\n return;\n }\n\n // NOTE: Because I'm monkey-patching `boundingBox.right` and `boundingBox.bottom`, I can't use them as I'd expect here.\n const isWithinBox =\n clientX >= boundingBox.left - buffer &&\n clientX <= boundingBox.left + boundingBox.width + buffer &&\n clientY >= boundingBox.top - buffer &&\n clientY <= boundingBox.top + boundingBox.height + buffer;\n\n if (!isWithinBox) {\n if (\n cachedIsWithinBox.current &&\n typeof onLeaveBox === 'function'\n ) {\n onLeaveBox();\n }\n\n cachedIsWithinBox.current = false;\n return;\n }\n\n if (!cachedIsWithinBox.current) {\n if (typeof onEnterBox === 'function') {\n onEnterBox();\n }\n cachedIsWithinBox.current = true;\n }\n\n const newPosition = {\n x: clientX - boundingBox.left,\n y: clientY - boundingBox.top,\n };\n\n cachedIsWithinBox.current = true;\n\n setMousePosition(newPosition);\n };\n\n const [throttledUpdateMousePosition, mouseCleanup] = throttleV2(\n updatePosition,\n throttleBy\n );\n const [throttledUpdateTouchPosition, touchCleanup] = throttleV2(\n (ev: TouchEvent) => {\n const touch = ev.touches[0];\n updatePosition(touch);\n },\n throttleBy\n );\n\n window.addEventListener(\n 'mousemove',\n throttledUpdateMousePosition\n );\n if (!excludeTouchEvents) {\n window.addEventListener(\n 'touchmove',\n throttledUpdateTouchPosition\n );\n }\n\n return () => {\n window.removeEventListener(\n 'mousemove',\n throttledUpdateMousePosition\n );\n mouseCleanup();\n if (!excludeTouchEvents) {\n window.removeEventListener(\n 'touchmove',\n throttledUpdateTouchPosition\n );\n\n touchCleanup();\n }\n };\n }, [boundingBox, buffer, throttleBy, excludeTouchEvents]);\n\n return [mousePosition, boundingBox];\n}\n\nconst isMouseEvent = (ev: MouseEvent | Touch): ev is MouseEvent => {\n return ev instanceof MouseEvent;\n};\n\nexport default useMousePositionWithinElement;\n","import * as React from 'react';\n\ninterface ExtraOptions {\n triggerRef?: React.RefObject;\n rebindDependency?: any;\n}\n\nexport default function useOnClickOutside(\n ref: React.MutableRefObject,\n handler: (event: MouseEvent | TouchEvent) => void,\n { triggerRef, rebindDependency }: ExtraOptions = {\n triggerRef: { current: null },\n }\n) {\n React.useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n\n // Do nothing if clicking ref's element or descendant elements\n if (!ref.current || ref.current.contains(target)) {\n return;\n }\n\n // Often, this hook is used with a dropdown that can be toggled by clicking a trigger. That trigger exists outside the `ref`, but we still want to ignore clicks on the trigger. Otherwise, the dropdown will be closed and opened as part of the same process.\n if (triggerRef?.current?.contains(target)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener('click', listener, { capture: true });\n document.addEventListener('touchstart', listener, {\n capture: true,\n });\n\n return () => {\n document.removeEventListener('click', listener, {\n capture: true,\n });\n document.removeEventListener('touchstart', listener, {\n capture: true,\n });\n };\n }, [ref, triggerRef, handler, rebindDependency]);\n}\n","/*\n This hook works just like `use-window-dimensions`, but it is NOT SSR SAFE. It assumes that it’s called inside a component which is rendered for the first time on the client (eg. inside ). This hook is useful because it produces a value immediately, avoiding a pointless re-render / flash of empty content.\n*/\nimport React from 'react';\n\nimport { throttle } from '@/utils';\n\nconst useWindowDimensions = () => {\n const [windowDimensions, setWindowDimensions] = React.useState({\n width: window.innerWidth,\n height: window.innerHeight,\n clientWidth: document.documentElement.clientWidth,\n });\n\n React.useEffect(() => {\n const calculatorElement = document.createElement('div');\n calculatorElement.style.fontSize = '1rem';\n\n document.body.appendChild(calculatorElement);\n\n const fontSize = parseFloat(\n window.getComputedStyle(calculatorElement).fontSize\n );\n\n const ratio = 16 / fontSize;\n\n setWindowDimensions({\n width: window.innerWidth * ratio,\n height: window.innerHeight * ratio,\n clientWidth: document.documentElement.clientWidth * ratio,\n });\n\n const handleResize = throttle(() => {\n setWindowDimensions({\n width: window.innerWidth * ratio,\n height: window.innerHeight * ratio,\n clientWidth: document.documentElement.clientWidth * ratio,\n });\n }, 250);\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n document.body.removeChild(calculatorElement);\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return windowDimensions;\n};\n\nexport default useWindowDimensions;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1i97ah4\":\"w1i97ah4\",\"r15rhkug\":\"r15rhkug\",\"t69h3s8\":\"t69h3s8\",\"fadeIn\":\"fadeIn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wwugu3s\":\"wwugu3s\",\"fadeIn\":\"fadeIn\",\"i106y29z\":\"i106y29z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wjjf2up\":\"wjjf2up\",\"g1c4n5bh\":\"g1c4n5bh\",\"fadeIn\":\"fadeIn\",\"g1tmdt29\":\"g1tmdt29\",\"b1nu2nlr\":\"b1nu2nlr\",\"ciq0x0w\":\"ciq0x0w\",\"i1qwte6n\":\"i1qwte6n\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1i9kk1h\":\"w1i9kk1h\",\"s1owsfvq\":\"s1owsfvq\",\"c19bkq5s\":\"c19bkq5s\",\"has9y6n\":\"has9y6n\",\"h1s83210\":\"h1s83210\",\"h12ncx7b\":\"h12ncx7b\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"i5bkvuq\":\"i5bkvuq\",\"b1govd7d\":\"b1govd7d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"s7pjti2\":\"s7pjti2\",\"a8zdn83\":\"a8zdn83\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1wikcwy\":\"w1wikcwy\",\"bhq6oe8\":\"bhq6oe8\",\"v1boyqkq\":\"v1boyqkq\",\"s1mtcizq\":\"s1mtcizq\",\"nqt0sva\":\"nqt0sva\",\"n1ndde1d\":\"n1ndde1d\",\"nw94jma\":\"nw94jma\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w87axgp\":\"w87axgp\",\"fadeIn\":\"fadeIn\",\"l192zplw\":\"l192zplw\",\"p1yt1a4m\":\"p1yt1a4m\",\"ghw5ql5\":\"ghw5ql5\",\"br3s4aw\":\"br3s4aw\",\"cmt4wi0\":\"cmt4wi0\",\"iaunush\":\"iaunush\",\"d42wz4t\":\"d42wz4t\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ciolfc2\":\"ciolfc2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w51m1wy\":\"w51m1wy\",\"c1i5u4mk\":\"c1i5u4mk\",\"rf7yyqw\":\"rf7yyqw\",\"c1mjp2nr\":\"c1mjp2nr\",\"bzzsr5q\":\"bzzsr5q\",\"bfnmm0t\":\"bfnmm0t\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wbknor3\":\"wbknor3\",\"tobtr91\":\"tobtr91\",\"p1bgo23e\":\"p1bgo23e\",\"be5of6b\":\"be5of6b\",\"to9huzy\":\"to9huzy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"whd6i3v\":\"whd6i3v\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1we7d4z\":\"w1we7d4z\",\"bau7q73\":\"bau7q73\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mpnqb8w\":\"mpnqb8w\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wwqlnne\":\"wwqlnne\",\"i2i2dcj\":\"i2i2dcj\",\"lse9uw4\":\"lse9uw4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"m1hl6blq\":\"m1hl6blq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1uu96ms\":\"w1uu96ms\",\"itsdzu5\":\"itsdzu5\",\"d12sc5py\":\"d12sc5py\",\"drp4zmx\":\"drp4zmx\",\"h1bvjxev\":\"h1bvjxev\",\"s5068um\":\"s5068um\",\"cw2robf\":\"cw2robf\",\"s1wtyyhq\":\"s1wtyyhq\",\"s1kesz5b\":\"s1kesz5b\",\"o1l737dq\":\"o1l737dq\",\"o1tf59vd\":\"o1tf59vd\",\"o14rkgez\":\"o14rkgez\",\"c11vk1uq\":\"c11vk1uq\",\"f1p8q7kv\":\"f1p8q7kv\",\"atgqbid\":\"atgqbid\",\"aymesbx\":\"aymesbx\",\"t98aymf\":\"t98aymf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wvvtqhu\":\"wvvtqhu\",\"c4b5hm0\":\"c4b5hm0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"whslyen\":\"whslyen\",\"fadeFromTransparent\":\"fadeFromTransparent\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"s1hfctpl\":\"s1hfctpl\"};"],"names":["ClientOnly","children","delegated","useHasMounted","hasMounted","div","VALID_COLOR_MODES","id","label","curve","x","y","MIN_SCALE","BAR_WIDTH","SPRING_CONFIG","tension","friction","Wrapper","styled","name","class","propsAsIs","Bar","_exp2","animated","LogoDoodle","barScales","numOfBars","onClick","wrapperRef","React","HTMLButtonElement","status","setStatus","onEnterBox","onLeaveBox","mousePos","box","useMousePositionWithinElement","buffer","calculateInteractiveBarScales","xPosition","range","map","distance","Math","abs","index","scale","normalize","width","clamp","MAX_SCALE","MIN_OPACITY","opacity","transform","config","MAX_OPACITY","springs","useSprings","getDistance","firstPoint","secondPoint","sqrt","deltaX","Svg","Curve","_exp","path","HandleButton","Handle","HandleLine","line","Bezier","value","animateChanges","onChange","draggingIndex","setDraggingIndex","firstHandleRef","secondHandleRef","valueRef","onChangeRef","current","prefersReducedMotion","usePrefersReducedMotion","height","handleMouseMove","ev","touch","clientX","clientY","relativeX","left","relativeY","top","normalizedX","normalizedY","exceedBoundsBy","newValues","handleMouseUp","blur","window","addEventListener","removeEventListener","p1","point","startDragging","pointIndex","handleClickEmptySpace","touches","newPoint","distanceFirstPoint","distanceSecondPoint","relevantPointIndex","handleKeyDown","match","valueCopy","pointCopy","immediate","pathProps","useSpring","p2","firstHandleButtonProps","firstHandlePathProps","x2","y2","secondHandleButtonProps","secondHandlePathProps","button","undefined","InnerWrapper","BezierWrapper","BezierControl","setValue","useBoundingBox","firstHandleId","borderWidth","v","Indicator","HueBar","hue","saturation","lightness","thickness","fadeDelay","isMouseDown","setIsMouseDown","mousePosition","boundingBox","round","percentageThrough","document","backgroundGradientStops","generateHueGradient","STEPS","degree","i","join","indicatorPosition","key","GridWrapper","GradientOverlay","BackgroundGradient","ColorGradient","SatLitGrid","size","isTracking","startTracking","usePointerInputMechanism","throttleBy","roundTo","preventDefault","stopPropagation","indicatorBuffer","indicatorSize","cursor","background","satIncrement","litIncrement","convertToHex","h","s","l","chroma","hex","toUpperCase","Row","TextInput","CompactColorPicker","color","unitSize","focusInputOnMount","setColor","cachedColor","colorHex","textInputValue","HTMLInputElement","textInputRef","focus","preventScroll","select","handleTextInputChange","setTextInputValue","convertToHSL","get","handleHSLValueChange","newProps","motion","TooltipBox","Paper","PositionedTip","_exp3","Tip","BottomTip","_exp4","TopTip","_exp5","FloatingBox","isVisible","offset","backgroundColor","tooltipRef","tooltipPosition","setTooltipPosition","ComputePositionReturn","calculateXY","computePosition","placement","middleware","flipMiddleware","offsetMiddleware","yOffset","type","damping","stiffness","MobileColorPicker","onDismiss","DesktopColorPicker","windowDimensions","useOnClickOutside","handleKeydown","KeyboardEvent","clampedNormalize","MobileColorPickerWrapper","ResponsiveColorPickerTooltip","useWindowDimensions","isMobile","BREAKPOINT_SIZES","md","dragSpring","restSpeed","ListItem","Reorder","Item","PreviewWrapper","GrayBox","Background","ColorBox","IconWrapper","DeleteButton","ColorUnit","item","isEditing","isReordering","canBeDeleted","onDelete","onDragStart","onDragEnd","HTMLDivElement","String","restDelta","generateHSLString","sat","lit","ColorList","Group","ColorsControl","colors","setColors","editingColorIndex","setEditingColorIndex","setIsReordering","numOfValidColors","filter","length","tweakColor","Color","produce","draftColors","addNewColorButtonIndex","findIndex","orderedColors","c","splice","push","generateId","setTimeout","Axis","AngleBackground","trueWidth","trueHeight","radius","innerRingRadiuses","innerRadius","deriveAngleFromMousePosition","MouseEvent","isTouchEvent","centerX","centerY","theta","convertCartesianToPolar","angle","convertRadiansToDegrees","roundToNearest","precision","VisualizationWrapper","NeedleWrapper","Needle","NeedleCap","AngleControl","setAngle","isDragging","setIsDragging","handleStartDragging","newAngle","deriveAngleFromKeyArrow","arrow","Input","Label","ModeToggle","checked","onToggle","ModeList","ModeControl","colorMode","setColorMode","mode","ColorsWrapper","Cell","BezierPresets","Button","Controls","easingCurve","setPrecision","setEasingCurve","animateBezierChanges","setAnimateBezierChanges","MIN_PRECISION","EasingCurve","checkCurveEquality","preset","curve2","curve1","Space","DemoWrapper","Demo","Header","Subtitle","ControlsWrapper","SlopesWrapper","Slopes","_exp7","Image","OutputWrapper","OutputHeader","OutputLabel","CodeWrapper","FooterWrapper","Actions","ActionButton","TextSpan","GradientGenerator","initialColors","initialColorMode","initialPrecision","initialAngle","initialEasingCurve","codeOutput","pathname","usePathname","Array","ColorWithId","ColorMode","copyCodeStatus","setCopyCodeStatus","copyUrlStatus","setCopyUrlStatus","timeoutId","clearTimeout","gradientString","generateGradient","numOfStops","chromaColors","baseColors","stops","formattedStops","xTarget","getYValueForBezier","isNaN","hslString","deferredGradientString","shuffle","generateColorsArray","getRandomColorPalette","prepopulatedColors","chromaColor","remainingColors","sampleOne","getRandomColorMode","random","getRandomPrecision","getRandomCurve","MAX_PRECISION","presets","generateUrlForClipboard","urlString","encodeUrlString","output","colorHexCodes","replace","easingString","location","origin","code","generateCodeSnippet","handleCopyUrl","copyToClipboard","url","handleCopyCode","then","DARK_COLORS","OverlayBase","isOpen","enterDuration","enterDelay","exitDuration","exitDelay","openOpacity","handleDismiss","pointerEvents","ChildWrapper","ModalBase","portalId","skipPortal","returnFocus","allowScroll","overlay","Overlay","overlayProps","dismissDuration","enableDismissAfter","isRendered","setIsRendered","lastOpenedTimestamp","Date","now","handleDismissRef","timeSinceOpen","elem","ColorModeContainer","props","DarkWrapper","isMouseEvent","excludeTouchEvents","ref","setMousePosition","cachedIsWithinBox","cachedOnEnterBox","cachedOnLeaveBox","updatePosition","isWithinBox","newPosition","throttledUpdateMousePosition","mouseCleanup","throttleV2","throttledUpdateTouchPosition","touchCleanup","handler","triggerRef","rebindDependency","listener","target","event","contains","capture","setWindowDimensions","innerWidth","innerHeight","clientWidth","documentElement","calculatorElement","createElement","style","fontSize","body","appendChild","ratio","parseFloat","getComputedStyle","handleResize","throttle","removeChild"],"sourceRoot":"","ignoreList":[]}