From e1df74a0e625a314dc0f6cc049151fa8b144056e Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 12 Apr 2022 13:57:14 +0200 Subject: [PATCH 1/9] add functions to get slider from input element or clipboard data --- dist/iro-core.es.js | 97 +++++++++++++++++++++++++++++++++--- dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 98 +++++++++++++++++++++++++++++++++++-- dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 90 ++++++++++++++++++++++++++++++++-- dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 98 +++++++++++++++++++++++++++++++++++-- dist/iro-core.umd.js.map | 2 +- dist/slider.d.ts | 18 +++++++ package.json | 3 +- src/slider.ts | 74 ++++++++++++++++++++++++++++ 11 files changed, 462 insertions(+), 24 deletions(-) diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index 2585220..5b3e62e 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -11,6 +11,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -107,9 +110,7 @@ function intToHex(_int) { return _int.toString(16).padStart(2, '0'); } -var IroColor = -/*#__PURE__*/ -function () { +var IroColor = /*#__PURE__*/function () { /** * @constructor Color object * @param value - initial color value @@ -828,6 +829,90 @@ function getSliderValueFromInput(props, x, y) { return percent; } } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(type, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (type) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + return 0; + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 10; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -999,8 +1084,8 @@ function translateWheelAngle(props, angle, invert) { if (invert && wheelDirection === 'clockwise') angle = wheelAngle + angle; // clockwise (input handling) else if (wheelDirection === 'clockwise') angle = 360 - wheelAngle + angle; // inverted and anticlockwise - else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) - else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; + else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) + else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; return mod(angle, 360); } /** @@ -1242,5 +1327,5 @@ var iroColorPickerOptionDefaults = { boxHeight: null }; -export { IroColor, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromInput, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; +export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; //# sourceMappingURL=iro-core.es.js.map diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index 10d5a47..a0ed82d 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","length","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index 2501fd9..140f4fe 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -11,6 +11,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -107,9 +110,7 @@ function intToHex(_int) { return _int.toString(16).padStart(2, '0'); } -var IroColor = -/*#__PURE__*/ -function () { +var IroColor = /*#__PURE__*/function () { /** * @constructor Color object * @param value - initial color value @@ -828,6 +829,90 @@ function getSliderValueFromInput(props, x, y) { return percent; } } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(type, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (type) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + return 0; + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 10; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -999,8 +1084,8 @@ function translateWheelAngle(props, angle, invert) { if (invert && wheelDirection === 'clockwise') angle = wheelAngle + angle; // clockwise (input handling) else if (wheelDirection === 'clockwise') angle = 360 - wheelAngle + angle; // inverted and anticlockwise - else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) - else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; + else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) + else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; return mod(angle, 360); } /** @@ -1243,6 +1328,7 @@ var iroColorPickerOptionDefaults = { }; exports.IroColor = IroColor; +exports.clampSliderValue = clampSliderValue; exports.cssBorderStyles = cssBorderStyles; exports.cssGradient = cssGradient; exports.cssValue = cssValue; @@ -1258,7 +1344,9 @@ exports.getSliderGradient = getSliderGradient; exports.getSliderGradientCoords = getSliderGradientCoords; exports.getSliderHandlePosition = getSliderHandlePosition; exports.getSliderStyles = getSliderStyles; +exports.getSliderValueFromClipboard = getSliderValueFromClipboard; exports.getSliderValueFromInput = getSliderValueFromInput; +exports.getSliderValueFromInputField = getSliderValueFromInputField; exports.getSvgArcPath = getSvgArcPath; exports.getWheelDimensions = getWheelDimensions; exports.getWheelHandlePosition = getWheelHandlePosition; diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index f93cab6..6a46635 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","length","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 759f764..b6f973b 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -816,6 +816,90 @@ function getSliderValueFromInput(props, x, y) { return percent; } } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(type, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (type) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + return 0; + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + let maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 10; + } else { + maxlen = 3; + } + + let target = e.target; + let valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + const valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + const valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + const valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -983,8 +1067,8 @@ function translateWheelAngle(props, angle, invert) { if (invert && wheelDirection === 'clockwise') angle = wheelAngle + angle; // clockwise (input handling) else if (wheelDirection === 'clockwise') angle = 360 - wheelAngle + angle; // inverted and anticlockwise - else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) - else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; + else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) + else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; return mod(angle, 360); } /** @@ -1223,5 +1307,5 @@ const iroColorPickerOptionDefaults = { boxHeight: null }; -export { IroColor, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromInput, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; +export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; //# sourceMappingURL=iro-core.modern.js.map diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index c6225c6..f1f71e6 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","length","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 111d15f..c9cf962 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -16,6 +16,9 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -112,9 +115,7 @@ return _int.toString(16).padStart(2, '0'); } - var IroColor = - /*#__PURE__*/ - function () { + var IroColor = /*#__PURE__*/function () { /** * @constructor Color object * @param value - initial color value @@ -833,6 +834,90 @@ return percent; } } + /** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + + function clampSliderValue(type, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (type) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + return 0; + } + } + /** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + + function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 10; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); + } + /** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + + function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); + } /** * @desc Get the current handle position for a given color * @param props - slider props @@ -1004,8 +1089,8 @@ if (invert && wheelDirection === 'clockwise') angle = wheelAngle + angle; // clockwise (input handling) else if (wheelDirection === 'clockwise') angle = 360 - wheelAngle + angle; // inverted and anticlockwise - else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) - else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; + else if (invert && wheelDirection === 'anticlockwise') angle = wheelAngle + 180 - angle; // anticlockwise (input handling) + else if (wheelDirection === 'anticlockwise') angle = wheelAngle - angle; return mod(angle, 360); } /** @@ -1248,6 +1333,7 @@ }; exports.IroColor = IroColor; + exports.clampSliderValue = clampSliderValue; exports.cssBorderStyles = cssBorderStyles; exports.cssGradient = cssGradient; exports.cssValue = cssValue; @@ -1263,7 +1349,9 @@ exports.getSliderGradientCoords = getSliderGradientCoords; exports.getSliderHandlePosition = getSliderHandlePosition; exports.getSliderStyles = getSliderStyles; + exports.getSliderValueFromClipboard = getSliderValueFromClipboard; exports.getSliderValueFromInput = getSliderValueFromInput; + exports.getSliderValueFromInputField = getSliderValueFromInputField; exports.getSvgArcPath = getSvgArcPath; exports.getWheelDimensions = getWheelDimensions; exports.getWheelHandlePosition = getWheelHandlePosition; diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index c10cb2f..3985a96 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","length","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/slider.d.ts b/dist/slider.d.ts index 32b1edc..a0a0d8c 100644 --- a/dist/slider.d.ts +++ b/dist/slider.d.ts @@ -61,6 +61,24 @@ export declare function getCurrentSliderValue(props: Partial, col * @param y - global input y position */ export declare function getSliderValueFromInput(props: Partial, x: number, y: number): number; +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ +export declare function clampSliderValue(type: Partial, value: number): number; +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ +export declare function getSliderValueFromInputField(props: Partial, e: KeyboardEvent): number; +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ +export declare function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent): number; /** * @desc Get the current handle position for a given color * @param props - slider props diff --git a/package.json b/package.json index 43a122b..28275b4 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "@types/jest": "^24.0.19", "jest": "^24.9.0", "microbundle": "^0.12.4", - "ts-jest": "^24.1.0" + "ts-jest": "^24.1.0", + "typescript": "^4.6.3" }, "scripts": { "prepublishOnly": "npm run build", diff --git a/src/slider.ts b/src/slider.ts index 566a6e5..90b35dc 100644 --- a/src/slider.ts +++ b/src/slider.ts @@ -131,6 +131,80 @@ export function getSliderValueFromInput(props: Partial, x: number } } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + export function clampSliderValue(type: Partial, value: number) { + function clamp(num: number, min: number, max: number) { + return Math.min(Math.max(num, min), max); + } + switch(type) { + case 'hue': + return clamp(value, 0, 360); + case 'saturation': + case 'value': + return clamp(value, 0, 100); + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + case 'alpha': + return clamp(value, 0, 1); + case 'kelvin': // TODO + return 0; + } +} + +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ +export function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test((e).key)) { + return 0; + } + let maxlen: number; + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 10; + } else { + maxlen = 3; + } + + let target = (e.target as HTMLInputElement); + let valueString = target.value.toString(); + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + + e.key.toString() + + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + const valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} + +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) { + // allow only whole or decimal numbers + const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + const valueString: string = e.clipboardData.getData('text'); + if (!r.test(valueString)) { + return 0; + } + const valueNum = +valueString; + return clampSliderValue(props.sliderType, valueNum); +} + /** * @desc Get the current handle position for a given color * @param props - slider props From b1b3306f436fe651d48c588861b7152a482fb62b Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Thu, 14 Apr 2022 11:08:44 +0200 Subject: [PATCH 2/9] outsource input logic to input.ts. default to this.alpha instead of 1 when changing rgb value --- README.md | 18 +++- dist/index.d.ts | 1 + dist/input.d.ts | 27 ++++++ dist/iro-core.es.js | 174 +++++++++++++++++------------------ dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 174 +++++++++++++++++------------------ dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 176 ++++++++++++++++++------------------ dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 174 +++++++++++++++++------------------ dist/iro-core.umd.js.map | 2 +- dist/slider.d.ts | 18 ---- src/color.ts | 6 +- src/index.ts | 1 + src/input.ts | 85 +++++++++++++++++ src/slider.ts | 74 --------------- 16 files changed, 492 insertions(+), 444 deletions(-) create mode 100644 dist/input.d.ts create mode 100644 src/input.ts diff --git a/README.md b/README.md index b2e194f..0a64f5c 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,20 @@ Core package for iro.js (WIP) -This is for functionality that can be shared between the standalone version of iro.js as well as the upcoming React and Vue components. \ No newline at end of file +This is for functionality that can be shared between the standalone version of iro.js as well as the upcoming React and Vue components. + + +CHANGES: +======== + +repo: https://github.com/lenadax/iro.js/tree/feature/slider-label-value + +- allow alpha value when setting r/g/b or h/s/l channels (color.ts) + - default to this.alpha instead of 1 when setting rgb value + +- logic for editable input field (input.ts) + +TODO: +===== + +[ ] - allow seperate slider width spec \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 642a3d9..a8d0701 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,5 +1,6 @@ export * from './color'; export * from './slider'; +export * from './input'; export * from './wheel'; export * from './box'; export * from './util'; diff --git a/dist/input.d.ts b/dist/input.d.ts new file mode 100644 index 0000000..fb7d491 --- /dev/null +++ b/dist/input.d.ts @@ -0,0 +1,27 @@ +import { IroColor } from './color'; +import { SliderType } from './slider'; +import { IroColorPickerOptions } from './colorPickerOptions'; +export interface InputOptions extends IroColorPickerOptions { + color: IroColor; + sliderType: SliderType; + minTemperature: number; + maxTemperature: number; +} +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ +export declare function clampSliderValue(props: Partial, value: number): number; +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ +export declare function getSliderValueFromInputField(props: Partial, e: KeyboardEvent): number; +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ +export declare function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent): number; diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index 5b3e62e..ddc5dc8 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -497,7 +497,7 @@ var IroColor = /*#__PURE__*/function () { }, set: function set(value) { this.hsv = _extends({}, IroColor.rgbToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -526,7 +526,7 @@ var IroColor = /*#__PURE__*/function () { }, set: function set(value) { this.hsv = _extends({}, IroColor.hslToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -829,90 +829,6 @@ function getSliderValueFromInput(props, x, y) { return percent; } } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - -function clampSliderValue(type, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (type) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - // TODO - return 0; - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; - - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 10; - } else { - maxlen = 3; - } - - var target = e.target; - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -1022,6 +938,92 @@ function getSliderGradientCoords(props) { }; } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 5; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index a0ed82d..a2def15 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index 140f4fe..9242728 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -497,7 +497,7 @@ var IroColor = /*#__PURE__*/function () { }, set: function set(value) { this.hsv = _extends({}, IroColor.rgbToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -526,7 +526,7 @@ var IroColor = /*#__PURE__*/function () { }, set: function set(value) { this.hsv = _extends({}, IroColor.hslToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -829,90 +829,6 @@ function getSliderValueFromInput(props, x, y) { return percent; } } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - -function clampSliderValue(type, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (type) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - // TODO - return 0; - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; - - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 10; - } else { - maxlen = 3; - } - - var target = e.target; - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -1022,6 +938,92 @@ function getSliderGradientCoords(props) { }; } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 5; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index 6a46635..d074553 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index b6f973b..1ce80e3 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -480,7 +480,7 @@ class IroColor { set rgb(value) { this.hsv = _extends({}, IroColor.rgbToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } @@ -509,7 +509,7 @@ class IroColor { set hsl(value) { this.hsv = _extends({}, IroColor.hslToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } @@ -816,90 +816,6 @@ function getSliderValueFromInput(props, x, y) { return percent; } } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - -function clampSliderValue(type, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (type) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - // TODO - return 0; - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - let maxlen; - - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 10; - } else { - maxlen = 3; - } - - let target = e.target; - let valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); - } - - const valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - const valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - const valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} /** * @desc Get the current handle position for a given color * @param props - slider props @@ -1009,6 +925,94 @@ function getSliderGradientCoords(props) { }; } +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + const { + minTemperature, + maxTemperature + } = props; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + let maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 5; + } else { + maxlen = 3; + } + + let target = e.target; + let valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + const valueNum = +valueString; + return clampSliderValue(props, valueNum); +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + const valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + const valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + const TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index f1f71e6..5af1dbe 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index c9cf962..5021f9a 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -502,7 +502,7 @@ }, set: function set(value) { this.hsv = _extends({}, IroColor.rgbToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -531,7 +531,7 @@ }, set: function set(value) { this.hsv = _extends({}, IroColor.hslToHsv(value), { - a: value.a === undefined ? 1 : value.a + a: value.a === undefined ? this.alpha : value.a }); } }, { @@ -834,90 +834,6 @@ return percent; } } - /** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - - function clampSliderValue(type, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (type) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - // TODO - return 0; - } - } - /** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - - function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; - - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 10; - } else { - maxlen = 3; - } - - var target = e.target; - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); - } - /** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - - function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); - } /** * @desc Get the current handle position for a given color * @param props - slider props @@ -1027,6 +943,92 @@ }; } + /** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + // TODO + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } + } + /** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + + function getSliderValueFromInputField(props, e) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test(e.key)) { + return 0; + } + + var maxlen; + + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 5; + } else { + maxlen = 3; + } + + var target = e.target; + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); + } + /** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + + function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); + } + var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index 3985a96..4726b9a 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b),\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? 1 : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(type: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(type) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n return 0;\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 10;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props.sliderType, valueNum);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","clampSliderValue","type","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EAEA;EACA,IAAMA,WAAW,GAAG,eAApB;;EAEA,IAAMC,UAAU,GAAG,sBAAnB;;EAEA,IAAMC,QAAQ,GAAG,QAAQD,UAAR,GAAqB,OAArB,GAA+BD,WAA/B,GAA6C,GAA9D;EAGA;;EACA,IAAMG,kBAAkB,GAAG,gBAAgBD,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,WAA1G;EACA,IAAME,kBAAkB,GAAG,gBAAgBF,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,YAA/E,GAA8FA,QAA9F,GAAyG,WAApI;;EAGA,IAAMG,oBAAoB,GAAG,IAAIC,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;EACA,IAAMI,qBAAqB,GAAG,IAAID,MAAJ,CAAW,SAASF,kBAApB,CAA9B;EACA,IAAMI,oBAAoB,GAAG,IAAIF,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;EACA,IAAMM,qBAAqB,GAAG,IAAIH,MAAJ,CAAW,SAASF,kBAApB,CAA9B;;EAGA,IAAMM,SAAS,GAAG,aAAlB;EACA,IAAMC,cAAc,GAAG,kBAAvB;EACA,IAAMC,cAAc,GAAG,kBAAvB;EACA,IAAMC,WAAW,GAAG,IAAIP,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;EACA,IAAMG,WAAW,GAAG,IAAIR,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;EACA,IAAMI,WAAW,GAAG,IAAIT,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;EACA,IAAMI,WAAW,GAAG,IAAIV,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;;EAGA,IAAMK,UAAU,GAAG,IAAnB;EACA,IAAMC,UAAU,GAAG,KAAnB;;EAGA,IAAQC,GAAR,GAA8BC,IAA9B,CAAQD,GAAR;EAAA,IAAaE,KAAb,GAA8BD,IAA9B,CAAaC,KAAb;EAAA,IAAoBC,KAApB,GAA8BF,IAA9B,CAAoBE,KAApB;EAEA;;;;;;;EAMA,SAASC,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;EACE,SAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;EACD;EAED;;;;;;;EAKA,SAASC,SAAT,CAAmBC,GAAnB,EAAgCF,GAAhC;EACE,MAAMG,YAAY,GAAGD,GAAG,CAACE,OAAJ,CAAY,GAAZ,IAAmB,CAAC,CAAzC;EACA,MAAMN,GAAG,GAAGO,UAAU,CAACH,GAAD,CAAtB;EACA,SAAOC,YAAY,GAAIH,GAAG,GAAG,GAAP,GAAcF,GAAjB,GAAuBA,GAA1C;EACD;EAED;;;;;;EAIA,SAASQ,WAAT,CAAqBJ,GAArB;EACE,SAAOK,QAAQ,CAACL,GAAD,EAAM,EAAN,CAAf;EACD;EAED;;;;;;EAIA,SAASM,QAAT,CAAkBC,IAAlB;EACE,SAAOA,IAAG,CAACC,QAAJ,CAAa,EAAb,EAAiBC,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAP;EACD;;MAqCYC,QAAb;EAQE;;;;EAIA,oBAAYC,KAAZ,EAAmCC,QAAnC;EACE;EACA,SAAKC,CAAL,GAAS;EAACC,MAAAA,CAAC,EAAE,CAAJ;EAAOC,MAAAA,CAAC,EAAE,CAAV;EAAaC,MAAAA,CAAC,EAAE,CAAhB;EAAmBC,MAAAA,CAAC,EAAE;EAAtB,KAAT;EACA,QAAIN,KAAJ,EAAW,KAAKO,GAAL,CAASP,KAAT;;EAEX,SAAKC,QAAL,GAAgBA,QAAhB;EACA,SAAKO,YAAL,gBAAyB,KAAKN,CAA9B;EACD;EAED;;;;;;EArBF;;EAAA,SAyBSK,GAzBT,GAyBS,aAAIP,KAAJ;EACL,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B,UAAI,+BAA+BS,IAA/B,CAAoCT,KAApC,CAAJ,EAA0D;EACxD,aAAKU,SAAL,GAAiBV,KAAjB;EACD,OAFD,MAGK,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;EACvC,aAAKW,SAAL,GAAiBX,KAAjB;EACD,OAFI,MAGA,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;EACvC,aAAKY,SAAL,GAAiBZ,KAAjB;EACD;EACF,KAVD,MAWK,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAClC,UAAIA,KAAK,YAAYD,QAArB,EAA+B;EAC7B,aAAKc,IAAL,GAAYb,KAAK,CAACa,IAAlB;EACD,OAFD,MAGK,IAAI,OAAOb,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;EACrD,aAAKc,GAAL,GAAWd,KAAX;EACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;EACrD,aAAKe,GAAL,GAAWf,KAAX;EACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;EACrD,aAAKgB,GAAL,GAAWhB,KAAX;EACD,OAFI,MAGA,IAAI,YAAYA,KAAhB,EAAuB;EAC1B,aAAKiB,MAAL,GAAcjB,KAAK,CAACiB,MAApB;EACD;EACF,KAhBI,MAiBA;EACH,YAAM,IAAIC,KAAJ,CAAU,qBAAV,CAAN;EACD;EACF;EAED;;;;;;EA3DF;;EAAA,SAiESC,UAjET,GAiES,oBAAWC,MAAX,EAA2BC,OAA3B,EAA4CrB,KAA5C;;;EACL,SAAKoB,MAAL,iBAAmB,KAAKA,MAAL,CAAnB,6BAAkCC,OAAlC,IAA4CrB,KAA5C;EACD;EAED;;;EArEF;;EAAA,SAwESsB,KAxET,GAwES;EACL,SAAKT,IAAL,GAAY,KAAKL,YAAjB;EACD;EAED;;;EA5EF;;EAAA,SA+ESe,KA/ET,GA+ES;EACL,WAAO,IAAIxB,QAAJ,CAAa,IAAb,CAAP;EACD;EAED;;;EAnFF;;EAAA,SAsFSyB,MAtFT,GAsFS;EACL,SAAKvB,QAAL,GAAgBwB,SAAhB;EACD;EAED;;;;EA1FF;;EAAA,WA8FgBC,QA9FhB,GA8FS,kBAAgBX,GAAhB;EACL,QAAMZ,CAAC,GAAGY,GAAG,CAACZ,CAAJ,GAAQ,EAAlB;EACA,QAAMC,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;EACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;EACA,QAAMsB,CAAC,GAAG5C,KAAK,CAACoB,CAAD,CAAf;EACA,QAAMyB,CAAC,GAAGzB,CAAC,GAAGwB,CAAd;EACA,QAAME,CAAC,GAAGxB,CAAC,IAAI,IAAID,CAAR,CAAX;EACA,QAAM0B,CAAC,GAAGzB,CAAC,IAAI,IAAIuB,CAAC,GAAGxB,CAAZ,CAAX;EACA,QAAM2B,CAAC,GAAG1B,CAAC,IAAI,IAAI,CAAC,IAAIuB,CAAL,IAAUxB,CAAlB,CAAX;EACA,QAAM4B,GAAG,GAAGL,CAAC,GAAG,CAAhB;EACA,QAAMM,CAAC,GAAG,CAAC5B,CAAD,EAAIyB,CAAJ,EAAOD,CAAP,EAAUA,CAAV,EAAaE,CAAb,EAAgB1B,CAAhB,EAAmB2B,GAAnB,CAAV;EACA,QAAME,CAAC,GAAG,CAACH,CAAD,EAAI1B,CAAJ,EAAOA,CAAP,EAAUyB,CAAV,EAAaD,CAAb,EAAgBA,CAAhB,EAAmBG,GAAnB,CAAV;EACA,QAAMG,CAAC,GAAG,CAACN,CAAD,EAAIA,CAAJ,EAAOE,CAAP,EAAU1B,CAAV,EAAaA,CAAb,EAAgByB,CAAhB,EAAmBE,GAAnB,CAAV;EACA,WAAO;EACLC,MAAAA,CAAC,EAAEjD,KAAK,CAACiD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CADH;EAELC,MAAAA,CAAC,EAAElD,KAAK,CAACkD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CAFH;EAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb;EAHH,KAAP;EAKD;EAED;;;;EAlHF;;EAAA,WAsHgBC,QAtHhB,GAsHS,kBAAgBtB,GAAhB;EACL,QAAMmB,CAAC,GAAGnB,GAAG,CAACmB,CAAJ,GAAQ,GAAlB;EACA,QAAMC,CAAC,GAAGpB,GAAG,CAACoB,CAAJ,GAAQ,GAAlB;EACA,QAAMC,CAAC,GAAGrB,GAAG,CAACqB,CAAJ,GAAQ,GAAlB;EACA,QAAMhD,GAAG,GAAGN,IAAI,CAACM,GAAL,CAAS8C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;EACA,QAAMjD,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS+C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;EACA,QAAME,KAAK,GAAGlD,GAAG,GAAGD,GAApB;EACA,QAAIoD,GAAG,GAAG,CAAV;EACA,QAAItC,KAAK,GAAGb,GAAZ;EACA,QAAIoD,UAAU,GAAGpD,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBkD,KAAK,GAAGlD,GAAzC;;EACA,YAAQA,GAAR;EACE,WAAKD,GAAL;EACEoD,QAAAA,GAAG,GAAG,CAAN,CADF;;EAEE;;EACF,WAAKL,CAAL;EACEK,QAAAA,GAAG,GAAG,CAACJ,CAAC,GAAGC,CAAL,IAAUE,KAAV,IAAmBH,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAY,CAA/B,CAAN;EACA;;EACF,WAAKD,CAAL;EACEI,QAAAA,GAAG,GAAG,CAACH,CAAC,GAAGF,CAAL,IAAUI,KAAV,GAAkB,CAAxB;EACA;;EACF,WAAKF,CAAL;EACEG,QAAAA,GAAG,GAAG,CAACL,CAAC,GAAGC,CAAL,IAAUG,KAAV,GAAkB,CAAxB;EACA;EAZJ;;EAcA,WAAO;EACLlC,MAAAA,CAAC,EAAGmC,GAAG,GAAG,EAAP,GAAa,GADX;EAELlC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;EAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAACgB,KAAK,GAAG,GAAT,EAAc,CAAd,EAAiB,GAAjB;EAHH,KAAP;EAKD;EAED;;;;EArJF;;EAAA,WAyJgBwC,QAzJhB,GAyJS,kBAAgBzB,GAAhB;EACL,QAAMX,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;EACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;EACA,QAAMoC,CAAC,GAAG,CAAC,IAAIrC,CAAL,IAAUC,CAApB;EACA,QAAMqC,OAAO,GAAGD,CAAC,IAAI,CAAL,GAASA,CAAT,GAAc,IAAIA,CAAlC;;EAEA,QAAMF,UAAU,GAAGG,OAAO,GAAG,IAAV,GAAiB,CAAjB,GAAsBtC,CAAC,GAAGC,CAAL,GAAUqC,OAAlD;EACA,WAAO;EACLvC,MAAAA,CAAC,EAAEY,GAAG,CAACZ,CADF;EAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;EAGLE,MAAAA,CAAC,EAAEzD,KAAK,CAACyD,CAAC,GAAG,EAAL,EAAS,CAAT,EAAY,GAAZ;EAHH,KAAP;EAKD;EAED;;;;EAvKF;;EAAA,WA2KgBE,QA3KhB,GA2KS,kBAAgB3B,GAAhB;EACL,QAAMyB,CAAC,GAAGzB,GAAG,CAACyB,CAAJ,GAAQ,CAAlB;EACA,QAAMrC,CAAC,GAAIY,GAAG,CAACZ,CAAJ,IAAUqC,CAAC,IAAI,GAAN,GAAaA,CAAb,GAAiB,MAAMA,CAAhC,CAAD,GAAuC,GAAjD;;EAEA,QAAMF,UAAU,GAAIE,CAAC,GAAGrC,CAAJ,GAAQ,IAAT,GAAiB,CAAjB,GAAsB,IAAIA,CAAL,IAAWqC,CAAC,GAAGrC,CAAf,CAAxC;EACA,WAAO;EACLD,MAAAA,CAAC,EAAEa,GAAG,CAACb,CADF;EAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;EAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAAC,CAACyD,CAAC,GAAGrC,CAAL,IAAU,CAAX,EAAc,CAAd,EAAiB,GAAjB;EAHH,KAAP;EAKD;EAED;;;;EAvLF;;EAAA,WA2LgBwC,WA3LhB,GA2LS,qBAAmB3B,MAAnB;EACL,QAAM4B,IAAI,GAAG5B,MAAM,GAAG,GAAtB;EACA,QAAIgB,CAAJ,EAAOC,CAAP,EAAUC,CAAV;;EACA,QAAIU,IAAI,GAAG,EAAX,EAAe;EACbZ,MAAAA,CAAC,GAAG,GAAJ;EACAC,MAAAA,CAAC,GAAG,CAAC,kBAAD,GAAsB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,CAAhC,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACsD,CAAD,CAAvF;EACAC,MAAAA,CAAC,GAAGU,IAAI,GAAG,EAAP,GAAY,CAAZ,GAAgB,CAAC,kBAAD,GAAsB,sBAAsBV,CAAC,GAAGU,IAAI,GAAC,EAA/B,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACuD,CAAD,CAAvG;EACD,KAJD,MAIO;EACLF,MAAAA,CAAC,GAAG,qBAAqB,qBAAqBA,CAAC,GAAGY,IAAI,GAAC,EAA9B,CAArB,GAAyD,oBAAoBjE,GAAG,CAACqD,CAAD,CAApF;EACAC,MAAAA,CAAC,GAAG,oBAAoB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,EAAhC,CAApB,GAA0D,mBAAmBjE,GAAG,CAACsD,CAAD,CAApF;EACAC,MAAAA,CAAC,GAAG,GAAJ;EACD;;EACD,WAAO;EACLF,MAAAA,CAAC,EAAEjD,KAAK,CAACD,KAAK,CAACkD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CADH;EAELC,MAAAA,CAAC,EAAElD,KAAK,CAACD,KAAK,CAACmD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CAFH;EAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACD,KAAK,CAACoD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd;EAHH,KAAP;EAKD;EAEA;;;;EA9MH;;EAAA,WAkNgBW,WAlNhB,GAkNS,qBAAmBhC,GAAnB;EACL,QAAQmB,CAAR,GAAoBnB,GAApB,CAAQmB,CAAR;EAAA,QAAcE,CAAd,GAAoBrB,GAApB,CAAcqB;EACd,QAAMY,GAAG,GAAG,GAAZ;EACA,QAAIC,OAAO,GAAGtE,UAAd;EACA,QAAIuE,OAAO,GAAGtE,UAAd;EACA,QAAIkE,IAAJ;;EACA,WAAOI,OAAO,GAAGD,OAAV,GAAoBD,GAA3B,EAAgC;EAC9BF,MAAAA,IAAI,GAAG,CAACI,OAAO,GAAGD,OAAX,IAAsB,GAA7B;;EACA,UAAMlC,IAAG,GAAGf,QAAQ,CAAC6C,WAAT,CAAqBC,IAArB,CAAZ;;EACA,UAAK/B,IAAG,CAACqB,CAAJ,GAAQrB,IAAG,CAACmB,CAAb,IAAoBE,CAAC,GAAGF,CAA5B,EAAgC;EAC9BgB,QAAAA,OAAO,GAAGJ,IAAV;EACD,OAFD,MAEO;EACLG,QAAAA,OAAO,GAAGH,IAAV;EACD;EACF;;EACD,WAAOA,IAAP;EACD,GAlOH;;EAAA;EAAA;EAAA,SAoOE;EACE;EACA,UAAM7C,KAAK,GAAG,KAAKE,CAAnB;EACA,aAAO;EAACC,QAAAA,CAAC,EAAEH,KAAK,CAACG,CAAV;EAAaC,QAAAA,CAAC,EAAEJ,KAAK,CAACI,CAAtB;EAAyBC,QAAAA,CAAC,EAAEL,KAAK,CAACK;EAAlC,OAAP;EACD,KAxOH;EAAA,SA0OE,aAAe6C,QAAf;EACE,UAAMC,QAAQ,GAAG,KAAKjD,CAAtB;EAEAgD,MAAAA,QAAQ,gBAAQC,QAAR,EAAqBD,QAArB,CAAR;EAEA;;EACA,UAAI,KAAKjD,QAAT,EAAmB;EACjB;EACA,YAAImD,OAAO,GAAiB;EAC1BjD,UAAAA,CAAC,EAAE,KADuB;EAE1BE,UAAAA,CAAC,EAAE,KAFuB;EAG1BD,UAAAA,CAAC,EAAE,KAHuB;EAI1BE,UAAAA,CAAC,EAAE;EAJuB,SAA5B;;EAOA,aAAK,IAAI+C,GAAT,IAAgBF,QAAhB,EAA0B;EACxBC,UAAAA,OAAO,CAACC,GAAD,CAAP,GAAeH,QAAQ,CAACG,GAAD,CAAR,IAAiBF,QAAQ,CAACE,GAAD,CAAxC;EACD;;EAED,aAAKnD,CAAL,GAASgD,QAAT,CAbiB;;EAejB,YAAIE,OAAO,CAACjD,CAAR,IAAaiD,OAAO,CAAChD,CAArB,IAA0BgD,OAAO,CAAC/C,CAAlC,IAAuC+C,OAAO,CAAC9C,CAAnD,EAAsD,KAAKL,QAAL,CAAc,IAAd,EAAoBmD,OAApB;EACvD,OAhBD,MAgBO;EACL,aAAKlD,CAAL,GAASgD,QAAT;EACD;EACF;EAnQH;EAAA;EAAA,SAqQE;EACE,0BAAW,KAAKhD,CAAhB;EACD,KAvQH;EAAA,SAyQE,aAAgBF,KAAhB;EACE,WAAKe,GAAL,GAAWf,KAAX;EACD;EA3QH;EAAA;EAAA,SA6QE;EACE,aAAO,KAAKE,CAAL,CAAOC,CAAd;EACD,KA/QH;EAAA,SAiRE,aAAeH,KAAf;EACE,WAAKe,GAAL,GAAW;EAAEZ,QAAAA,CAAC,EAAEH;EAAL,OAAX;EACD;EAnRH;EAAA;EAAA,SAqRE;EACE,aAAO,KAAKE,CAAL,CAAOE,CAAd;EACD,KAvRH;EAAA,SAyRE,aAAsBJ,KAAtB;EACE,WAAKe,GAAL,GAAW;EAAEX,QAAAA,CAAC,EAAEJ;EAAL,OAAX;EACD;EA3RH;EAAA;EAAA,SA6RE;EACE,aAAO,KAAKE,CAAL,CAAOG,CAAd;EACD,KA/RH;EAAA,SAiSE,aAAiBL,KAAjB;EACE,WAAKe,GAAL,GAAW;EAAEV,QAAAA,CAAC,EAAEL;EAAL,OAAX;EACD;EAnSH;EAAA;EAAA,SAqSE;EACE,aAAO,KAAKE,CAAL,CAAOI,CAAd;EACD,KAvSH;EAAA,SAySE,aAAiBN,KAAjB;EACE,WAAKe,GAAL,gBAAgB,KAAKA,GAArB;EAA0BT,QAAAA,CAAC,EAAEN;EAA7B;EACD;EA3SH;EAAA;EAAA,SA6SE;EACE,aAAOD,QAAQ,CAAC+C,WAAT,CAAqB,KAAKhC,GAA1B,CAAP;EACD,KA/SH;EAAA,SAiTE,aAAkBd,KAAlB;EACE,WAAKc,GAAL,GAAWf,QAAQ,CAAC6C,WAAT,CAAqB5C,KAArB,CAAX;EACD;EAnTH;EAAA;EAAA,SAqTE;EACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;EACA,aAAOA,GAAG,CAACmB,CAAX;EACD,KAxTH;EAAA,SA0TE,aAAejC,KAAf;EACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;EAA0BmB,QAAAA,CAAC,EAAEjC;EAA7B;EACD;EA5TH;EAAA;EAAA,SA8TE;EACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;EACA,aAAOA,GAAG,CAACoB,CAAX;EACD,KAjUH;EAAA,SAmUE,aAAiBlC,KAAjB;EACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;EAA0BoB,QAAAA,CAAC,EAAElC;EAA7B;EACD;EArUH;EAAA;EAAA,SAuUE;EACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;EACA,aAAOA,GAAG,CAACqB,CAAX;EACD,KA1UH;EAAA,SA4UE,aAAgBnC,KAAhB;EACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;EAA0BqB,QAAAA,CAAC,EAAEnC;EAA7B;EACD;EA9UH;EAAA;EAAA,SAgVE;EACE,+BAAkBD,QAAQ,CAAC2B,QAAT,CAAkB,KAAKxB,CAAvB,CAAlB;EAAA,UAAO+B,CAAP,sBAAOA,CAAP;EAAA,UAAUC,CAAV,sBAAUA,CAAV;EAAA,UAAaC,CAAb,sBAAaA,CAAb;;EACA,aAAO;EACLF,QAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAD,CADH;EAELC,QAAAA,CAAC,EAAEpD,KAAK,CAACoD,CAAD,CAFH;EAGLC,QAAAA,CAAC,EAAErD,KAAK,CAACqD,CAAD;EAHH,OAAP;EAKD,KAvVH;EAAA,SAyVE,aAAenC,KAAf;EACE,WAAKe,GAAL,gBACKhB,QAAQ,CAACqC,QAAT,CAAkBpC,KAAlB,CADL;EAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;EAFlD;EAID;EA9VH;EAAA;EAAA,SAgWE;EACE,0BAAY,KAAKQ,GAAjB;EAAsBR,QAAAA,CAAC,EAAE,KAAKgD;EAA9B;EACD,KAlWH;EAAA,SAoWE,aAAgBtD,KAAhB;EACE,WAAKc,GAAL,GAAWd,KAAX;EACD;EAtWH;EAAA;EAAA,SAwWE;EACE,+BAAkBD,QAAQ,CAACyC,QAAT,CAAkB,KAAKtC,CAAvB,CAAlB;EAAA,UAAOC,CAAP,sBAAOA,CAAP;EAAA,UAAUC,CAAV,sBAAUA,CAAV;EAAA,UAAaqC,CAAb,sBAAaA,CAAb;;EACA,aAAO;EACLtC,QAAAA,CAAC,EAAErB,KAAK,CAACqB,CAAD,CADH;EAELC,QAAAA,CAAC,EAAEtB,KAAK,CAACsB,CAAD,CAFH;EAGLqC,QAAAA,CAAC,EAAE3D,KAAK,CAAC2D,CAAD;EAHH,OAAP;EAKD,KA/WH;EAAA,SAiXE,aAAezC,KAAf;EACE,WAAKe,GAAL,gBACKhB,QAAQ,CAAC4C,QAAT,CAAkB3C,KAAlB,CADL;EAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;EAFlD;EAID;EAtXH;EAAA;EAAA,SAwXE;EACE,0BAAY,KAAKU,GAAjB;EAAsBV,QAAAA,CAAC,EAAE,KAAKgD;EAA9B;EACD,KA1XH;EAAA,SA4XE,aAAgBtD,KAAhB;EACE,WAAKgB,GAAL,GAAWhB,KAAX;EACD;EA9XH;EAAA;EAAA,SAgYE;EACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;EACA,sBAAcA,GAAG,CAACmB,CAAlB,UAAwBnB,GAAG,CAACoB,CAA5B,UAAkCpB,GAAG,CAACqB,CAAtC;EACD,KAnYH;EAAA,SAqYE,aAAqBnC,KAArB;EACE,UAAIuD,KAAJ;EACA,UAAItB,CAAJ;EAAA,UAAOC,CAAP;EAAA,UAAUC,CAAV;EAAA,UAAa7B,CAAC,GAAG,CAAjB;;EACA,UAAIiD,KAAK,GAAGzF,oBAAoB,CAAC0F,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;EAC5CiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACD,OAJD,MAKK,IAAIA,KAAK,GAAGvF,qBAAqB,CAACwF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;EAClDiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;EACD;;EACD,UAAIA,KAAJ,EAAW;EACT,aAAKzC,GAAL,GAAW;EAACmB,UAAAA,CAAC,EAADA,CAAD;EAAIC,UAAAA,CAAC,EAADA,CAAJ;EAAOC,UAAAA,CAAC,EAADA,CAAP;EAAU7B,UAAAA,CAAC,EAADA;EAAV,SAAX;EACD,OAFD,MAGK;EACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;EACD;EACF;EAzZH;EAAA;EAAA,SA2ZE;EACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;EACA,uBAAeA,IAAI,CAACxB,CAApB,UAA0BwB,IAAI,CAACvB,CAA/B,UAAqCuB,IAAI,CAACtB,CAA1C,UAAgDsB,IAAI,CAACnD,CAArD;EACD,KA9ZH;EAAA,SAgaE,aAAsBN,KAAtB;EACE,WAAKW,SAAL,GAAiBX,KAAjB;EACD;EAlaH;EAAA;EAAA,SAoaE;EACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;EACA,mBAAYnB,QAAQ,CAACmB,GAAG,CAACmB,CAAL,CAApB,GAAgCtC,QAAQ,CAACmB,GAAG,CAACoB,CAAL,CAAxC,GAAoDvC,QAAQ,CAACmB,GAAG,CAACqB,CAAL,CAA5D;EACD,KAvaH;EAAA,SAyaE,aAAqBnC,KAArB;EACE,UAAIuD,KAAJ;EACA,UAAItB,CAAJ;EAAA,UAAOC,CAAP;EAAA,UAAUC,CAAV;EAAA,UAAa7B,CAAC,GAAG,GAAjB;;EACA,UAAIiD,KAAK,GAAGjF,WAAW,CAACkF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;EACnCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACD,OAJD,MAKK,IAAIA,KAAK,GAAGhF,WAAW,CAACiF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;EACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;EACD,OALI,MAMA,IAAIA,KAAK,GAAG/E,WAAW,CAACgF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;EACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACD,OAJI,MAKA,IAAIA,KAAK,GAAG9E,WAAW,CAAC+E,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;EACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;EACD;;EACD,UAAIA,KAAJ,EAAW;EACT,aAAKzC,GAAL,GAAW;EAACmB,UAAAA,CAAC,EAADA,CAAD;EAAIC,UAAAA,CAAC,EAADA,CAAJ;EAAOC,UAAAA,CAAC,EAADA,CAAP;EAAU7B,UAAAA,CAAC,EAAEA,CAAC,GAAG;EAAjB,SAAX;EACD,OAFD,MAGK;EACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;EACD;EACF;EAxcH;EAAA;EAAA,SA0cE;EACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;EACA,mBAAW9D,QAAQ,CAAC8D,IAAI,CAACxB,CAAN,CAAnB,GAA8BtC,QAAQ,CAAC8D,IAAI,CAACvB,CAAN,CAAtC,GAAiDvC,QAAQ,CAAC8D,IAAI,CAACtB,CAAN,CAAzD,GAAoExC,QAAQ,CAACZ,KAAK,CAAC0E,IAAI,CAACnD,CAAL,GAAS,GAAV,CAAN,CAA5E;EACD,KA7cH;EAAA,SA+cE,aAAsBN,KAAtB;EACE,WAAKU,SAAL,GAAiBV,KAAjB;EACD;EAjdH;EAAA;EAAA,SAmdE;EACE,UAAMgB,GAAG,GAAG,KAAKA,GAAjB;EACA,sBAAcA,GAAG,CAACb,CAAlB,UAAwBa,GAAG,CAACZ,CAA5B,WAAmCY,GAAG,CAACyB,CAAvC;EACD,KAtdH;EAAA,SAwdE,aAAqBzC,KAArB;EACE,UAAIuD,KAAJ;EACA,UAAIpD,CAAJ;EAAA,UAAOC,CAAP;EAAA,UAAUqC,CAAV;EAAA,UAAanC,CAAC,GAAG,CAAjB;;EACA,UAAIiD,KAAK,GAAGtF,oBAAoB,CAACuF,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;EAC5CG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACD,OAJD,MAKK,IAAIA,KAAK,GAAGrF,qBAAqB,CAACsF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;EAClDG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;EACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;EACD;;EACD,UAAIA,KAAJ,EAAW;EACT,aAAKvC,GAAL,GAAW;EAACb,UAAAA,CAAC,EAADA,CAAD;EAAIC,UAAAA,CAAC,EAADA,CAAJ;EAAOqC,UAAAA,CAAC,EAADA,CAAP;EAAUnC,UAAAA,CAAC,EAADA;EAAV,SAAX;EACD,OAFD,MAGK;EACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;EACD;EACF;EA5eH;EAAA;EAAA,SA8eE;EACE,UAAMwC,IAAI,GAAG,KAAKA,IAAlB;EACA,uBAAeA,IAAI,CAACvD,CAApB,UAA0BuD,IAAI,CAACtD,CAA/B,WAAsCsD,IAAI,CAACjB,CAA3C,WAAkDiB,IAAI,CAACpD,CAAvD;EACD,KAjfH;EAAA,SAmfE,aAAsBN,KAAtB;EACE,WAAKY,SAAL,GAAiBZ,KAAjB;EACD;EArfH;;EAAA;EAAA;;MChGa2D,oBAAoB,GAAG;EAClCC,EAAAA,WAAW,EAAE,KADqB;EAElCC,EAAAA,UAAU,EAAE,OAFsB;EAGlCC,EAAAA,cAAc,EAAE,IAHkB;EAIlCC,EAAAA,cAAc,EAAE;EAJkB,CAA7B;EAOP;;;;;AAIA,WAAgBC,gBAAgBC;;;EAC9B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;EAGD;EAED;;;;;AAIA,WAAgBC,oBAAoBH;;;EAClC,MAAMI,KAAN,GAAyFJ,KAAzF,CAAMI,KAAN;EAAA,MAAyBC,UAAzB,GAAyFL,KAAzF,CAAaK,UAAb;EAAA,MAAqCC,WAArC,GAAyFN,KAAzF,CAAqCM,WAArC;EAAA,MAAkDC,YAAlD,GAAyFP,KAAzF,CAAkDO,YAAlD;EAAA,MAAgEC,OAAhE,GAAyFR,KAAzF,CAAgEQ,OAAhE;EAAA,MAAyEb,WAAzE,GAAyFK,KAAzF,CAAyEL,WAAzE;EACA,MAAMc,YAAY,GAAGT,KAAK,CAACC,eAAN,KAA0B,YAA/C;;EAEAI,EAAAA,UAAU,kBAAGA,UAAH,0BAAiBG,OAAO,GAAG,CAAV,GAAcD,YAAY,GAAG,CAAxD;;EACA,MAAIZ,WAAW,KAAK,QAApB,EAA8B;EAC5B,WAAO;EACLe,MAAAA,WAAW,EAAEV,KAAK,CAACQ,OAAN,GAAgBR,KAAK,CAACO,YAD9B;EAELI,MAAAA,WAAW,EAAEP,KAAK,GAAGI,OAAO,GAAG,CAAlB,GAAsBD,YAAY,GAAG,CAF7C;EAGLH,MAAAA,KAAK,EAAEA,KAHF;EAILQ,MAAAA,MAAM,EAAER,KAJH;EAKLS,MAAAA,EAAE,EAAET,KAAK,GAAG,CALP;EAMLU,MAAAA,EAAE,EAAEV,KAAK,GAAG,CANP;EAOLW,MAAAA,MAAM,EAAEX,KAAK,GAAG,CAAR,GAAYE,WAAW,GAAG;EAP7B,KAAP;EASD,GAVD,MAUO;EACL,WAAO;EACLI,MAAAA,WAAW,EAAEL,UAAU,GAAG,CADrB;EAELM,MAAAA,WAAW,EAAEP,KAAK,GAAGC,UAFhB;EAGLU,MAAAA,MAAM,EAAEV,UAAU,GAAG,CAHhB;EAILW,MAAAA,CAAC,EAAE,CAJE;EAKLC,MAAAA,CAAC,EAAE,CALE;EAMLb,MAAAA,KAAK,EAAEK,YAAY,GAAGJ,UAAH,GAAgBD,KAN9B;EAOLQ,MAAAA,MAAM,EAAEH,YAAY,GAAGL,KAAH,GAAWC;EAP1B,KAAP;EASD;EACF;EAED;;;;;;AAKA,WAAgBa,sBAAsBlB,OAA+BmB;EACnE,MAAMvE,IAAI,GAAGuE,KAAK,CAACvE,IAAnB;EACA,MAAMC,GAAG,GAAGsE,KAAK,CAACtE,GAAlB;;EAEA,UAAQmD,KAAK,CAACJ,UAAd;EACE,SAAK,KAAL;EACE,aAAO/C,GAAG,CAACmB,CAAJ,GAAQ,IAAf;;EACF,SAAK,OAAL;EACE,aAAOnB,GAAG,CAACoB,CAAJ,GAAQ,IAAf;;EACF,SAAK,MAAL;EACE,aAAOpB,GAAG,CAACqB,CAAJ,GAAQ,IAAf;;EACF,SAAK,OAAL;EACE,aAAOtB,IAAI,CAACP,CAAL,GAAS,GAAhB;;EACF,SAAK,QAAL;EACE,UAAQwD,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;EAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;EACA,UAAMsB,gBAAgB,GAAGtB,cAAc,GAAGD,cAA1C;EACA,UAAMwB,OAAO,GAAI,CAACF,KAAK,CAACnE,MAAN,GAAe6C,cAAhB,IAAkCuB,gBAAnC,GAAuD,GAAvE,CAHF;;EAKE,aAAOxG,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASoG,OAAT,EAAkB,GAAlB,CAAZ,CAAP;;EACF,SAAK,KAAL;EACE,aAAOzE,IAAI,CAACV,CAAL,IAAU,GAAjB;;EACF,SAAK,YAAL;EACE,aAAOU,IAAI,CAACT,CAAZ;;EACF,SAAK,OAAL;EACA;EACE,aAAOS,IAAI,CAACR,CAAZ;EArBJ;EAuBD;EAED;;;;;;;AAMA,WAAgBkF,wBAAwBtB,OAA+BgB,GAAWC;EAChF,6BAAqCd,mBAAmB,CAACH,KAAD,CAAxD;EAAA,MAAQW,WAAR,wBAAQA,WAAR;EAAA,MAAqBD,WAArB,wBAAqBA,WAArB;;EACA,MAAIa,SAAJ;;EACA,MAAIvB,KAAK,CAACC,eAAN,KAA0B,YAA9B,EAA4C;EAC1CsB,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKN,CAAL,GAASN,WAAT,GAAuBD,WAAnC;EACD,GAFD,MAEO;EACLa,IAAAA,SAAS,GAAGP,CAAC,GAAGN,WAAhB;EACD;;;EAEDa,EAAAA,SAAS,GAAG3G,IAAI,CAACM,GAAL,CAASN,IAAI,CAACK,GAAL,CAASsG,SAAT,EAAoBZ,WAApB,CAAT,EAA2C,CAA3C,CAAZ;EACA,MAAMU,OAAO,GAAGzG,IAAI,CAACC,KAAL,CAAY,MAAM8F,WAAP,GAAsBY,SAAjC,CAAhB;;EACA,UAAQvB,KAAK,CAACJ,UAAd;EACE,SAAK,QAAL;EACE,UAAQC,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;EAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;EACA,UAAMsB,gBAAgB,GAAGtB,cAAc,GAAGD,cAA1C;EACA,aAAOA,cAAc,GAAGuB,gBAAgB,IAAIC,OAAO,GAAG,GAAd,CAAxC;;EACF,SAAK,OAAL;EACE,aAAOA,OAAO,GAAG,GAAjB;;EACF,SAAK,KAAL;EACE,aAAOA,OAAO,GAAG,GAAjB;;EACF,SAAK,KAAL;EACA,SAAK,MAAL;EACA,SAAK,OAAL;EACE,aAAOA,OAAO,GAAG,IAAjB;;EACF;EACE,aAAOA,OAAP;EAdJ;EAgBD;EAED;;;;;;AAKA,WAAgBG,wBAAwBxB,OAA+BmB;EACrE,8BAAoDhB,mBAAmB,CAACH,KAAD,CAAvE;EAAA,MAAQI,KAAR,yBAAQA,KAAR;EAAA,MAAeQ,MAAf,yBAAeA,MAAf;EAAA,MAAuBD,WAAvB,yBAAuBA,WAAvB;EAAA,MAAoCD,WAApC,yBAAoCA,WAApC;;EACA,MAAMD,YAAY,GAAGT,KAAK,CAACC,eAAN,KAA0B,YAA/C;EACA,MAAMwB,WAAW,GAAGP,qBAAqB,CAAClB,KAAD,EAAQmB,KAAR,CAAzC;EACA,MAAMO,QAAQ,GAAGjB,YAAY,GAAGL,KAAK,GAAG,CAAX,GAAeQ,MAAM,GAAG,CAArD;EACA,MAAIW,SAAS,GAAGb,WAAW,GAAIe,WAAW,GAAG,GAAf,GAAsBd,WAApD;;EACA,MAAIF,YAAJ,EAAkB;EAChBc,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKA,SAAL,GAAiBZ,WAAjB,GAA+BD,WAAW,GAAG,CAAzD;EACD;;EACD,SAAO;EACLM,IAAAA,CAAC,EAAEP,YAAY,GAAGiB,QAAH,GAAcH,SADxB;EAELN,IAAAA,CAAC,EAAER,YAAY,GAAGc,SAAH,GAAeG;EAFzB,GAAP;EAID;EAED;;;;;;AAKA,WAAgBC,kBAAkB3B,OAA+BmB;EAC/D,MAAMrE,GAAG,GAAGqE,KAAK,CAACrE,GAAlB;EACA,MAAMD,GAAG,GAAGsE,KAAK,CAACtE,GAAlB;;EAEA,UAAQmD,KAAK,CAACJ,UAAd;EACE,SAAK,KAAL;EACE,aAAO,CACL,CAAC,CAAD,WAAY,CAAZ,SAAmB/C,GAAG,CAACoB,CAAvB,SAA8BpB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAc,GAAd,SAAuBrB,GAAG,CAACoB,CAA3B,SAAkCpB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;EAIF,SAAK,OAAL;EACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuB,CAAvB,SAA8BnB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyB,GAAzB,SAAkCnB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;EAIF,SAAK,MAAL;EACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuBnB,GAAG,CAACoB,CAA3B,SAAkC,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcpB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoC,GAApC,OAFK,CAAP;;EAIF,SAAK,OAAL;EACE,aAAO,CACL,CAAC,CAAD,YAAapB,GAAG,CAACmB,CAAjB,SAAwBnB,GAAG,CAACoB,CAA5B,SAAmCpB,GAAG,CAACqB,CAAvC,SADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoCpB,GAAG,CAACqB,CAAxC,OAFK,CAAP;;EAIF,SAAK,QAAL;EACE,UAAM0D,KAAK,GAAG,EAAd;EACA,UAAM3G,GAAG,GAAG+E,KAAK,CAACH,cAAlB;EACA,UAAM3E,GAAG,GAAG8E,KAAK,CAACF,cAAlB;EACA,UAAM+B,QAAQ,GAAG,CAAjB;EACA,UAAMC,KAAK,GAAG5G,GAAG,GAAGD,GAApB;;EACA,WAAK,IAAI+B,MAAM,GAAG/B,GAAb,EAAkB8G,IAAI,GAAG,CAA9B,EAAiC/E,MAAM,GAAG9B,GAA1C,EAA+C8B,MAAM,IAAI8E,KAAK,GAAGD,QAAlB,EAA4BE,IAAI,IAAI,CAAnF,EAAsF;EACpF,oCAAoBjG,QAAQ,CAAC6C,WAAT,CAAqB3B,MAArB,CAApB;EAAA,YAAQgB,CAAR,yBAAQA,CAAR;EAAA,YAAWC,CAAX,yBAAWA,CAAX;EAAA,YAAcC,CAAd,yBAAcA,CAAd;;EACA0D,QAAAA,KAAK,CAACI,IAAN,CAAW,CAAE,MAAMH,QAAN,GAAiBE,IAAnB,WAAgC/D,CAAhC,SAAqCC,CAArC,SAA0CC,CAA1C,OAAX;EACD;;EACD,aAAO0D,KAAP;;EACF,SAAK,KAAL;EACE,aAAO,CACL,CAAC,CAAD,EAAS,MAAT,CADK,EAEL,CAAC,MAAD,EAAS,MAAT,CAFK,EAGL,CAAC,MAAD,EAAS,MAAT,CAHK,EAIL,CAAC,EAAD,EAAS,MAAT,CAJK,EAKL,CAAC,MAAD,EAAS,MAAT,CALK,EAML,CAAC,MAAD,EAAS,MAAT,CANK,EAOL,CAAC,GAAD,EAAS,MAAT,CAPK,CAAP;;EASF,SAAK,YAAL;EACE,UAAMK,KAAK,GAAGnG,QAAQ,CAACyC,QAAT,CAAkB;EAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;EAAWC,QAAAA,CAAC,EAAE,CAAd;EAAiBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;EAAxB,OAAlB,CAAd;EACA,UAAM8F,OAAO,GAAGpG,QAAQ,CAACyC,QAAT,CAAkB;EAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;EAAWC,QAAAA,CAAC,EAAE,GAAd;EAAmBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;EAA1B,OAAlB,CAAhB;EACA,aAAO,CACL,CAAC,CAAD,WAAW6F,KAAK,CAAC/F,CAAjB,SAAsB+F,KAAK,CAAC9F,CAA5B,UAAkC8F,KAAK,CAACzD,CAAxC,QADK,EAEL,CAAC,GAAD,WAAa0D,OAAO,CAAChG,CAArB,SAA0BgG,OAAO,CAAC/F,CAAlC,UAAwC+F,OAAO,CAAC1D,CAAhD,QAFK,CAAP;;EAIF,SAAK,OAAL;EACA;EACE,UAAMzB,GAAG,GAAGjB,QAAQ,CAACyC,QAAT,CAAkB;EAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;EAAWC,QAAAA,CAAC,EAAEW,GAAG,CAACX,CAAlB;EAAqBC,QAAAA,CAAC,EAAE;EAAxB,OAAlB,CAAZ;EACA,aAAO,CACL,CAAC,CAAD,EAAI,MAAJ,CADK,EAEL,CAAC,GAAD,WAAaW,GAAG,CAACb,CAAjB,SAAsBa,GAAG,CAACZ,CAA1B,UAAgCY,GAAG,CAACyB,CAApC,QAFK,CAAP;EApDJ;EAyDD;EAED;;;;;AAIA,WAAgB2D,wBAAwBnC;EACtC,MAAMS,YAAY,GAAGT,KAAK,CAACC,eAAN,KAA0B,YAA/C;EACA,SAAO;EACLmC,IAAAA,EAAE,EAAE,IADC;EAELC,IAAAA,EAAE,EAAE5B,YAAY,GAAG,MAAH,GAAY,IAFvB;EAGL6B,IAAAA,EAAE,EAAE7B,YAAY,GAAG,IAAH,GAAU,MAHrB;EAIL8B,IAAAA,EAAE,EAAE;EAJC,GAAP;EAMD;;EC9ND;;;;;AAKC,WAAgBC,iBAAiBxC,OAA8BjE;EAC9D,WAAShB,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;EACE,WAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;EACD;;EACD,UAAO8E,KAAK,CAACJ,UAAb;EACE,SAAK,KAAL;EACE,aAAO7E,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;EACF,SAAK,YAAL;EACA,SAAK,OAAL;EACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;EACF,SAAK,KAAL;EACA,SAAK,OAAL;EACA,SAAK,MAAL;EACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;EACF,SAAK,OAAL;EACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,CAAX,CAAZ;;EACF,SAAK,QAAL;EAAe;EACb,UAAQ8D,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;EAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;EACA,aAAO/E,KAAK,CAACgB,KAAD,EAAQ8D,cAAR,EAAwBC,cAAxB,CAAZ;EAdJ;EAgBD;EAED;;;;;;AAKA,WAAgB2C,6BAA6BzC,OAA8B0C;EACzE;EACA,MAAI,CAAC,gBAAgBlG,IAAhB,CAAsBkG,CAAD,CAAItD,GAAzB,CAAL,EAAoC;EAClC,WAAO,CAAP;EACD;;EACD,MAAIuD,MAAJ;;EACA,MAAI3C,KAAK,CAACJ,UAAN,KAAqB,OAAzB,EAAkC;EAChC+C,IAAAA,MAAM,GAAG,CAAT;EACD,GAFD,MAEO,IAAI3C,KAAK,CAACJ,UAAN,KAAqB,QAAzB,EAAmC;EACxC+C,IAAAA,MAAM,GAAG,CAAT;EACD,GAFM,MAEA;EACLA,IAAAA,MAAM,GAAG,CAAT;EACD;;EAED,MAAIC,MAAM,GAAIF,CAAC,CAACE,MAAhB;EACA,MAAIC,WAAW,GAAGD,MAAM,CAAC7G,KAAP,CAAaH,QAAb,EAAlB;;EACA,MAAIgH,MAAM,CAACE,cAAP,KAA0BtF,SAA9B,EAAyC;EACvCqF,IAAAA,WAAW,GAAGA,WAAW,CAACE,SAAZ,CAAsB,CAAtB,EAAyBH,MAAM,CAACE,cAAhC,IACZJ,CAAC,CAACtD,GAAF,CAAMxD,QAAN,EADY,GAEZiH,WAAW,CAACE,SAAZ,CAAsBH,MAAM,CAACI,YAA7B,CAFF;EAGD,GAJD,MAIO;EACLH,IAAAA,WAAW,GAAGA,WAAW,CAACI,MAAZ,GAAqB,CAArB,GAAyBN,MAAzB,GAAkCE,WAAlC,GAAgDA,WAAW,GAAGH,CAAC,CAACtD,GAAF,CAAMxD,QAAN,EAA5E;EACD;;EACD,MAAMsH,QAAQ,GAAG,CAACL,WAAlB;EACA,SAAOL,gBAAgB,CAACxC,KAAD,EAAQkD,QAAR,CAAvB;EACD;EAED;;;;;;AAKC,WAAgBC,4BAA4BnD,OAA8B0C;EACzE;EACA,MAAM1E,CAAC,GAAG,8BAAV;EACA,MAAM6E,WAAW,GAAWH,CAAC,CAACU,aAAF,CAAgBC,OAAhB,CAAwB,MAAxB,CAA5B;;EACA,MAAI,CAACrF,CAAC,CAACxB,IAAF,CAAOqG,WAAP,CAAL,EAA0B;EACxB,WAAO,CAAP;EACD;;EACD,MAAMK,QAAQ,GAAG,CAACL,WAAlB;EACA,SAAOL,gBAAgB,CAACxC,KAAD,EAAQkD,QAAR,CAAvB;EACD;;EC7ED,IAAMI,GAAG,GAAG1I,IAAI,CAAC2I,EAAL,GAAU,CAAtB;EAGA;;EACA,IAAMxF,GAAG,GAAG,SAANA,GAAM,CAAC1B,CAAD,EAAYmH,CAAZ;EAAA,SAA0B,CAACnH,CAAC,GAAGmH,CAAJ,GAAQA,CAAT,IAAcA,CAAxC;EAAA,CAAZ;;;EAGA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAACzC,CAAD,EAAYC,CAAZ;EAAA,SAA0BrG,IAAI,CAAC8I,IAAL,CAAU1C,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAA1B;EAAA,CAAb;EAEA;;;;;;EAIA,SAAS0C,cAAT,CAAwB3D,KAAxB;EACE,SAAOA,KAAK,CAACI,KAAN,GAAc,CAAd,GAAkBJ,KAAK,CAACQ,OAAxB,GAAkCR,KAAK,CAACO,YAAxC,GAAuDP,KAAK,CAACM,WAApE;EACD;EAED;;;;;;;;AAMA,WAAgBsD,mBAAmB5D,OAA4BgB,GAAWC;EACxE,4BAAmB4C,kBAAkB,CAAC7D,KAAD,CAArC;EAAA,MAAQa,EAAR,uBAAQA,EAAR;EAAA,MAAYC,EAAZ,uBAAYA,EAAZ;;EACA,MAAM9C,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;EACA,SAAOqD,IAAI,CAAC5C,EAAE,GAAGG,CAAN,EAASF,EAAE,GAAGG,CAAd,CAAJ,GAAuBjD,CAA9B;EACD;EAED;;;;;AAIA,WAAgB6F,mBAAmB7D;EACjC,MAAMhC,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;EACA,SAAO;EACLA,IAAAA,KAAK,EAAEJ,KAAK,CAACI,KADR;EAELW,IAAAA,MAAM,EAAE/C,CAAC,GAAGgC,KAAK,CAACM,WAFb;EAGLO,IAAAA,EAAE,EAAE7C,CAHC;EAIL8C,IAAAA,EAAE,EAAE9C;EAJC,GAAP;EAMD;EAED;;;;;;AAKA,WAAgB8F,oBAAoB9D,OAA4B+D,OAAeC;EAC7E,MAAMC,UAAU,GAAGjE,KAAK,CAACiE,UAAzB;EACA,MAAMC,cAAc,GAAGlE,KAAK,CAACkE,cAA7B;;EAEA,MAAIF,MAAM,IAAIE,cAAc,KAAK,WAAjC,EACEH,KAAK,GAAGE,UAAU,GAAGF,KAArB,CADF;EAAA,OAGK,IAAIG,cAAc,KAAK,WAAvB,EACHH,KAAK,GAAI,MAAME,UAAP,GAAqBF,KAA7B,CADG;EAAA,OAGA,IAAIC,MAAM,IAAIE,cAAc,KAAK,eAAjC,EACHH,KAAK,GAAIE,UAAU,GAAG,GAAd,GAAqBF,KAA7B,CADG;EAAA,OAGA,IAAIG,cAAc,KAAK,eAAvB,EACHH,KAAK,GAAGE,UAAU,GAAGF,KAArB;EACF,SAAOhG,GAAG,CAACgG,KAAD,EAAQ,GAAR,CAAV;EACD;EAED;;;;;;AAKA,WAAgBI,uBAAuBnE,OAA4BmB;EACjE,MAAMrE,GAAG,GAAGqE,KAAK,CAACrE,GAAlB;;EACA,6BAAmB+G,kBAAkB,CAAC7D,KAAD,CAArC;EAAA,MAAQa,EAAR,wBAAQA,EAAR;EAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;EACA,MAAMH,WAAW,GAAGgD,cAAc,CAAC3D,KAAD,CAAlC;EACA,MAAMoE,WAAW,GAAG,CAAC,MAAMN,mBAAmB,CAAC9D,KAAD,EAAQlD,GAAG,CAACZ,CAAZ,EAAe,IAAf,CAA1B,KAAmDoH,GAAG,GAAG,GAAzD,CAApB;EACA,MAAMe,UAAU,GAAIvH,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgBwE,WAAnC;EACA,MAAM2D,SAAS,GAAGtE,KAAK,CAACkE,cAAN,KAAyB,WAAzB,GAAuC,CAAC,CAAxC,GAA4C,CAA9D;EACA,SAAO;EACLlD,IAAAA,CAAC,EAAEH,EAAE,GAAGwD,UAAU,GAAGzJ,IAAI,CAAC2J,GAAL,CAASH,WAAT,CAAb,GAAqCE,SADxC;EAELrD,IAAAA,CAAC,EAAEH,EAAE,GAAGuD,UAAU,GAAGzJ,IAAI,CAAC4J,GAAL,CAASJ,WAAT,CAAb,GAAqCE;EAFxC,GAAP;EAID;EAED;;;;;;;AAMA,WAAgBG,uBAAuBzE,OAA4BgB,GAAWC;EAC5E,6BAAmB4C,kBAAkB,CAAC7D,KAAD,CAArC;EAAA,MAAQa,EAAR,wBAAQA,EAAR;EAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;EACA,MAAMH,WAAW,GAAGgD,cAAc,CAAC3D,KAAD,CAAlC;EACAgB,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;EACAC,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;;EAEA,MAAM5C,GAAG,GAAGyF,mBAAmB,CAAC9D,KAAD,EAAQpF,IAAI,CAAC8J,KAAL,CAAW,CAACzD,CAAZ,EAAe,CAACD,CAAhB,KAAsB,MAAMsC,GAA5B,CAAR,CAA/B;EAEA;;EACA,MAAMe,UAAU,GAAGzJ,IAAI,CAACK,GAAL,CAASwI,IAAI,CAACzC,CAAD,EAAIC,CAAJ,CAAb,EAAqBN,WAArB,CAAnB;EACA,SAAO;EACLzE,IAAAA,CAAC,EAAEtB,IAAI,CAACC,KAAL,CAAWwD,GAAX,CADE;EAELlC,IAAAA,CAAC,EAAEvB,IAAI,CAACC,KAAL,CAAY,MAAM8F,WAAP,GAAsB0D,UAAjC;EAFE,GAAP;EAID;;ECvGD;;;;AAIA,WAAgBM,aAAa3E;;;EAC3B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;EAGD;EAED;;;;;AAIA,WAAgB0E,iBAAiB5E;EAC/B,MAAQI,KAAR,GAAoDJ,KAApD,CAAQI,KAAR;EAAA,MAAeyE,SAAf,GAAoD7E,KAApD,CAAe6E,SAAf;EAAA,MAA0BrE,OAA1B,GAAoDR,KAApD,CAA0BQ,OAA1B;EAAA,MAAmCD,YAAnC,GAAoDP,KAApD,CAAmCO,YAAnC;EACA,SAAO;EACLH,IAAAA,KAAK,EAAEA,KADF;EAELQ,IAAAA,MAAM,EAAEiE,SAAF,WAAEA,SAAF,GAAezE,KAFhB;EAGLW,IAAAA,MAAM,EAAEP,OAAO,GAAGD;EAHb,GAAP;EAKD;EAED;;;;;;;AAMA,WAAgBuE,qBAAqB9E,OAA4BgB,GAAWC;EAC1E,0BAAkC2D,gBAAgB,CAAC5E,KAAD,CAAlD;EAAA,MAAQI,KAAR,qBAAQA,KAAR;EAAA,MAAeQ,MAAf,qBAAeA,MAAf;EAAA,MAAuBG,MAAvB,qBAAuBA,MAAvB;;EACA,MAAML,WAAW,GAAGK,MAApB;EACA,MAAMgE,YAAY,GAAG3E,KAAK,GAAGW,MAAM,GAAG,CAAtC;EACA,MAAMiE,YAAY,GAAGpE,MAAM,GAAGG,MAAM,GAAG,CAAvC;EACA,MAAMkE,QAAQ,GAAI,CAACjE,CAAC,GAAGN,WAAL,IAAoBqE,YAArB,GAAqC,GAAtD;EACA,MAAMG,QAAQ,GAAI,CAACjE,CAAC,GAAGP,WAAL,IAAoBsE,YAArB,GAAqC,GAAtD;EACA,SAAO;EACL7I,IAAAA,CAAC,EAAEvB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASgK,QAAT,EAAmB,GAAnB,CAAZ,CADE;EAEL7I,IAAAA,CAAC,EAAExB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAAS,MAAMiK,QAAf,EAAyB,GAAzB,CAAZ;EAFE,GAAP;EAID;EAED;;;;;;AAKA,WAAgBC,qBAAqBnF,OAA4BmB;EAC/D,2BAAkCyD,gBAAgB,CAAC5E,KAAD,CAAlD;EAAA,MAAQI,KAAR,sBAAQA,KAAR;EAAA,MAAeQ,MAAf,sBAAeA,MAAf;EAAA,MAAuBG,MAAvB,sBAAuBA,MAAvB;;EACA,MAAMjE,GAAG,GAAGqE,KAAK,CAACrE,GAAlB;EACA,MAAM4D,WAAW,GAAGK,MAApB;EACA,MAAMgE,YAAY,GAAG3E,KAAK,GAAGW,MAAM,GAAG,CAAtC;EACA,MAAMiE,YAAY,GAAGpE,MAAM,GAAGG,MAAM,GAAG,CAAvC;EACA,SAAO;EACLC,IAAAA,CAAC,EAAEN,WAAW,GAAI5D,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB4I,YAD5B;EAEL9D,IAAAA,CAAC,EAAEP,WAAW,IAAIsE,YAAY,GAAKlI,GAAG,CAACV,CAAJ,GAAQ,GAAT,GAAgB4I,YAApC;EAFT,GAAP;EAID;EAED;;;;;;AAKA,WAAgBI,gBAAgBpF,OAA4BmB;EAC1D,MAAM9C,GAAG,GAAG8C,KAAK,CAAC9C,GAAlB;EACA,SAAO;EAEL,GACE,CAAC,CAAD,EAAI,MAAJ,CADF,EAEE,CAAC,GAAD,WAAaA,GAAb,gBAFF,CAFK;EAOL,GACE,CAAC,CAAD,EAAI,eAAJ,CADF,EAEE,CAAC,GAAD,EAAM,MAAN,CAFF,CAPK,CAAP;EAYD;;ECpFD;EACA;EACA;EACA,IAAIgH,aAAJ;EAEA;;;;;;;;;;;;;AAYA,WAAgBC,cAAcC;EAC5B,MAAI,CAACF,aAAL,EACEA,aAAa,GAAGG,QAAQ,CAACC,oBAAT,CAA8B,MAA9B,CAAhB;;EAEF,MAAMC,EAAE,GAAGC,MAAM,CAACC,SAAP,CAAiBC,SAA5B;EACA,MAAMC,QAAQ,GAAG,iCAAiCtJ,IAAjC,CAAsCkJ,EAAtC,CAAjB;EACA,MAAMK,KAAK,GAAG,oBAAoBvJ,IAApB,CAAyBkJ,EAAzB,CAAd;EACA,MAAMM,QAAQ,GAAGL,MAAM,CAACK,QAAxB;EACA,SAAQ,CAACF,QAAQ,IAAIC,KAAb,KAAwBV,aAAa,CAACpC,MAAd,GAAuB,CAAhD,GAAyD+C,QAAQ,CAACC,QAAlE,UAA+ED,QAAQ,CAACE,IAAxF,GAA+FF,QAAQ,CAACG,QAAxG,GAAmHH,QAAQ,CAACI,MAA5H,GAAqIb,GAArI,GAA6IA,GAApJ;EACD;EAED;;;;;;;;;AAQA,WAAgBc,cAAcxF,IAAYC,IAAYC,QAAgBuF,YAAoBC;EACxF,MAAMC,YAAY,GAAGD,QAAQ,GAAGD,UAAX,IAAyB,GAAzB,GAA+B,CAA/B,GAAmC,CAAxD;EACAA,EAAAA,UAAU,IAAI1L,IAAI,CAAC2I,EAAL,GAAU,GAAxB;EACAgD,EAAAA,QAAQ,IAAI3L,IAAI,CAAC2I,EAAL,GAAU,GAAtB;EACA,MAAMnB,EAAE,GAAGvB,EAAE,GAAGE,MAAM,GAAGnG,IAAI,CAAC2J,GAAL,CAASgC,QAAT,CAAzB;EACA,MAAMlE,EAAE,GAAGvB,EAAE,GAAGC,MAAM,GAAGnG,IAAI,CAAC4J,GAAL,CAAS+B,QAAT,CAAzB;EACA,MAAMjE,EAAE,GAAGzB,EAAE,GAAGE,MAAM,GAAGnG,IAAI,CAAC2J,GAAL,CAAS+B,UAAT,CAAzB;EACA,MAAM/D,EAAE,GAAGzB,EAAE,GAAGC,MAAM,GAAGnG,IAAI,CAAC4J,GAAL,CAAS8B,UAAT,CAAzB;EACA,gBAAYlE,EAAZ,SAAkBC,EAAlB,WAA0BtB,MAA1B,SAAoCA,MAApC,WAAgDyF,YAAhD,WAAkElE,EAAlE,SAAwEC,EAAxE;EACD;EAED;;;;;;;;AAOA,WAAgBkE,iBAAiBzG,OAAuCgB,GAAWC,GAAWyF;EAC5F,OAAK,IAAIhJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgJ,eAAe,CAACzD,MAApC,EAA4CvF,CAAC,EAA7C,EAAiD;EAC/C,QAAMiJ,EAAE,GAAGD,eAAe,CAAChJ,CAAD,CAAf,CAAmBsD,CAAnB,GAAuBA,CAAlC;EACA,QAAM4F,EAAE,GAAGF,eAAe,CAAChJ,CAAD,CAAf,CAAmBuD,CAAnB,GAAuBA,CAAlC;EACA,QAAMwC,IAAI,GAAG7I,IAAI,CAAC8I,IAAL,CAAUiD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAb;;EACA,QAAInD,IAAI,GAAGzD,KAAK,CAACO,YAAjB,EAA+B;EAC7B,aAAO7C,CAAP;EACD;EACF;;EACD,SAAO,IAAP;EACD;;WChEemJ,gBAAgB7G;EAC9B,SAAO;EACL8G,IAAAA,SAAS,EAAE,YADN;EAELC,IAAAA,MAAM,EAAM/G,KAAK,CAACM,WAAZ,iBAAqCN,KAAK,CAACgH;EAF5C,GAAP;EAID;AAKD,WAAgBC,YAAYC,MAAuB5C,WAAmB1C;EACpE,SAAWsF,IAAX,kBAA8B5C,SAA9B,UAA8C1C,KAAK,CAACuF,GAAN,CAAU;EAAA,QAAEC,CAAF;EAAA,QAAKC,GAAL;EAAA,WAAkBA,GAAlB,SAA2BD,CAA3B;EAAA,GAAV,EAA4CE,IAA5C,CAAiD,GAAjD,CAA9C;EACD;AAED,WAAgBC,SAASxL;EACvB,MAAI,OAAOA,KAAP,KAAkB,QAAtB,EACE,OAAOA,KAAP;EACF,SAAWA,KAAX;EACD;;MCOYyL,4BAA4B,GAA0B;EACjEpH,EAAAA,KAAK,EAAE,GAD0D;EAEjEQ,EAAAA,MAAM,EAAE,GAFyD;EAGjEO,EAAAA,KAAK,EAAE,MAH0D;EAIjEsG,EAAAA,MAAM,EAAE,EAJyD;EAKjEjH,EAAAA,OAAO,EAAE,CALwD;EAMjEP,EAAAA,eAAe,EAAE,UANgD;EAOjE+G,EAAAA,WAAW,EAAE,MAPoD;EAQjE1G,EAAAA,WAAW,EAAE,CARoD;EASjEC,EAAAA,YAAY,EAAE,CATmD;EAUjEmH,EAAAA,kBAAkB,EAAE,IAV6C;EAWjEC,EAAAA,SAAS,EAAE,IAXsD;EAYjEC,EAAAA,WAAW,EAAE;EAAC5G,IAAAA,CAAC,EAAE,CAAJ;EAAOC,IAAAA,CAAC,EAAE;EAAV,GAZoD;EAajE4G,EAAAA,cAAc,EAAE,IAbiD;EAcjE5D,EAAAA,UAAU,EAAE,CAdqD;EAejEC,EAAAA,cAAc,EAAE,eAfiD;EAgBjE7D,EAAAA,UAAU,EAAE,IAhBqD;EAiBjEH,EAAAA,YAAY,EAAE,EAjBmD;EAkBjE2E,EAAAA,SAAS,EAAE;EAlBsD,CAA5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/slider.d.ts b/dist/slider.d.ts index a0a0d8c..32b1edc 100644 --- a/dist/slider.d.ts +++ b/dist/slider.d.ts @@ -61,24 +61,6 @@ export declare function getCurrentSliderValue(props: Partial, col * @param y - global input y position */ export declare function getSliderValueFromInput(props: Partial, x: number, y: number): number; -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ -export declare function clampSliderValue(type: Partial, value: number): number; -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ -export declare function getSliderValueFromInputField(props: Partial, e: KeyboardEvent): number; -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ -export declare function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent): number; /** * @desc Get the current handle position for a given color * @param props - slider props diff --git a/src/color.ts b/src/color.ts index 93ab476..af4f1da 100644 --- a/src/color.ts +++ b/src/color.ts @@ -450,14 +450,14 @@ export class IroColor { return { r: round(r), g: round(g), - b: round(b), + b: round(b) }; } public set rgb(value: RgbColor) { this.hsv = { ...IroColor.rgbToHsv(value), - a: (value.a === undefined) ? 1 : value.a + a: (value.a === undefined) ? this.alpha : value.a }; } @@ -481,7 +481,7 @@ export class IroColor { public set hsl(value: HslColor) { this.hsv = { ...IroColor.hslToHsv(value), - a: (value.a === undefined) ? 1 : value.a + a: (value.a === undefined) ? this.alpha : value.a }; } diff --git a/src/index.ts b/src/index.ts index 1140758..1112134 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ export * from './color'; export * from './slider'; +export * from './input'; export * from './wheel'; export * from './box'; export * from './util'; diff --git a/src/input.ts b/src/input.ts new file mode 100644 index 0000000..8143b4a --- /dev/null +++ b/src/input.ts @@ -0,0 +1,85 @@ +import { IroColor } from './color'; +import { SliderType } from './slider'; +import { IroColorPickerOptions } from './colorPickerOptions'; + +export interface InputOptions extends IroColorPickerOptions { + color: IroColor; + sliderType: SliderType; + minTemperature: number; + maxTemperature: number; +} + +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + export function clampSliderValue(props: Partial, value: number) { + function clamp(num: number, min: number, max: number) { + return Math.min(Math.max(num, min), max); + } + switch(props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + case 'saturation': + case 'value': + return clamp(value, 0, 100); + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + case 'alpha': + return clamp(value, 0, 1); + case 'kelvin': // TODO + const { minTemperature, maxTemperature } = props; + return clamp(value, minTemperature, maxTemperature); + } +} + +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ +export function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) { + // regex for digit or dot (.) + if (!/^([0-9]|\.)$/i.test((e).key)) { + return 0; + } + let maxlen: number; + if (props.sliderType === 'alpha') { + maxlen = 4; + } else if (props.sliderType === 'kelvin') { + maxlen = 5; + } else { + maxlen = 3; + } + + let target = (e.target as HTMLInputElement); + let valueString = target.value.toString(); + if (target.selectionStart !== undefined) { + valueString = valueString.substring(0, target.selectionStart) + + e.key.toString() + + valueString.substring(target.selectionEnd); + } else { + valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + } + const valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) { + // allow only whole or decimal numbers + const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + const valueString: string = e.clipboardData.getData('text'); + if (!r.test(valueString)) { + return 0; + } + const valueNum = +valueString; + return clampSliderValue(props, valueNum); +} \ No newline at end of file diff --git a/src/slider.ts b/src/slider.ts index 90b35dc..566a6e5 100644 --- a/src/slider.ts +++ b/src/slider.ts @@ -131,80 +131,6 @@ export function getSliderValueFromInput(props: Partial, x: number } } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - export function clampSliderValue(type: Partial, value: number) { - function clamp(num: number, min: number, max: number) { - return Math.min(Math.max(num, min), max); - } - switch(type) { - case 'hue': - return clamp(value, 0, 360); - case 'saturation': - case 'value': - return clamp(value, 0, 100); - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - case 'alpha': - return clamp(value, 0, 1); - case 'kelvin': // TODO - return 0; - } -} - -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ -export function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test((e).key)) { - return 0; - } - let maxlen: number; - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 10; - } else { - maxlen = 3; - } - - let target = (e.target as HTMLInputElement); - let valueString = target.value.toString(); - if (target.selectionStart !== undefined) { - valueString = valueString.substring(0, target.selectionStart) + - e.key.toString() + - valueString.substring(target.selectionEnd); - } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); - } - const valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} - -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) { - // allow only whole or decimal numbers - const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - const valueString: string = e.clipboardData.getData('text'); - if (!r.test(valueString)) { - return 0; - } - const valueNum = +valueString; - return clampSliderValue(props.sliderType, valueNum); -} - /** * @desc Get the current handle position for a given color * @param props - slider props From 9edf18a4ea47b5acbe431d78eb7e32ad5e57b478 Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Thu, 14 Apr 2022 12:07:38 +0200 Subject: [PATCH 3/9] add sliderLength property to each slider. WIP --- dist/iro-core.es.js | 16 +++++++++++++--- dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 16 +++++++++++++--- dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 16 +++++++++++++--- dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 16 +++++++++++++--- dist/iro-core.umd.js.map | 2 +- dist/slider.d.ts | 3 +++ src/slider.ts | 16 +++++++++++++--- 10 files changed, 72 insertions(+), 19 deletions(-) diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index ddc5dc8..662c74a 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -715,6 +715,16 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var length; + + if (props.showInput) { + length = width - 55; + } else { + var _props$sliderLength; + + length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; + } + var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -732,12 +742,12 @@ function getSliderDimensions(props) { } else { return { handleStart: sliderSize / 2, - handleRange: width - sliderSize, + handleRange: length - sliderSize, radius: sliderSize / 2, x: 0, y: 0, - width: ishorizontal ? sliderSize : width, - height: ishorizontal ? width : sliderSize + width: ishorizontal ? sliderSize : length, + height: ishorizontal ? length : sliderSize }; } } diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index a2def15..1bba458 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index 9242728..8cdcab0 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -715,6 +715,16 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var length; + + if (props.showInput) { + length = width - 55; + } else { + var _props$sliderLength; + + length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; + } + var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -732,12 +742,12 @@ function getSliderDimensions(props) { } else { return { handleStart: sliderSize / 2, - handleRange: width - sliderSize, + handleRange: length - sliderSize, radius: sliderSize / 2, x: 0, y: 0, - width: ishorizontal ? sliderSize : width, - height: ishorizontal ? width : sliderSize + width: ishorizontal ? sliderSize : length, + height: ishorizontal ? length : sliderSize }; } } diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index d074553..7de50ff 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA,IAAMA,WAAW,GAAG,eAApB;;AAEA,IAAMC,UAAU,GAAG,sBAAnB;;AAEA,IAAMC,QAAQ,GAAG,QAAQD,UAAR,GAAqB,OAArB,GAA+BD,WAA/B,GAA6C,GAA9D;AAGA;;AACA,IAAMG,kBAAkB,GAAG,gBAAgBD,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,WAA1G;AACA,IAAME,kBAAkB,GAAG,gBAAgBF,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,YAA/E,GAA8FA,QAA9F,GAAyG,WAApI;;AAGA,IAAMG,oBAAoB,GAAG,IAAIC,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMI,qBAAqB,GAAG,IAAID,MAAJ,CAAW,SAASF,kBAApB,CAA9B;AACA,IAAMI,oBAAoB,GAAG,IAAIF,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMM,qBAAqB,GAAG,IAAIH,MAAJ,CAAW,SAASF,kBAApB,CAA9B;;AAGA,IAAMM,SAAS,GAAG,aAAlB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,WAAW,GAAG,IAAIP,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMG,WAAW,GAAG,IAAIR,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIT,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIV,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;;AAGA,IAAMK,UAAU,GAAG,IAAnB;AACA,IAAMC,UAAU,GAAG,KAAnB;;AAGA,IAAQC,GAAR,GAA8BC,IAA9B,CAAQD,GAAR;AAAA,IAAaE,KAAb,GAA8BD,IAA9B,CAAaC,KAAb;AAAA,IAAoBC,KAApB,GAA8BF,IAA9B,CAAoBE,KAApB;AAEA;;;;;;;AAMA,SAASC,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,SAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;AAED;;;;;;;AAKA,SAASC,SAAT,CAAmBC,GAAnB,EAAgCF,GAAhC;AACE,MAAMG,YAAY,GAAGD,GAAG,CAACE,OAAJ,CAAY,GAAZ,IAAmB,CAAC,CAAzC;AACA,MAAMN,GAAG,GAAGO,UAAU,CAACH,GAAD,CAAtB;AACA,SAAOC,YAAY,GAAIH,GAAG,GAAG,GAAP,GAAcF,GAAjB,GAAuBA,GAA1C;AACD;AAED;;;;;;AAIA,SAASQ,WAAT,CAAqBJ,GAArB;AACE,SAAOK,QAAQ,CAACL,GAAD,EAAM,EAAN,CAAf;AACD;AAED;;;;;;AAIA,SAASM,QAAT,CAAkBC,IAAlB;AACE,SAAOA,IAAG,CAACC,QAAJ,CAAa,EAAb,EAAiBC,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAP;AACD;;IAqCYC,QAAb;AAQE;;;;AAIA,oBAAYC,KAAZ,EAAmCC,QAAnC;AACE;AACA,SAAKC,CAAL,GAAS;AAACC,MAAAA,CAAC,EAAE,CAAJ;AAAOC,MAAAA,CAAC,EAAE,CAAV;AAAaC,MAAAA,CAAC,EAAE,CAAhB;AAAmBC,MAAAA,CAAC,EAAE;AAAtB,KAAT;AACA,QAAIN,KAAJ,EAAW,KAAKO,GAAL,CAASP,KAAT;;AAEX,SAAKC,QAAL,GAAgBA,QAAhB;AACA,SAAKO,YAAL,gBAAyB,KAAKN,CAA9B;AACD;AAED;;;;;;AArBF;;AAAA,SAyBSK,GAzBT,GAyBS,aAAIP,KAAJ;AACL,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B,UAAI,+BAA+BS,IAA/B,CAAoCT,KAApC,CAAJ,EAA0D;AACxD,aAAKU,SAAL,GAAiBV,KAAjB;AACD,OAFD,MAGK,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKW,SAAL,GAAiBX,KAAjB;AACD,OAFI,MAGA,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKY,SAAL,GAAiBZ,KAAjB;AACD;AACF,KAVD,MAWK,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAClC,UAAIA,KAAK,YAAYD,QAArB,EAA+B;AAC7B,aAAKc,IAAL,GAAYb,KAAK,CAACa,IAAlB;AACD,OAFD,MAGK,IAAI,OAAOb,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKc,GAAL,GAAWd,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKe,GAAL,GAAWf,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKgB,GAAL,GAAWhB,KAAX;AACD,OAFI,MAGA,IAAI,YAAYA,KAAhB,EAAuB;AAC1B,aAAKiB,MAAL,GAAcjB,KAAK,CAACiB,MAApB;AACD;AACF,KAhBI,MAiBA;AACH,YAAM,IAAIC,KAAJ,CAAU,qBAAV,CAAN;AACD;AACF;AAED;;;;;;AA3DF;;AAAA,SAiESC,UAjET,GAiES,oBAAWC,MAAX,EAA2BC,OAA3B,EAA4CrB,KAA5C;;;AACL,SAAKoB,MAAL,iBAAmB,KAAKA,MAAL,CAAnB,6BAAkCC,OAAlC,IAA4CrB,KAA5C;AACD;AAED;;;AArEF;;AAAA,SAwESsB,KAxET,GAwES;AACL,SAAKT,IAAL,GAAY,KAAKL,YAAjB;AACD;AAED;;;AA5EF;;AAAA,SA+ESe,KA/ET,GA+ES;AACL,WAAO,IAAIxB,QAAJ,CAAa,IAAb,CAAP;AACD;AAED;;;AAnFF;;AAAA,SAsFSyB,MAtFT,GAsFS;AACL,SAAKvB,QAAL,GAAgBwB,SAAhB;AACD;AAED;;;;AA1FF;;AAAA,WA8FgBC,QA9FhB,GA8FS,kBAAgBX,GAAhB;AACL,QAAMZ,CAAC,GAAGY,GAAG,CAACZ,CAAJ,GAAQ,EAAlB;AACA,QAAMC,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMsB,CAAC,GAAG5C,KAAK,CAACoB,CAAD,CAAf;AACA,QAAMyB,CAAC,GAAGzB,CAAC,GAAGwB,CAAd;AACA,QAAME,CAAC,GAAGxB,CAAC,IAAI,IAAID,CAAR,CAAX;AACA,QAAM0B,CAAC,GAAGzB,CAAC,IAAI,IAAIuB,CAAC,GAAGxB,CAAZ,CAAX;AACA,QAAM2B,CAAC,GAAG1B,CAAC,IAAI,IAAI,CAAC,IAAIuB,CAAL,IAAUxB,CAAlB,CAAX;AACA,QAAM4B,GAAG,GAAGL,CAAC,GAAG,CAAhB;AACA,QAAMM,CAAC,GAAG,CAAC5B,CAAD,EAAIyB,CAAJ,EAAOD,CAAP,EAAUA,CAAV,EAAaE,CAAb,EAAgB1B,CAAhB,EAAmB2B,GAAnB,CAAV;AACA,QAAME,CAAC,GAAG,CAACH,CAAD,EAAI1B,CAAJ,EAAOA,CAAP,EAAUyB,CAAV,EAAaD,CAAb,EAAgBA,CAAhB,EAAmBG,GAAnB,CAAV;AACA,QAAMG,CAAC,GAAG,CAACN,CAAD,EAAIA,CAAJ,EAAOE,CAAP,EAAU1B,CAAV,EAAaA,CAAb,EAAgByB,CAAhB,EAAmBE,GAAnB,CAAV;AACA,WAAO;AACLC,MAAAA,CAAC,EAAEjD,KAAK,CAACiD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CADH;AAELC,MAAAA,CAAC,EAAElD,KAAK,CAACkD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CAFH;AAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb;AAHH,KAAP;AAKD;AAED;;;;AAlHF;;AAAA,WAsHgBC,QAtHhB,GAsHS,kBAAgBtB,GAAhB;AACL,QAAMmB,CAAC,GAAGnB,GAAG,CAACmB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGpB,GAAG,CAACoB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGrB,GAAG,CAACqB,CAAJ,GAAQ,GAAlB;AACA,QAAMhD,GAAG,GAAGN,IAAI,CAACM,GAAL,CAAS8C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAMjD,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS+C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAME,KAAK,GAAGlD,GAAG,GAAGD,GAApB;AACA,QAAIoD,GAAG,GAAG,CAAV;AACA,QAAItC,KAAK,GAAGb,GAAZ;AACA,QAAIoD,UAAU,GAAGpD,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBkD,KAAK,GAAGlD,GAAzC;;AACA,YAAQA,GAAR;AACE,WAAKD,GAAL;AACEoD,QAAAA,GAAG,GAAG,CAAN,CADF;;AAEE;;AACF,WAAKL,CAAL;AACEK,QAAAA,GAAG,GAAG,CAACJ,CAAC,GAAGC,CAAL,IAAUE,KAAV,IAAmBH,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAY,CAA/B,CAAN;AACA;;AACF,WAAKD,CAAL;AACEI,QAAAA,GAAG,GAAG,CAACH,CAAC,GAAGF,CAAL,IAAUI,KAAV,GAAkB,CAAxB;AACA;;AACF,WAAKF,CAAL;AACEG,QAAAA,GAAG,GAAG,CAACL,CAAC,GAAGC,CAAL,IAAUG,KAAV,GAAkB,CAAxB;AACA;AAZJ;;AAcA,WAAO;AACLlC,MAAAA,CAAC,EAAGmC,GAAG,GAAG,EAAP,GAAa,GADX;AAELlC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAACgB,KAAK,GAAG,GAAT,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AArJF;;AAAA,WAyJgBwC,QAzJhB,GAyJS,kBAAgBzB,GAAhB;AACL,QAAMX,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMoC,CAAC,GAAG,CAAC,IAAIrC,CAAL,IAAUC,CAApB;AACA,QAAMqC,OAAO,GAAGD,CAAC,IAAI,CAAL,GAASA,CAAT,GAAc,IAAIA,CAAlC;;AAEA,QAAMF,UAAU,GAAGG,OAAO,GAAG,IAAV,GAAiB,CAAjB,GAAsBtC,CAAC,GAAGC,CAAL,GAAUqC,OAAlD;AACA,WAAO;AACLvC,MAAAA,CAAC,EAAEY,GAAG,CAACZ,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLE,MAAAA,CAAC,EAAEzD,KAAK,CAACyD,CAAC,GAAG,EAAL,EAAS,CAAT,EAAY,GAAZ;AAHH,KAAP;AAKD;AAED;;;;AAvKF;;AAAA,WA2KgBE,QA3KhB,GA2KS,kBAAgB3B,GAAhB;AACL,QAAMyB,CAAC,GAAGzB,GAAG,CAACyB,CAAJ,GAAQ,CAAlB;AACA,QAAMrC,CAAC,GAAIY,GAAG,CAACZ,CAAJ,IAAUqC,CAAC,IAAI,GAAN,GAAaA,CAAb,GAAiB,MAAMA,CAAhC,CAAD,GAAuC,GAAjD;;AAEA,QAAMF,UAAU,GAAIE,CAAC,GAAGrC,CAAJ,GAAQ,IAAT,GAAiB,CAAjB,GAAsB,IAAIA,CAAL,IAAWqC,CAAC,GAAGrC,CAAf,CAAxC;AACA,WAAO;AACLD,MAAAA,CAAC,EAAEa,GAAG,CAACb,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAAC,CAACyD,CAAC,GAAGrC,CAAL,IAAU,CAAX,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AAvLF;;AAAA,WA2LgBwC,WA3LhB,GA2LS,qBAAmB3B,MAAnB;AACL,QAAM4B,IAAI,GAAG5B,MAAM,GAAG,GAAtB;AACA,QAAIgB,CAAJ,EAAOC,CAAP,EAAUC,CAAV;;AACA,QAAIU,IAAI,GAAG,EAAX,EAAe;AACbZ,MAAAA,CAAC,GAAG,GAAJ;AACAC,MAAAA,CAAC,GAAG,CAAC,kBAAD,GAAsB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,CAAhC,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACsD,CAAD,CAAvF;AACAC,MAAAA,CAAC,GAAGU,IAAI,GAAG,EAAP,GAAY,CAAZ,GAAgB,CAAC,kBAAD,GAAsB,sBAAsBV,CAAC,GAAGU,IAAI,GAAC,EAA/B,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACuD,CAAD,CAAvG;AACD,KAJD,MAIO;AACLF,MAAAA,CAAC,GAAG,qBAAqB,qBAAqBA,CAAC,GAAGY,IAAI,GAAC,EAA9B,CAArB,GAAyD,oBAAoBjE,GAAG,CAACqD,CAAD,CAApF;AACAC,MAAAA,CAAC,GAAG,oBAAoB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,EAAhC,CAApB,GAA0D,mBAAmBjE,GAAG,CAACsD,CAAD,CAApF;AACAC,MAAAA,CAAC,GAAG,GAAJ;AACD;;AACD,WAAO;AACLF,MAAAA,CAAC,EAAEjD,KAAK,CAACD,KAAK,CAACkD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CADH;AAELC,MAAAA,CAAC,EAAElD,KAAK,CAACD,KAAK,CAACmD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CAFH;AAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACD,KAAK,CAACoD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd;AAHH,KAAP;AAKD;AAEA;;;;AA9MH;;AAAA,WAkNgBW,WAlNhB,GAkNS,qBAAmBhC,GAAnB;AACL,QAAQmB,CAAR,GAAoBnB,GAApB,CAAQmB,CAAR;AAAA,QAAcE,CAAd,GAAoBrB,GAApB,CAAcqB;AACd,QAAMY,GAAG,GAAG,GAAZ;AACA,QAAIC,OAAO,GAAGtE,UAAd;AACA,QAAIuE,OAAO,GAAGtE,UAAd;AACA,QAAIkE,IAAJ;;AACA,WAAOI,OAAO,GAAGD,OAAV,GAAoBD,GAA3B,EAAgC;AAC9BF,MAAAA,IAAI,GAAG,CAACI,OAAO,GAAGD,OAAX,IAAsB,GAA7B;;AACA,UAAMlC,IAAG,GAAGf,QAAQ,CAAC6C,WAAT,CAAqBC,IAArB,CAAZ;;AACA,UAAK/B,IAAG,CAACqB,CAAJ,GAAQrB,IAAG,CAACmB,CAAb,IAAoBE,CAAC,GAAGF,CAA5B,EAAgC;AAC9BgB,QAAAA,OAAO,GAAGJ,IAAV;AACD,OAFD,MAEO;AACLG,QAAAA,OAAO,GAAGH,IAAV;AACD;AACF;;AACD,WAAOA,IAAP;AACD,GAlOH;;AAAA;AAAA;AAAA,SAoOE;AACE;AACA,UAAM7C,KAAK,GAAG,KAAKE,CAAnB;AACA,aAAO;AAACC,QAAAA,CAAC,EAAEH,KAAK,CAACG,CAAV;AAAaC,QAAAA,CAAC,EAAEJ,KAAK,CAACI,CAAtB;AAAyBC,QAAAA,CAAC,EAAEL,KAAK,CAACK;AAAlC,OAAP;AACD,KAxOH;AAAA,SA0OE,aAAe6C,QAAf;AACE,UAAMC,QAAQ,GAAG,KAAKjD,CAAtB;AAEAgD,MAAAA,QAAQ,gBAAQC,QAAR,EAAqBD,QAArB,CAAR;AAEA;;AACA,UAAI,KAAKjD,QAAT,EAAmB;AACjB;AACA,YAAImD,OAAO,GAAiB;AAC1BjD,UAAAA,CAAC,EAAE,KADuB;AAE1BE,UAAAA,CAAC,EAAE,KAFuB;AAG1BD,UAAAA,CAAC,EAAE,KAHuB;AAI1BE,UAAAA,CAAC,EAAE;AAJuB,SAA5B;;AAOA,aAAK,IAAI+C,GAAT,IAAgBF,QAAhB,EAA0B;AACxBC,UAAAA,OAAO,CAACC,GAAD,CAAP,GAAeH,QAAQ,CAACG,GAAD,CAAR,IAAiBF,QAAQ,CAACE,GAAD,CAAxC;AACD;;AAED,aAAKnD,CAAL,GAASgD,QAAT,CAbiB;;AAejB,YAAIE,OAAO,CAACjD,CAAR,IAAaiD,OAAO,CAAChD,CAArB,IAA0BgD,OAAO,CAAC/C,CAAlC,IAAuC+C,OAAO,CAAC9C,CAAnD,EAAsD,KAAKL,QAAL,CAAc,IAAd,EAAoBmD,OAApB;AACvD,OAhBD,MAgBO;AACL,aAAKlD,CAAL,GAASgD,QAAT;AACD;AACF;AAnQH;AAAA;AAAA,SAqQE;AACE,0BAAW,KAAKhD,CAAhB;AACD,KAvQH;AAAA,SAyQE,aAAgBF,KAAhB;AACE,WAAKe,GAAL,GAAWf,KAAX;AACD;AA3QH;AAAA;AAAA,SA6QE;AACE,aAAO,KAAKE,CAAL,CAAOC,CAAd;AACD,KA/QH;AAAA,SAiRE,aAAeH,KAAf;AACE,WAAKe,GAAL,GAAW;AAAEZ,QAAAA,CAAC,EAAEH;AAAL,OAAX;AACD;AAnRH;AAAA;AAAA,SAqRE;AACE,aAAO,KAAKE,CAAL,CAAOE,CAAd;AACD,KAvRH;AAAA,SAyRE,aAAsBJ,KAAtB;AACE,WAAKe,GAAL,GAAW;AAAEX,QAAAA,CAAC,EAAEJ;AAAL,OAAX;AACD;AA3RH;AAAA;AAAA,SA6RE;AACE,aAAO,KAAKE,CAAL,CAAOG,CAAd;AACD,KA/RH;AAAA,SAiSE,aAAiBL,KAAjB;AACE,WAAKe,GAAL,GAAW;AAAEV,QAAAA,CAAC,EAAEL;AAAL,OAAX;AACD;AAnSH;AAAA;AAAA,SAqSE;AACE,aAAO,KAAKE,CAAL,CAAOI,CAAd;AACD,KAvSH;AAAA,SAySE,aAAiBN,KAAjB;AACE,WAAKe,GAAL,gBAAgB,KAAKA,GAArB;AAA0BT,QAAAA,CAAC,EAAEN;AAA7B;AACD;AA3SH;AAAA;AAAA,SA6SE;AACE,aAAOD,QAAQ,CAAC+C,WAAT,CAAqB,KAAKhC,GAA1B,CAAP;AACD,KA/SH;AAAA,SAiTE,aAAkBd,KAAlB;AACE,WAAKc,GAAL,GAAWf,QAAQ,CAAC6C,WAAT,CAAqB5C,KAArB,CAAX;AACD;AAnTH;AAAA;AAAA,SAqTE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACmB,CAAX;AACD,KAxTH;AAAA,SA0TE,aAAejC,KAAf;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BmB,QAAAA,CAAC,EAAEjC;AAA7B;AACD;AA5TH;AAAA;AAAA,SA8TE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACoB,CAAX;AACD,KAjUH;AAAA,SAmUE,aAAiBlC,KAAjB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BoB,QAAAA,CAAC,EAAElC;AAA7B;AACD;AArUH;AAAA;AAAA,SAuUE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACqB,CAAX;AACD,KA1UH;AAAA,SA4UE,aAAgBnC,KAAhB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BqB,QAAAA,CAAC,EAAEnC;AAA7B;AACD;AA9UH;AAAA;AAAA,SAgVE;AACE,+BAAkBD,QAAQ,CAAC2B,QAAT,CAAkB,KAAKxB,CAAvB,CAAlB;AAAA,UAAO+B,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLF,QAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAD,CADH;AAELC,QAAAA,CAAC,EAAEpD,KAAK,CAACoD,CAAD,CAFH;AAGLC,QAAAA,CAAC,EAAErD,KAAK,CAACqD,CAAD;AAHH,OAAP;AAKD,KAvVH;AAAA,SAyVE,aAAenC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAACqC,QAAT,CAAkBpC,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;AAFlD;AAID;AA9VH;AAAA;AAAA,SAgWE;AACE,0BAAY,KAAKQ,GAAjB;AAAsBR,QAAAA,CAAC,EAAE,KAAKgD;AAA9B;AACD,KAlWH;AAAA,SAoWE,aAAgBtD,KAAhB;AACE,WAAKc,GAAL,GAAWd,KAAX;AACD;AAtWH;AAAA;AAAA,SAwWE;AACE,+BAAkBD,QAAQ,CAACyC,QAAT,CAAkB,KAAKtC,CAAvB,CAAlB;AAAA,UAAOC,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaqC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLtC,QAAAA,CAAC,EAAErB,KAAK,CAACqB,CAAD,CADH;AAELC,QAAAA,CAAC,EAAEtB,KAAK,CAACsB,CAAD,CAFH;AAGLqC,QAAAA,CAAC,EAAE3D,KAAK,CAAC2D,CAAD;AAHH,OAAP;AAKD,KA/WH;AAAA,SAiXE,aAAezC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAAC4C,QAAT,CAAkB3C,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;AAFlD;AAID;AAtXH;AAAA;AAAA,SAwXE;AACE,0BAAY,KAAKU,GAAjB;AAAsBV,QAAAA,CAAC,EAAE,KAAKgD;AAA9B;AACD,KA1XH;AAAA,SA4XE,aAAgBtD,KAAhB;AACE,WAAKgB,GAAL,GAAWhB,KAAX;AACD;AA9XH;AAAA;AAAA,SAgYE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACmB,CAAlB,UAAwBnB,GAAG,CAACoB,CAA5B,UAAkCpB,GAAG,CAACqB,CAAtC;AACD,KAnYH;AAAA,SAqYE,aAAqBnC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAItB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,CAAjB;;AACA,UAAIiD,KAAK,GAAGzF,oBAAoB,CAAC0F,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;AAC5CiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGvF,qBAAqB,CAACwF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;AAClDiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKzC,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAzZH;AAAA;AAAA,SA2ZE;AACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAACxB,CAApB,UAA0BwB,IAAI,CAACvB,CAA/B,UAAqCuB,IAAI,CAACtB,CAA1C,UAAgDsB,IAAI,CAACnD,CAArD;AACD,KA9ZH;AAAA,SAgaE,aAAsBN,KAAtB;AACE,WAAKW,SAAL,GAAiBX,KAAjB;AACD;AAlaH;AAAA;AAAA,SAoaE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,mBAAYnB,QAAQ,CAACmB,GAAG,CAACmB,CAAL,CAApB,GAAgCtC,QAAQ,CAACmB,GAAG,CAACoB,CAAL,CAAxC,GAAoDvC,QAAQ,CAACmB,GAAG,CAACqB,CAAL,CAA5D;AACD,KAvaH;AAAA,SAyaE,aAAqBnC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAItB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,GAAjB;;AACA,UAAIiD,KAAK,GAAGjF,WAAW,CAACkF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACnCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGhF,WAAW,CAACiF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OALI,MAMA,IAAIA,KAAK,GAAG/E,WAAW,CAACgF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACD,OAJI,MAKA,IAAIA,KAAK,GAAG9E,WAAW,CAAC+E,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKzC,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAAEA,CAAC,GAAG;AAAjB,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAxcH;AAAA;AAAA,SA0cE;AACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;AACA,mBAAW9D,QAAQ,CAAC8D,IAAI,CAACxB,CAAN,CAAnB,GAA8BtC,QAAQ,CAAC8D,IAAI,CAACvB,CAAN,CAAtC,GAAiDvC,QAAQ,CAAC8D,IAAI,CAACtB,CAAN,CAAzD,GAAoExC,QAAQ,CAACZ,KAAK,CAAC0E,IAAI,CAACnD,CAAL,GAAS,GAAV,CAAN,CAA5E;AACD,KA7cH;AAAA,SA+cE,aAAsBN,KAAtB;AACE,WAAKU,SAAL,GAAiBV,KAAjB;AACD;AAjdH;AAAA;AAAA,SAmdE;AACE,UAAMgB,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACb,CAAlB,UAAwBa,GAAG,CAACZ,CAA5B,WAAmCY,GAAG,CAACyB,CAAvC;AACD,KAtdH;AAAA,SAwdE,aAAqBzC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAIpD,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUqC,CAAV;AAAA,UAAanC,CAAC,GAAG,CAAjB;;AACA,UAAIiD,KAAK,GAAGtF,oBAAoB,CAACuF,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;AAC5CG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGrF,qBAAqB,CAACsF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;AAClDG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKvC,GAAL,GAAW;AAACb,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOqC,UAAAA,CAAC,EAADA,CAAP;AAAUnC,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AA5eH;AAAA;AAAA,SA8eE;AACE,UAAMwC,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAACvD,CAApB,UAA0BuD,IAAI,CAACtD,CAA/B,WAAsCsD,IAAI,CAACjB,CAA3C,WAAkDiB,IAAI,CAACpD,CAAvD;AACD,KAjfH;AAAA,SAmfE,aAAsBN,KAAtB;AACE,WAAKY,SAAL,GAAiBZ,KAAjB;AACD;AArfH;;AAAA;AAAA;;IC7Fa2D,oBAAoB,GAAG;AAClCC,EAAAA,WAAW,EAAE,KADqB;AAElCC,EAAAA,UAAU,EAAE,OAFsB;AAGlCC,EAAAA,cAAc,EAAE,IAHkB;AAIlCC,EAAAA,cAAc,EAAE;AAJkB,CAA7B;AAOP;;;;;AAIA,SAAgBC,gBAAgBC;;;AAC9B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgBC,oBAAoBH;;;AAClC,MAAMI,KAAN,GAAwFJ,KAAxF,CAAMI,KAAN;AAAA,MAAyBC,UAAzB,GAAwFL,KAAxF,CAAaK,UAAb;AAAA,MAAqCC,WAArC,GAAwFN,KAAxF,CAAqCM,WAArC;AAAA,MAAkDC,YAAlD,GAAwFP,KAAxF,CAAkDO,YAAlD;AAAA,MAAgEC,OAAhE,GAAwFR,KAAxF,CAAgEQ,OAAhE;AAAA,MAAyEb,WAAzE,GAAwFK,KAAxF,CAAyEL,WAAzE;AACA,MAAIc,MAAJ;;AACA,MAAIT,KAAK,CAACU,SAAV,EAAqB;AACnBD,IAAAA,MAAM,GAAGL,KAAK,GAAG,EAAjB;AACD,GAFD,MAEO;AAAA;;AACLK,IAAAA,MAAM,0BAAGT,KAAK,CAACW,YAAT,kCAAyBP,KAA/B;AACD;;AAED,MAAMQ,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;;AAEAI,EAAAA,UAAU,kBAAGA,UAAH,0BAAiBG,OAAO,GAAG,CAAV,GAAcD,YAAY,GAAG,CAAxD;;AACA,MAAIZ,WAAW,KAAK,QAApB,EAA8B;AAC5B,WAAO;AACLkB,MAAAA,WAAW,EAAEb,KAAK,CAACQ,OAAN,GAAgBR,KAAK,CAACO,YAD9B;AAELO,MAAAA,WAAW,EAAEV,KAAK,GAAGI,OAAO,GAAG,CAAlB,GAAsBD,YAAY,GAAG,CAF7C;AAGLH,MAAAA,KAAK,EAAEA,KAHF;AAILW,MAAAA,MAAM,EAAEX,KAJH;AAKLY,MAAAA,EAAE,EAAEZ,KAAK,GAAG,CALP;AAMLa,MAAAA,EAAE,EAAEb,KAAK,GAAG,CANP;AAOLc,MAAAA,MAAM,EAAEd,KAAK,GAAG,CAAR,GAAYE,WAAW,GAAG;AAP7B,KAAP;AASD,GAVD,MAUO;AACL,WAAO;AACLO,MAAAA,WAAW,EAAER,UAAU,GAAG,CADrB;AAELS,MAAAA,WAAW,EAAEL,MAAM,GAAGJ,UAFjB;AAGLa,MAAAA,MAAM,EAAEb,UAAU,GAAG,CAHhB;AAILc,MAAAA,CAAC,EAAE,CAJE;AAKLC,MAAAA,CAAC,EAAE,CALE;AAMLhB,MAAAA,KAAK,EAAEQ,YAAY,GAAGP,UAAH,GAAgBI,MAN9B;AAOLM,MAAAA,MAAM,EAAEH,YAAY,GAAGH,MAAH,GAAYJ;AAP3B,KAAP;AASD;AACF;AAED;;;;;;AAKA,SAAgBgB,sBAAsBrB,OAA+BsB;AACnE,MAAM1E,IAAI,GAAG0E,KAAK,CAAC1E,IAAnB;AACA,MAAMC,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;;AAEA,UAAQmD,KAAK,CAACJ,UAAd;AACE,SAAK,KAAL;AACE,aAAO/C,GAAG,CAACmB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOnB,GAAG,CAACoB,CAAJ,GAAQ,IAAf;;AACF,SAAK,MAAL;AACE,aAAOpB,GAAG,CAACqB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOtB,IAAI,CAACP,CAAL,GAAS,GAAhB;;AACF,SAAK,QAAL;AACE,UAAQwD,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,UAAMyB,gBAAgB,GAAGzB,cAAc,GAAGD,cAA1C;AACA,UAAM2B,OAAO,GAAI,CAACF,KAAK,CAACtE,MAAN,GAAe6C,cAAhB,IAAkC0B,gBAAnC,GAAuD,GAAvE,CAHF;;AAKE,aAAO3G,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASuG,OAAT,EAAkB,GAAlB,CAAZ,CAAP;;AACF,SAAK,KAAL;AACE,aAAO5E,IAAI,CAACV,CAAL,IAAU,GAAjB;;AACF,SAAK,YAAL;AACE,aAAOU,IAAI,CAACT,CAAZ;;AACF,SAAK,OAAL;AACA;AACE,aAAOS,IAAI,CAACR,CAAZ;AArBJ;AAuBD;AAED;;;;;;;AAMA,SAAgBqF,wBAAwBzB,OAA+BmB,GAAWC;AAChF,6BAAqCjB,mBAAmB,CAACH,KAAD,CAAxD;AAAA,MAAQc,WAAR,wBAAQA,WAAR;AAAA,MAAqBD,WAArB,wBAAqBA,WAArB;;AACA,MAAIa,SAAJ;;AACA,MAAI1B,KAAK,CAACC,eAAN,KAA0B,YAA9B,EAA4C;AAC1CyB,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKN,CAAL,GAASN,WAAT,GAAuBD,WAAnC;AACD,GAFD,MAEO;AACLa,IAAAA,SAAS,GAAGP,CAAC,GAAGN,WAAhB;AACD;;;AAEDa,EAAAA,SAAS,GAAG9G,IAAI,CAACM,GAAL,CAASN,IAAI,CAACK,GAAL,CAASyG,SAAT,EAAoBZ,WAApB,CAAT,EAA2C,CAA3C,CAAZ;AACA,MAAMU,OAAO,GAAG5G,IAAI,CAACC,KAAL,CAAY,MAAMiG,WAAP,GAAsBY,SAAjC,CAAhB;;AACA,UAAQ1B,KAAK,CAACJ,UAAd;AACE,SAAK,QAAL;AACE,UAAQC,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,UAAMyB,gBAAgB,GAAGzB,cAAc,GAAGD,cAA1C;AACA,aAAOA,cAAc,GAAG0B,gBAAgB,IAAIC,OAAO,GAAG,GAAd,CAAxC;;AACF,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,IAAjB;;AACF;AACE,aAAOA,OAAP;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgBG,wBAAwB3B,OAA+BsB;AACrE,8BAAoDnB,mBAAmB,CAACH,KAAD,CAAvE;AAAA,MAAQI,KAAR,yBAAQA,KAAR;AAAA,MAAeW,MAAf,yBAAeA,MAAf;AAAA,MAAuBD,WAAvB,yBAAuBA,WAAvB;AAAA,MAAoCD,WAApC,yBAAoCA,WAApC;;AACA,MAAMD,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,MAAM2B,WAAW,GAAGP,qBAAqB,CAACrB,KAAD,EAAQsB,KAAR,CAAzC;AACA,MAAMO,QAAQ,GAAGjB,YAAY,GAAGR,KAAK,GAAG,CAAX,GAAeW,MAAM,GAAG,CAArD;AACA,MAAIW,SAAS,GAAGb,WAAW,GAAIe,WAAW,GAAG,GAAf,GAAsBd,WAApD;;AACA,MAAIF,YAAJ,EAAkB;AAChBc,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKA,SAAL,GAAiBZ,WAAjB,GAA+BD,WAAW,GAAG,CAAzD;AACD;;AACD,SAAO;AACLM,IAAAA,CAAC,EAAEP,YAAY,GAAGiB,QAAH,GAAcH,SADxB;AAELN,IAAAA,CAAC,EAAER,YAAY,GAAGc,SAAH,GAAeG;AAFzB,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,kBAAkB9B,OAA+BsB;AAC/D,MAAMxE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;AACA,MAAMD,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;;AAEA,UAAQmD,KAAK,CAACJ,UAAd;AACE,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAY,CAAZ,SAAmB/C,GAAG,CAACoB,CAAvB,SAA8BpB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAc,GAAd,SAAuBrB,GAAG,CAACoB,CAA3B,SAAkCpB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuB,CAAvB,SAA8BnB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyB,GAAzB,SAAkCnB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,MAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuBnB,GAAG,CAACoB,CAA3B,SAAkC,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcpB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoC,GAApC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,YAAapB,GAAG,CAACmB,CAAjB,SAAwBnB,GAAG,CAACoB,CAA5B,SAAmCpB,GAAG,CAACqB,CAAvC,SADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoCpB,GAAG,CAACqB,CAAxC,OAFK,CAAP;;AAIF,SAAK,QAAL;AACE,UAAM6D,KAAK,GAAG,EAAd;AACA,UAAM9G,GAAG,GAAG+E,KAAK,CAACH,cAAlB;AACA,UAAM3E,GAAG,GAAG8E,KAAK,CAACF,cAAlB;AACA,UAAMkC,QAAQ,GAAG,CAAjB;AACA,UAAMC,KAAK,GAAG/G,GAAG,GAAGD,GAApB;;AACA,WAAK,IAAI+B,MAAM,GAAG/B,GAAb,EAAkBiH,IAAI,GAAG,CAA9B,EAAiClF,MAAM,GAAG9B,GAA1C,EAA+C8B,MAAM,IAAIiF,KAAK,GAAGD,QAAlB,EAA4BE,IAAI,IAAI,CAAnF,EAAsF;AACpF,oCAAoBpG,QAAQ,CAAC6C,WAAT,CAAqB3B,MAArB,CAApB;AAAA,YAAQgB,CAAR,yBAAQA,CAAR;AAAA,YAAWC,CAAX,yBAAWA,CAAX;AAAA,YAAcC,CAAd,yBAAcA,CAAd;;AACA6D,QAAAA,KAAK,CAACI,IAAN,CAAW,CAAE,MAAMH,QAAN,GAAiBE,IAAnB,WAAgClE,CAAhC,SAAqCC,CAArC,SAA0CC,CAA1C,OAAX;AACD;;AACD,aAAO6D,KAAP;;AACF,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,EAAS,MAAT,CADK,EAEL,CAAC,MAAD,EAAS,MAAT,CAFK,EAGL,CAAC,MAAD,EAAS,MAAT,CAHK,EAIL,CAAC,EAAD,EAAS,MAAT,CAJK,EAKL,CAAC,MAAD,EAAS,MAAT,CALK,EAML,CAAC,MAAD,EAAS,MAAT,CANK,EAOL,CAAC,GAAD,EAAS,MAAT,CAPK,CAAP;;AASF,SAAK,YAAL;AACE,UAAMK,KAAK,GAAGtG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,CAAd;AAAiBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAAxB,OAAlB,CAAd;AACA,UAAMiG,OAAO,GAAGvG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,GAAd;AAAmBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAA1B,OAAlB,CAAhB;AACA,aAAO,CACL,CAAC,CAAD,WAAWgG,KAAK,CAAClG,CAAjB,SAAsBkG,KAAK,CAACjG,CAA5B,UAAkCiG,KAAK,CAAC5D,CAAxC,QADK,EAEL,CAAC,GAAD,WAAa6D,OAAO,CAACnG,CAArB,SAA0BmG,OAAO,CAAClG,CAAlC,UAAwCkG,OAAO,CAAC7D,CAAhD,QAFK,CAAP;;AAIF,SAAK,OAAL;AACA;AACE,UAAMzB,GAAG,GAAGjB,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAEW,GAAG,CAACX,CAAlB;AAAqBC,QAAAA,CAAC,EAAE;AAAxB,OAAlB,CAAZ;AACA,aAAO,CACL,CAAC,CAAD,EAAI,MAAJ,CADK,EAEL,CAAC,GAAD,WAAaW,GAAG,CAACb,CAAjB,SAAsBa,GAAG,CAACZ,CAA1B,UAAgCY,GAAG,CAACyB,CAApC,QAFK,CAAP;AApDJ;AAyDD;AAED;;;;;AAIA,SAAgB8D,wBAAwBtC;AACtC,MAAMY,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,SAAO;AACLsC,IAAAA,EAAE,EAAE,IADC;AAELC,IAAAA,EAAE,EAAE5B,YAAY,GAAG,MAAH,GAAY,IAFvB;AAGL6B,IAAAA,EAAE,EAAE7B,YAAY,GAAG,IAAH,GAAU,MAHrB;AAIL8B,IAAAA,EAAE,EAAE;AAJC,GAAP;AAMD;;ACxOD;;;;;AAKC,SAAgBC,iBAAiB3C,OAA8BjE;AAC9D,WAAShB,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,WAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;;AACD,UAAO8E,KAAK,CAACJ,UAAb;AACE,SAAK,KAAL;AACE,aAAO7E,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,YAAL;AACA,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,KAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,CAAX,CAAZ;;AACF,SAAK,QAAL;AAAe;AACb,UAAQ8D,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,aAAO/E,KAAK,CAACgB,KAAD,EAAQ8D,cAAR,EAAwBC,cAAxB,CAAZ;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgB8C,6BAA6B5C,OAA8B6C;AACzE;AACA,MAAI,CAAC,gBAAgBrG,IAAhB,CAAsBqG,CAAD,CAAIzD,GAAzB,CAAL,EAAoC;AAClC,WAAO,CAAP;AACD;;AACD,MAAI0D,MAAJ;;AACA,MAAI9C,KAAK,CAACJ,UAAN,KAAqB,OAAzB,EAAkC;AAChCkD,IAAAA,MAAM,GAAG,CAAT;AACD,GAFD,MAEO,IAAI9C,KAAK,CAACJ,UAAN,KAAqB,QAAzB,EAAmC;AACxCkD,IAAAA,MAAM,GAAG,CAAT;AACD,GAFM,MAEA;AACLA,IAAAA,MAAM,GAAG,CAAT;AACD;;AAED,MAAIC,MAAM,GAAIF,CAAC,CAACE,MAAhB;AACA,MAAIC,WAAW,GAAGD,MAAM,CAAChH,KAAP,CAAaH,QAAb,EAAlB;;AACA,MAAImH,MAAM,CAACE,cAAP,KAA0BzF,SAA9B,EAAyC;AACvCwF,IAAAA,WAAW,GAAGA,WAAW,CAACE,SAAZ,CAAsB,CAAtB,EAAyBH,MAAM,CAACE,cAAhC,IACZJ,CAAC,CAACzD,GAAF,CAAMxD,QAAN,EADY,GAEZoH,WAAW,CAACE,SAAZ,CAAsBH,MAAM,CAACI,YAA7B,CAFF;AAGD,GAJD,MAIO;AACLH,IAAAA,WAAW,GAAGA,WAAW,CAACvC,MAAZ,GAAqB,CAArB,GAAyBqC,MAAzB,GAAkCE,WAAlC,GAAgDA,WAAW,GAAGH,CAAC,CAACzD,GAAF,CAAMxD,QAAN,EAA5E;AACD;;AACD,MAAMwH,QAAQ,GAAG,CAACJ,WAAlB;AACA,SAAOL,gBAAgB,CAAC3C,KAAD,EAAQoD,QAAR,CAAvB;AACD;AAED;;;;;;AAKC,SAAgBC,4BAA4BrD,OAA8B6C;AACzE;AACA,MAAM7E,CAAC,GAAG,8BAAV;AACA,MAAMgF,WAAW,GAAWH,CAAC,CAACS,aAAF,CAAgBC,OAAhB,CAAwB,MAAxB,CAA5B;;AACA,MAAI,CAACvF,CAAC,CAACxB,IAAF,CAAOwG,WAAP,CAAL,EAA0B;AACxB,WAAO,CAAP;AACD;;AACD,MAAMI,QAAQ,GAAG,CAACJ,WAAlB;AACA,SAAOL,gBAAgB,CAAC3C,KAAD,EAAQoD,QAAR,CAAvB;AACD;;AC7ED,IAAMI,GAAG,GAAG5I,IAAI,CAAC6I,EAAL,GAAU,CAAtB;AAGA;;AACA,IAAM1F,GAAG,GAAG,SAANA,GAAM,CAAC1B,CAAD,EAAYqH,CAAZ;AAAA,SAA0B,CAACrH,CAAC,GAAGqH,CAAJ,GAAQA,CAAT,IAAcA,CAAxC;AAAA,CAAZ;;;AAGA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAACxC,CAAD,EAAYC,CAAZ;AAAA,SAA0BxG,IAAI,CAACgJ,IAAL,CAAUzC,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAA1B;AAAA,CAAb;AAEA;;;;;;AAIA,SAASyC,cAAT,CAAwB7D,KAAxB;AACE,SAAOA,KAAK,CAACI,KAAN,GAAc,CAAd,GAAkBJ,KAAK,CAACQ,OAAxB,GAAkCR,KAAK,CAACO,YAAxC,GAAuDP,KAAK,CAACM,WAApE;AACD;AAED;;;;;;;;AAMA,SAAgBwD,mBAAmB9D,OAA4BmB,GAAWC;AACxE,4BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,uBAAQA,EAAR;AAAA,MAAYC,EAAZ,uBAAYA,EAAZ;;AACA,MAAMjD,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAOuD,IAAI,CAAC3C,EAAE,GAAGG,CAAN,EAASF,EAAE,GAAGG,CAAd,CAAJ,GAAuBpD,CAA9B;AACD;AAED;;;;;AAIA,SAAgB+F,mBAAmB/D;AACjC,MAAMhC,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAO;AACLA,IAAAA,KAAK,EAAEJ,KAAK,CAACI,KADR;AAELc,IAAAA,MAAM,EAAElD,CAAC,GAAGgC,KAAK,CAACM,WAFb;AAGLU,IAAAA,EAAE,EAAEhD,CAHC;AAILiD,IAAAA,EAAE,EAAEjD;AAJC,GAAP;AAMD;AAED;;;;;;AAKA,SAAgBgG,oBAAoBhE,OAA4BiE,OAAeC;AAC7E,MAAMC,UAAU,GAAGnE,KAAK,CAACmE,UAAzB;AACA,MAAMC,cAAc,GAAGpE,KAAK,CAACoE,cAA7B;;AAEA,MAAIF,MAAM,IAAIE,cAAc,KAAK,WAAjC,EACEH,KAAK,GAAGE,UAAU,GAAGF,KAArB,CADF;AAAA,OAGK,IAAIG,cAAc,KAAK,WAAvB,EACHH,KAAK,GAAI,MAAME,UAAP,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIC,MAAM,IAAIE,cAAc,KAAK,eAAjC,EACHH,KAAK,GAAIE,UAAU,GAAG,GAAd,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIG,cAAc,KAAK,eAAvB,EACHH,KAAK,GAAGE,UAAU,GAAGF,KAArB;AACF,SAAOlG,GAAG,CAACkG,KAAD,EAAQ,GAAR,CAAV;AACD;AAED;;;;;;AAKA,SAAgBI,uBAAuBrE,OAA4BsB;AACjE,MAAMxE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;;AACA,6BAAmBiH,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACA,MAAMsE,WAAW,GAAG,CAAC,MAAMN,mBAAmB,CAAChE,KAAD,EAAQlD,GAAG,CAACZ,CAAZ,EAAe,IAAf,CAA1B,KAAmDsH,GAAG,GAAG,GAAzD,CAApB;AACA,MAAMe,UAAU,GAAIzH,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB2E,WAAnC;AACA,MAAM0D,SAAS,GAAGxE,KAAK,CAACoE,cAAN,KAAyB,WAAzB,GAAuC,CAAC,CAAxC,GAA4C,CAA9D;AACA,SAAO;AACLjD,IAAAA,CAAC,EAAEH,EAAE,GAAGuD,UAAU,GAAG3J,IAAI,CAAC6J,GAAL,CAASH,WAAT,CAAb,GAAqCE,SADxC;AAELpD,IAAAA,CAAC,EAAEH,EAAE,GAAGsD,UAAU,GAAG3J,IAAI,CAAC8J,GAAL,CAASJ,WAAT,CAAb,GAAqCE;AAFxC,GAAP;AAID;AAED;;;;;;;AAMA,SAAgBG,uBAAuB3E,OAA4BmB,GAAWC;AAC5E,6BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACAmB,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;AACAC,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;;AAEA,MAAM/C,GAAG,GAAG2F,mBAAmB,CAAChE,KAAD,EAAQpF,IAAI,CAACgK,KAAL,CAAW,CAACxD,CAAZ,EAAe,CAACD,CAAhB,KAAsB,MAAMqC,GAA5B,CAAR,CAA/B;AAEA;;AACA,MAAMe,UAAU,GAAG3J,IAAI,CAACK,GAAL,CAAS0I,IAAI,CAACxC,CAAD,EAAIC,CAAJ,CAAb,EAAqBN,WAArB,CAAnB;AACA,SAAO;AACL5E,IAAAA,CAAC,EAAEtB,IAAI,CAACC,KAAL,CAAWwD,GAAX,CADE;AAELlC,IAAAA,CAAC,EAAEvB,IAAI,CAACC,KAAL,CAAY,MAAMiG,WAAP,GAAsByD,UAAjC;AAFE,GAAP;AAID;;ACvGD;;;;AAIA,SAAgBM,aAAa7E;;;AAC3B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgB4E,iBAAiB9E;AAC/B,MAAQI,KAAR,GAAoDJ,KAApD,CAAQI,KAAR;AAAA,MAAe2E,SAAf,GAAoD/E,KAApD,CAAe+E,SAAf;AAAA,MAA0BvE,OAA1B,GAAoDR,KAApD,CAA0BQ,OAA1B;AAAA,MAAmCD,YAAnC,GAAoDP,KAApD,CAAmCO,YAAnC;AACA,SAAO;AACLH,IAAAA,KAAK,EAAEA,KADF;AAELW,IAAAA,MAAM,EAAEgE,SAAF,WAAEA,SAAF,GAAe3E,KAFhB;AAGLc,IAAAA,MAAM,EAAEV,OAAO,GAAGD;AAHb,GAAP;AAKD;AAED;;;;;;;AAMA,SAAgByE,qBAAqBhF,OAA4BmB,GAAWC;AAC1E,0BAAkC0D,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,qBAAQA,KAAR;AAAA,MAAeW,MAAf,qBAAeA,MAAf;AAAA,MAAuBG,MAAvB,qBAAuBA,MAAvB;;AACA,MAAML,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,MAAMiE,QAAQ,GAAI,CAAChE,CAAC,GAAGN,WAAL,IAAoBoE,YAArB,GAAqC,GAAtD;AACA,MAAMG,QAAQ,GAAI,CAAChE,CAAC,GAAGP,WAAL,IAAoBqE,YAArB,GAAqC,GAAtD;AACA,SAAO;AACL/I,IAAAA,CAAC,EAAEvB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASkK,QAAT,EAAmB,GAAnB,CAAZ,CADE;AAEL/I,IAAAA,CAAC,EAAExB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAAS,MAAMmK,QAAf,EAAyB,GAAzB,CAAZ;AAFE,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,qBAAqBrF,OAA4BsB;AAC/D,2BAAkCwD,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,sBAAQA,KAAR;AAAA,MAAeW,MAAf,sBAAeA,MAAf;AAAA,MAAuBG,MAAvB,sBAAuBA,MAAvB;;AACA,MAAMpE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;AACA,MAAM+D,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,SAAO;AACLC,IAAAA,CAAC,EAAEN,WAAW,GAAI/D,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB8I,YAD5B;AAEL7D,IAAAA,CAAC,EAAEP,WAAW,IAAIqE,YAAY,GAAKpI,GAAG,CAACV,CAAJ,GAAQ,GAAT,GAAgB8I,YAApC;AAFT,GAAP;AAID;AAED;;;;;;AAKA,SAAgBI,gBAAgBtF,OAA4BsB;AAC1D,MAAMjD,GAAG,GAAGiD,KAAK,CAACjD,GAAlB;AACA,SAAO;AAEL,GACE,CAAC,CAAD,EAAI,MAAJ,CADF,EAEE,CAAC,GAAD,WAAaA,GAAb,gBAFF,CAFK;AAOL,GACE,CAAC,CAAD,EAAI,eAAJ,CADF,EAEE,CAAC,GAAD,EAAM,MAAN,CAFF,CAPK,CAAP;AAYD;;ACpFD;AACA;AACA;AACA,IAAIkH,aAAJ;AAEA;;;;;;;;;;;;;AAYA,SAAgBC,cAAcC;AAC5B,MAAI,CAACF,aAAL,EACEA,aAAa,GAAGG,QAAQ,CAACC,oBAAT,CAA8B,MAA9B,CAAhB;;AAEF,MAAMC,EAAE,GAAGC,MAAM,CAACC,SAAP,CAAiBC,SAA5B;AACA,MAAMC,QAAQ,GAAG,iCAAiCxJ,IAAjC,CAAsCoJ,EAAtC,CAAjB;AACA,MAAMK,KAAK,GAAG,oBAAoBzJ,IAApB,CAAyBoJ,EAAzB,CAAd;AACA,MAAMM,QAAQ,GAAGL,MAAM,CAACK,QAAxB;AACA,SAAQ,CAACF,QAAQ,IAAIC,KAAb,KAAwBV,aAAa,CAAC9E,MAAd,GAAuB,CAAhD,GAAyDyF,QAAQ,CAACC,QAAlE,UAA+ED,QAAQ,CAACE,IAAxF,GAA+FF,QAAQ,CAACG,QAAxG,GAAmHH,QAAQ,CAACI,MAA5H,GAAqIb,GAArI,GAA6IA,GAApJ;AACD;AAED;;;;;;;;;AAQA,SAAgBc,cAAcvF,IAAYC,IAAYC,QAAgBsF,YAAoBC;AACxF,MAAMC,YAAY,GAAGD,QAAQ,GAAGD,UAAX,IAAyB,GAAzB,GAA+B,CAA/B,GAAmC,CAAxD;AACAA,EAAAA,UAAU,IAAI5L,IAAI,CAAC6I,EAAL,GAAU,GAAxB;AACAgD,EAAAA,QAAQ,IAAI7L,IAAI,CAAC6I,EAAL,GAAU,GAAtB;AACA,MAAMlB,EAAE,GAAGvB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAASgC,QAAT,CAAzB;AACA,MAAMjE,EAAE,GAAGvB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS+B,QAAT,CAAzB;AACA,MAAMhE,EAAE,GAAGzB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAAS+B,UAAT,CAAzB;AACA,MAAM9D,EAAE,GAAGzB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS8B,UAAT,CAAzB;AACA,gBAAYjE,EAAZ,SAAkBC,EAAlB,WAA0BtB,MAA1B,SAAoCA,MAApC,WAAgDwF,YAAhD,WAAkEjE,EAAlE,SAAwEC,EAAxE;AACD;AAED;;;;;;;;AAOA,SAAgBiE,iBAAiB3G,OAAuCmB,GAAWC,GAAWwF;AAC5F,OAAK,IAAIlJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkJ,eAAe,CAACnG,MAApC,EAA4C/C,CAAC,EAA7C,EAAiD;AAC/C,QAAMmJ,EAAE,GAAGD,eAAe,CAAClJ,CAAD,CAAf,CAAmByD,CAAnB,GAAuBA,CAAlC;AACA,QAAM2F,EAAE,GAAGF,eAAe,CAAClJ,CAAD,CAAf,CAAmB0D,CAAnB,GAAuBA,CAAlC;AACA,QAAMuC,IAAI,GAAG/I,IAAI,CAACgJ,IAAL,CAAUiD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAb;;AACA,QAAInD,IAAI,GAAG3D,KAAK,CAACO,YAAjB,EAA+B;AAC7B,aAAO7C,CAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;SChEeqJ,gBAAgB/G;AAC9B,SAAO;AACLgH,IAAAA,SAAS,EAAE,YADN;AAELC,IAAAA,MAAM,EAAMjH,KAAK,CAACM,WAAZ,iBAAqCN,KAAK,CAACkH;AAF5C,GAAP;AAID;AAKD,SAAgBC,YAAYC,MAAuB5C,WAAmBzC;AACpE,SAAWqF,IAAX,kBAA8B5C,SAA9B,UAA8CzC,KAAK,CAACsF,GAAN,CAAU;AAAA,QAAEC,CAAF;AAAA,QAAKC,GAAL;AAAA,WAAkBA,GAAlB,SAA2BD,CAA3B;AAAA,GAAV,EAA4CE,IAA5C,CAAiD,GAAjD,CAA9C;AACD;AAED,SAAgBC,SAAS1L;AACvB,MAAI,OAAOA,KAAP,KAAkB,QAAtB,EACE,OAAOA,KAAP;AACF,SAAWA,KAAX;AACD;;ICOY2L,4BAA4B,GAA0B;AACjEtH,EAAAA,KAAK,EAAE,GAD0D;AAEjEW,EAAAA,MAAM,EAAE,GAFyD;AAGjEO,EAAAA,KAAK,EAAE,MAH0D;AAIjEqG,EAAAA,MAAM,EAAE,EAJyD;AAKjEnH,EAAAA,OAAO,EAAE,CALwD;AAMjEP,EAAAA,eAAe,EAAE,UANgD;AAOjEiH,EAAAA,WAAW,EAAE,MAPoD;AAQjE5G,EAAAA,WAAW,EAAE,CARoD;AASjEC,EAAAA,YAAY,EAAE,CATmD;AAUjEqH,EAAAA,kBAAkB,EAAE,IAV6C;AAWjEC,EAAAA,SAAS,EAAE,IAXsD;AAYjEC,EAAAA,WAAW,EAAE;AAAC3G,IAAAA,CAAC,EAAE,CAAJ;AAAOC,IAAAA,CAAC,EAAE;AAAV,GAZoD;AAajE2G,EAAAA,cAAc,EAAE,IAbiD;AAcjE5D,EAAAA,UAAU,EAAE,CAdqD;AAejEC,EAAAA,cAAc,EAAE,eAfiD;AAgBjE/D,EAAAA,UAAU,EAAE,IAhBqD;AAiBjEH,EAAAA,YAAY,EAAE,EAjBmD;AAkBjE6E,EAAAA,SAAS,EAAE;AAlBsD,CAA5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 1ce80e3..2e10f52 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -698,6 +698,16 @@ function getSliderDimensions(props) { padding, sliderShape } = props; + let length; + + if (props.showInput) { + length = width - 55; + } else { + var _props$sliderLength; + + length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; + } + const ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -715,12 +725,12 @@ function getSliderDimensions(props) { } else { return { handleStart: sliderSize / 2, - handleRange: width - sliderSize, + handleRange: length - sliderSize, radius: sliderSize / 2, x: 0, y: 0, - width: ishorizontal ? sliderSize : width, - height: ishorizontal ? width : sliderSize + width: ishorizontal ? sliderSize : length, + height: ishorizontal ? length : sliderSize }; } } diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index 5af1dbe..f498257 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 5021f9a..72916b9 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -720,6 +720,16 @@ handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var length; + + if (props.showInput) { + length = width - 55; + } else { + var _props$sliderLength; + + length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; + } + var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -737,12 +747,12 @@ } else { return { handleStart: sliderSize / 2, - handleRange: width - sliderSize, + handleRange: length - sliderSize, radius: sliderSize / 2, x: 0, y: 0, - width: ishorizontal ? sliderSize : width, - height: ishorizontal ? width : sliderSize + width: ishorizontal ? sliderSize : length, + height: ishorizontal ? length : sliderSize }; } } diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index 4726b9a..c177bad 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","length","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/slider.d.ts b/dist/slider.d.ts index 32b1edc..db9a865 100644 --- a/dist/slider.d.ts +++ b/dist/slider.d.ts @@ -7,8 +7,11 @@ export interface SliderOptions extends IroColorPickerOptions { color: IroColor; sliderShape: SliderShape; sliderType: SliderType; + sliderSize: number; + sliderLength: number; minTemperature: number; maxTemperature: number; + showInput: boolean; } export declare const sliderDefaultOptions: { sliderShape: string; diff --git a/src/slider.ts b/src/slider.ts index 566a6e5..fceac96 100644 --- a/src/slider.ts +++ b/src/slider.ts @@ -9,8 +9,11 @@ export interface SliderOptions extends IroColorPickerOptions { color: IroColor; sliderShape: SliderShape; sliderType: SliderType; + sliderSize: number; + sliderLength: number; minTemperature: number; maxTemperature: number; + showInput: boolean; } export const sliderDefaultOptions = { @@ -36,6 +39,13 @@ export function getSliderStyles(props: Partial) { */ export function getSliderDimensions(props: Partial) { let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props; + let length: number; + if (props.showInput) { + length = width - 55; + } else { + length = props.sliderLength ?? width; + } + const ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = sliderSize ?? padding * 2 + handleRadius * 2; @@ -52,12 +62,12 @@ export function getSliderDimensions(props: Partial) { } else { return { handleStart: sliderSize / 2, - handleRange: width - sliderSize, + handleRange: length - sliderSize, radius: sliderSize / 2, x: 0, y: 0, - width: ishorizontal ? sliderSize : width, - height: ishorizontal ? width : sliderSize, + width: ishorizontal ? sliderSize : length, + height: ishorizontal ? length : sliderSize, } } } From 384e6ebd1587d0ef285147751812a7afcfde3ad2 Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 19 Apr 2022 09:57:53 +0200 Subject: [PATCH 4/9] undo changes --- README.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/README.md b/README.md index 0a64f5c..7bc16e0 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,3 @@ Core package for iro.js (WIP) This is for functionality that can be shared between the standalone version of iro.js as well as the upcoming React and Vue components. - - -CHANGES: -======== - -repo: https://github.com/lenadax/iro.js/tree/feature/slider-label-value - -- allow alpha value when setting r/g/b or h/s/l channels (color.ts) - - default to this.alpha instead of 1 when setting rgb value - -- logic for editable input field (input.ts) - -TODO: -===== - -[ ] - allow seperate slider width spec \ No newline at end of file From 219e0d06ab8e23a68567ff7e00f64792446e4ac6 Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 26 Apr 2022 09:42:15 +0200 Subject: [PATCH 5/9] fix kelvin value issue when converting from rgb --- dist/color.d.ts | 2 ++ dist/iro-core.es.js | 17 ++++++++++++++++- dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 17 ++++++++++++++++- dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 17 ++++++++++++++++- dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 17 ++++++++++++++++- dist/iro-core.umd.js.map | 2 +- src/color.ts | 22 +++++++++++++++++++++- 10 files changed, 91 insertions(+), 9 deletions(-) diff --git a/dist/color.d.ts b/dist/color.d.ts index 41b5758..2f4fcf3 100644 --- a/dist/color.d.ts +++ b/dist/color.d.ts @@ -24,6 +24,7 @@ export interface HslColor { } export interface KelvinColor { kelvin: number; + _kelvin: number; } export declare type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string; export declare class IroColor { @@ -31,6 +32,7 @@ export declare class IroColor { private onChange; private initialValue; index: number; + _kelvin: number; /** * @constructor Color object * @param value - initial color value diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index 662c74a..3a515e4 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -443,10 +443,25 @@ var IroColor = /*#__PURE__*/function () { }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + /** Rgb to kelvin conversion is a little funky, producing results + * that differ from the original value. + * Check if rgb values are equal and return RGB to kelvin conversion + * only if necessary + */ + var res; + var rgb = IroColor.kelvinToRgb(this._kelvin); + + if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { + res = this._kelvin; + } else { + res = IroColor.rgbToKelvin(this.rgb); + } + + return res; }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); + this._kelvin = value; } }, { key: "red", diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index 1bba458..65f3d87 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index 8cdcab0..c1e56da 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -443,10 +443,25 @@ var IroColor = /*#__PURE__*/function () { }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + /** Rgb to kelvin conversion is a little funky, producing results + * that differ from the original value. + * Check if rgb values are equal and return RGB to kelvin conversion + * only if necessary + */ + var res; + var rgb = IroColor.kelvinToRgb(this._kelvin); + + if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { + res = this._kelvin; + } else { + res = IroColor.rgbToKelvin(this.rgb); + } + + return res; }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); + this._kelvin = value; } }, { key: "red", diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index 7de50ff..55c0230 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA,IAAMA,WAAW,GAAG,eAApB;;AAEA,IAAMC,UAAU,GAAG,sBAAnB;;AAEA,IAAMC,QAAQ,GAAG,QAAQD,UAAR,GAAqB,OAArB,GAA+BD,WAA/B,GAA6C,GAA9D;AAGA;;AACA,IAAMG,kBAAkB,GAAG,gBAAgBD,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,WAA1G;AACA,IAAME,kBAAkB,GAAG,gBAAgBF,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,YAA/E,GAA8FA,QAA9F,GAAyG,WAApI;;AAGA,IAAMG,oBAAoB,GAAG,IAAIC,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMI,qBAAqB,GAAG,IAAID,MAAJ,CAAW,SAASF,kBAApB,CAA9B;AACA,IAAMI,oBAAoB,GAAG,IAAIF,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMM,qBAAqB,GAAG,IAAIH,MAAJ,CAAW,SAASF,kBAApB,CAA9B;;AAGA,IAAMM,SAAS,GAAG,aAAlB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,WAAW,GAAG,IAAIP,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMG,WAAW,GAAG,IAAIR,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIT,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIV,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;;AAGA,IAAMK,UAAU,GAAG,IAAnB;AACA,IAAMC,UAAU,GAAG,KAAnB;;AAGA,IAAQC,GAAR,GAA8BC,IAA9B,CAAQD,GAAR;AAAA,IAAaE,KAAb,GAA8BD,IAA9B,CAAaC,KAAb;AAAA,IAAoBC,KAApB,GAA8BF,IAA9B,CAAoBE,KAApB;AAEA;;;;;;;AAMA,SAASC,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,SAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;AAED;;;;;;;AAKA,SAASC,SAAT,CAAmBC,GAAnB,EAAgCF,GAAhC;AACE,MAAMG,YAAY,GAAGD,GAAG,CAACE,OAAJ,CAAY,GAAZ,IAAmB,CAAC,CAAzC;AACA,MAAMN,GAAG,GAAGO,UAAU,CAACH,GAAD,CAAtB;AACA,SAAOC,YAAY,GAAIH,GAAG,GAAG,GAAP,GAAcF,GAAjB,GAAuBA,GAA1C;AACD;AAED;;;;;;AAIA,SAASQ,WAAT,CAAqBJ,GAArB;AACE,SAAOK,QAAQ,CAACL,GAAD,EAAM,EAAN,CAAf;AACD;AAED;;;;;;AAIA,SAASM,QAAT,CAAkBC,IAAlB;AACE,SAAOA,IAAG,CAACC,QAAJ,CAAa,EAAb,EAAiBC,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAP;AACD;;IAqCYC,QAAb;AAQE;;;;AAIA,oBAAYC,KAAZ,EAAmCC,QAAnC;AACE;AACA,SAAKC,CAAL,GAAS;AAACC,MAAAA,CAAC,EAAE,CAAJ;AAAOC,MAAAA,CAAC,EAAE,CAAV;AAAaC,MAAAA,CAAC,EAAE,CAAhB;AAAmBC,MAAAA,CAAC,EAAE;AAAtB,KAAT;AACA,QAAIN,KAAJ,EAAW,KAAKO,GAAL,CAASP,KAAT;;AAEX,SAAKC,QAAL,GAAgBA,QAAhB;AACA,SAAKO,YAAL,gBAAyB,KAAKN,CAA9B;AACD;AAED;;;;;;AArBF;;AAAA,SAyBSK,GAzBT,GAyBS,aAAIP,KAAJ;AACL,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B,UAAI,+BAA+BS,IAA/B,CAAoCT,KAApC,CAAJ,EAA0D;AACxD,aAAKU,SAAL,GAAiBV,KAAjB;AACD,OAFD,MAGK,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKW,SAAL,GAAiBX,KAAjB;AACD,OAFI,MAGA,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKY,SAAL,GAAiBZ,KAAjB;AACD;AACF,KAVD,MAWK,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAClC,UAAIA,KAAK,YAAYD,QAArB,EAA+B;AAC7B,aAAKc,IAAL,GAAYb,KAAK,CAACa,IAAlB;AACD,OAFD,MAGK,IAAI,OAAOb,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKc,GAAL,GAAWd,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKe,GAAL,GAAWf,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKgB,GAAL,GAAWhB,KAAX;AACD,OAFI,MAGA,IAAI,YAAYA,KAAhB,EAAuB;AAC1B,aAAKiB,MAAL,GAAcjB,KAAK,CAACiB,MAApB;AACD;AACF,KAhBI,MAiBA;AACH,YAAM,IAAIC,KAAJ,CAAU,qBAAV,CAAN;AACD;AACF;AAED;;;;;;AA3DF;;AAAA,SAiESC,UAjET,GAiES,oBAAWC,MAAX,EAA2BC,OAA3B,EAA4CrB,KAA5C;;;AACL,SAAKoB,MAAL,iBAAmB,KAAKA,MAAL,CAAnB,6BAAkCC,OAAlC,IAA4CrB,KAA5C;AACD;AAED;;;AArEF;;AAAA,SAwESsB,KAxET,GAwES;AACL,SAAKT,IAAL,GAAY,KAAKL,YAAjB;AACD;AAED;;;AA5EF;;AAAA,SA+ESe,KA/ET,GA+ES;AACL,WAAO,IAAIxB,QAAJ,CAAa,IAAb,CAAP;AACD;AAED;;;AAnFF;;AAAA,SAsFSyB,MAtFT,GAsFS;AACL,SAAKvB,QAAL,GAAgBwB,SAAhB;AACD;AAED;;;;AA1FF;;AAAA,WA8FgBC,QA9FhB,GA8FS,kBAAgBX,GAAhB;AACL,QAAMZ,CAAC,GAAGY,GAAG,CAACZ,CAAJ,GAAQ,EAAlB;AACA,QAAMC,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMsB,CAAC,GAAG5C,KAAK,CAACoB,CAAD,CAAf;AACA,QAAMyB,CAAC,GAAGzB,CAAC,GAAGwB,CAAd;AACA,QAAME,CAAC,GAAGxB,CAAC,IAAI,IAAID,CAAR,CAAX;AACA,QAAM0B,CAAC,GAAGzB,CAAC,IAAI,IAAIuB,CAAC,GAAGxB,CAAZ,CAAX;AACA,QAAM2B,CAAC,GAAG1B,CAAC,IAAI,IAAI,CAAC,IAAIuB,CAAL,IAAUxB,CAAlB,CAAX;AACA,QAAM4B,GAAG,GAAGL,CAAC,GAAG,CAAhB;AACA,QAAMM,CAAC,GAAG,CAAC5B,CAAD,EAAIyB,CAAJ,EAAOD,CAAP,EAAUA,CAAV,EAAaE,CAAb,EAAgB1B,CAAhB,EAAmB2B,GAAnB,CAAV;AACA,QAAME,CAAC,GAAG,CAACH,CAAD,EAAI1B,CAAJ,EAAOA,CAAP,EAAUyB,CAAV,EAAaD,CAAb,EAAgBA,CAAhB,EAAmBG,GAAnB,CAAV;AACA,QAAMG,CAAC,GAAG,CAACN,CAAD,EAAIA,CAAJ,EAAOE,CAAP,EAAU1B,CAAV,EAAaA,CAAb,EAAgByB,CAAhB,EAAmBE,GAAnB,CAAV;AACA,WAAO;AACLC,MAAAA,CAAC,EAAEjD,KAAK,CAACiD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CADH;AAELC,MAAAA,CAAC,EAAElD,KAAK,CAACkD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CAFH;AAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb;AAHH,KAAP;AAKD;AAED;;;;AAlHF;;AAAA,WAsHgBC,QAtHhB,GAsHS,kBAAgBtB,GAAhB;AACL,QAAMmB,CAAC,GAAGnB,GAAG,CAACmB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGpB,GAAG,CAACoB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGrB,GAAG,CAACqB,CAAJ,GAAQ,GAAlB;AACA,QAAMhD,GAAG,GAAGN,IAAI,CAACM,GAAL,CAAS8C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAMjD,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS+C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAME,KAAK,GAAGlD,GAAG,GAAGD,GAApB;AACA,QAAIoD,GAAG,GAAG,CAAV;AACA,QAAItC,KAAK,GAAGb,GAAZ;AACA,QAAIoD,UAAU,GAAGpD,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBkD,KAAK,GAAGlD,GAAzC;;AACA,YAAQA,GAAR;AACE,WAAKD,GAAL;AACEoD,QAAAA,GAAG,GAAG,CAAN,CADF;;AAEE;;AACF,WAAKL,CAAL;AACEK,QAAAA,GAAG,GAAG,CAACJ,CAAC,GAAGC,CAAL,IAAUE,KAAV,IAAmBH,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAY,CAA/B,CAAN;AACA;;AACF,WAAKD,CAAL;AACEI,QAAAA,GAAG,GAAG,CAACH,CAAC,GAAGF,CAAL,IAAUI,KAAV,GAAkB,CAAxB;AACA;;AACF,WAAKF,CAAL;AACEG,QAAAA,GAAG,GAAG,CAACL,CAAC,GAAGC,CAAL,IAAUG,KAAV,GAAkB,CAAxB;AACA;AAZJ;;AAcA,WAAO;AACLlC,MAAAA,CAAC,EAAGmC,GAAG,GAAG,EAAP,GAAa,GADX;AAELlC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAACgB,KAAK,GAAG,GAAT,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AArJF;;AAAA,WAyJgBwC,QAzJhB,GAyJS,kBAAgBzB,GAAhB;AACL,QAAMX,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMoC,CAAC,GAAG,CAAC,IAAIrC,CAAL,IAAUC,CAApB;AACA,QAAMqC,OAAO,GAAGD,CAAC,IAAI,CAAL,GAASA,CAAT,GAAc,IAAIA,CAAlC;;AAEA,QAAMF,UAAU,GAAGG,OAAO,GAAG,IAAV,GAAiB,CAAjB,GAAsBtC,CAAC,GAAGC,CAAL,GAAUqC,OAAlD;AACA,WAAO;AACLvC,MAAAA,CAAC,EAAEY,GAAG,CAACZ,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLE,MAAAA,CAAC,EAAEzD,KAAK,CAACyD,CAAC,GAAG,EAAL,EAAS,CAAT,EAAY,GAAZ;AAHH,KAAP;AAKD;AAED;;;;AAvKF;;AAAA,WA2KgBE,QA3KhB,GA2KS,kBAAgB3B,GAAhB;AACL,QAAMyB,CAAC,GAAGzB,GAAG,CAACyB,CAAJ,GAAQ,CAAlB;AACA,QAAMrC,CAAC,GAAIY,GAAG,CAACZ,CAAJ,IAAUqC,CAAC,IAAI,GAAN,GAAaA,CAAb,GAAiB,MAAMA,CAAhC,CAAD,GAAuC,GAAjD;;AAEA,QAAMF,UAAU,GAAIE,CAAC,GAAGrC,CAAJ,GAAQ,IAAT,GAAiB,CAAjB,GAAsB,IAAIA,CAAL,IAAWqC,CAAC,GAAGrC,CAAf,CAAxC;AACA,WAAO;AACLD,MAAAA,CAAC,EAAEa,GAAG,CAACb,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAAC,CAACyD,CAAC,GAAGrC,CAAL,IAAU,CAAX,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AAvLF;;AAAA,WA2LgBwC,WA3LhB,GA2LS,qBAAmB3B,MAAnB;AACL,QAAM4B,IAAI,GAAG5B,MAAM,GAAG,GAAtB;AACA,QAAIgB,CAAJ,EAAOC,CAAP,EAAUC,CAAV;;AACA,QAAIU,IAAI,GAAG,EAAX,EAAe;AACbZ,MAAAA,CAAC,GAAG,GAAJ;AACAC,MAAAA,CAAC,GAAG,CAAC,kBAAD,GAAsB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,CAAhC,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACsD,CAAD,CAAvF;AACAC,MAAAA,CAAC,GAAGU,IAAI,GAAG,EAAP,GAAY,CAAZ,GAAgB,CAAC,kBAAD,GAAsB,sBAAsBV,CAAC,GAAGU,IAAI,GAAC,EAA/B,CAAtB,GAA2D,qBAAqBjE,GAAG,CAACuD,CAAD,CAAvG;AACD,KAJD,MAIO;AACLF,MAAAA,CAAC,GAAG,qBAAqB,qBAAqBA,CAAC,GAAGY,IAAI,GAAC,EAA9B,CAArB,GAAyD,oBAAoBjE,GAAG,CAACqD,CAAD,CAApF;AACAC,MAAAA,CAAC,GAAG,oBAAoB,uBAAuBA,CAAC,GAAGW,IAAI,GAAC,EAAhC,CAApB,GAA0D,mBAAmBjE,GAAG,CAACsD,CAAD,CAApF;AACAC,MAAAA,CAAC,GAAG,GAAJ;AACD;;AACD,WAAO;AACLF,MAAAA,CAAC,EAAEjD,KAAK,CAACD,KAAK,CAACkD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CADH;AAELC,MAAAA,CAAC,EAAElD,KAAK,CAACD,KAAK,CAACmD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd,CAFH;AAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACD,KAAK,CAACoD,CAAD,CAAN,EAAW,CAAX,EAAc,GAAd;AAHH,KAAP;AAKD;AAEA;;;;AA9MH;;AAAA,WAkNgBW,WAlNhB,GAkNS,qBAAmBhC,GAAnB;AACL,QAAQmB,CAAR,GAAoBnB,GAApB,CAAQmB,CAAR;AAAA,QAAcE,CAAd,GAAoBrB,GAApB,CAAcqB;AACd,QAAMY,GAAG,GAAG,GAAZ;AACA,QAAIC,OAAO,GAAGtE,UAAd;AACA,QAAIuE,OAAO,GAAGtE,UAAd;AACA,QAAIkE,IAAJ;;AACA,WAAOI,OAAO,GAAGD,OAAV,GAAoBD,GAA3B,EAAgC;AAC9BF,MAAAA,IAAI,GAAG,CAACI,OAAO,GAAGD,OAAX,IAAsB,GAA7B;;AACA,UAAMlC,IAAG,GAAGf,QAAQ,CAAC6C,WAAT,CAAqBC,IAArB,CAAZ;;AACA,UAAK/B,IAAG,CAACqB,CAAJ,GAAQrB,IAAG,CAACmB,CAAb,IAAoBE,CAAC,GAAGF,CAA5B,EAAgC;AAC9BgB,QAAAA,OAAO,GAAGJ,IAAV;AACD,OAFD,MAEO;AACLG,QAAAA,OAAO,GAAGH,IAAV;AACD;AACF;;AACD,WAAOA,IAAP;AACD,GAlOH;;AAAA;AAAA;AAAA,SAoOE;AACE;AACA,UAAM7C,KAAK,GAAG,KAAKE,CAAnB;AACA,aAAO;AAACC,QAAAA,CAAC,EAAEH,KAAK,CAACG,CAAV;AAAaC,QAAAA,CAAC,EAAEJ,KAAK,CAACI,CAAtB;AAAyBC,QAAAA,CAAC,EAAEL,KAAK,CAACK;AAAlC,OAAP;AACD,KAxOH;AAAA,SA0OE,aAAe6C,QAAf;AACE,UAAMC,QAAQ,GAAG,KAAKjD,CAAtB;AAEAgD,MAAAA,QAAQ,gBAAQC,QAAR,EAAqBD,QAArB,CAAR;AAEA;;AACA,UAAI,KAAKjD,QAAT,EAAmB;AACjB;AACA,YAAImD,OAAO,GAAiB;AAC1BjD,UAAAA,CAAC,EAAE,KADuB;AAE1BE,UAAAA,CAAC,EAAE,KAFuB;AAG1BD,UAAAA,CAAC,EAAE,KAHuB;AAI1BE,UAAAA,CAAC,EAAE;AAJuB,SAA5B;;AAOA,aAAK,IAAI+C,GAAT,IAAgBF,QAAhB,EAA0B;AACxBC,UAAAA,OAAO,CAACC,GAAD,CAAP,GAAeH,QAAQ,CAACG,GAAD,CAAR,IAAiBF,QAAQ,CAACE,GAAD,CAAxC;AACD;;AAED,aAAKnD,CAAL,GAASgD,QAAT,CAbiB;;AAejB,YAAIE,OAAO,CAACjD,CAAR,IAAaiD,OAAO,CAAChD,CAArB,IAA0BgD,OAAO,CAAC/C,CAAlC,IAAuC+C,OAAO,CAAC9C,CAAnD,EAAsD,KAAKL,QAAL,CAAc,IAAd,EAAoBmD,OAApB;AACvD,OAhBD,MAgBO;AACL,aAAKlD,CAAL,GAASgD,QAAT;AACD;AACF;AAnQH;AAAA;AAAA,SAqQE;AACE,0BAAW,KAAKhD,CAAhB;AACD,KAvQH;AAAA,SAyQE,aAAgBF,KAAhB;AACE,WAAKe,GAAL,GAAWf,KAAX;AACD;AA3QH;AAAA;AAAA,SA6QE;AACE,aAAO,KAAKE,CAAL,CAAOC,CAAd;AACD,KA/QH;AAAA,SAiRE,aAAeH,KAAf;AACE,WAAKe,GAAL,GAAW;AAAEZ,QAAAA,CAAC,EAAEH;AAAL,OAAX;AACD;AAnRH;AAAA;AAAA,SAqRE;AACE,aAAO,KAAKE,CAAL,CAAOE,CAAd;AACD,KAvRH;AAAA,SAyRE,aAAsBJ,KAAtB;AACE,WAAKe,GAAL,GAAW;AAAEX,QAAAA,CAAC,EAAEJ;AAAL,OAAX;AACD;AA3RH;AAAA;AAAA,SA6RE;AACE,aAAO,KAAKE,CAAL,CAAOG,CAAd;AACD,KA/RH;AAAA,SAiSE,aAAiBL,KAAjB;AACE,WAAKe,GAAL,GAAW;AAAEV,QAAAA,CAAC,EAAEL;AAAL,OAAX;AACD;AAnSH;AAAA;AAAA,SAqSE;AACE,aAAO,KAAKE,CAAL,CAAOI,CAAd;AACD,KAvSH;AAAA,SAySE,aAAiBN,KAAjB;AACE,WAAKe,GAAL,gBAAgB,KAAKA,GAArB;AAA0BT,QAAAA,CAAC,EAAEN;AAA7B;AACD;AA3SH;AAAA;AAAA,SA6SE;AACE,aAAOD,QAAQ,CAAC+C,WAAT,CAAqB,KAAKhC,GAA1B,CAAP;AACD,KA/SH;AAAA,SAiTE,aAAkBd,KAAlB;AACE,WAAKc,GAAL,GAAWf,QAAQ,CAAC6C,WAAT,CAAqB5C,KAArB,CAAX;AACD;AAnTH;AAAA;AAAA,SAqTE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACmB,CAAX;AACD,KAxTH;AAAA,SA0TE,aAAejC,KAAf;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BmB,QAAAA,CAAC,EAAEjC;AAA7B;AACD;AA5TH;AAAA;AAAA,SA8TE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACoB,CAAX;AACD,KAjUH;AAAA,SAmUE,aAAiBlC,KAAjB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BoB,QAAAA,CAAC,EAAElC;AAA7B;AACD;AArUH;AAAA;AAAA,SAuUE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACqB,CAAX;AACD,KA1UH;AAAA,SA4UE,aAAgBnC,KAAhB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BqB,QAAAA,CAAC,EAAEnC;AAA7B;AACD;AA9UH;AAAA;AAAA,SAgVE;AACE,+BAAkBD,QAAQ,CAAC2B,QAAT,CAAkB,KAAKxB,CAAvB,CAAlB;AAAA,UAAO+B,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLF,QAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAD,CADH;AAELC,QAAAA,CAAC,EAAEpD,KAAK,CAACoD,CAAD,CAFH;AAGLC,QAAAA,CAAC,EAAErD,KAAK,CAACqD,CAAD;AAHH,OAAP;AAKD,KAvVH;AAAA,SAyVE,aAAenC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAACqC,QAAT,CAAkBpC,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;AAFlD;AAID;AA9VH;AAAA;AAAA,SAgWE;AACE,0BAAY,KAAKQ,GAAjB;AAAsBR,QAAAA,CAAC,EAAE,KAAKgD;AAA9B;AACD,KAlWH;AAAA,SAoWE,aAAgBtD,KAAhB;AACE,WAAKc,GAAL,GAAWd,KAAX;AACD;AAtWH;AAAA;AAAA,SAwWE;AACE,+BAAkBD,QAAQ,CAACyC,QAAT,CAAkB,KAAKtC,CAAvB,CAAlB;AAAA,UAAOC,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaqC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLtC,QAAAA,CAAC,EAAErB,KAAK,CAACqB,CAAD,CADH;AAELC,QAAAA,CAAC,EAAEtB,KAAK,CAACsB,CAAD,CAFH;AAGLqC,QAAAA,CAAC,EAAE3D,KAAK,CAAC2D,CAAD;AAHH,OAAP;AAKD,KA/WH;AAAA,SAiXE,aAAezC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAAC4C,QAAT,CAAkB3C,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAK6B,KAA/B,GAAuCtD,KAAK,CAACM;AAFlD;AAID;AAtXH;AAAA;AAAA,SAwXE;AACE,0BAAY,KAAKU,GAAjB;AAAsBV,QAAAA,CAAC,EAAE,KAAKgD;AAA9B;AACD,KA1XH;AAAA,SA4XE,aAAgBtD,KAAhB;AACE,WAAKgB,GAAL,GAAWhB,KAAX;AACD;AA9XH;AAAA;AAAA,SAgYE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACmB,CAAlB,UAAwBnB,GAAG,CAACoB,CAA5B,UAAkCpB,GAAG,CAACqB,CAAtC;AACD,KAnYH;AAAA,SAqYE,aAAqBnC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAItB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,CAAjB;;AACA,UAAIiD,KAAK,GAAGzF,oBAAoB,CAAC0F,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;AAC5CiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGvF,qBAAqB,CAACwF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;AAClDiC,QAAAA,CAAC,GAAG7C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACArB,QAAAA,CAAC,GAAG9C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApB,QAAAA,CAAC,GAAG/C,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKzC,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAzZH;AAAA;AAAA,SA2ZE;AACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAACxB,CAApB,UAA0BwB,IAAI,CAACvB,CAA/B,UAAqCuB,IAAI,CAACtB,CAA1C,UAAgDsB,IAAI,CAACnD,CAArD;AACD,KA9ZH;AAAA,SAgaE,aAAsBN,KAAtB;AACE,WAAKW,SAAL,GAAiBX,KAAjB;AACD;AAlaH;AAAA;AAAA,SAoaE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,mBAAYnB,QAAQ,CAACmB,GAAG,CAACmB,CAAL,CAApB,GAAgCtC,QAAQ,CAACmB,GAAG,CAACoB,CAAL,CAAxC,GAAoDvC,QAAQ,CAACmB,GAAG,CAACqB,CAAL,CAA5D;AACD,KAvaH;AAAA,SAyaE,aAAqBnC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAItB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,GAAjB;;AACA,UAAIiD,KAAK,GAAGjF,WAAW,CAACkF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACnCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGhF,WAAW,CAACiF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OALI,MAMA,IAAIA,KAAK,GAAG/E,WAAW,CAACgF,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACD,OAJI,MAKA,IAAIA,KAAK,GAAG9E,WAAW,CAAC+E,IAAZ,CAAiBxD,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACArB,QAAAA,CAAC,GAAGzC,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACApB,QAAAA,CAAC,GAAG1C,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACAjD,QAAAA,CAAC,GAAGb,WAAW,CAAC8D,KAAK,CAAC,CAAD,CAAN,CAAf;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKzC,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAAEA,CAAC,GAAG;AAAjB,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAxcH;AAAA;AAAA,SA0cE;AACE,UAAMuC,IAAI,GAAG,KAAKA,IAAlB;AACA,mBAAW9D,QAAQ,CAAC8D,IAAI,CAACxB,CAAN,CAAnB,GAA8BtC,QAAQ,CAAC8D,IAAI,CAACvB,CAAN,CAAtC,GAAiDvC,QAAQ,CAAC8D,IAAI,CAACtB,CAAN,CAAzD,GAAoExC,QAAQ,CAACZ,KAAK,CAAC0E,IAAI,CAACnD,CAAL,GAAS,GAAV,CAAN,CAA5E;AACD,KA7cH;AAAA,SA+cE,aAAsBN,KAAtB;AACE,WAAKU,SAAL,GAAiBV,KAAjB;AACD;AAjdH;AAAA;AAAA,SAmdE;AACE,UAAMgB,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACb,CAAlB,UAAwBa,GAAG,CAACZ,CAA5B,WAAmCY,GAAG,CAACyB,CAAvC;AACD,KAtdH;AAAA,SAwdE,aAAqBzC,KAArB;AACE,UAAIuD,KAAJ;AACA,UAAIpD,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUqC,CAAV;AAAA,UAAanC,CAAC,GAAG,CAAjB;;AACA,UAAIiD,KAAK,GAAGtF,oBAAoB,CAACuF,IAArB,CAA0BxD,KAA1B,CAAZ,EAA8C;AAC5CG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGrF,qBAAqB,CAACsF,IAAtB,CAA2BxD,KAA3B,CAAZ,EAA+C;AAClDG,QAAAA,CAAC,GAAGf,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAnD,QAAAA,CAAC,GAAGhB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAd,QAAAA,CAAC,GAAGrD,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjD,QAAAA,CAAC,GAAGlB,SAAS,CAACmE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAKvC,GAAL,GAAW;AAACb,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOqC,UAAAA,CAAC,EAADA,CAAP;AAAUnC,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AA5eH;AAAA;AAAA,SA8eE;AACE,UAAMwC,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAACvD,CAApB,UAA0BuD,IAAI,CAACtD,CAA/B,WAAsCsD,IAAI,CAACjB,CAA3C,WAAkDiB,IAAI,CAACpD,CAAvD;AACD,KAjfH;AAAA,SAmfE,aAAsBN,KAAtB;AACE,WAAKY,SAAL,GAAiBZ,KAAjB;AACD;AArfH;;AAAA;AAAA;;IC7Fa2D,oBAAoB,GAAG;AAClCC,EAAAA,WAAW,EAAE,KADqB;AAElCC,EAAAA,UAAU,EAAE,OAFsB;AAGlCC,EAAAA,cAAc,EAAE,IAHkB;AAIlCC,EAAAA,cAAc,EAAE;AAJkB,CAA7B;AAOP;;;;;AAIA,SAAgBC,gBAAgBC;;;AAC9B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgBC,oBAAoBH;;;AAClC,MAAMI,KAAN,GAAwFJ,KAAxF,CAAMI,KAAN;AAAA,MAAyBC,UAAzB,GAAwFL,KAAxF,CAAaK,UAAb;AAAA,MAAqCC,WAArC,GAAwFN,KAAxF,CAAqCM,WAArC;AAAA,MAAkDC,YAAlD,GAAwFP,KAAxF,CAAkDO,YAAlD;AAAA,MAAgEC,OAAhE,GAAwFR,KAAxF,CAAgEQ,OAAhE;AAAA,MAAyEb,WAAzE,GAAwFK,KAAxF,CAAyEL,WAAzE;AACA,MAAIc,MAAJ;;AACA,MAAIT,KAAK,CAACU,SAAV,EAAqB;AACnBD,IAAAA,MAAM,GAAGL,KAAK,GAAG,EAAjB;AACD,GAFD,MAEO;AAAA;;AACLK,IAAAA,MAAM,0BAAGT,KAAK,CAACW,YAAT,kCAAyBP,KAA/B;AACD;;AAED,MAAMQ,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;;AAEAI,EAAAA,UAAU,kBAAGA,UAAH,0BAAiBG,OAAO,GAAG,CAAV,GAAcD,YAAY,GAAG,CAAxD;;AACA,MAAIZ,WAAW,KAAK,QAApB,EAA8B;AAC5B,WAAO;AACLkB,MAAAA,WAAW,EAAEb,KAAK,CAACQ,OAAN,GAAgBR,KAAK,CAACO,YAD9B;AAELO,MAAAA,WAAW,EAAEV,KAAK,GAAGI,OAAO,GAAG,CAAlB,GAAsBD,YAAY,GAAG,CAF7C;AAGLH,MAAAA,KAAK,EAAEA,KAHF;AAILW,MAAAA,MAAM,EAAEX,KAJH;AAKLY,MAAAA,EAAE,EAAEZ,KAAK,GAAG,CALP;AAMLa,MAAAA,EAAE,EAAEb,KAAK,GAAG,CANP;AAOLc,MAAAA,MAAM,EAAEd,KAAK,GAAG,CAAR,GAAYE,WAAW,GAAG;AAP7B,KAAP;AASD,GAVD,MAUO;AACL,WAAO;AACLO,MAAAA,WAAW,EAAER,UAAU,GAAG,CADrB;AAELS,MAAAA,WAAW,EAAEL,MAAM,GAAGJ,UAFjB;AAGLa,MAAAA,MAAM,EAAEb,UAAU,GAAG,CAHhB;AAILc,MAAAA,CAAC,EAAE,CAJE;AAKLC,MAAAA,CAAC,EAAE,CALE;AAMLhB,MAAAA,KAAK,EAAEQ,YAAY,GAAGP,UAAH,GAAgBI,MAN9B;AAOLM,MAAAA,MAAM,EAAEH,YAAY,GAAGH,MAAH,GAAYJ;AAP3B,KAAP;AASD;AACF;AAED;;;;;;AAKA,SAAgBgB,sBAAsBrB,OAA+BsB;AACnE,MAAM1E,IAAI,GAAG0E,KAAK,CAAC1E,IAAnB;AACA,MAAMC,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;;AAEA,UAAQmD,KAAK,CAACJ,UAAd;AACE,SAAK,KAAL;AACE,aAAO/C,GAAG,CAACmB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOnB,GAAG,CAACoB,CAAJ,GAAQ,IAAf;;AACF,SAAK,MAAL;AACE,aAAOpB,GAAG,CAACqB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOtB,IAAI,CAACP,CAAL,GAAS,GAAhB;;AACF,SAAK,QAAL;AACE,UAAQwD,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,UAAMyB,gBAAgB,GAAGzB,cAAc,GAAGD,cAA1C;AACA,UAAM2B,OAAO,GAAI,CAACF,KAAK,CAACtE,MAAN,GAAe6C,cAAhB,IAAkC0B,gBAAnC,GAAuD,GAAvE,CAHF;;AAKE,aAAO3G,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASuG,OAAT,EAAkB,GAAlB,CAAZ,CAAP;;AACF,SAAK,KAAL;AACE,aAAO5E,IAAI,CAACV,CAAL,IAAU,GAAjB;;AACF,SAAK,YAAL;AACE,aAAOU,IAAI,CAACT,CAAZ;;AACF,SAAK,OAAL;AACA;AACE,aAAOS,IAAI,CAACR,CAAZ;AArBJ;AAuBD;AAED;;;;;;;AAMA,SAAgBqF,wBAAwBzB,OAA+BmB,GAAWC;AAChF,6BAAqCjB,mBAAmB,CAACH,KAAD,CAAxD;AAAA,MAAQc,WAAR,wBAAQA,WAAR;AAAA,MAAqBD,WAArB,wBAAqBA,WAArB;;AACA,MAAIa,SAAJ;;AACA,MAAI1B,KAAK,CAACC,eAAN,KAA0B,YAA9B,EAA4C;AAC1CyB,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKN,CAAL,GAASN,WAAT,GAAuBD,WAAnC;AACD,GAFD,MAEO;AACLa,IAAAA,SAAS,GAAGP,CAAC,GAAGN,WAAhB;AACD;;;AAEDa,EAAAA,SAAS,GAAG9G,IAAI,CAACM,GAAL,CAASN,IAAI,CAACK,GAAL,CAASyG,SAAT,EAAoBZ,WAApB,CAAT,EAA2C,CAA3C,CAAZ;AACA,MAAMU,OAAO,GAAG5G,IAAI,CAACC,KAAL,CAAY,MAAMiG,WAAP,GAAsBY,SAAjC,CAAhB;;AACA,UAAQ1B,KAAK,CAACJ,UAAd;AACE,SAAK,QAAL;AACE,UAAQC,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,UAAMyB,gBAAgB,GAAGzB,cAAc,GAAGD,cAA1C;AACA,aAAOA,cAAc,GAAG0B,gBAAgB,IAAIC,OAAO,GAAG,GAAd,CAAxC;;AACF,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,IAAjB;;AACF;AACE,aAAOA,OAAP;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgBG,wBAAwB3B,OAA+BsB;AACrE,8BAAoDnB,mBAAmB,CAACH,KAAD,CAAvE;AAAA,MAAQI,KAAR,yBAAQA,KAAR;AAAA,MAAeW,MAAf,yBAAeA,MAAf;AAAA,MAAuBD,WAAvB,yBAAuBA,WAAvB;AAAA,MAAoCD,WAApC,yBAAoCA,WAApC;;AACA,MAAMD,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,MAAM2B,WAAW,GAAGP,qBAAqB,CAACrB,KAAD,EAAQsB,KAAR,CAAzC;AACA,MAAMO,QAAQ,GAAGjB,YAAY,GAAGR,KAAK,GAAG,CAAX,GAAeW,MAAM,GAAG,CAArD;AACA,MAAIW,SAAS,GAAGb,WAAW,GAAIe,WAAW,GAAG,GAAf,GAAsBd,WAApD;;AACA,MAAIF,YAAJ,EAAkB;AAChBc,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKA,SAAL,GAAiBZ,WAAjB,GAA+BD,WAAW,GAAG,CAAzD;AACD;;AACD,SAAO;AACLM,IAAAA,CAAC,EAAEP,YAAY,GAAGiB,QAAH,GAAcH,SADxB;AAELN,IAAAA,CAAC,EAAER,YAAY,GAAGc,SAAH,GAAeG;AAFzB,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,kBAAkB9B,OAA+BsB;AAC/D,MAAMxE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;AACA,MAAMD,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;;AAEA,UAAQmD,KAAK,CAACJ,UAAd;AACE,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAY,CAAZ,SAAmB/C,GAAG,CAACoB,CAAvB,SAA8BpB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAc,GAAd,SAAuBrB,GAAG,CAACoB,CAA3B,SAAkCpB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuB,CAAvB,SAA8BnB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyB,GAAzB,SAAkCnB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,MAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuBnB,GAAG,CAACoB,CAA3B,SAAkC,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcpB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoC,GAApC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,YAAapB,GAAG,CAACmB,CAAjB,SAAwBnB,GAAG,CAACoB,CAA5B,SAAmCpB,GAAG,CAACqB,CAAvC,SADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoCpB,GAAG,CAACqB,CAAxC,OAFK,CAAP;;AAIF,SAAK,QAAL;AACE,UAAM6D,KAAK,GAAG,EAAd;AACA,UAAM9G,GAAG,GAAG+E,KAAK,CAACH,cAAlB;AACA,UAAM3E,GAAG,GAAG8E,KAAK,CAACF,cAAlB;AACA,UAAMkC,QAAQ,GAAG,CAAjB;AACA,UAAMC,KAAK,GAAG/G,GAAG,GAAGD,GAApB;;AACA,WAAK,IAAI+B,MAAM,GAAG/B,GAAb,EAAkBiH,IAAI,GAAG,CAA9B,EAAiClF,MAAM,GAAG9B,GAA1C,EAA+C8B,MAAM,IAAIiF,KAAK,GAAGD,QAAlB,EAA4BE,IAAI,IAAI,CAAnF,EAAsF;AACpF,oCAAoBpG,QAAQ,CAAC6C,WAAT,CAAqB3B,MAArB,CAApB;AAAA,YAAQgB,CAAR,yBAAQA,CAAR;AAAA,YAAWC,CAAX,yBAAWA,CAAX;AAAA,YAAcC,CAAd,yBAAcA,CAAd;;AACA6D,QAAAA,KAAK,CAACI,IAAN,CAAW,CAAE,MAAMH,QAAN,GAAiBE,IAAnB,WAAgClE,CAAhC,SAAqCC,CAArC,SAA0CC,CAA1C,OAAX;AACD;;AACD,aAAO6D,KAAP;;AACF,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,EAAS,MAAT,CADK,EAEL,CAAC,MAAD,EAAS,MAAT,CAFK,EAGL,CAAC,MAAD,EAAS,MAAT,CAHK,EAIL,CAAC,EAAD,EAAS,MAAT,CAJK,EAKL,CAAC,MAAD,EAAS,MAAT,CALK,EAML,CAAC,MAAD,EAAS,MAAT,CANK,EAOL,CAAC,GAAD,EAAS,MAAT,CAPK,CAAP;;AASF,SAAK,YAAL;AACE,UAAMK,KAAK,GAAGtG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,CAAd;AAAiBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAAxB,OAAlB,CAAd;AACA,UAAMiG,OAAO,GAAGvG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,GAAd;AAAmBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAA1B,OAAlB,CAAhB;AACA,aAAO,CACL,CAAC,CAAD,WAAWgG,KAAK,CAAClG,CAAjB,SAAsBkG,KAAK,CAACjG,CAA5B,UAAkCiG,KAAK,CAAC5D,CAAxC,QADK,EAEL,CAAC,GAAD,WAAa6D,OAAO,CAACnG,CAArB,SAA0BmG,OAAO,CAAClG,CAAlC,UAAwCkG,OAAO,CAAC7D,CAAhD,QAFK,CAAP;;AAIF,SAAK,OAAL;AACA;AACE,UAAMzB,GAAG,GAAGjB,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAEW,GAAG,CAACX,CAAlB;AAAqBC,QAAAA,CAAC,EAAE;AAAxB,OAAlB,CAAZ;AACA,aAAO,CACL,CAAC,CAAD,EAAI,MAAJ,CADK,EAEL,CAAC,GAAD,WAAaW,GAAG,CAACb,CAAjB,SAAsBa,GAAG,CAACZ,CAA1B,UAAgCY,GAAG,CAACyB,CAApC,QAFK,CAAP;AApDJ;AAyDD;AAED;;;;;AAIA,SAAgB8D,wBAAwBtC;AACtC,MAAMY,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,SAAO;AACLsC,IAAAA,EAAE,EAAE,IADC;AAELC,IAAAA,EAAE,EAAE5B,YAAY,GAAG,MAAH,GAAY,IAFvB;AAGL6B,IAAAA,EAAE,EAAE7B,YAAY,GAAG,IAAH,GAAU,MAHrB;AAIL8B,IAAAA,EAAE,EAAE;AAJC,GAAP;AAMD;;ACxOD;;;;;AAKC,SAAgBC,iBAAiB3C,OAA8BjE;AAC9D,WAAShB,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,WAAON,IAAI,CAACK,GAAL,CAASL,IAAI,CAACM,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;;AACD,UAAO8E,KAAK,CAACJ,UAAb;AACE,SAAK,KAAL;AACE,aAAO7E,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,YAAL;AACA,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,KAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,CAAX,CAAZ;;AACF,SAAK,QAAL;AAAe;AACb,UAAQ8D,cAAR,GAA2CG,KAA3C,CAAQH,cAAR;AAAA,UAAwBC,cAAxB,GAA2CE,KAA3C,CAAwBF,cAAxB;AACA,aAAO/E,KAAK,CAACgB,KAAD,EAAQ8D,cAAR,EAAwBC,cAAxB,CAAZ;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgB8C,6BAA6B5C,OAA8B6C;AACzE;AACA,MAAI,CAAC,gBAAgBrG,IAAhB,CAAsBqG,CAAD,CAAIzD,GAAzB,CAAL,EAAoC;AAClC,WAAO,CAAP;AACD;;AACD,MAAI0D,MAAJ;;AACA,MAAI9C,KAAK,CAACJ,UAAN,KAAqB,OAAzB,EAAkC;AAChCkD,IAAAA,MAAM,GAAG,CAAT;AACD,GAFD,MAEO,IAAI9C,KAAK,CAACJ,UAAN,KAAqB,QAAzB,EAAmC;AACxCkD,IAAAA,MAAM,GAAG,CAAT;AACD,GAFM,MAEA;AACLA,IAAAA,MAAM,GAAG,CAAT;AACD;;AAED,MAAIC,MAAM,GAAIF,CAAC,CAACE,MAAhB;AACA,MAAIC,WAAW,GAAGD,MAAM,CAAChH,KAAP,CAAaH,QAAb,EAAlB;;AACA,MAAImH,MAAM,CAACE,cAAP,KAA0BzF,SAA9B,EAAyC;AACvCwF,IAAAA,WAAW,GAAGA,WAAW,CAACE,SAAZ,CAAsB,CAAtB,EAAyBH,MAAM,CAACE,cAAhC,IACZJ,CAAC,CAACzD,GAAF,CAAMxD,QAAN,EADY,GAEZoH,WAAW,CAACE,SAAZ,CAAsBH,MAAM,CAACI,YAA7B,CAFF;AAGD,GAJD,MAIO;AACLH,IAAAA,WAAW,GAAGA,WAAW,CAACvC,MAAZ,GAAqB,CAArB,GAAyBqC,MAAzB,GAAkCE,WAAlC,GAAgDA,WAAW,GAAGH,CAAC,CAACzD,GAAF,CAAMxD,QAAN,EAA5E;AACD;;AACD,MAAMwH,QAAQ,GAAG,CAACJ,WAAlB;AACA,SAAOL,gBAAgB,CAAC3C,KAAD,EAAQoD,QAAR,CAAvB;AACD;AAED;;;;;;AAKC,SAAgBC,4BAA4BrD,OAA8B6C;AACzE;AACA,MAAM7E,CAAC,GAAG,8BAAV;AACA,MAAMgF,WAAW,GAAWH,CAAC,CAACS,aAAF,CAAgBC,OAAhB,CAAwB,MAAxB,CAA5B;;AACA,MAAI,CAACvF,CAAC,CAACxB,IAAF,CAAOwG,WAAP,CAAL,EAA0B;AACxB,WAAO,CAAP;AACD;;AACD,MAAMI,QAAQ,GAAG,CAACJ,WAAlB;AACA,SAAOL,gBAAgB,CAAC3C,KAAD,EAAQoD,QAAR,CAAvB;AACD;;AC7ED,IAAMI,GAAG,GAAG5I,IAAI,CAAC6I,EAAL,GAAU,CAAtB;AAGA;;AACA,IAAM1F,GAAG,GAAG,SAANA,GAAM,CAAC1B,CAAD,EAAYqH,CAAZ;AAAA,SAA0B,CAACrH,CAAC,GAAGqH,CAAJ,GAAQA,CAAT,IAAcA,CAAxC;AAAA,CAAZ;;;AAGA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAACxC,CAAD,EAAYC,CAAZ;AAAA,SAA0BxG,IAAI,CAACgJ,IAAL,CAAUzC,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAA1B;AAAA,CAAb;AAEA;;;;;;AAIA,SAASyC,cAAT,CAAwB7D,KAAxB;AACE,SAAOA,KAAK,CAACI,KAAN,GAAc,CAAd,GAAkBJ,KAAK,CAACQ,OAAxB,GAAkCR,KAAK,CAACO,YAAxC,GAAuDP,KAAK,CAACM,WAApE;AACD;AAED;;;;;;;;AAMA,SAAgBwD,mBAAmB9D,OAA4BmB,GAAWC;AACxE,4BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,uBAAQA,EAAR;AAAA,MAAYC,EAAZ,uBAAYA,EAAZ;;AACA,MAAMjD,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAOuD,IAAI,CAAC3C,EAAE,GAAGG,CAAN,EAASF,EAAE,GAAGG,CAAd,CAAJ,GAAuBpD,CAA9B;AACD;AAED;;;;;AAIA,SAAgB+F,mBAAmB/D;AACjC,MAAMhC,CAAC,GAAGgC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAO;AACLA,IAAAA,KAAK,EAAEJ,KAAK,CAACI,KADR;AAELc,IAAAA,MAAM,EAAElD,CAAC,GAAGgC,KAAK,CAACM,WAFb;AAGLU,IAAAA,EAAE,EAAEhD,CAHC;AAILiD,IAAAA,EAAE,EAAEjD;AAJC,GAAP;AAMD;AAED;;;;;;AAKA,SAAgBgG,oBAAoBhE,OAA4BiE,OAAeC;AAC7E,MAAMC,UAAU,GAAGnE,KAAK,CAACmE,UAAzB;AACA,MAAMC,cAAc,GAAGpE,KAAK,CAACoE,cAA7B;;AAEA,MAAIF,MAAM,IAAIE,cAAc,KAAK,WAAjC,EACEH,KAAK,GAAGE,UAAU,GAAGF,KAArB,CADF;AAAA,OAGK,IAAIG,cAAc,KAAK,WAAvB,EACHH,KAAK,GAAI,MAAME,UAAP,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIC,MAAM,IAAIE,cAAc,KAAK,eAAjC,EACHH,KAAK,GAAIE,UAAU,GAAG,GAAd,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIG,cAAc,KAAK,eAAvB,EACHH,KAAK,GAAGE,UAAU,GAAGF,KAArB;AACF,SAAOlG,GAAG,CAACkG,KAAD,EAAQ,GAAR,CAAV;AACD;AAED;;;;;;AAKA,SAAgBI,uBAAuBrE,OAA4BsB;AACjE,MAAMxE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;;AACA,6BAAmBiH,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACA,MAAMsE,WAAW,GAAG,CAAC,MAAMN,mBAAmB,CAAChE,KAAD,EAAQlD,GAAG,CAACZ,CAAZ,EAAe,IAAf,CAA1B,KAAmDsH,GAAG,GAAG,GAAzD,CAApB;AACA,MAAMe,UAAU,GAAIzH,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB2E,WAAnC;AACA,MAAM0D,SAAS,GAAGxE,KAAK,CAACoE,cAAN,KAAyB,WAAzB,GAAuC,CAAC,CAAxC,GAA4C,CAA9D;AACA,SAAO;AACLjD,IAAAA,CAAC,EAAEH,EAAE,GAAGuD,UAAU,GAAG3J,IAAI,CAAC6J,GAAL,CAASH,WAAT,CAAb,GAAqCE,SADxC;AAELpD,IAAAA,CAAC,EAAEH,EAAE,GAAGsD,UAAU,GAAG3J,IAAI,CAAC8J,GAAL,CAASJ,WAAT,CAAb,GAAqCE;AAFxC,GAAP;AAID;AAED;;;;;;;AAMA,SAAgBG,uBAAuB3E,OAA4BmB,GAAWC;AAC5E,6BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACAmB,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;AACAC,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;;AAEA,MAAM/C,GAAG,GAAG2F,mBAAmB,CAAChE,KAAD,EAAQpF,IAAI,CAACgK,KAAL,CAAW,CAACxD,CAAZ,EAAe,CAACD,CAAhB,KAAsB,MAAMqC,GAA5B,CAAR,CAA/B;AAEA;;AACA,MAAMe,UAAU,GAAG3J,IAAI,CAACK,GAAL,CAAS0I,IAAI,CAACxC,CAAD,EAAIC,CAAJ,CAAb,EAAqBN,WAArB,CAAnB;AACA,SAAO;AACL5E,IAAAA,CAAC,EAAEtB,IAAI,CAACC,KAAL,CAAWwD,GAAX,CADE;AAELlC,IAAAA,CAAC,EAAEvB,IAAI,CAACC,KAAL,CAAY,MAAMiG,WAAP,GAAsByD,UAAjC;AAFE,GAAP;AAID;;ACvGD;;;;AAIA,SAAgBM,aAAa7E;;;AAC3B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgB4E,iBAAiB9E;AAC/B,MAAQI,KAAR,GAAoDJ,KAApD,CAAQI,KAAR;AAAA,MAAe2E,SAAf,GAAoD/E,KAApD,CAAe+E,SAAf;AAAA,MAA0BvE,OAA1B,GAAoDR,KAApD,CAA0BQ,OAA1B;AAAA,MAAmCD,YAAnC,GAAoDP,KAApD,CAAmCO,YAAnC;AACA,SAAO;AACLH,IAAAA,KAAK,EAAEA,KADF;AAELW,IAAAA,MAAM,EAAEgE,SAAF,WAAEA,SAAF,GAAe3E,KAFhB;AAGLc,IAAAA,MAAM,EAAEV,OAAO,GAAGD;AAHb,GAAP;AAKD;AAED;;;;;;;AAMA,SAAgByE,qBAAqBhF,OAA4BmB,GAAWC;AAC1E,0BAAkC0D,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,qBAAQA,KAAR;AAAA,MAAeW,MAAf,qBAAeA,MAAf;AAAA,MAAuBG,MAAvB,qBAAuBA,MAAvB;;AACA,MAAML,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,MAAMiE,QAAQ,GAAI,CAAChE,CAAC,GAAGN,WAAL,IAAoBoE,YAArB,GAAqC,GAAtD;AACA,MAAMG,QAAQ,GAAI,CAAChE,CAAC,GAAGP,WAAL,IAAoBqE,YAArB,GAAqC,GAAtD;AACA,SAAO;AACL/I,IAAAA,CAAC,EAAEvB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAASkK,QAAT,EAAmB,GAAnB,CAAZ,CADE;AAEL/I,IAAAA,CAAC,EAAExB,IAAI,CAACM,GAAL,CAAS,CAAT,EAAYN,IAAI,CAACK,GAAL,CAAS,MAAMmK,QAAf,EAAyB,GAAzB,CAAZ;AAFE,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,qBAAqBrF,OAA4BsB;AAC/D,2BAAkCwD,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,sBAAQA,KAAR;AAAA,MAAeW,MAAf,sBAAeA,MAAf;AAAA,MAAuBG,MAAvB,sBAAuBA,MAAvB;;AACA,MAAMpE,GAAG,GAAGwE,KAAK,CAACxE,GAAlB;AACA,MAAM+D,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,SAAO;AACLC,IAAAA,CAAC,EAAEN,WAAW,GAAI/D,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB8I,YAD5B;AAEL7D,IAAAA,CAAC,EAAEP,WAAW,IAAIqE,YAAY,GAAKpI,GAAG,CAACV,CAAJ,GAAQ,GAAT,GAAgB8I,YAApC;AAFT,GAAP;AAID;AAED;;;;;;AAKA,SAAgBI,gBAAgBtF,OAA4BsB;AAC1D,MAAMjD,GAAG,GAAGiD,KAAK,CAACjD,GAAlB;AACA,SAAO;AAEL,GACE,CAAC,CAAD,EAAI,MAAJ,CADF,EAEE,CAAC,GAAD,WAAaA,GAAb,gBAFF,CAFK;AAOL,GACE,CAAC,CAAD,EAAI,eAAJ,CADF,EAEE,CAAC,GAAD,EAAM,MAAN,CAFF,CAPK,CAAP;AAYD;;ACpFD;AACA;AACA;AACA,IAAIkH,aAAJ;AAEA;;;;;;;;;;;;;AAYA,SAAgBC,cAAcC;AAC5B,MAAI,CAACF,aAAL,EACEA,aAAa,GAAGG,QAAQ,CAACC,oBAAT,CAA8B,MAA9B,CAAhB;;AAEF,MAAMC,EAAE,GAAGC,MAAM,CAACC,SAAP,CAAiBC,SAA5B;AACA,MAAMC,QAAQ,GAAG,iCAAiCxJ,IAAjC,CAAsCoJ,EAAtC,CAAjB;AACA,MAAMK,KAAK,GAAG,oBAAoBzJ,IAApB,CAAyBoJ,EAAzB,CAAd;AACA,MAAMM,QAAQ,GAAGL,MAAM,CAACK,QAAxB;AACA,SAAQ,CAACF,QAAQ,IAAIC,KAAb,KAAwBV,aAAa,CAAC9E,MAAd,GAAuB,CAAhD,GAAyDyF,QAAQ,CAACC,QAAlE,UAA+ED,QAAQ,CAACE,IAAxF,GAA+FF,QAAQ,CAACG,QAAxG,GAAmHH,QAAQ,CAACI,MAA5H,GAAqIb,GAArI,GAA6IA,GAApJ;AACD;AAED;;;;;;;;;AAQA,SAAgBc,cAAcvF,IAAYC,IAAYC,QAAgBsF,YAAoBC;AACxF,MAAMC,YAAY,GAAGD,QAAQ,GAAGD,UAAX,IAAyB,GAAzB,GAA+B,CAA/B,GAAmC,CAAxD;AACAA,EAAAA,UAAU,IAAI5L,IAAI,CAAC6I,EAAL,GAAU,GAAxB;AACAgD,EAAAA,QAAQ,IAAI7L,IAAI,CAAC6I,EAAL,GAAU,GAAtB;AACA,MAAMlB,EAAE,GAAGvB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAASgC,QAAT,CAAzB;AACA,MAAMjE,EAAE,GAAGvB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS+B,QAAT,CAAzB;AACA,MAAMhE,EAAE,GAAGzB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAAS+B,UAAT,CAAzB;AACA,MAAM9D,EAAE,GAAGzB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS8B,UAAT,CAAzB;AACA,gBAAYjE,EAAZ,SAAkBC,EAAlB,WAA0BtB,MAA1B,SAAoCA,MAApC,WAAgDwF,YAAhD,WAAkEjE,EAAlE,SAAwEC,EAAxE;AACD;AAED;;;;;;;;AAOA,SAAgBiE,iBAAiB3G,OAAuCmB,GAAWC,GAAWwF;AAC5F,OAAK,IAAIlJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkJ,eAAe,CAACnG,MAApC,EAA4C/C,CAAC,EAA7C,EAAiD;AAC/C,QAAMmJ,EAAE,GAAGD,eAAe,CAAClJ,CAAD,CAAf,CAAmByD,CAAnB,GAAuBA,CAAlC;AACA,QAAM2F,EAAE,GAAGF,eAAe,CAAClJ,CAAD,CAAf,CAAmB0D,CAAnB,GAAuBA,CAAlC;AACA,QAAMuC,IAAI,GAAG/I,IAAI,CAACgJ,IAAL,CAAUiD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAb;;AACA,QAAInD,IAAI,GAAG3D,KAAK,CAACO,YAAjB,EAA+B;AAC7B,aAAO7C,CAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;SChEeqJ,gBAAgB/G;AAC9B,SAAO;AACLgH,IAAAA,SAAS,EAAE,YADN;AAELC,IAAAA,MAAM,EAAMjH,KAAK,CAACM,WAAZ,iBAAqCN,KAAK,CAACkH;AAF5C,GAAP;AAID;AAKD,SAAgBC,YAAYC,MAAuB5C,WAAmBzC;AACpE,SAAWqF,IAAX,kBAA8B5C,SAA9B,UAA8CzC,KAAK,CAACsF,GAAN,CAAU;AAAA,QAAEC,CAAF;AAAA,QAAKC,GAAL;AAAA,WAAkBA,GAAlB,SAA2BD,CAA3B;AAAA,GAAV,EAA4CE,IAA5C,CAAiD,GAAjD,CAA9C;AACD;AAED,SAAgBC,SAAS1L;AACvB,MAAI,OAAOA,KAAP,KAAkB,QAAtB,EACE,OAAOA,KAAP;AACF,SAAWA,KAAX;AACD;;ICOY2L,4BAA4B,GAA0B;AACjEtH,EAAAA,KAAK,EAAE,GAD0D;AAEjEW,EAAAA,MAAM,EAAE,GAFyD;AAGjEO,EAAAA,KAAK,EAAE,MAH0D;AAIjEqG,EAAAA,MAAM,EAAE,EAJyD;AAKjEnH,EAAAA,OAAO,EAAE,CALwD;AAMjEP,EAAAA,eAAe,EAAE,UANgD;AAOjEiH,EAAAA,WAAW,EAAE,MAPoD;AAQjE5G,EAAAA,WAAW,EAAE,CARoD;AASjEC,EAAAA,YAAY,EAAE,CATmD;AAUjEqH,EAAAA,kBAAkB,EAAE,IAV6C;AAWjEC,EAAAA,SAAS,EAAE,IAXsD;AAYjEC,EAAAA,WAAW,EAAE;AAAC3G,IAAAA,CAAC,EAAE,CAAJ;AAAOC,IAAAA,CAAC,EAAE;AAAV,GAZoD;AAajE2G,EAAAA,cAAc,EAAE,IAbiD;AAcjE5D,EAAAA,UAAU,EAAE,CAdqD;AAejEC,EAAAA,cAAc,EAAE,eAfiD;AAgBjE/D,EAAAA,UAAU,EAAE,IAhBqD;AAiBjEH,EAAAA,YAAY,EAAE,EAjBmD;AAkBjE6E,EAAAA,SAAS,EAAE;AAlBsD,CAA5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 2e10f52..75bc8c8 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -425,11 +425,26 @@ class IroColor { } get kelvin() { - return IroColor.rgbToKelvin(this.rgb); + /** Rgb to kelvin conversion is a little funky, producing results + * that differ from the original value. + * Check if rgb values are equal and return RGB to kelvin conversion + * only if necessary + */ + let res; + let rgb = IroColor.kelvinToRgb(this._kelvin); + + if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { + res = this._kelvin; + } else { + res = IroColor.rgbToKelvin(this.rgb); + } + + return res; } set kelvin(value) { this.rgb = IroColor.kelvinToRgb(value); + this._kelvin = value; } get red() { diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index f498257..0714f98 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","res","_kelvin","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 72916b9..9dcaa6a 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -448,10 +448,25 @@ }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + /** Rgb to kelvin conversion is a little funky, producing results + * that differ from the original value. + * Check if rgb values are equal and return RGB to kelvin conversion + * only if necessary + */ + var res; + var rgb = IroColor.kelvinToRgb(this._kelvin); + + if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { + res = this._kelvin; + } else { + res = IroColor.rgbToKelvin(this.rgb); + } + + return res; }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); + this._kelvin = value; } }, { key: "red", diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index c177bad..b81b6ef 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return IroColor.rgbToKelvin(this.rgb);\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape} = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/src/color.ts b/src/color.ts index af4f1da..0d6234c 100644 --- a/src/color.ts +++ b/src/color.ts @@ -105,6 +105,7 @@ export interface HslColor { export interface KelvinColor { kelvin: number; + _kelvin: number; } export type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string; @@ -116,6 +117,7 @@ export class IroColor { private initialValue: HsvColor; public index: number; + public _kelvin: number; /** * @constructor Color object @@ -411,11 +413,29 @@ export class IroColor { } public get kelvin(): number { - return IroColor.rgbToKelvin(this.rgb); + /** Rgb to kelvin conversion is a little funky, producing results + * that differ from the original value. + * Check if rgb values are equal and return RGB to kelvin conversion + * only if necessary + */ + let res: number; + let rgb = IroColor.kelvinToRgb(this._kelvin); + + if ( + rgb.r === this.rgb.r && + rgb.g === this.rgb.g && + rgb.b === this.rgb.b + ) { + res = this._kelvin; + } else { + res = IroColor.rgbToKelvin(this.rgb); + } + return res; } public set kelvin(value: number) { this.rgb = IroColor.kelvinToRgb(value); + this._kelvin = value; } public get red(): number { From ca09152c25b0b9aec44e992e5deaa0d161c4a65b Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 26 Apr 2022 13:39:05 +0200 Subject: [PATCH 6/9] switch to more accurate kelvin conversion, and add option to get float rgb value --- dist/color.d.ts | 1 + dist/iro-core.es.js | 108 ++++++++++++++++++++--------------- dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 108 ++++++++++++++++++++--------------- dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 109 +++++++++++++++++++++--------------- dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 108 ++++++++++++++++++++--------------- dist/iro-core.umd.js.map | 2 +- src/color.ts | 102 ++++++++++++++++++--------------- 10 files changed, 316 insertions(+), 228 deletions(-) diff --git a/dist/color.d.ts b/dist/color.d.ts index 2f4fcf3..0c86c16 100644 --- a/dist/color.d.ts +++ b/dist/color.d.ts @@ -114,6 +114,7 @@ export declare class IroColor { set blue(value: number); get rgb(): RgbColor; set rgb(value: RgbColor); + get raw_rgb(): RgbColor; get rgba(): RgbColor; set rgba(value: RgbColor); get hsl(): HslColor; diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index 3a515e4..a6c0b1e 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -63,11 +63,7 @@ var REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_I var REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); var REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); // Kelvin temperature bounds -var KELVIN_MIN = 2000; -var KELVIN_MAX = 40000; // Math shorthands - -var log = Math.log, - round = Math.round, +var round = Math.round, floor = Math.floor; /** * @desc Clamp a number between a min and max value @@ -308,23 +304,51 @@ var IroColor = /*#__PURE__*/function () { ; IroColor.kelvinToRgb = function kelvinToRgb(kelvin) { - var temp = kelvin / 100; + var temperature = kelvin / 100.0; var r, g, b; - if (temp < 66) { + if (temperature < 66.0) { r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b); } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g); + r = temperature - 55.0; + r = 351.97690566805693 + 0.114206453784165 * r - 40.25366309332127 * Math.log(r); + if (r < 0) r = 0; + if (r > 255) r = 255; + } + /* Calculate g */ + + + if (temperature < 66.0) { + g = temperature - 2; + g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } else { + g = temperature - 50.0; + g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } + /* Calculate b */ + + + if (temperature >= 66.0) { b = 255; + } else { + if (temperature <= 20.0) { + b = 0; + } else { + b = temperature - 10; + b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b); + if (b < 0) b = 0; + if (b > 255) b = 255; + } } return { - r: clamp(floor(r), 0, 255), - g: clamp(floor(g), 0, 255), - b: clamp(floor(b), 0, 255) + r: r, + b: b, + g: g }; } /** @@ -334,26 +358,23 @@ var IroColor = /*#__PURE__*/function () { ; IroColor.rgbToKelvin = function rgbToKelvin(rgb) { - var r = rgb.r, - b = rgb.b; - var eps = 0.4; - var minTemp = KELVIN_MIN; - var maxTemp = KELVIN_MAX; - var temp; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + while (maxTemperature - minTemperature > epsilon) { + temperature = (maxTemperature + minTemperature) / 2; + testRGB = IroColor.kelvinToRgb(temperature); - var _rgb = IroColor.kelvinToRgb(temp); - - if (_rgb.b / _rgb.r >= b / r) { - maxTemp = temp; + if (testRGB.b / testRGB.r >= rgb.b / rgb.r) { + maxTemperature = temperature; } else { - minTemp = temp; + minTemperature = temperature; } } - return temp; + return temperature; }; _createClass(IroColor, [{ @@ -443,25 +464,10 @@ var IroColor = /*#__PURE__*/function () { }, { key: "kelvin", get: function get() { - /** Rgb to kelvin conversion is a little funky, producing results - * that differ from the original value. - * Check if rgb values are equal and return RGB to kelvin conversion - * only if necessary - */ - var res; - var rgb = IroColor.kelvinToRgb(this._kelvin); - - if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { - res = this._kelvin; - } else { - res = IroColor.rgbToKelvin(this.rgb); - } - - return res; + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); - this._kelvin = value; } }, { key: "red", @@ -515,6 +521,20 @@ var IroColor = /*#__PURE__*/function () { a: value.a === undefined ? this.alpha : value.a }); } + }, { + key: "raw_rgb", + get: function get() { + var _IroColor$hsvToRgb2 = IroColor.hsvToRgb(this.$), + r = _IroColor$hsvToRgb2.r, + g = _IroColor$hsvToRgb2.g, + b = _IroColor$hsvToRgb2.b; + + return { + r: r, + g: g, + b: b + }; + } }, { key: "rgba", get: function get() { diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index 65f3d87..b245a53 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index c1e56da..cb24c86 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -63,11 +63,7 @@ var REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_I var REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); var REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); // Kelvin temperature bounds -var KELVIN_MIN = 2000; -var KELVIN_MAX = 40000; // Math shorthands - -var log = Math.log, - round = Math.round, +var round = Math.round, floor = Math.floor; /** * @desc Clamp a number between a min and max value @@ -308,23 +304,51 @@ var IroColor = /*#__PURE__*/function () { ; IroColor.kelvinToRgb = function kelvinToRgb(kelvin) { - var temp = kelvin / 100; + var temperature = kelvin / 100.0; var r, g, b; - if (temp < 66) { + if (temperature < 66.0) { r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b); } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g); + r = temperature - 55.0; + r = 351.97690566805693 + 0.114206453784165 * r - 40.25366309332127 * Math.log(r); + if (r < 0) r = 0; + if (r > 255) r = 255; + } + /* Calculate g */ + + + if (temperature < 66.0) { + g = temperature - 2; + g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } else { + g = temperature - 50.0; + g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } + /* Calculate b */ + + + if (temperature >= 66.0) { b = 255; + } else { + if (temperature <= 20.0) { + b = 0; + } else { + b = temperature - 10; + b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b); + if (b < 0) b = 0; + if (b > 255) b = 255; + } } return { - r: clamp(floor(r), 0, 255), - g: clamp(floor(g), 0, 255), - b: clamp(floor(b), 0, 255) + r: r, + b: b, + g: g }; } /** @@ -334,26 +358,23 @@ var IroColor = /*#__PURE__*/function () { ; IroColor.rgbToKelvin = function rgbToKelvin(rgb) { - var r = rgb.r, - b = rgb.b; - var eps = 0.4; - var minTemp = KELVIN_MIN; - var maxTemp = KELVIN_MAX; - var temp; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + while (maxTemperature - minTemperature > epsilon) { + temperature = (maxTemperature + minTemperature) / 2; + testRGB = IroColor.kelvinToRgb(temperature); - var _rgb = IroColor.kelvinToRgb(temp); - - if (_rgb.b / _rgb.r >= b / r) { - maxTemp = temp; + if (testRGB.b / testRGB.r >= rgb.b / rgb.r) { + maxTemperature = temperature; } else { - minTemp = temp; + minTemperature = temperature; } } - return temp; + return temperature; }; _createClass(IroColor, [{ @@ -443,25 +464,10 @@ var IroColor = /*#__PURE__*/function () { }, { key: "kelvin", get: function get() { - /** Rgb to kelvin conversion is a little funky, producing results - * that differ from the original value. - * Check if rgb values are equal and return RGB to kelvin conversion - * only if necessary - */ - var res; - var rgb = IroColor.kelvinToRgb(this._kelvin); - - if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { - res = this._kelvin; - } else { - res = IroColor.rgbToKelvin(this.rgb); - } - - return res; + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); - this._kelvin = value; } }, { key: "red", @@ -515,6 +521,20 @@ var IroColor = /*#__PURE__*/function () { a: value.a === undefined ? this.alpha : value.a }); } + }, { + key: "raw_rgb", + get: function get() { + var _IroColor$hsvToRgb2 = IroColor.hsvToRgb(this.$), + r = _IroColor$hsvToRgb2.r, + g = _IroColor$hsvToRgb2.g, + b = _IroColor$hsvToRgb2.b; + + return { + r: r, + g: g, + b: b + }; + } }, { key: "rgba", get: function get() { diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index 55c0230..7f9d8a7 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 75bc8c8..55df60a 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -44,9 +44,6 @@ const REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX const REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); const REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); // Kelvin temperature bounds -const KELVIN_MIN = 2000; -const KELVIN_MAX = 40000; // Math shorthands - const { log, round, @@ -289,23 +286,51 @@ class IroColor { static kelvinToRgb(kelvin) { - const temp = kelvin / 100; - let r, g, b; + var temperature = kelvin / 100.0; + var r, g, b; - if (temp < 66) { + if (temperature < 66.0) { r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b); } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g); + r = temperature - 55.0; + r = 351.97690566805693 + 0.114206453784165 * r - 40.25366309332127 * Math.log(r); + if (r < 0) r = 0; + if (r > 255) r = 255; + } + /* Calculate g */ + + + if (temperature < 66.0) { + g = temperature - 2; + g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } else { + g = temperature - 50.0; + g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } + /* Calculate b */ + + + if (temperature >= 66.0) { b = 255; + } else { + if (temperature <= 20.0) { + b = 0; + } else { + b = temperature - 10; + b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b); + if (b < 0) b = 0; + if (b > 255) b = 255; + } } return { - r: clamp(floor(r), 0, 255), - g: clamp(floor(g), 0, 255), - b: clamp(floor(b), 0, 255) + r: r, + b: b, + g: g }; } /** @@ -315,29 +340,23 @@ class IroColor { static rgbToKelvin(rgb) { - const { - r, - g, - b - } = rgb; - const eps = 0.4; - let minTemp = KELVIN_MIN; - let maxTemp = KELVIN_MAX; - let temp; - - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - const _rgb = IroColor.kelvinToRgb(temp); + while (maxTemperature - minTemperature > epsilon) { + temperature = (maxTemperature + minTemperature) / 2; + testRGB = IroColor.kelvinToRgb(temperature); - if (_rgb.b / _rgb.r >= b / r) { - maxTemp = temp; + if (testRGB.b / testRGB.r >= rgb.b / rgb.r) { + maxTemperature = temperature; } else { - minTemp = temp; + minTemperature = temperature; } } - return temp; + return temperature; } get hsv() { @@ -425,26 +444,11 @@ class IroColor { } get kelvin() { - /** Rgb to kelvin conversion is a little funky, producing results - * that differ from the original value. - * Check if rgb values are equal and return RGB to kelvin conversion - * only if necessary - */ - let res; - let rgb = IroColor.kelvinToRgb(this._kelvin); - - if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { - res = this._kelvin; - } else { - res = IroColor.rgbToKelvin(this.rgb); - } - - return res; + return round(IroColor.rgbToKelvin(this.raw_rgb)); } set kelvin(value) { this.rgb = IroColor.kelvinToRgb(value); - this._kelvin = value; } get red() { @@ -499,6 +503,19 @@ class IroColor { }); } + get raw_rgb() { + const { + r, + g, + b + } = IroColor.hsvToRgb(this.$); + return { + r: r, + g: g, + b: b + }; + } + get rgba() { return _extends({}, this.rgb, { a: this.alpha diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index 0714f98..e40875c 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","alpha","res","_kelvin","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","alpha","raw_rgb","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 9dcaa6a..02a9384 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -68,11 +68,7 @@ var REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); var REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$'); // Kelvin temperature bounds - var KELVIN_MIN = 2000; - var KELVIN_MAX = 40000; // Math shorthands - - var log = Math.log, - round = Math.round, + var round = Math.round, floor = Math.floor; /** * @desc Clamp a number between a min and max value @@ -313,23 +309,51 @@ ; IroColor.kelvinToRgb = function kelvinToRgb(kelvin) { - var temp = kelvin / 100; + var temperature = kelvin / 100.0; var r, g, b; - if (temp < 66) { + if (temperature < 66.0) { r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b); } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g); + r = temperature - 55.0; + r = 351.97690566805693 + 0.114206453784165 * r - 40.25366309332127 * Math.log(r); + if (r < 0) r = 0; + if (r > 255) r = 255; + } + /* Calculate g */ + + + if (temperature < 66.0) { + g = temperature - 2; + g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } else { + g = temperature - 50.0; + g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } + /* Calculate b */ + + + if (temperature >= 66.0) { b = 255; + } else { + if (temperature <= 20.0) { + b = 0; + } else { + b = temperature - 10; + b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b); + if (b < 0) b = 0; + if (b > 255) b = 255; + } } return { - r: clamp(floor(r), 0, 255), - g: clamp(floor(g), 0, 255), - b: clamp(floor(b), 0, 255) + r: r, + b: b, + g: g }; } /** @@ -339,26 +363,23 @@ ; IroColor.rgbToKelvin = function rgbToKelvin(rgb) { - var r = rgb.r, - b = rgb.b; - var eps = 0.4; - var minTemp = KELVIN_MIN; - var maxTemp = KELVIN_MAX; - var temp; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + while (maxTemperature - minTemperature > epsilon) { + temperature = (maxTemperature + minTemperature) / 2; + testRGB = IroColor.kelvinToRgb(temperature); - var _rgb = IroColor.kelvinToRgb(temp); - - if (_rgb.b / _rgb.r >= b / r) { - maxTemp = temp; + if (testRGB.b / testRGB.r >= rgb.b / rgb.r) { + maxTemperature = temperature; } else { - minTemp = temp; + minTemperature = temperature; } } - return temp; + return temperature; }; _createClass(IroColor, [{ @@ -448,25 +469,10 @@ }, { key: "kelvin", get: function get() { - /** Rgb to kelvin conversion is a little funky, producing results - * that differ from the original value. - * Check if rgb values are equal and return RGB to kelvin conversion - * only if necessary - */ - var res; - var rgb = IroColor.kelvinToRgb(this._kelvin); - - if (rgb.r === this.rgb.r && rgb.g === this.rgb.g && rgb.b === this.rgb.b) { - res = this._kelvin; - } else { - res = IroColor.rgbToKelvin(this.rgb); - } - - return res; + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); - this._kelvin = value; } }, { key: "red", @@ -520,6 +526,20 @@ a: value.a === undefined ? this.alpha : value.a }); } + }, { + key: "raw_rgb", + get: function get() { + var _IroColor$hsvToRgb2 = IroColor.hsvToRgb(this.$), + r = _IroColor$hsvToRgb2.r, + g = _IroColor$hsvToRgb2.g, + b = _IroColor$hsvToRgb2.b; + + return { + r: r, + g: g, + b: b + }; + } }, { key: "rgba", get: function get() { diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index b81b6ef..36acc15 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g)\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b)\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r)\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g)\n b = 255\n }\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n const { r, g, b } = rgb;\n const eps = 0.4;\n let minTemp = KELVIN_MIN;\n let maxTemp = KELVIN_MAX;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = IroColor.kelvinToRgb(temp);\n if ((rgb.b / rgb.r) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return temp;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n /** Rgb to kelvin conversion is a little funky, producing results\n * that differ from the original value.\n * Check if rgb values are equal and return RGB to kelvin conversion\n * only if necessary\n */\n let res: number;\n let rgb = IroColor.kelvinToRgb(this._kelvin);\n\n if (\n rgb.r === this.rgb.r &&\n rgb.g === this.rgb.g &&\n rgb.b === this.rgb.b\n ) {\n res = this._kelvin;\n } else {\n res = IroColor.rgbToKelvin(this.rgb);\n }\n return res;\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n this._kelvin = value;\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","KELVIN_MIN","KELVIN_MAX","log","Math","round","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temp","rgbToKelvin","eps","minTemp","maxTemp","newValue","oldValue","changes","key","res","_kelvin","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","minTemperature","maxTemperature","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/src/color.ts b/src/color.ts index 0d6234c..7e9d17e 100644 --- a/src/color.ts +++ b/src/color.ts @@ -298,23 +298,43 @@ export class IroColor { * @desc Convert a kelvin temperature to an approx, RGB value * @param kelvin - kelvin temperature */ - public static kelvinToRgb(kelvin: number): RgbColor { - const temp = kelvin / 100; - let r, g, b; - if (temp < 66) { - r = 255 - g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g) - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b) + public static kelvinToRgb(kelvin: number): RgbColor { + var temperature = kelvin / 100.0; + var r, g, b; + if (temperature < 66.0) { + r = 255; } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r) - g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g) - b = 255 + r = temperature - 55.0; + r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r); + if (r < 0) r = 0; + if (r > 255) r = 255; } - return { - r: clamp(floor(r), 0, 255), - g: clamp(floor(g), 0, 255), - b: clamp(floor(b), 0, 255) - }; + /* Calculate g */ + if (temperature < 66.0) { + g = temperature - 2; + g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } else { + g = temperature - 50.0; + g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g); + if (g < 0) g = 0; + if (g > 255) g = 255; + } + /* Calculate b */ + if (temperature >= 66.0) { + b = 255; + } else { + if (temperature <= 20.0) { + b = 0; + } else { + b = temperature - 10; + b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b); + if (b < 0) b = 0; + if (b > 255) b = 255; + } + } + return {r: r, b: b, g: g}; } /** @@ -322,21 +342,20 @@ export class IroColor { * @param kelvin - kelvin temperature */ public static rgbToKelvin(rgb: RgbColor): number { - const { r, g, b } = rgb; - const eps = 0.4; - let minTemp = KELVIN_MIN; - let maxTemp = KELVIN_MAX; - let temp; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; - const rgb = IroColor.kelvinToRgb(temp); - if ((rgb.b / rgb.r) >= (b / r)) { - maxTemp = temp; + var temperature, testRGB; + var epsilon=0.4; + var minTemperature = 1000; + var maxTemperature = 40000; + while (maxTemperature - minTemperature > epsilon) { + temperature = (maxTemperature + minTemperature) / 2; + testRGB = IroColor.kelvinToRgb(temperature); + if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) { + maxTemperature = temperature; } else { - minTemp = temp; + minTemperature = temperature; } } - return temp; + return temperature; } public get hsv(): HsvColor { @@ -413,29 +432,11 @@ export class IroColor { } public get kelvin(): number { - /** Rgb to kelvin conversion is a little funky, producing results - * that differ from the original value. - * Check if rgb values are equal and return RGB to kelvin conversion - * only if necessary - */ - let res: number; - let rgb = IroColor.kelvinToRgb(this._kelvin); - - if ( - rgb.r === this.rgb.r && - rgb.g === this.rgb.g && - rgb.b === this.rgb.b - ) { - res = this._kelvin; - } else { - res = IroColor.rgbToKelvin(this.rgb); - } - return res; + return round(IroColor.rgbToKelvin(this.raw_rgb)); } public set kelvin(value: number) { this.rgb = IroColor.kelvinToRgb(value); - this._kelvin = value; } public get red(): number { @@ -481,6 +482,15 @@ export class IroColor { }; } + public get raw_rgb(): RgbColor { + const {r, g, b} = IroColor.hsvToRgb(this.$); + return { + r: r, + g: g, + b: b + }; + } + public get rgba(): RgbColor { return { ...this.rgb, a: this.alpha }; } From c567e5dcd39ddc9617aa7a7fe2d96c8c380ff846 Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Thu, 28 Apr 2022 11:46:33 +0200 Subject: [PATCH 7/9] update input function --- dist/input.d.ts | 2 +- dist/iro-core.es.js | 27 +++++++++------------------ dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 27 +++++++++------------------ dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 27 +++++++++------------------ dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 27 +++++++++------------------ dist/iro-core.umd.js.map | 2 +- src/input.ts | 26 +++++++++----------------- 10 files changed, 50 insertions(+), 94 deletions(-) diff --git a/dist/input.d.ts b/dist/input.d.ts index fb7d491..abb7f7c 100644 --- a/dist/input.d.ts +++ b/dist/input.d.ts @@ -18,7 +18,7 @@ export declare function clampSliderValue(props: Partial, value: nu * @param props - slider props * @param e - KeyboardEvent */ -export declare function getSliderValueFromInputField(props: Partial, e: KeyboardEvent): number; +export declare function getSliderValueFromInputField(e: KeyboardEvent): number; /** * @desc Get the current slider value from clipboard data * @param props - slider props diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index a6c0b1e..d64795b 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -1010,7 +1010,6 @@ function clampSliderValue(props, value) { return clamp(value, 0, 1); case 'kelvin': - // TODO var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; return clamp(value, minTemperature, maxTemperature); @@ -1022,33 +1021,25 @@ function clampSliderValue(props, value) { * @param e - KeyboardEvent */ -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; +function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 5; - } else { - maxlen = 3; + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; } - var target = e.target; var valueString = target.value.toString(); if (target.selectionStart !== undefined) { + // cursor position valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + valueString = valueString + e.key.toString(); } - var valueNum = +valueString; - return clampSliderValue(props, valueNum); + return +valueString; } /** * @desc Get the current slider value from clipboard data diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index b245a53..ebef5a3 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index cb24c86..eb0ff94 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -1010,7 +1010,6 @@ function clampSliderValue(props, value) { return clamp(value, 0, 1); case 'kelvin': - // TODO var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; return clamp(value, minTemperature, maxTemperature); @@ -1022,33 +1021,25 @@ function clampSliderValue(props, value) { * @param e - KeyboardEvent */ -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; +function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 5; - } else { - maxlen = 3; + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; } - var target = e.target; var valueString = target.value.toString(); if (target.selectionStart !== undefined) { + // cursor position valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + valueString = valueString + e.key.toString(); } - var valueNum = +valueString; - return clampSliderValue(props, valueNum); + return +valueString; } /** * @desc Get the current slider value from clipboard data diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index 7f9d8a7..3a9ca39 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 55df60a..9bee7b7 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -994,7 +994,6 @@ function clampSliderValue(props, value) { return clamp(value, 0, 1); case 'kelvin': - // TODO const { minTemperature, maxTemperature @@ -1008,33 +1007,25 @@ function clampSliderValue(props, value) { * @param e - KeyboardEvent */ -function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - let maxlen; +function getSliderValueFromInputField(e) { + let target = e.target; + let valueNum = parseInt(target.value); // regex for digit or dot (.) - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 5; - } else { - maxlen = 3; + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; } - let target = e.target; let valueString = target.value.toString(); if (target.selectionStart !== undefined) { + // cursor position valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + valueString = valueString + e.key.toString(); } - const valueNum = +valueString; - return clampSliderValue(props, valueNum); + return +valueString; } /** * @desc Get the current slider value from clipboard data diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index e40875c..c6194ba 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","alpha","raw_rgb","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","alpha","raw_rgb","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 02a9384..77516e4 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -1015,7 +1015,6 @@ return clamp(value, 0, 1); case 'kelvin': - // TODO var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; return clamp(value, minTemperature, maxTemperature); @@ -1027,33 +1026,25 @@ * @param e - KeyboardEvent */ - function getSliderValueFromInputField(props, e) { - // regex for digit or dot (.) - if (!/^([0-9]|\.)$/i.test(e.key)) { - return 0; - } - - var maxlen; + function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 5; - } else { - maxlen = 3; + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; } - var target = e.target; var valueString = target.value.toString(); if (target.selectionStart !== undefined) { + // cursor position valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + valueString = valueString + e.key.toString(); } - var valueNum = +valueString; - return clampSliderValue(props, valueNum); + return +valueString; } /** * @desc Get the current slider value from clipboard data diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index 36acc15..2134ca5 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin': // TODO\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) {\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n return 0;\n }\n let maxlen: number;\n if (props.sliderType === 'alpha') {\n maxlen = 4;\n } else if (props.sliderType === 'kelvin') {\n maxlen = 5;\n } else {\n maxlen = 3;\n }\n\n let target = (e.target as HTMLInputElement);\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) {\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString();\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","maxlen","target","valueString","selectionStart","substring","selectionEnd","valueNum","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/src/input.ts b/src/input.ts index 8143b4a..3be5260 100644 --- a/src/input.ts +++ b/src/input.ts @@ -30,7 +30,7 @@ export interface InputOptions extends IroColorPickerOptions { return clamp(value, 0, 255); case 'alpha': return clamp(value, 0, 1); - case 'kelvin': // TODO + case 'kelvin': const { minTemperature, maxTemperature } = props; return clamp(value, minTemperature, maxTemperature); } @@ -41,31 +41,23 @@ export interface InputOptions extends IroColorPickerOptions { * @param props - slider props * @param e - KeyboardEvent */ -export function getSliderValueFromInputField(props: Partial, e: KeyboardEvent) { +export function getSliderValueFromInputField(e: KeyboardEvent) { + let target = (e.target as HTMLInputElement); + let valueNum = parseInt(target.value); // regex for digit or dot (.) if (!/^([0-9]|\.)$/i.test((e).key)) { - return 0; - } - let maxlen: number; - if (props.sliderType === 'alpha') { - maxlen = 4; - } else if (props.sliderType === 'kelvin') { - maxlen = 5; - } else { - maxlen = 3; + e.preventDefault(); + return valueNum; } - - let target = (e.target as HTMLInputElement); let valueString = target.value.toString(); - if (target.selectionStart !== undefined) { + if (target.selectionStart !== undefined) { // cursor position valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); } else { - valueString = valueString.length + 1 > maxlen ? valueString : valueString + e.key.toString(); + valueString = valueString + e.key.toString(); } - const valueNum = +valueString; - return clampSliderValue(props, valueNum); + return +valueString; } /** From 38e537bea50763b1786bdd4574e9620f4c9bf82a Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 3 May 2022 13:30:21 +0200 Subject: [PATCH 8/9] add support for label & input for horizontal layout --- dist/input.d.ts | 10 ++ dist/iro-core.es.js | 208 +++++++++++++++++++++-------------- dist/iro-core.es.js.map | 2 +- dist/iro-core.js | 207 ++++++++++++++++++++-------------- dist/iro-core.js.map | 2 +- dist/iro-core.modern.js | 214 +++++++++++++++++++++--------------- dist/iro-core.modern.js.map | 2 +- dist/iro-core.umd.js | 207 ++++++++++++++++++++-------------- dist/iro-core.umd.js.map | 2 +- dist/slider.d.ts | 1 + src/input.ts | 25 +++++ src/slider.ts | 23 +++- 12 files changed, 554 insertions(+), 349 deletions(-) diff --git a/dist/input.d.ts b/dist/input.d.ts index abb7f7c..cd118ee 100644 --- a/dist/input.d.ts +++ b/dist/input.d.ts @@ -4,9 +4,19 @@ import { IroColorPickerOptions } from './colorPickerOptions'; export interface InputOptions extends IroColorPickerOptions { color: IroColor; sliderType: SliderType; + sliderSize: number; minTemperature: number; maxTemperature: number; } +/** + * @desc Get input field dimensions + * @param props - InputOptions + */ +export declare function getInputDimensions(props: Partial): { + inputWidth: number; + inputHeight: number; + fontSize: number; +}; /** * @desc Clamp slider value between min and max values * @param type - props.sliderType diff --git a/dist/iro-core.es.js b/dist/iro-core.es.js index d64795b..0207f04 100644 --- a/dist/iro-core.es.js +++ b/dist/iro-core.es.js @@ -720,6 +720,108 @@ var IroColor = /*#__PURE__*/function () { return IroColor; }(); +/** + * @desc Get input field dimensions + * @param props - InputOptions + */ +function getInputDimensions(props) { + var sliderSize = props.sliderSize, + layoutDirection = props.layoutDirection; + var inputWidth; + var fontSize; + + if (layoutDirection === 'vertical') { + inputWidth = 30; + fontSize = 12; + } else { + inputWidth = sliderSize <= 30 ? 26 : sliderSize; + fontSize = sliderSize <= 30 ? 10 : 12; + } + + return { + inputWidth: inputWidth, + inputHeight: 18, + fontSize: fontSize + }; +} +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) + + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; + } + + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + // cursor position + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString + e.key.toString(); + } + + return +valueString; +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + var sliderDefaultOptions = { sliderShape: 'bar', sliderType: 'value', @@ -750,17 +852,30 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var ishorizontal = props.layoutDirection === 'horizontal'; var length; - if (props.showInput) { - length = width - 55; + if (props.sliderLength) { + length = props.sliderLength; } else { - var _props$sliderLength; + // automatically calculate slider length + length = width - handleRadius; - length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; - } + if (props.showInput) { + var _getInputDimensions = getInputDimensions(props), + inputWidth = _getInputDimensions.inputWidth, + inputHeight = _getInputDimensions.inputHeight; + + length -= ishorizontal ? inputHeight : inputWidth; + length -= 3; // padding + } + + if (props.showLabel) { + length -= ishorizontal ? 12 : 10; + length -= 3; // padding + } + } // automatically calculate sliderSize if its not defined - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -813,7 +928,7 @@ function getCurrentSliderValue(props, color) { var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; var temperatureRange = maxTemperature - minTemperature; - var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clmap percentage + var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clamp percentage return Math.max(0, Math.min(percent, 100)); @@ -983,83 +1098,6 @@ function getSliderGradientCoords(props) { }; } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ -function clampSliderValue(props, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (props.sliderType) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - var minTemperature = props.minTemperature, - maxTemperature = props.maxTemperature; - return clamp(value, minTemperature, maxTemperature); - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(e) { - var target = e.target; - var valueNum = parseInt(target.value); // regex for digit or dot (.) - - if (!/^([0-9]|\.)$/i.test(e.key)) { - e.preventDefault(); - return valueNum; - } - - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - // cursor position - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString + e.key.toString(); - } - - return +valueString; -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props, valueNum); -} - var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e @@ -1365,5 +1403,5 @@ var iroColorPickerOptionDefaults = { boxHeight: null }; -export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; +export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getInputDimensions, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; //# sourceMappingURL=iro-core.es.js.map diff --git a/dist/iro-core.es.js.map b/dist/iro-core.es.js.map index ebef5a3..b7dce34 100644 --- a/dist/iro-core.es.js.map +++ b/dist/iro-core.es.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA,IAAMA,WAAW,GAAG,eAApB;;AAEA,IAAMC,UAAU,GAAG,sBAAnB;;AAEA,IAAMC,QAAQ,GAAG,QAAQD,UAAR,GAAqB,OAArB,GAA+BD,WAA/B,GAA6C,GAA9D;AAGA;;AACA,IAAMG,kBAAkB,GAAG,gBAAgBD,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,WAA1G;AACA,IAAME,kBAAkB,GAAG,gBAAgBF,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,YAA/E,GAA8FA,QAA9F,GAAyG,WAApI;;AAGA,IAAMG,oBAAoB,GAAG,IAAIC,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMI,qBAAqB,GAAG,IAAID,MAAJ,CAAW,SAASF,kBAApB,CAA9B;AACA,IAAMI,oBAAoB,GAAG,IAAIF,MAAJ,CAAW,QAAQH,kBAAnB,CAA7B;AACA,IAAMM,qBAAqB,GAAG,IAAIH,MAAJ,CAAW,SAASF,kBAApB,CAA9B;;AAGA,IAAMM,SAAS,GAAG,aAAlB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,WAAW,GAAG,IAAIP,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMG,WAAW,GAAG,IAAIR,MAAJ,CAAWI,SAAS,GAAGC,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIT,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+D,GAA1E,CAApB;AACA,IAAMI,WAAW,GAAG,IAAIV,MAAJ,CAAWI,SAAS,GAAGE,cAAZ,GAA6BA,cAA7B,GAA8CA,cAA9C,GAA+DA,cAA/D,GAAgF,GAA3F,CAApB;;IAOaK,KAAb,GAA8BC,IAA9B,CAAaD,KAAb;AAAA,IAAoBE,KAApB,GAA8BD,IAA9B,CAAoBC;AAEpB;;;;;;;AAMA,SAASC,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,SAAOL,IAAI,CAACI,GAAL,CAASJ,IAAI,CAACK,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;AAED;;;;;;;AAKA,SAASC,SAAT,CAAmBC,GAAnB,EAAgCF,GAAhC;AACE,MAAMG,YAAY,GAAGD,GAAG,CAACE,OAAJ,CAAY,GAAZ,IAAmB,CAAC,CAAzC;AACA,MAAMN,GAAG,GAAGO,UAAU,CAACH,GAAD,CAAtB;AACA,SAAOC,YAAY,GAAIH,GAAG,GAAG,GAAP,GAAcF,GAAjB,GAAuBA,GAA1C;AACD;AAED;;;;;;AAIA,SAASQ,WAAT,CAAqBJ,GAArB;AACE,SAAOK,QAAQ,CAACL,GAAD,EAAM,EAAN,CAAf;AACD;AAED;;;;;;AAIA,SAASM,QAAT,CAAkBC,IAAlB;AACE,SAAOA,IAAG,CAACC,QAAJ,CAAa,EAAb,EAAiBC,QAAjB,CAA0B,CAA1B,EAA6B,GAA7B,CAAP;AACD;;IAsCYC,QAAb;AASE;;;;AAIA,oBAAYC,KAAZ,EAAmCC,QAAnC;AACE;AACA,SAAKC,CAAL,GAAS;AAACC,MAAAA,CAAC,EAAE,CAAJ;AAAOC,MAAAA,CAAC,EAAE,CAAV;AAAaC,MAAAA,CAAC,EAAE,CAAhB;AAAmBC,MAAAA,CAAC,EAAE;AAAtB,KAAT;AACA,QAAIN,KAAJ,EAAW,KAAKO,GAAL,CAASP,KAAT;;AAEX,SAAKC,QAAL,GAAgBA,QAAhB;AACA,SAAKO,YAAL,gBAAyB,KAAKN,CAA9B;AACD;AAED;;;;;;AAtBF;;AAAA,SA0BSK,GA1BT,GA0BS,aAAIP,KAAJ;AACL,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B,UAAI,+BAA+BS,IAA/B,CAAoCT,KAApC,CAAJ,EAA0D;AACxD,aAAKU,SAAL,GAAiBV,KAAjB;AACD,OAFD,MAGK,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKW,SAAL,GAAiBX,KAAjB;AACD,OAFI,MAGA,IAAI,SAASS,IAAT,CAAcT,KAAd,CAAJ,EAAoC;AACvC,aAAKY,SAAL,GAAiBZ,KAAjB;AACD;AACF,KAVD,MAWK,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAClC,UAAIA,KAAK,YAAYD,QAArB,EAA+B;AAC7B,aAAKc,IAAL,GAAYb,KAAK,CAACa,IAAlB;AACD,OAFD,MAGK,IAAI,OAAOb,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKc,GAAL,GAAWd,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKe,GAAL,GAAWf,KAAX;AACD,OAFI,MAGA,IAAI,OAAOA,KAAP,IAAgB,OAAOA,KAAvB,IAAgC,OAAOA,KAA3C,EAAkD;AACrD,aAAKgB,GAAL,GAAWhB,KAAX;AACD,OAFI,MAGA,IAAI,YAAYA,KAAhB,EAAuB;AAC1B,aAAKiB,MAAL,GAAcjB,KAAK,CAACiB,MAApB;AACD;AACF,KAhBI,MAiBA;AACH,YAAM,IAAIC,KAAJ,CAAU,qBAAV,CAAN;AACD;AACF;AAED;;;;;;AA5DF;;AAAA,SAkESC,UAlET,GAkES,oBAAWC,MAAX,EAA2BC,OAA3B,EAA4CrB,KAA5C;;;AACL,SAAKoB,MAAL,iBAAmB,KAAKA,MAAL,CAAnB,6BAAkCC,OAAlC,IAA4CrB,KAA5C;AACD;AAED;;;AAtEF;;AAAA,SAyESsB,KAzET,GAyES;AACL,SAAKT,IAAL,GAAY,KAAKL,YAAjB;AACD;AAED;;;AA7EF;;AAAA,SAgFSe,KAhFT,GAgFS;AACL,WAAO,IAAIxB,QAAJ,CAAa,IAAb,CAAP;AACD;AAED;;;AApFF;;AAAA,SAuFSyB,MAvFT,GAuFS;AACL,SAAKvB,QAAL,GAAgBwB,SAAhB;AACD;AAED;;;;AA3FF;;AAAA,WA+FgBC,QA/FhB,GA+FS,kBAAgBX,GAAhB;AACL,QAAMZ,CAAC,GAAGY,GAAG,CAACZ,CAAJ,GAAQ,EAAlB;AACA,QAAMC,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMsB,CAAC,GAAG5C,KAAK,CAACoB,CAAD,CAAf;AACA,QAAMyB,CAAC,GAAGzB,CAAC,GAAGwB,CAAd;AACA,QAAME,CAAC,GAAGxB,CAAC,IAAI,IAAID,CAAR,CAAX;AACA,QAAM0B,CAAC,GAAGzB,CAAC,IAAI,IAAIuB,CAAC,GAAGxB,CAAZ,CAAX;AACA,QAAM2B,CAAC,GAAG1B,CAAC,IAAI,IAAI,CAAC,IAAIuB,CAAL,IAAUxB,CAAlB,CAAX;AACA,QAAM4B,GAAG,GAAGL,CAAC,GAAG,CAAhB;AACA,QAAMM,CAAC,GAAG,CAAC5B,CAAD,EAAIyB,CAAJ,EAAOD,CAAP,EAAUA,CAAV,EAAaE,CAAb,EAAgB1B,CAAhB,EAAmB2B,GAAnB,CAAV;AACA,QAAME,CAAC,GAAG,CAACH,CAAD,EAAI1B,CAAJ,EAAOA,CAAP,EAAUyB,CAAV,EAAaD,CAAb,EAAgBA,CAAhB,EAAmBG,GAAnB,CAAV;AACA,QAAMG,CAAC,GAAG,CAACN,CAAD,EAAIA,CAAJ,EAAOE,CAAP,EAAU1B,CAAV,EAAaA,CAAb,EAAgByB,CAAhB,EAAmBE,GAAnB,CAAV;AACA,WAAO;AACLC,MAAAA,CAAC,EAAEjD,KAAK,CAACiD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CADH;AAELC,MAAAA,CAAC,EAAElD,KAAK,CAACkD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb,CAFH;AAGLC,MAAAA,CAAC,EAAEnD,KAAK,CAACmD,CAAC,GAAG,GAAL,EAAU,CAAV,EAAa,GAAb;AAHH,KAAP;AAKD;AAED;;;;AAnHF;;AAAA,WAuHgBC,QAvHhB,GAuHS,kBAAgBtB,GAAhB;AACL,QAAMmB,CAAC,GAAGnB,GAAG,CAACmB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGpB,GAAG,CAACoB,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGrB,GAAG,CAACqB,CAAJ,GAAQ,GAAlB;AACA,QAAMhD,GAAG,GAAGL,IAAI,CAACK,GAAL,CAAS8C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAMjD,GAAG,GAAGJ,IAAI,CAACI,GAAL,CAAS+C,CAAT,EAAYC,CAAZ,EAAeC,CAAf,CAAZ;AACA,QAAME,KAAK,GAAGlD,GAAG,GAAGD,GAApB;AACA,QAAIoD,GAAG,GAAG,CAAV;AACA,QAAItC,KAAK,GAAGb,GAAZ;AACA,QAAIoD,UAAU,GAAGpD,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBkD,KAAK,GAAGlD,GAAzC;;AACA,YAAQA,GAAR;AACE,WAAKD,GAAL;AACEoD,QAAAA,GAAG,GAAG,CAAN,CADF;;AAEE;;AACF,WAAKL,CAAL;AACEK,QAAAA,GAAG,GAAG,CAACJ,CAAC,GAAGC,CAAL,IAAUE,KAAV,IAAmBH,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAY,CAA/B,CAAN;AACA;;AACF,WAAKD,CAAL;AACEI,QAAAA,GAAG,GAAG,CAACH,CAAC,GAAGF,CAAL,IAAUI,KAAV,GAAkB,CAAxB;AACA;;AACF,WAAKF,CAAL;AACEG,QAAAA,GAAG,GAAG,CAACL,CAAC,GAAGC,CAAL,IAAUG,KAAV,GAAkB,CAAxB;AACA;AAZJ;;AAcA,WAAO;AACLlC,MAAAA,CAAC,EAAGmC,GAAG,GAAG,EAAP,GAAa,GADX;AAELlC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAACgB,KAAK,GAAG,GAAT,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AAtJF;;AAAA,WA0JgBwC,QA1JhB,GA0JS,kBAAgBzB,GAAhB;AACL,QAAMX,CAAC,GAAGW,GAAG,CAACX,CAAJ,GAAQ,GAAlB;AACA,QAAMC,CAAC,GAAGU,GAAG,CAACV,CAAJ,GAAQ,GAAlB;AACA,QAAMoC,CAAC,GAAG,CAAC,IAAIrC,CAAL,IAAUC,CAApB;AACA,QAAMqC,OAAO,GAAGD,CAAC,IAAI,CAAL,GAASA,CAAT,GAAc,IAAIA,CAAlC;;AAEA,QAAMF,UAAU,GAAGG,OAAO,GAAG,IAAV,GAAiB,CAAjB,GAAsBtC,CAAC,GAAGC,CAAL,GAAUqC,OAAlD;AACA,WAAO;AACLvC,MAAAA,CAAC,EAAEY,GAAG,CAACZ,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLE,MAAAA,CAAC,EAAEzD,KAAK,CAACyD,CAAC,GAAG,EAAL,EAAS,CAAT,EAAY,GAAZ;AAHH,KAAP;AAKD;AAED;;;;AAxKF;;AAAA,WA4KgBE,QA5KhB,GA4KS,kBAAgB3B,GAAhB;AACL,QAAMyB,CAAC,GAAGzB,GAAG,CAACyB,CAAJ,GAAQ,CAAlB;AACA,QAAMrC,CAAC,GAAIY,GAAG,CAACZ,CAAJ,IAAUqC,CAAC,IAAI,GAAN,GAAaA,CAAb,GAAiB,MAAMA,CAAhC,CAAD,GAAuC,GAAjD;;AAEA,QAAMF,UAAU,GAAIE,CAAC,GAAGrC,CAAJ,GAAQ,IAAT,GAAiB,CAAjB,GAAsB,IAAIA,CAAL,IAAWqC,CAAC,GAAGrC,CAAf,CAAxC;AACA,WAAO;AACLD,MAAAA,CAAC,EAAEa,GAAG,CAACb,CADF;AAELC,MAAAA,CAAC,EAAEpB,KAAK,CAACuD,UAAU,GAAG,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAFH;AAGLlC,MAAAA,CAAC,EAAErB,KAAK,CAAC,CAACyD,CAAC,GAAGrC,CAAL,IAAU,CAAX,EAAc,CAAd,EAAiB,GAAjB;AAHH,KAAP;AAKD;AAED;;;;AAxLF;;AAAA,WA4LiBwC,WA5LjB,GA4LU,qBAAmB3B,MAAnB;AACN,QAAI4B,WAAW,GAAG5B,MAAM,GAAG,KAA3B;AACA,QAAIgB,CAAJ,EAAOC,CAAP,EAAUC,CAAV;;AACA,QAAIU,WAAW,GAAG,IAAlB,EAAwB;AACtBZ,MAAAA,CAAC,GAAG,GAAJ;AACD,KAFD,MAEO;AACLA,MAAAA,CAAC,GAAGY,WAAW,GAAG,IAAlB;AACAZ,MAAAA,CAAC,GAAG,qBAAoB,oBAAoBA,CAAxC,GAA4C,oBAAoBnD,IAAI,CAACgE,GAAL,CAASb,CAAT,CAApE;AACA,UAAIA,CAAC,GAAG,CAAR,EAAWA,CAAC,GAAG,CAAJ;AACX,UAAIA,CAAC,GAAG,GAAR,EAAaA,CAAC,GAAG,GAAJ;AACd;AACD;;;AACA,QAAIY,WAAW,GAAG,IAAlB,EAAwB;AACtBX,MAAAA,CAAC,GAAGW,WAAW,GAAG,CAAlB;AACAX,MAAAA,CAAC,GAAG,CAAC,kBAAD,GAAsB,sBAAsBA,CAA5C,GAAgD,qBAAqBpD,IAAI,CAACgE,GAAL,CAASZ,CAAT,CAAzE;AACA,UAAIA,CAAC,GAAG,CAAR,EAAWA,CAAC,GAAG,CAAJ;AACX,UAAIA,CAAC,GAAG,GAAR,EAAaA,CAAC,GAAG,GAAJ;AACd,KALD,MAKO;AACLA,MAAAA,CAAC,GAAGW,WAAW,GAAG,IAAlB;AACAX,MAAAA,CAAC,GAAG,oBAAoB,sBAAsBA,CAA1C,GAA8C,mBAAmBpD,IAAI,CAACgE,GAAL,CAASZ,CAAT,CAArE;AACA,UAAIA,CAAC,GAAG,CAAR,EAAWA,CAAC,GAAG,CAAJ;AACX,UAAIA,CAAC,GAAG,GAAR,EAAaA,CAAC,GAAG,GAAJ;AACd;AACD;;;AACA,QAAIW,WAAW,IAAI,IAAnB,EAAyB;AACvBV,MAAAA,CAAC,GAAG,GAAJ;AACD,KAFD,MAEO;AACL,UAAIU,WAAW,IAAI,IAAnB,EAAyB;AACvBV,QAAAA,CAAC,GAAG,CAAJ;AACD,OAFD,MAEO;AACLA,QAAAA,CAAC,GAAGU,WAAW,GAAG,EAAlB;AACAV,QAAAA,CAAC,GAAG,CAAC,kBAAD,GAAsB,qBAAqBA,CAA3C,GAA+C,qBAAqBrD,IAAI,CAACgE,GAAL,CAASX,CAAT,CAAxE;AACA,YAAIA,CAAC,GAAG,CAAR,EAAWA,CAAC,GAAG,CAAJ;AACX,YAAIA,CAAC,GAAG,GAAR,EAAaA,CAAC,GAAG,GAAJ;AACd;AACF;;AACD,WAAO;AAACF,MAAAA,CAAC,EAAEA,CAAJ;AAAOE,MAAAA,CAAC,EAAEA,CAAV;AAAaD,MAAAA,CAAC,EAAEA;AAAhB,KAAP;AACD;AAEA;;;;AAnOH;;AAAA,WAuOgBa,WAvOhB,GAuOS,qBAAmBjC,GAAnB;AACL,QAAI+B,WAAJ,EAAiBG,OAAjB;AACA,QAAIC,OAAO,GAAC,GAAZ;AACA,QAAIC,cAAc,GAAG,IAArB;AACA,QAAIC,cAAc,GAAG,KAArB;;AACA,WAAOA,cAAc,GAAGD,cAAjB,GAAkCD,OAAzC,EAAkD;AAChDJ,MAAAA,WAAW,GAAG,CAACM,cAAc,GAAGD,cAAlB,IAAoC,CAAlD;AACAF,MAAAA,OAAO,GAAGjD,QAAQ,CAAC6C,WAAT,CAAqBC,WAArB,CAAV;;AACA,UAAKG,OAAO,CAACb,CAAR,GAAYa,OAAO,CAACf,CAArB,IAA4BnB,GAAG,CAACqB,CAAJ,GAAQrB,GAAG,CAACmB,CAA5C,EAAgD;AAC9CkB,QAAAA,cAAc,GAAGN,WAAjB;AACD,OAFD,MAEO;AACLK,QAAAA,cAAc,GAAGL,WAAjB;AACD;AACF;;AACD,WAAOA,WAAP;AACD,GAtPH;;AAAA;AAAA;AAAA,SAwPE;AACE;AACA,UAAM7C,KAAK,GAAG,KAAKE,CAAnB;AACA,aAAO;AAACC,QAAAA,CAAC,EAAEH,KAAK,CAACG,CAAV;AAAaC,QAAAA,CAAC,EAAEJ,KAAK,CAACI,CAAtB;AAAyBC,QAAAA,CAAC,EAAEL,KAAK,CAACK;AAAlC,OAAP;AACD,KA5PH;AAAA,SA8PE,aAAe+C,QAAf;AACE,UAAMC,QAAQ,GAAG,KAAKnD,CAAtB;AAEAkD,MAAAA,QAAQ,gBAAQC,QAAR,EAAqBD,QAArB,CAAR;AAEA;;AACA,UAAI,KAAKnD,QAAT,EAAmB;AACjB;AACA,YAAIqD,OAAO,GAAiB;AAC1BnD,UAAAA,CAAC,EAAE,KADuB;AAE1BE,UAAAA,CAAC,EAAE,KAFuB;AAG1BD,UAAAA,CAAC,EAAE,KAHuB;AAI1BE,UAAAA,CAAC,EAAE;AAJuB,SAA5B;;AAOA,aAAK,IAAIiD,GAAT,IAAgBF,QAAhB,EAA0B;AACxBC,UAAAA,OAAO,CAACC,GAAD,CAAP,GAAeH,QAAQ,CAACG,GAAD,CAAR,IAAiBF,QAAQ,CAACE,GAAD,CAAxC;AACD;;AAED,aAAKrD,CAAL,GAASkD,QAAT,CAbiB;;AAejB,YAAIE,OAAO,CAACnD,CAAR,IAAamD,OAAO,CAAClD,CAArB,IAA0BkD,OAAO,CAACjD,CAAlC,IAAuCiD,OAAO,CAAChD,CAAnD,EAAsD,KAAKL,QAAL,CAAc,IAAd,EAAoBqD,OAApB;AACvD,OAhBD,MAgBO;AACL,aAAKpD,CAAL,GAASkD,QAAT;AACD;AACF;AAvRH;AAAA;AAAA,SAyRE;AACE,0BAAW,KAAKlD,CAAhB;AACD,KA3RH;AAAA,SA6RE,aAAgBF,KAAhB;AACE,WAAKe,GAAL,GAAWf,KAAX;AACD;AA/RH;AAAA;AAAA,SAiSE;AACE,aAAO,KAAKE,CAAL,CAAOC,CAAd;AACD,KAnSH;AAAA,SAqSE,aAAeH,KAAf;AACE,WAAKe,GAAL,GAAW;AAAEZ,QAAAA,CAAC,EAAEH;AAAL,OAAX;AACD;AAvSH;AAAA;AAAA,SAySE;AACE,aAAO,KAAKE,CAAL,CAAOE,CAAd;AACD,KA3SH;AAAA,SA6SE,aAAsBJ,KAAtB;AACE,WAAKe,GAAL,GAAW;AAAEX,QAAAA,CAAC,EAAEJ;AAAL,OAAX;AACD;AA/SH;AAAA;AAAA,SAiTE;AACE,aAAO,KAAKE,CAAL,CAAOG,CAAd;AACD,KAnTH;AAAA,SAqTE,aAAiBL,KAAjB;AACE,WAAKe,GAAL,GAAW;AAAEV,QAAAA,CAAC,EAAEL;AAAL,OAAX;AACD;AAvTH;AAAA;AAAA,SAyTE;AACE,aAAO,KAAKE,CAAL,CAAOI,CAAd;AACD,KA3TH;AAAA,SA6TE,aAAiBN,KAAjB;AACE,WAAKe,GAAL,gBAAgB,KAAKA,GAArB;AAA0BT,QAAAA,CAAC,EAAEN;AAA7B;AACD;AA/TH;AAAA;AAAA,SAiUE;AACE,aAAOnB,KAAK,CAACkB,QAAQ,CAACgD,WAAT,CAAqB,KAAKS,OAA1B,CAAD,CAAZ;AACD,KAnUH;AAAA,SAqUE,aAAkBxD,KAAlB;AACE,WAAKc,GAAL,GAAWf,QAAQ,CAAC6C,WAAT,CAAqB5C,KAArB,CAAX;AACD;AAvUH;AAAA;AAAA,SAyUE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACmB,CAAX;AACD,KA5UH;AAAA,SA8UE,aAAejC,KAAf;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BmB,QAAAA,CAAC,EAAEjC;AAA7B;AACD;AAhVH;AAAA;AAAA,SAkVE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACoB,CAAX;AACD,KArVH;AAAA,SAuVE,aAAiBlC,KAAjB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BoB,QAAAA,CAAC,EAAElC;AAA7B;AACD;AAzVH;AAAA;AAAA,SA2VE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,aAAOA,GAAG,CAACqB,CAAX;AACD,KA9VH;AAAA,SAgWE,aAAgBnC,KAAhB;AACE,WAAKc,GAAL,gBAAgB,KAAKA,GAArB;AAA0BqB,QAAAA,CAAC,EAAEnC;AAA7B;AACD;AAlWH;AAAA;AAAA,SAoWE;AACE,+BAAkBD,QAAQ,CAAC2B,QAAT,CAAkB,KAAKxB,CAAvB,CAAlB;AAAA,UAAO+B,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLF,QAAAA,CAAC,EAAEpD,KAAK,CAACoD,CAAD,CADH;AAELC,QAAAA,CAAC,EAAErD,KAAK,CAACqD,CAAD,CAFH;AAGLC,QAAAA,CAAC,EAAEtD,KAAK,CAACsD,CAAD;AAHH,OAAP;AAKD,KA3WH;AAAA,SA6WE,aAAenC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAACqC,QAAT,CAAkBpC,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAKgC,KAA/B,GAAuCzD,KAAK,CAACM;AAFlD;AAID;AAlXH;AAAA;AAAA,SAoXE;AACE,gCAAkBP,QAAQ,CAAC2B,QAAT,CAAkB,KAAKxB,CAAvB,CAAlB;AAAA,UAAO+B,CAAP,uBAAOA,CAAP;AAAA,UAAUC,CAAV,uBAAUA,CAAV;AAAA,UAAaC,CAAb,uBAAaA,CAAb;;AACA,aAAO;AACLF,QAAAA,CAAC,EAAEA,CADE;AAELC,QAAAA,CAAC,EAAEA,CAFE;AAGLC,QAAAA,CAAC,EAAEA;AAHE,OAAP;AAKD;AA3XH;AAAA;AAAA,SA6XE;AACE,0BAAY,KAAKrB,GAAjB;AAAsBR,QAAAA,CAAC,EAAE,KAAKmD;AAA9B;AACD,KA/XH;AAAA,SAiYE,aAAgBzD,KAAhB;AACE,WAAKc,GAAL,GAAWd,KAAX;AACD;AAnYH;AAAA;AAAA,SAqYE;AACE,+BAAkBD,QAAQ,CAACyC,QAAT,CAAkB,KAAKtC,CAAvB,CAAlB;AAAA,UAAOC,CAAP,sBAAOA,CAAP;AAAA,UAAUC,CAAV,sBAAUA,CAAV;AAAA,UAAaqC,CAAb,sBAAaA,CAAb;;AACA,aAAO;AACLtC,QAAAA,CAAC,EAAEtB,KAAK,CAACsB,CAAD,CADH;AAELC,QAAAA,CAAC,EAAEvB,KAAK,CAACuB,CAAD,CAFH;AAGLqC,QAAAA,CAAC,EAAE5D,KAAK,CAAC4D,CAAD;AAHH,OAAP;AAKD,KA5YH;AAAA,SA8YE,aAAezC,KAAf;AACE,WAAKe,GAAL,gBACKhB,QAAQ,CAAC4C,QAAT,CAAkB3C,KAAlB,CADL;AAEEM,QAAAA,CAAC,EAAGN,KAAK,CAACM,CAAN,KAAYmB,SAAb,GAA0B,KAAKgC,KAA/B,GAAuCzD,KAAK,CAACM;AAFlD;AAID;AAnZH;AAAA;AAAA,SAqZE;AACE,0BAAY,KAAKU,GAAjB;AAAsBV,QAAAA,CAAC,EAAE,KAAKmD;AAA9B;AACD,KAvZH;AAAA,SAyZE,aAAgBzD,KAAhB;AACE,WAAKgB,GAAL,GAAWhB,KAAX;AACD;AA3ZH;AAAA;AAAA,SA6ZE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACmB,CAAlB,UAAwBnB,GAAG,CAACoB,CAA5B,UAAkCpB,GAAG,CAACqB,CAAtC;AACD,KAhaH;AAAA,SAkaE,aAAqBnC,KAArB;AACE,UAAI0D,KAAJ;AACA,UAAIzB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,CAAjB;;AACA,UAAIoD,KAAK,GAAGzF,oBAAoB,CAAC0F,IAArB,CAA0B3D,KAA1B,CAAZ,EAA8C;AAC5CiC,QAAAA,CAAC,GAAG7C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAxB,QAAAA,CAAC,GAAG9C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAvB,QAAAA,CAAC,GAAG/C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGvF,qBAAqB,CAACwF,IAAtB,CAA2B3D,KAA3B,CAAZ,EAA+C;AAClDiC,QAAAA,CAAC,GAAG7C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAxB,QAAAA,CAAC,GAAG9C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAvB,QAAAA,CAAC,GAAG/C,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApD,QAAAA,CAAC,GAAGlB,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAK5C,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAtbH;AAAA;AAAA,SAwbE;AACE,UAAM0C,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAAC3B,CAApB,UAA0B2B,IAAI,CAAC1B,CAA/B,UAAqC0B,IAAI,CAACzB,CAA1C,UAAgDyB,IAAI,CAACtD,CAArD;AACD,KA3bH;AAAA,SA6bE,aAAsBN,KAAtB;AACE,WAAKW,SAAL,GAAiBX,KAAjB;AACD;AA/bH;AAAA;AAAA,SAicE;AACE,UAAMc,GAAG,GAAG,KAAKA,GAAjB;AACA,mBAAYnB,QAAQ,CAACmB,GAAG,CAACmB,CAAL,CAApB,GAAgCtC,QAAQ,CAACmB,GAAG,CAACoB,CAAL,CAAxC,GAAoDvC,QAAQ,CAACmB,GAAG,CAACqB,CAAL,CAA5D;AACD,KApcH;AAAA,SAscE,aAAqBnC,KAArB;AACE,UAAI0D,KAAJ;AACA,UAAIzB,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAa7B,CAAC,GAAG,GAAjB;;AACA,UAAIoD,KAAK,GAAGjF,WAAW,CAACkF,IAAZ,CAAiB3D,KAAjB,CAAZ,EAAqC;AACnCiC,QAAAA,CAAC,GAAGxC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAxB,QAAAA,CAAC,GAAGzC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAvB,QAAAA,CAAC,GAAG1C,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGhF,WAAW,CAACiF,IAAZ,CAAiB3D,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAxB,QAAAA,CAAC,GAAGzC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACAvB,QAAAA,CAAC,GAAG1C,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACApD,QAAAA,CAAC,GAAGb,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAX,GAAwB,EAA5B;AACD,OALI,MAMA,IAAIA,KAAK,GAAG/E,WAAW,CAACgF,IAAZ,CAAiB3D,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACAxB,QAAAA,CAAC,GAAGzC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACAvB,QAAAA,CAAC,GAAG1C,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACD,OAJI,MAKA,IAAIA,KAAK,GAAG9E,WAAW,CAAC+E,IAAZ,CAAiB3D,KAAjB,CAAZ,EAAqC;AACxCiC,QAAAA,CAAC,GAAGxC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACAxB,QAAAA,CAAC,GAAGzC,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACAvB,QAAAA,CAAC,GAAG1C,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACApD,QAAAA,CAAC,GAAGb,WAAW,CAACiE,KAAK,CAAC,CAAD,CAAN,CAAf;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAK5C,GAAL,GAAW;AAACmB,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA,CAAP;AAAU7B,UAAAA,CAAC,EAAEA,CAAC,GAAG;AAAjB,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAreH;AAAA;AAAA,SAueE;AACE,UAAM0C,IAAI,GAAG,KAAKA,IAAlB;AACA,mBAAWjE,QAAQ,CAACiE,IAAI,CAAC3B,CAAN,CAAnB,GAA8BtC,QAAQ,CAACiE,IAAI,CAAC1B,CAAN,CAAtC,GAAiDvC,QAAQ,CAACiE,IAAI,CAACzB,CAAN,CAAzD,GAAoExC,QAAQ,CAACZ,KAAK,CAAC6E,IAAI,CAACtD,CAAL,GAAS,GAAV,CAAN,CAA5E;AACD,KA1eH;AAAA,SA4eE,aAAsBN,KAAtB;AACE,WAAKU,SAAL,GAAiBV,KAAjB;AACD;AA9eH;AAAA;AAAA,SAgfE;AACE,UAAMgB,GAAG,GAAG,KAAKA,GAAjB;AACA,sBAAcA,GAAG,CAACb,CAAlB,UAAwBa,GAAG,CAACZ,CAA5B,WAAmCY,GAAG,CAACyB,CAAvC;AACD,KAnfH;AAAA,SAqfE,aAAqBzC,KAArB;AACE,UAAI0D,KAAJ;AACA,UAAIvD,CAAJ;AAAA,UAAOC,CAAP;AAAA,UAAUqC,CAAV;AAAA,UAAanC,CAAC,GAAG,CAAjB;;AACA,UAAIoD,KAAK,GAAGtF,oBAAoB,CAACuF,IAArB,CAA0B3D,KAA1B,CAAZ,EAA8C;AAC5CG,QAAAA,CAAC,GAAGf,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAtD,QAAAA,CAAC,GAAGhB,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjB,QAAAA,CAAC,GAAGrD,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACD,OAJD,MAKK,IAAIA,KAAK,GAAGrF,qBAAqB,CAACsF,IAAtB,CAA2B3D,KAA3B,CAAZ,EAA+C;AAClDG,QAAAA,CAAC,GAAGf,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAtD,QAAAA,CAAC,GAAGhB,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACAjB,QAAAA,CAAC,GAAGrD,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,GAAX,CAAb;AACApD,QAAAA,CAAC,GAAGlB,SAAS,CAACsE,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,CAAb;AACD;;AACD,UAAIA,KAAJ,EAAW;AACT,aAAK1C,GAAL,GAAW;AAACb,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOqC,UAAAA,CAAC,EAADA,CAAP;AAAUnC,UAAAA,CAAC,EAADA;AAAV,SAAX;AACD,OAFD,MAGK;AACH,cAAM,IAAIY,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF;AAzgBH;AAAA;AAAA,SA2gBE;AACE,UAAM2C,IAAI,GAAG,KAAKA,IAAlB;AACA,uBAAeA,IAAI,CAAC1D,CAApB,UAA0B0D,IAAI,CAACzD,CAA/B,WAAsCyD,IAAI,CAACpB,CAA3C,WAAkDoB,IAAI,CAACvD,CAAvD;AACD,KA9gBH;AAAA,SAghBE,aAAsBN,KAAtB;AACE,WAAKY,SAAL,GAAiBZ,KAAjB;AACD;AAlhBH;;AAAA;AAAA;;IC9Fa8D,oBAAoB,GAAG;AAClCC,EAAAA,WAAW,EAAE,KADqB;AAElCC,EAAAA,UAAU,EAAE,OAFsB;AAGlCd,EAAAA,cAAc,EAAE,IAHkB;AAIlCC,EAAAA,cAAc,EAAE;AAJkB,CAA7B;AAOP;;;;;AAIA,SAAgBc,gBAAgBC;;;AAC9B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgBC,oBAAoBH;;;AAClC,MAAMI,KAAN,GAAyFJ,KAAzF,CAAMI,KAAN;AAAA,MAAyBC,UAAzB,GAAyFL,KAAzF,CAAaK,UAAb;AAAA,MAAqCC,WAArC,GAAyFN,KAAzF,CAAqCM,WAArC;AAAA,MAAkDC,YAAlD,GAAyFP,KAAzF,CAAkDO,YAAlD;AAAA,MAAgEC,OAAhE,GAAyFR,KAAzF,CAAgEQ,OAAhE;AAAA,MAAyEX,WAAzE,GAAyFG,KAAzF,CAAyEH,WAAzE;AACA,MAAIY,MAAJ;;AACA,MAAIT,KAAK,CAACU,SAAV,EAAqB;AACnBD,IAAAA,MAAM,GAAGL,KAAK,GAAG,EAAjB;AACD,GAFD,MAEO;AAAA;;AACLK,IAAAA,MAAM,0BAAGT,KAAK,CAACW,YAAT,kCAAyBP,KAA/B;AACD;;AAED,MAAMQ,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;;AAEAI,EAAAA,UAAU,kBAAGA,UAAH,0BAAiBG,OAAO,GAAG,CAAV,GAAcD,YAAY,GAAG,CAAxD;;AACA,MAAIV,WAAW,KAAK,QAApB,EAA8B;AAC5B,WAAO;AACLgB,MAAAA,WAAW,EAAEb,KAAK,CAACQ,OAAN,GAAgBR,KAAK,CAACO,YAD9B;AAELO,MAAAA,WAAW,EAAEV,KAAK,GAAGI,OAAO,GAAG,CAAlB,GAAsBD,YAAY,GAAG,CAF7C;AAGLH,MAAAA,KAAK,EAAEA,KAHF;AAILW,MAAAA,MAAM,EAAEX,KAJH;AAKLY,MAAAA,EAAE,EAAEZ,KAAK,GAAG,CALP;AAMLa,MAAAA,EAAE,EAAEb,KAAK,GAAG,CANP;AAOLc,MAAAA,MAAM,EAAEd,KAAK,GAAG,CAAR,GAAYE,WAAW,GAAG;AAP7B,KAAP;AASD,GAVD,MAUO;AACL,WAAO;AACLO,MAAAA,WAAW,EAAER,UAAU,GAAG,CADrB;AAELS,MAAAA,WAAW,EAAEL,MAAM,GAAGJ,UAFjB;AAGLa,MAAAA,MAAM,EAAEb,UAAU,GAAG,CAHhB;AAILc,MAAAA,CAAC,EAAE,CAJE;AAKLC,MAAAA,CAAC,EAAE,CALE;AAMLhB,MAAAA,KAAK,EAAEQ,YAAY,GAAGP,UAAH,GAAgBI,MAN9B;AAOLM,MAAAA,MAAM,EAAEH,YAAY,GAAGH,MAAH,GAAYJ;AAP3B,KAAP;AASD;AACF;AAED;;;;;;AAKA,SAAgBgB,sBAAsBrB,OAA+BsB;AACnE,MAAM3E,IAAI,GAAG2E,KAAK,CAAC3E,IAAnB;AACA,MAAMC,GAAG,GAAG0E,KAAK,CAAC1E,GAAlB;;AAEA,UAAQoD,KAAK,CAACF,UAAd;AACE,SAAK,KAAL;AACE,aAAOlD,GAAG,CAACmB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOnB,GAAG,CAACoB,CAAJ,GAAQ,IAAf;;AACF,SAAK,MAAL;AACE,aAAOpB,GAAG,CAACqB,CAAJ,GAAQ,IAAf;;AACF,SAAK,OAAL;AACE,aAAOtB,IAAI,CAACP,CAAL,GAAS,GAAhB;;AACF,SAAK,QAAL;AACE,UAAQ4C,cAAR,GAA2CgB,KAA3C,CAAQhB,cAAR;AAAA,UAAwBC,cAAxB,GAA2Ce,KAA3C,CAAwBf,cAAxB;AACA,UAAMsC,gBAAgB,GAAGtC,cAAc,GAAGD,cAA1C;AACA,UAAMwC,OAAO,GAAI,CAACF,KAAK,CAACvE,MAAN,GAAeiC,cAAhB,IAAkCuC,gBAAnC,GAAuD,GAAvE,CAHF;;AAKE,aAAO3G,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACI,GAAL,CAASwG,OAAT,EAAkB,GAAlB,CAAZ,CAAP;;AACF,SAAK,KAAL;AACE,aAAO7E,IAAI,CAACV,CAAL,IAAU,GAAjB;;AACF,SAAK,YAAL;AACE,aAAOU,IAAI,CAACT,CAAZ;;AACF,SAAK,OAAL;AACA;AACE,aAAOS,IAAI,CAACR,CAAZ;AArBJ;AAuBD;AAED;;;;;;;AAMA,SAAgBsF,wBAAwBzB,OAA+BmB,GAAWC;AAChF,6BAAqCjB,mBAAmB,CAACH,KAAD,CAAxD;AAAA,MAAQc,WAAR,wBAAQA,WAAR;AAAA,MAAqBD,WAArB,wBAAqBA,WAArB;;AACA,MAAIa,SAAJ;;AACA,MAAI1B,KAAK,CAACC,eAAN,KAA0B,YAA9B,EAA4C;AAC1CyB,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKN,CAAL,GAASN,WAAT,GAAuBD,WAAnC;AACD,GAFD,MAEO;AACLa,IAAAA,SAAS,GAAGP,CAAC,GAAGN,WAAhB;AACD;;;AAEDa,EAAAA,SAAS,GAAG9G,IAAI,CAACK,GAAL,CAASL,IAAI,CAACI,GAAL,CAAS0G,SAAT,EAAoBZ,WAApB,CAAT,EAA2C,CAA3C,CAAZ;AACA,MAAMU,OAAO,GAAG5G,IAAI,CAACD,KAAL,CAAY,MAAMmG,WAAP,GAAsBY,SAAjC,CAAhB;;AACA,UAAQ1B,KAAK,CAACF,UAAd;AACE,SAAK,QAAL;AACE,UAAQd,cAAR,GAA2CgB,KAA3C,CAAQhB,cAAR;AAAA,UAAwBC,cAAxB,GAA2Ce,KAA3C,CAAwBf,cAAxB;AACA,UAAMsC,gBAAgB,GAAGtC,cAAc,GAAGD,cAA1C;AACA,aAAOA,cAAc,GAAGuC,gBAAgB,IAAIC,OAAO,GAAG,GAAd,CAAxC;;AACF,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACE,aAAOA,OAAO,GAAG,GAAjB;;AACF,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAOA,OAAO,GAAG,IAAjB;;AACF;AACE,aAAOA,OAAP;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgBG,wBAAwB3B,OAA+BsB;AACrE,8BAAoDnB,mBAAmB,CAACH,KAAD,CAAvE;AAAA,MAAQI,KAAR,yBAAQA,KAAR;AAAA,MAAeW,MAAf,yBAAeA,MAAf;AAAA,MAAuBD,WAAvB,yBAAuBA,WAAvB;AAAA,MAAoCD,WAApC,yBAAoCA,WAApC;;AACA,MAAMD,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,MAAM2B,WAAW,GAAGP,qBAAqB,CAACrB,KAAD,EAAQsB,KAAR,CAAzC;AACA,MAAMO,QAAQ,GAAGjB,YAAY,GAAGR,KAAK,GAAG,CAAX,GAAeW,MAAM,GAAG,CAArD;AACA,MAAIW,SAAS,GAAGb,WAAW,GAAIe,WAAW,GAAG,GAAf,GAAsBd,WAApD;;AACA,MAAIF,YAAJ,EAAkB;AAChBc,IAAAA,SAAS,GAAG,CAAC,CAAD,GAAKA,SAAL,GAAiBZ,WAAjB,GAA+BD,WAAW,GAAG,CAAzD;AACD;;AACD,SAAO;AACLM,IAAAA,CAAC,EAAEP,YAAY,GAAGiB,QAAH,GAAcH,SADxB;AAELN,IAAAA,CAAC,EAAER,YAAY,GAAGc,SAAH,GAAeG;AAFzB,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,kBAAkB9B,OAA+BsB;AAC/D,MAAMzE,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;AACA,MAAMD,GAAG,GAAG0E,KAAK,CAAC1E,GAAlB;;AAEA,UAAQoD,KAAK,CAACF,UAAd;AACE,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAY,CAAZ,SAAmBlD,GAAG,CAACoB,CAAvB,SAA8BpB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAc,GAAd,SAAuBrB,GAAG,CAACoB,CAA3B,SAAkCpB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuB,CAAvB,SAA8BnB,GAAG,CAACqB,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyB,GAAzB,SAAkCnB,GAAG,CAACqB,CAAtC,OAFK,CAAP;;AAIF,SAAK,MAAL;AACE,aAAO,CACL,CAAC,CAAD,WAAYrB,GAAG,CAACmB,CAAhB,SAAuBnB,GAAG,CAACoB,CAA3B,SAAkC,CAAlC,OADK,EAEL,CAAC,GAAD,WAAcpB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoC,GAApC,OAFK,CAAP;;AAIF,SAAK,OAAL;AACE,aAAO,CACL,CAAC,CAAD,YAAapB,GAAG,CAACmB,CAAjB,SAAwBnB,GAAG,CAACoB,CAA5B,SAAmCpB,GAAG,CAACqB,CAAvC,SADK,EAEL,CAAC,GAAD,WAAcrB,GAAG,CAACmB,CAAlB,SAAyBnB,GAAG,CAACoB,CAA7B,SAAoCpB,GAAG,CAACqB,CAAxC,OAFK,CAAP;;AAIF,SAAK,QAAL;AACE,UAAM8D,KAAK,GAAG,EAAd;AACA,UAAM/G,GAAG,GAAGgF,KAAK,CAAChB,cAAlB;AACA,UAAM/D,GAAG,GAAG+E,KAAK,CAACf,cAAlB;AACA,UAAM+C,QAAQ,GAAG,CAAjB;AACA,UAAMC,KAAK,GAAGhH,GAAG,GAAGD,GAApB;;AACA,WAAK,IAAI+B,MAAM,GAAG/B,GAAb,EAAkBkH,IAAI,GAAG,CAA9B,EAAiCnF,MAAM,GAAG9B,GAA1C,EAA+C8B,MAAM,IAAIkF,KAAK,GAAGD,QAAlB,EAA4BE,IAAI,IAAI,CAAnF,EAAsF;AACpF,oCAAoBrG,QAAQ,CAAC6C,WAAT,CAAqB3B,MAArB,CAApB;AAAA,YAAQgB,CAAR,yBAAQA,CAAR;AAAA,YAAWC,CAAX,yBAAWA,CAAX;AAAA,YAAcC,CAAd,yBAAcA,CAAd;;AACA8D,QAAAA,KAAK,CAACI,IAAN,CAAW,CAAE,MAAMH,QAAN,GAAiBE,IAAnB,WAAgCnE,CAAhC,SAAqCC,CAArC,SAA0CC,CAA1C,OAAX;AACD;;AACD,aAAO8D,KAAP;;AACF,SAAK,KAAL;AACE,aAAO,CACL,CAAC,CAAD,EAAS,MAAT,CADK,EAEL,CAAC,MAAD,EAAS,MAAT,CAFK,EAGL,CAAC,MAAD,EAAS,MAAT,CAHK,EAIL,CAAC,EAAD,EAAS,MAAT,CAJK,EAKL,CAAC,MAAD,EAAS,MAAT,CALK,EAML,CAAC,MAAD,EAAS,MAAT,CANK,EAOL,CAAC,GAAD,EAAS,MAAT,CAPK,CAAP;;AASF,SAAK,YAAL;AACE,UAAMK,KAAK,GAAGvG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,CAAd;AAAiBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAAxB,OAAlB,CAAd;AACA,UAAMkG,OAAO,GAAGxG,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAE,GAAd;AAAmBC,QAAAA,CAAC,EAAEU,GAAG,CAACV;AAA1B,OAAlB,CAAhB;AACA,aAAO,CACL,CAAC,CAAD,WAAWiG,KAAK,CAACnG,CAAjB,SAAsBmG,KAAK,CAAClG,CAA5B,UAAkCkG,KAAK,CAAC7D,CAAxC,QADK,EAEL,CAAC,GAAD,WAAa8D,OAAO,CAACpG,CAArB,SAA0BoG,OAAO,CAACnG,CAAlC,UAAwCmG,OAAO,CAAC9D,CAAhD,QAFK,CAAP;;AAIF,SAAK,OAAL;AACA;AACE,UAAMzB,GAAG,GAAGjB,QAAQ,CAACyC,QAAT,CAAkB;AAACrC,QAAAA,CAAC,EAAEY,GAAG,CAACZ,CAAR;AAAWC,QAAAA,CAAC,EAAEW,GAAG,CAACX,CAAlB;AAAqBC,QAAAA,CAAC,EAAE;AAAxB,OAAlB,CAAZ;AACA,aAAO,CACL,CAAC,CAAD,EAAI,MAAJ,CADK,EAEL,CAAC,GAAD,WAAaW,GAAG,CAACb,CAAjB,SAAsBa,GAAG,CAACZ,CAA1B,UAAgCY,GAAG,CAACyB,CAApC,QAFK,CAAP;AApDJ;AAyDD;AAED;;;;;AAIA,SAAgB+D,wBAAwBtC;AACtC,MAAMY,YAAY,GAAGZ,KAAK,CAACC,eAAN,KAA0B,YAA/C;AACA,SAAO;AACLsC,IAAAA,EAAE,EAAE,IADC;AAELC,IAAAA,EAAE,EAAE5B,YAAY,GAAG,MAAH,GAAY,IAFvB;AAGL6B,IAAAA,EAAE,EAAE7B,YAAY,GAAG,IAAH,GAAU,MAHrB;AAIL8B,IAAAA,EAAE,EAAE;AAJC,GAAP;AAMD;;ACxOD;;;;;AAKC,SAAgBC,iBAAiB3C,OAA8BlE;AAC9D,WAAShB,KAAT,CAAeC,GAAf,EAA4BC,GAA5B,EAAyCC,GAAzC;AACE,WAAOL,IAAI,CAACI,GAAL,CAASJ,IAAI,CAACK,GAAL,CAASF,GAAT,EAAcC,GAAd,CAAT,EAA6BC,GAA7B,CAAP;AACD;;AACD,UAAO+E,KAAK,CAACF,UAAb;AACE,SAAK,KAAL;AACE,aAAOhF,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,YAAL;AACA,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,KAAL;AACA,SAAK,OAAL;AACA,SAAK,MAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,GAAX,CAAZ;;AACF,SAAK,OAAL;AACE,aAAOhB,KAAK,CAACgB,KAAD,EAAQ,CAAR,EAAW,CAAX,CAAZ;;AACF,SAAK,QAAL;AACE,UAAQkD,cAAR,GAA2CgB,KAA3C,CAAQhB,cAAR;AAAA,UAAwBC,cAAxB,GAA2Ce,KAA3C,CAAwBf,cAAxB;AACA,aAAOnE,KAAK,CAACgB,KAAD,EAAQkD,cAAR,EAAwBC,cAAxB,CAAZ;AAdJ;AAgBD;AAED;;;;;;AAKA,SAAgB2D,6BAA6BC;AAC3C,MAAIC,MAAM,GAAID,CAAC,CAACC,MAAhB;AACA,MAAIC,QAAQ,GAAGvH,QAAQ,CAACsH,MAAM,CAAChH,KAAR,CAAvB;;AAEA,MAAI,CAAC,gBAAgBS,IAAhB,CAAsBsG,CAAD,CAAIxD,GAAzB,CAAL,EAAoC;AAClCwD,IAAAA,CAAC,CAACG,cAAF;AACA,WAAOD,QAAP;AACD;;AACD,MAAIE,WAAW,GAAGH,MAAM,CAAChH,KAAP,CAAaH,QAAb,EAAlB;;AACA,MAAImH,MAAM,CAACI,cAAP,KAA0B3F,SAA9B,EAAyC;AAAE;AACzC0F,IAAAA,WAAW,GAAGA,WAAW,CAACE,SAAZ,CAAsB,CAAtB,EAAyBL,MAAM,CAACI,cAAhC,IACZL,CAAC,CAACxD,GAAF,CAAM1D,QAAN,EADY,GAEZsH,WAAW,CAACE,SAAZ,CAAsBL,MAAM,CAACM,YAA7B,CAFF;AAGD,GAJD,MAIO;AACLH,IAAAA,WAAW,GAAGA,WAAW,GAAGJ,CAAC,CAACxD,GAAF,CAAM1D,QAAN,EAA5B;AACD;;AACD,SAAO,CAACsH,WAAR;AACD;AAED;;;;;;AAKC,SAAgBI,4BAA4BrD,OAA8B6C;AACzE;AACA,MAAM9E,CAAC,GAAG,8BAAV;AACA,MAAMkF,WAAW,GAAWJ,CAAC,CAACS,aAAF,CAAgBC,OAAhB,CAAwB,MAAxB,CAA5B;;AACA,MAAI,CAACxF,CAAC,CAACxB,IAAF,CAAO0G,WAAP,CAAL,EAA0B;AACxB,WAAO,CAAP;AACD;;AACD,MAAMF,QAAQ,GAAG,CAACE,WAAlB;AACA,SAAON,gBAAgB,CAAC3C,KAAD,EAAQ+C,QAAR,CAAvB;AACD;;ACrED,IAAMS,GAAG,GAAG5I,IAAI,CAAC6I,EAAL,GAAU,CAAtB;AAGA;;AACA,IAAM3F,GAAG,GAAG,SAANA,GAAM,CAAC1B,CAAD,EAAYsH,CAAZ;AAAA,SAA0B,CAACtH,CAAC,GAAGsH,CAAJ,GAAQA,CAAT,IAAcA,CAAxC;AAAA,CAAZ;;;AAGA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAACxC,CAAD,EAAYC,CAAZ;AAAA,SAA0BxG,IAAI,CAACgJ,IAAL,CAAUzC,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAA1B;AAAA,CAAb;AAEA;;;;;;AAIA,SAASyC,cAAT,CAAwB7D,KAAxB;AACE,SAAOA,KAAK,CAACI,KAAN,GAAc,CAAd,GAAkBJ,KAAK,CAACQ,OAAxB,GAAkCR,KAAK,CAACO,YAAxC,GAAuDP,KAAK,CAACM,WAApE;AACD;AAED;;;;;;;;AAMA,SAAgBwD,mBAAmB9D,OAA4BmB,GAAWC;AACxE,4BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,uBAAQA,EAAR;AAAA,MAAYC,EAAZ,uBAAYA,EAAZ;;AACA,MAAMlD,CAAC,GAAGiC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAOuD,IAAI,CAAC3C,EAAE,GAAGG,CAAN,EAASF,EAAE,GAAGG,CAAd,CAAJ,GAAuBrD,CAA9B;AACD;AAED;;;;;AAIA,SAAgBgG,mBAAmB/D;AACjC,MAAMjC,CAAC,GAAGiC,KAAK,CAACI,KAAN,GAAc,CAAxB;AACA,SAAO;AACLA,IAAAA,KAAK,EAAEJ,KAAK,CAACI,KADR;AAELc,IAAAA,MAAM,EAAEnD,CAAC,GAAGiC,KAAK,CAACM,WAFb;AAGLU,IAAAA,EAAE,EAAEjD,CAHC;AAILkD,IAAAA,EAAE,EAAElD;AAJC,GAAP;AAMD;AAED;;;;;;AAKA,SAAgBiG,oBAAoBhE,OAA4BiE,OAAeC;AAC7E,MAAMC,UAAU,GAAGnE,KAAK,CAACmE,UAAzB;AACA,MAAMC,cAAc,GAAGpE,KAAK,CAACoE,cAA7B;;AAEA,MAAIF,MAAM,IAAIE,cAAc,KAAK,WAAjC,EACEH,KAAK,GAAGE,UAAU,GAAGF,KAArB,CADF;AAAA,OAGK,IAAIG,cAAc,KAAK,WAAvB,EACHH,KAAK,GAAI,MAAME,UAAP,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIC,MAAM,IAAIE,cAAc,KAAK,eAAjC,EACHH,KAAK,GAAIE,UAAU,GAAG,GAAd,GAAqBF,KAA7B,CADG;AAAA,OAGA,IAAIG,cAAc,KAAK,eAAvB,EACHH,KAAK,GAAGE,UAAU,GAAGF,KAArB;AACF,SAAOnG,GAAG,CAACmG,KAAD,EAAQ,GAAR,CAAV;AACD;AAED;;;;;;AAKA,SAAgBI,uBAAuBrE,OAA4BsB;AACjE,MAAMzE,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;;AACA,6BAAmBkH,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACA,MAAMsE,WAAW,GAAG,CAAC,MAAMN,mBAAmB,CAAChE,KAAD,EAAQnD,GAAG,CAACZ,CAAZ,EAAe,IAAf,CAA1B,KAAmDuH,GAAG,GAAG,GAAzD,CAApB;AACA,MAAMe,UAAU,GAAI1H,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB4E,WAAnC;AACA,MAAM0D,SAAS,GAAGxE,KAAK,CAACoE,cAAN,KAAyB,WAAzB,GAAuC,CAAC,CAAxC,GAA4C,CAA9D;AACA,SAAO;AACLjD,IAAAA,CAAC,EAAEH,EAAE,GAAGuD,UAAU,GAAG3J,IAAI,CAAC6J,GAAL,CAASH,WAAT,CAAb,GAAqCE,SADxC;AAELpD,IAAAA,CAAC,EAAEH,EAAE,GAAGsD,UAAU,GAAG3J,IAAI,CAAC8J,GAAL,CAASJ,WAAT,CAAb,GAAqCE;AAFxC,GAAP;AAID;AAED;;;;;;;AAMA,SAAgBG,uBAAuB3E,OAA4BmB,GAAWC;AAC5E,6BAAmB2C,kBAAkB,CAAC/D,KAAD,CAArC;AAAA,MAAQgB,EAAR,wBAAQA,EAAR;AAAA,MAAYC,EAAZ,wBAAYA,EAAZ;;AACA,MAAMH,WAAW,GAAG+C,cAAc,CAAC7D,KAAD,CAAlC;AACAmB,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;AACAC,EAAAA,CAAC,GAAGH,EAAE,GAAGG,CAAT;;AAEA,MAAMhD,GAAG,GAAG4F,mBAAmB,CAAChE,KAAD,EAAQpF,IAAI,CAACgK,KAAL,CAAW,CAACxD,CAAZ,EAAe,CAACD,CAAhB,KAAsB,MAAMqC,GAA5B,CAAR,CAA/B;AAEA;;AACA,MAAMe,UAAU,GAAG3J,IAAI,CAACI,GAAL,CAAS2I,IAAI,CAACxC,CAAD,EAAIC,CAAJ,CAAb,EAAqBN,WAArB,CAAnB;AACA,SAAO;AACL7E,IAAAA,CAAC,EAAErB,IAAI,CAACD,KAAL,CAAWyD,GAAX,CADE;AAELlC,IAAAA,CAAC,EAAEtB,IAAI,CAACD,KAAL,CAAY,MAAMmG,WAAP,GAAsByD,UAAjC;AAFE,GAAP;AAID;;ACvGD;;;;AAIA,SAAgBM,aAAa7E;;;AAC3B,yBACGA,KAAK,CAACC,eAAN,KAA0B,YAA1B,GAAyC,YAAzC,GAAwD,WAD3D,IACyED,KAAK,CAACE,YAD/E;AAGD;AAED;;;;;AAIA,SAAgB4E,iBAAiB9E;AAC/B,MAAQI,KAAR,GAAoDJ,KAApD,CAAQI,KAAR;AAAA,MAAe2E,SAAf,GAAoD/E,KAApD,CAAe+E,SAAf;AAAA,MAA0BvE,OAA1B,GAAoDR,KAApD,CAA0BQ,OAA1B;AAAA,MAAmCD,YAAnC,GAAoDP,KAApD,CAAmCO,YAAnC;AACA,SAAO;AACLH,IAAAA,KAAK,EAAEA,KADF;AAELW,IAAAA,MAAM,EAAEgE,SAAF,WAAEA,SAAF,GAAe3E,KAFhB;AAGLc,IAAAA,MAAM,EAAEV,OAAO,GAAGD;AAHb,GAAP;AAKD;AAED;;;;;;;AAMA,SAAgByE,qBAAqBhF,OAA4BmB,GAAWC;AAC1E,0BAAkC0D,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,qBAAQA,KAAR;AAAA,MAAeW,MAAf,qBAAeA,MAAf;AAAA,MAAuBG,MAAvB,qBAAuBA,MAAvB;;AACA,MAAML,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,MAAMiE,QAAQ,GAAI,CAAChE,CAAC,GAAGN,WAAL,IAAoBoE,YAArB,GAAqC,GAAtD;AACA,MAAMG,QAAQ,GAAI,CAAChE,CAAC,GAAGP,WAAL,IAAoBqE,YAArB,GAAqC,GAAtD;AACA,SAAO;AACLhJ,IAAAA,CAAC,EAAEtB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACI,GAAL,CAASmK,QAAT,EAAmB,GAAnB,CAAZ,CADE;AAELhJ,IAAAA,CAAC,EAAEvB,IAAI,CAACK,GAAL,CAAS,CAAT,EAAYL,IAAI,CAACI,GAAL,CAAS,MAAMoK,QAAf,EAAyB,GAAzB,CAAZ;AAFE,GAAP;AAID;AAED;;;;;;AAKA,SAAgBC,qBAAqBrF,OAA4BsB;AAC/D,2BAAkCwD,gBAAgB,CAAC9E,KAAD,CAAlD;AAAA,MAAQI,KAAR,sBAAQA,KAAR;AAAA,MAAeW,MAAf,sBAAeA,MAAf;AAAA,MAAuBG,MAAvB,sBAAuBA,MAAvB;;AACA,MAAMrE,GAAG,GAAGyE,KAAK,CAACzE,GAAlB;AACA,MAAMgE,WAAW,GAAGK,MAApB;AACA,MAAM+D,YAAY,GAAG7E,KAAK,GAAGc,MAAM,GAAG,CAAtC;AACA,MAAMgE,YAAY,GAAGnE,MAAM,GAAGG,MAAM,GAAG,CAAvC;AACA,SAAO;AACLC,IAAAA,CAAC,EAAEN,WAAW,GAAIhE,GAAG,CAACX,CAAJ,GAAQ,GAAT,GAAgB+I,YAD5B;AAEL7D,IAAAA,CAAC,EAAEP,WAAW,IAAIqE,YAAY,GAAKrI,GAAG,CAACV,CAAJ,GAAQ,GAAT,GAAgB+I,YAApC;AAFT,GAAP;AAID;AAED;;;;;;AAKA,SAAgBI,gBAAgBtF,OAA4BsB;AAC1D,MAAMlD,GAAG,GAAGkD,KAAK,CAAClD,GAAlB;AACA,SAAO;AAEL,GACE,CAAC,CAAD,EAAI,MAAJ,CADF,EAEE,CAAC,GAAD,WAAaA,GAAb,gBAFF,CAFK;AAOL,GACE,CAAC,CAAD,EAAI,eAAJ,CADF,EAEE,CAAC,GAAD,EAAM,MAAN,CAFF,CAPK,CAAP;AAYD;;ACpFD;AACA;AACA;AACA,IAAImH,aAAJ;AAEA;;;;;;;;;;;;;AAYA,SAAgBC,cAAcC;AAC5B,MAAI,CAACF,aAAL,EACEA,aAAa,GAAGG,QAAQ,CAACC,oBAAT,CAA8B,MAA9B,CAAhB;;AAEF,MAAMC,EAAE,GAAGC,MAAM,CAACC,SAAP,CAAiBC,SAA5B;AACA,MAAMC,QAAQ,GAAG,iCAAiCzJ,IAAjC,CAAsCqJ,EAAtC,CAAjB;AACA,MAAMK,KAAK,GAAG,oBAAoB1J,IAApB,CAAyBqJ,EAAzB,CAAd;AACA,MAAMM,QAAQ,GAAGL,MAAM,CAACK,QAAxB;AACA,SAAQ,CAACF,QAAQ,IAAIC,KAAb,KAAwBV,aAAa,CAAC9E,MAAd,GAAuB,CAAhD,GAAyDyF,QAAQ,CAACC,QAAlE,UAA+ED,QAAQ,CAACE,IAAxF,GAA+FF,QAAQ,CAACG,QAAxG,GAAmHH,QAAQ,CAACI,MAA5H,GAAqIb,GAArI,GAA6IA,GAApJ;AACD;AAED;;;;;;;;;AAQA,SAAgBc,cAAcvF,IAAYC,IAAYC,QAAgBsF,YAAoBC;AACxF,MAAMC,YAAY,GAAGD,QAAQ,GAAGD,UAAX,IAAyB,GAAzB,GAA+B,CAA/B,GAAmC,CAAxD;AACAA,EAAAA,UAAU,IAAI5L,IAAI,CAAC6I,EAAL,GAAU,GAAxB;AACAgD,EAAAA,QAAQ,IAAI7L,IAAI,CAAC6I,EAAL,GAAU,GAAtB;AACA,MAAMlB,EAAE,GAAGvB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAASgC,QAAT,CAAzB;AACA,MAAMjE,EAAE,GAAGvB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS+B,QAAT,CAAzB;AACA,MAAMhE,EAAE,GAAGzB,EAAE,GAAGE,MAAM,GAAGtG,IAAI,CAAC6J,GAAL,CAAS+B,UAAT,CAAzB;AACA,MAAM9D,EAAE,GAAGzB,EAAE,GAAGC,MAAM,GAAGtG,IAAI,CAAC8J,GAAL,CAAS8B,UAAT,CAAzB;AACA,gBAAYjE,EAAZ,SAAkBC,EAAlB,WAA0BtB,MAA1B,SAAoCA,MAApC,WAAgDwF,YAAhD,WAAkEjE,EAAlE,SAAwEC,EAAxE;AACD;AAED;;;;;;;;AAOA,SAAgBiE,iBAAiB3G,OAAuCmB,GAAWC,GAAWwF;AAC5F,OAAK,IAAInJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmJ,eAAe,CAACnG,MAApC,EAA4ChD,CAAC,EAA7C,EAAiD;AAC/C,QAAMoJ,EAAE,GAAGD,eAAe,CAACnJ,CAAD,CAAf,CAAmB0D,CAAnB,GAAuBA,CAAlC;AACA,QAAM2F,EAAE,GAAGF,eAAe,CAACnJ,CAAD,CAAf,CAAmB2D,CAAnB,GAAuBA,CAAlC;AACA,QAAMuC,IAAI,GAAG/I,IAAI,CAACgJ,IAAL,CAAUiD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAb;;AACA,QAAInD,IAAI,GAAG3D,KAAK,CAACO,YAAjB,EAA+B;AAC7B,aAAO9C,CAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;SChEesJ,gBAAgB/G;AAC9B,SAAO;AACLgH,IAAAA,SAAS,EAAE,YADN;AAELC,IAAAA,MAAM,EAAMjH,KAAK,CAACM,WAAZ,iBAAqCN,KAAK,CAACkH;AAF5C,GAAP;AAID;AAKD,SAAgBC,YAAYC,MAAuB5C,WAAmBzC;AACpE,SAAWqF,IAAX,kBAA8B5C,SAA9B,UAA8CzC,KAAK,CAACsF,GAAN,CAAU;AAAA,QAAEC,CAAF;AAAA,QAAKC,GAAL;AAAA,WAAkBA,GAAlB,SAA2BD,CAA3B;AAAA,GAAV,EAA4CE,IAA5C,CAAiD,GAAjD,CAA9C;AACD;AAED,SAAgBC,SAAS3L;AACvB,MAAI,OAAOA,KAAP,KAAkB,QAAtB,EACE,OAAOA,KAAP;AACF,SAAWA,KAAX;AACD;;ICOY4L,4BAA4B,GAA0B;AACjEtH,EAAAA,KAAK,EAAE,GAD0D;AAEjEW,EAAAA,MAAM,EAAE,GAFyD;AAGjEO,EAAAA,KAAK,EAAE,MAH0D;AAIjEqG,EAAAA,MAAM,EAAE,EAJyD;AAKjEnH,EAAAA,OAAO,EAAE,CALwD;AAMjEP,EAAAA,eAAe,EAAE,UANgD;AAOjEiH,EAAAA,WAAW,EAAE,MAPoD;AAQjE5G,EAAAA,WAAW,EAAE,CARoD;AASjEC,EAAAA,YAAY,EAAE,CATmD;AAUjEqH,EAAAA,kBAAkB,EAAE,IAV6C;AAWjEC,EAAAA,SAAS,EAAE,IAXsD;AAYjEC,EAAAA,WAAW,EAAE;AAAC3G,IAAAA,CAAC,EAAE,CAAJ;AAAOC,IAAAA,CAAC,EAAE;AAAV,GAZoD;AAajE2G,EAAAA,cAAc,EAAE,IAbiD;AAcjE5D,EAAAA,UAAU,EAAE,CAdqD;AAejEC,EAAAA,cAAc,EAAE,eAfiD;AAgBjE/D,EAAAA,UAAU,EAAE,IAhBqD;AAiBjEH,EAAAA,YAAY,EAAE,EAjBmD;AAkBjE6E,EAAAA,SAAS,EAAE;AAlBsD,CAA5D;;;;"} \ No newline at end of file +{"version":3,"file":"iro-core.es.js","sources":["../src/color.ts","../src/input.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n sliderSize: number;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Get input field dimensions\n * @param props - InputOptions\n */\n export function getInputDimensions(props: Partial) {\n let {sliderSize, layoutDirection} = props;\n let inputWidth: number;\n let fontSize: number;\n\n if (layoutDirection === 'vertical') {\n inputWidth = 30;\n fontSize = 12;\n } else {\n inputWidth = sliderSize <= 30 ? 26 : sliderSize;\n fontSize = sliderSize <= 30 ? 10 : 12;\n }\n\n return {\n inputWidth: inputWidth,\n inputHeight: 18,\n fontSize: fontSize\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\nimport { getInputDimensions } from './input';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n showLabel: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n let length: number;\n\n if (props.sliderLength) {\n length = props.sliderLength;\n } else {\n // automatically calculate slider length\n length = width - handleRadius;\n if (props.showInput) {\n let { inputWidth, inputHeight } = getInputDimensions(props);\n length -= ishorizontal ? inputHeight : inputWidth;\n length -= 3; // padding\n }\n if (props.showLabel) {\n length -= ishorizontal ? 12 : 10;\n length -= 3; // padding\n }\n }\n\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clamp percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","getInputDimensions","props","sliderSize","layoutDirection","inputWidth","fontSize","inputHeight","clampSliderValue","sliderType","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","sliderDefaultOptions","sliderShape","getSliderStyles","sliderMargin","getSliderDimensions","width","borderWidth","handleRadius","padding","ishorizontal","length","sliderLength","showInput","showLabel","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.js b/dist/iro-core.js index eb0ff94..40cbe26 100644 --- a/dist/iro-core.js +++ b/dist/iro-core.js @@ -720,6 +720,108 @@ var IroColor = /*#__PURE__*/function () { return IroColor; }(); +/** + * @desc Get input field dimensions + * @param props - InputOptions + */ +function getInputDimensions(props) { + var sliderSize = props.sliderSize, + layoutDirection = props.layoutDirection; + var inputWidth; + var fontSize; + + if (layoutDirection === 'vertical') { + inputWidth = 30; + fontSize = 12; + } else { + inputWidth = sliderSize <= 30 ? 26 : sliderSize; + fontSize = sliderSize <= 30 ? 10 : 12; + } + + return { + inputWidth: inputWidth, + inputHeight: 18, + fontSize: fontSize + }; +} +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) + + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; + } + + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + // cursor position + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString + e.key.toString(); + } + + return +valueString; +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + var sliderDefaultOptions = { sliderShape: 'bar', sliderType: 'value', @@ -750,17 +852,30 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var ishorizontal = props.layoutDirection === 'horizontal'; var length; - if (props.showInput) { - length = width - 55; + if (props.sliderLength) { + length = props.sliderLength; } else { - var _props$sliderLength; + // automatically calculate slider length + length = width - handleRadius; - length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; - } + if (props.showInput) { + var _getInputDimensions = getInputDimensions(props), + inputWidth = _getInputDimensions.inputWidth, + inputHeight = _getInputDimensions.inputHeight; + + length -= ishorizontal ? inputHeight : inputWidth; + length -= 3; // padding + } + + if (props.showLabel) { + length -= ishorizontal ? 12 : 10; + length -= 3; // padding + } + } // automatically calculate sliderSize if its not defined - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -813,7 +928,7 @@ function getCurrentSliderValue(props, color) { var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; var temperatureRange = maxTemperature - minTemperature; - var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clmap percentage + var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clamp percentage return Math.max(0, Math.min(percent, 100)); @@ -983,83 +1098,6 @@ function getSliderGradientCoords(props) { }; } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ -function clampSliderValue(props, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (props.sliderType) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - var minTemperature = props.minTemperature, - maxTemperature = props.maxTemperature; - return clamp(value, minTemperature, maxTemperature); - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(e) { - var target = e.target; - var valueNum = parseInt(target.value); // regex for digit or dot (.) - - if (!/^([0-9]|\.)$/i.test(e.key)) { - e.preventDefault(); - return valueNum; - } - - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - // cursor position - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString + e.key.toString(); - } - - return +valueString; -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props, valueNum); -} - var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e @@ -1377,6 +1415,7 @@ exports.getBoxStyles = getBoxStyles; exports.getBoxValueFromInput = getBoxValueFromInput; exports.getCurrentSliderValue = getCurrentSliderValue; exports.getHandleAtPoint = getHandleAtPoint; +exports.getInputDimensions = getInputDimensions; exports.getSliderDimensions = getSliderDimensions; exports.getSliderGradient = getSliderGradient; exports.getSliderGradientCoords = getSliderGradientCoords; diff --git a/dist/iro-core.js.map b/dist/iro-core.js.map index 3a9ca39..5a7477b 100644 --- a/dist/iro-core.js.map +++ b/dist/iro-core.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.js","sources":["../src/color.ts","../src/input.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n sliderSize: number;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Get input field dimensions\n * @param props - InputOptions\n */\n export function getInputDimensions(props: Partial) {\n let {sliderSize, layoutDirection} = props;\n let inputWidth: number;\n let fontSize: number;\n\n if (layoutDirection === 'vertical') {\n inputWidth = 30;\n fontSize = 12;\n } else {\n inputWidth = sliderSize <= 30 ? 26 : sliderSize;\n fontSize = sliderSize <= 30 ? 10 : 12;\n }\n\n return {\n inputWidth: inputWidth,\n inputHeight: 18,\n fontSize: fontSize\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\nimport { getInputDimensions } from './input';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n showLabel: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n let length: number;\n\n if (props.sliderLength) {\n length = props.sliderLength;\n } else {\n // automatically calculate slider length\n length = width - handleRadius;\n if (props.showInput) {\n let { inputWidth, inputHeight } = getInputDimensions(props);\n length -= ishorizontal ? inputHeight : inputWidth;\n length -= 3; // padding\n }\n if (props.showLabel) {\n length -= ishorizontal ? 12 : 10;\n length -= 3; // padding\n }\n }\n\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clamp percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","getInputDimensions","props","sliderSize","layoutDirection","inputWidth","fontSize","inputHeight","clampSliderValue","sliderType","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","sliderDefaultOptions","sliderShape","getSliderStyles","sliderMargin","getSliderDimensions","width","borderWidth","handleRadius","padding","ishorizontal","length","sliderLength","showInput","showLabel","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.modern.js b/dist/iro-core.modern.js index 9bee7b7..119039e 100644 --- a/dist/iro-core.modern.js +++ b/dist/iro-core.modern.js @@ -698,6 +698,112 @@ class IroColor { } +/** + * @desc Get input field dimensions + * @param props - InputOptions + */ +function getInputDimensions(props) { + let { + sliderSize, + layoutDirection + } = props; + let inputWidth; + let fontSize; + + if (layoutDirection === 'vertical') { + inputWidth = 30; + fontSize = 12; + } else { + inputWidth = sliderSize <= 30 ? 26 : sliderSize; + fontSize = sliderSize <= 30 ? 10 : 12; + } + + return { + inputWidth: inputWidth, + inputHeight: 18, + fontSize: fontSize + }; +} +/** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + +function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + const { + minTemperature, + maxTemperature + } = props; + return clamp(value, minTemperature, maxTemperature); + } +} +/** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + +function getSliderValueFromInputField(e) { + let target = e.target; + let valueNum = parseInt(target.value); // regex for digit or dot (.) + + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; + } + + let valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + // cursor position + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString + e.key.toString(); + } + + return +valueString; +} +/** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + +function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + const valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + const valueNum = +valueString; + return clampSliderValue(props, valueNum); +} + const sliderDefaultOptions = { sliderShape: 'bar', sliderType: 'value', @@ -730,17 +836,30 @@ function getSliderDimensions(props) { padding, sliderShape } = props; + const ishorizontal = props.layoutDirection === 'horizontal'; let length; - if (props.showInput) { - length = width - 55; + if (props.sliderLength) { + length = props.sliderLength; } else { - var _props$sliderLength; + // automatically calculate slider length + length = width - handleRadius; + + if (props.showInput) { + let { + inputWidth, + inputHeight + } = getInputDimensions(props); + length -= ishorizontal ? inputHeight : inputWidth; + length -= 3; // padding + } - length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; - } + if (props.showLabel) { + length -= ishorizontal ? 12 : 10; + length -= 3; // padding + } + } // automatically calculate sliderSize if its not defined - const ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -795,7 +914,7 @@ function getCurrentSliderValue(props, color) { maxTemperature } = props; const temperatureRange = maxTemperature - minTemperature; - const percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clmap percentage + const percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clamp percentage return Math.max(0, Math.min(percent, 100)); @@ -967,85 +1086,6 @@ function getSliderGradientCoords(props) { }; } -/** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ -function clampSliderValue(props, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (props.sliderType) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - const { - minTemperature, - maxTemperature - } = props; - return clamp(value, minTemperature, maxTemperature); - } -} -/** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - -function getSliderValueFromInputField(e) { - let target = e.target; - let valueNum = parseInt(target.value); // regex for digit or dot (.) - - if (!/^([0-9]|\.)$/i.test(e.key)) { - e.preventDefault(); - return valueNum; - } - - let valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - // cursor position - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString + e.key.toString(); - } - - return +valueString; -} -/** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - -function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - const r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - const valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - const valueNum = +valueString; - return clampSliderValue(props, valueNum); -} - const TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e @@ -1344,5 +1384,5 @@ const iroColorPickerOptionDefaults = { boxHeight: null }; -export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; +export { IroColor, clampSliderValue, cssBorderStyles, cssGradient, cssValue, getBoxDimensions, getBoxGradients, getBoxHandlePosition, getBoxStyles, getBoxValueFromInput, getCurrentSliderValue, getHandleAtPoint, getInputDimensions, getSliderDimensions, getSliderGradient, getSliderGradientCoords, getSliderHandlePosition, getSliderStyles, getSliderValueFromClipboard, getSliderValueFromInput, getSliderValueFromInputField, getSvgArcPath, getWheelDimensions, getWheelHandlePosition, getWheelValueFromInput, iroColorPickerOptionDefaults, isInputInsideWheel, resolveSvgUrl, sliderDefaultOptions, translateWheelAngle }; //# sourceMappingURL=iro-core.modern.js.map diff --git a/dist/iro-core.modern.js.map b/dist/iro-core.modern.js.map index c6194ba..9d5f01e 100644 --- a/dist/iro-core.modern.js.map +++ b/dist/iro-core.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","alpha","raw_rgb","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.modern.js","sources":["../src/color.ts","../src/input.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n sliderSize: number;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Get input field dimensions\n * @param props - InputOptions\n */\n export function getInputDimensions(props: Partial) {\n let {sliderSize, layoutDirection} = props;\n let inputWidth: number;\n let fontSize: number;\n\n if (layoutDirection === 'vertical') {\n inputWidth = 30;\n fontSize = 12;\n } else {\n inputWidth = sliderSize <= 30 ? 26 : sliderSize;\n fontSize = sliderSize <= 30 ? 10 : 12;\n }\n\n return {\n inputWidth: inputWidth,\n inputHeight: 18,\n fontSize: fontSize\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\nimport { getInputDimensions } from './input';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n showLabel: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n let length: number;\n\n if (props.sliderLength) {\n length = props.sliderLength;\n } else {\n // automatically calculate slider length\n length = width - handleRadius;\n if (props.showInput) {\n let { inputWidth, inputHeight } = getInputDimensions(props);\n length -= ishorizontal ? inputHeight : inputWidth;\n length -= 3; // padding\n }\n if (props.showLabel) {\n length -= ishorizontal ? 12 : 10;\n length -= 3; // padding\n }\n }\n\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clamp percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","log","round","floor","Math","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","constructor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","alpha","raw_rgb","red","green","blue","rgba","hsla","match","exec","rgbaString","hex8String","hslaString","getInputDimensions","props","sliderSize","layoutDirection","inputWidth","fontSize","inputHeight","clampSliderValue","sliderType","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","sliderDefaultOptions","sliderShape","getSliderStyles","sliderMargin","getSliderDimensions","width","borderWidth","handleRadius","padding","ishorizontal","length","sliderLength","showInput","showLabel","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iro-core.umd.js b/dist/iro-core.umd.js index 77516e4..0b2bcc8 100644 --- a/dist/iro-core.umd.js +++ b/dist/iro-core.umd.js @@ -725,6 +725,108 @@ return IroColor; }(); + /** + * @desc Get input field dimensions + * @param props - InputOptions + */ + function getInputDimensions(props) { + var sliderSize = props.sliderSize, + layoutDirection = props.layoutDirection; + var inputWidth; + var fontSize; + + if (layoutDirection === 'vertical') { + inputWidth = 30; + fontSize = 12; + } else { + inputWidth = sliderSize <= 30 ? 26 : sliderSize; + fontSize = sliderSize <= 30 ? 10 : 12; + } + + return { + inputWidth: inputWidth, + inputHeight: 18, + fontSize: fontSize + }; + } + /** + * @desc Clamp slider value between min and max values + * @param type - props.sliderType + * @param value - value to clamp + */ + + function clampSliderValue(props, value) { + function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + switch (props.sliderType) { + case 'hue': + return clamp(value, 0, 360); + + case 'saturation': + case 'value': + return clamp(value, 0, 100); + + case 'red': + case 'green': + case 'blue': + return clamp(value, 0, 255); + + case 'alpha': + return clamp(value, 0, 1); + + case 'kelvin': + var minTemperature = props.minTemperature, + maxTemperature = props.maxTemperature; + return clamp(value, minTemperature, maxTemperature); + } + } + /** + * @desc Get the current slider value from input field input + * @param props - slider props + * @param e - KeyboardEvent + */ + + function getSliderValueFromInputField(e) { + var target = e.target; + var valueNum = parseInt(target.value); // regex for digit or dot (.) + + if (!/^([0-9]|\.)$/i.test(e.key)) { + e.preventDefault(); + return valueNum; + } + + var valueString = target.value.toString(); + + if (target.selectionStart !== undefined) { + // cursor position + valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); + } else { + valueString = valueString + e.key.toString(); + } + + return +valueString; + } + /** + * @desc Get the current slider value from clipboard data + * @param props - slider props + * @param e - ClipboardEvent + */ + + function getSliderValueFromClipboard(props, e) { + // allow only whole or decimal numbers + var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; + var valueString = e.clipboardData.getData('text'); + + if (!r.test(valueString)) { + return 0; + } + + var valueNum = +valueString; + return clampSliderValue(props, valueNum); + } + var sliderDefaultOptions = { sliderShape: 'bar', sliderType: 'value', @@ -755,17 +857,30 @@ handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; + var ishorizontal = props.layoutDirection === 'horizontal'; var length; - if (props.showInput) { - length = width - 55; + if (props.sliderLength) { + length = props.sliderLength; } else { - var _props$sliderLength; + // automatically calculate slider length + length = width - handleRadius; - length = (_props$sliderLength = props.sliderLength) != null ? _props$sliderLength : width; - } + if (props.showInput) { + var _getInputDimensions = getInputDimensions(props), + inputWidth = _getInputDimensions.inputWidth, + inputHeight = _getInputDimensions.inputHeight; + + length -= ishorizontal ? inputHeight : inputWidth; + length -= 3; // padding + } + + if (props.showLabel) { + length -= ishorizontal ? 12 : 10; + length -= 3; // padding + } + } // automatically calculate sliderSize if its not defined - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -818,7 +933,7 @@ var minTemperature = props.minTemperature, maxTemperature = props.maxTemperature; var temperatureRange = maxTemperature - minTemperature; - var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clmap percentage + var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clamp percentage return Math.max(0, Math.min(percent, 100)); @@ -988,83 +1103,6 @@ }; } - /** - * @desc Clamp slider value between min and max values - * @param type - props.sliderType - * @param value - value to clamp - */ - function clampSliderValue(props, value) { - function clamp(num, min, max) { - return Math.min(Math.max(num, min), max); - } - - switch (props.sliderType) { - case 'hue': - return clamp(value, 0, 360); - - case 'saturation': - case 'value': - return clamp(value, 0, 100); - - case 'red': - case 'green': - case 'blue': - return clamp(value, 0, 255); - - case 'alpha': - return clamp(value, 0, 1); - - case 'kelvin': - var minTemperature = props.minTemperature, - maxTemperature = props.maxTemperature; - return clamp(value, minTemperature, maxTemperature); - } - } - /** - * @desc Get the current slider value from input field input - * @param props - slider props - * @param e - KeyboardEvent - */ - - function getSliderValueFromInputField(e) { - var target = e.target; - var valueNum = parseInt(target.value); // regex for digit or dot (.) - - if (!/^([0-9]|\.)$/i.test(e.key)) { - e.preventDefault(); - return valueNum; - } - - var valueString = target.value.toString(); - - if (target.selectionStart !== undefined) { - // cursor position - valueString = valueString.substring(0, target.selectionStart) + e.key.toString() + valueString.substring(target.selectionEnd); - } else { - valueString = valueString + e.key.toString(); - } - - return +valueString; - } - /** - * @desc Get the current slider value from clipboard data - * @param props - slider props - * @param e - ClipboardEvent - */ - - function getSliderValueFromClipboard(props, e) { - // allow only whole or decimal numbers - var r = /^[+]?([.]\d+|\d+([.]\d+)?)$/i; - var valueString = e.clipboardData.getData('text'); - - if (!r.test(valueString)) { - return 0; - } - - var valueNum = +valueString; - return clampSliderValue(props, valueNum); - } - var TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input // https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e @@ -1382,6 +1420,7 @@ exports.getBoxValueFromInput = getBoxValueFromInput; exports.getCurrentSliderValue = getCurrentSliderValue; exports.getHandleAtPoint = getHandleAtPoint; + exports.getInputDimensions = getInputDimensions; exports.getSliderDimensions = getSliderDimensions; exports.getSliderGradient = getSliderGradient; exports.getSliderGradientCoords = getSliderGradientCoords; diff --git a/dist/iro-core.umd.js.map b/dist/iro-core.umd.js.map index 2134ca5..e524889 100644 --- a/dist/iro-core.umd.js.map +++ b/dist/iro-core.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/slider.ts","../src/input.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n let length: number;\n if (props.showInput) {\n length = width - 55;\n } else {\n length = props.sliderLength ?? width;\n }\n\n const ishorizontal = props.layoutDirection === 'horizontal';\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clmap percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","sliderDefaultOptions","sliderShape","sliderType","getSliderStyles","props","layoutDirection","sliderMargin","getSliderDimensions","width","sliderSize","borderWidth","handleRadius","padding","length","showInput","sliderLength","ishorizontal","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","clampSliderValue","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iro-core.umd.js","sources":["../src/color.ts","../src/input.ts","../src/slider.ts","../src/wheel.ts","../src/box.ts","../src/util.ts","../src/css.ts","../src/colorPickerOptions.ts"],"sourcesContent":["// Some regular expressions for rgb() and hsl() Colors are borrowed from tinyColor\n// https://github.com/bgrins/TinyColor\n// Kelvin temperature math borrowed from Neil Barlett's implementation\n// from https://github.com/neilbartlett/color-temperature\n\n// https://www.w3.org/TR/css3-values/#integers\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// http://www.w3.org/TR/css3-values/#number-value\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n\n// Parse function params\n// Parens and commas are optional, and this also allows for whitespace between numbers\nconst PERMISSIVE_MATCH_3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH_4 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\n\n// Regex patterns for functional color strings\nconst REGEX_FUNCTIONAL_RGB = new RegExp('rgb' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_RGBA = new RegExp('rgba' + PERMISSIVE_MATCH_4);\nconst REGEX_FUNCTIONAL_HSL = new RegExp('hsl' + PERMISSIVE_MATCH_3);\nconst REGEX_FUNCTIONAL_HSLA = new RegExp('hsla' + PERMISSIVE_MATCH_4);\n\n// Color string parsing regex\nconst HEX_START = '^(?:#?|0x?)';\nconst HEX_INT_SINGLE = '([0-9a-fA-F]{1})';\nconst HEX_INT_DOUBLE = '([0-9a-fA-F]{2})';\nconst REGEX_HEX_3 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_4 = new RegExp(HEX_START + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + HEX_INT_SINGLE + '$');\nconst REGEX_HEX_6 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\nconst REGEX_HEX_8 = new RegExp(HEX_START + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + HEX_INT_DOUBLE + '$');\n\n// Kelvin temperature bounds\nconst KELVIN_MIN = 2000;\nconst KELVIN_MAX = 40000;\n\n// Math shorthands\nconst { log, round, floor } = Math;\n\n/**\n * @desc Clamp a number between a min and max value\n * @param num - input value\n * @param min - min allowed value\n * @param max - max allowed value\n */\nfunction clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\n/**\n * @desc Parse a css unit string - either regular int or a percentage number\n * @param str - css unit string\n * @param max - max unit value, used for calculating percentages\n */\nfunction parseUnit(str: string, max: number): number {\n const isPercentage = str.indexOf('%') > -1;\n const num = parseFloat(str);\n return isPercentage ? (max / 100) * num : num;\n}\n\n/**\n * @desc Parse hex str to an int\n * @param str - hex string to parse\n */\nfunction parseHexInt(str: string): number {\n return parseInt(str, 16);\n}\n\n/**\n * @desc Convert nunber into to 2-digit hex\n * @param int - number to convert\n */\nfunction intToHex(int: number): string {\n return int.toString(16).padStart(2, '0');\n}\n\nexport interface ColorChanges {\n h: boolean;\n s: boolean;\n v: boolean;\n a: boolean;\n}\n\n// all hsv color channels are optional by design\nexport interface HsvColor {\n h?: number;\n s?: number;\n v?: number;\n a?: number;\n}\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\nexport interface KelvinColor {\n kelvin: number;\n _kelvin: number;\n}\n\nexport type IroColorValue = IroColor | HsvColor | RgbColor | HslColor | KelvinColor | string;\n\nexport class IroColor {\n // internal color value storage\n private $: HsvColor;\n private onChange: Function;\n private initialValue: HsvColor;\n\n public index: number;\n public _kelvin: number;\n\n /**\n * @constructor Color object\n * @param value - initial color value\n */\n constructor(value?: IroColorValue, onChange?: Function) {\n // The default Color value\n this.$ = {h: 0, s: 0, v: 0, a: 1};\n if (value) this.set(value);\n // The watch callback function for this Color will be stored here\n this.onChange = onChange;\n this.initialValue = { ...this.$ }; // copy initial value\n }\n\n /**\n * @desc Set the Color from any valid value\n * @param value - new color value\n */\n public set(value: IroColorValue) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value as string)) {\n this.hexString = value as string;\n }\n else if (/^rgba?/.test(value as string)) {\n this.rgbString = value as string;\n }\n else if (/^hsla?/.test(value as string)) {\n this.hslString = value as string;\n }\n }\n else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsva = value.hsva;\n }\n else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n }\n else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n }\n else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n }\n else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n }\n else {\n throw new Error('Invalid color value');\n }\n }\n\n /**\n * @desc Shortcut to set a specific channel value\n * @param format - hsv | hsl | rgb\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\n * @param value - new value for the channel\n */\n public setChannel(format: string, channel: string, value: number) {\n this[format] = {...this[format], [channel]: value};\n }\n\n /**\n * @desc Reset color back to its initial value\n */\n public reset() {\n this.hsva = this.initialValue;\n }\n\n /**\n * @desc make new Color instance with the same value as this one\n */\n public clone() {\n return new IroColor(this);\n }\n\n /**\n * @desc remove color onChange\n */\n public unbind() {\n this.onChange = undefined;\n }\n\n /**\n * @desc Convert hsv object to rgb\n * @param hsv - hsv color object\n */\n public static hsvToRgb(hsv: HsvColor): RgbColor {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255), \n g: clamp(g * 255, 0, 255), \n b: clamp(b * 255, 0, 255)\n };\n }\n\n /**\n * @desc Convert rgb object to hsv\n * @param rgb - rgb object\n */\n public static rgbToHsv(rgb: RgbColor): HsvColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let hue = 0;\n let value = max;\n let saturation = max === 0 ? 0 : delta / max;\n switch (max) {\n case min: \n hue = 0; // achromatic\n break;\n case r: \n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g: \n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n return {\n h: (hue * 60) % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n }\n }\n\n /**\n * @desc Convert hsv object to hsl\n * @param hsv - hsv object\n */\n public static hsvToHsl(hsv: HsvColor): HslColor {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const l = (2 - s) * v;\n const divisor = l <= 1 ? l : (2 - l);\n // Avoid division by zero when lightness is close to zero\n const saturation = divisor < 1e-9 ? 0 : (s * v) / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n\n /**\n * @desc Convert hsl object to hsv\n * @param hsl - hsl object\n */\n public static hslToHsv(hsl: HslColor): HsvColor {\n const l = hsl.l * 2;\n const s = (hsl.s * ((l <= 100) ? l : 200 - l)) / 100;\n // Avoid division by zero when l + s is near 0\n const saturation = (l + s < 1e-9) ? 0 : (2 * s) / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n\n /**\n * @desc Convert a kelvin temperature to an approx, RGB value\n * @param kelvin - kelvin temperature\n */\n public static kelvinToRgb(kelvin: number): RgbColor {\n var temperature = kelvin / 100.0;\n var r, g, b;\n if (temperature < 66.0) {\n r = 255;\n } else {\n r = temperature - 55.0;\n r = 351.97690566805693+ 0.114206453784165 * r - 40.25366309332127 * Math.log(r);\n if (r < 0) r = 0;\n if (r > 255) r = 255;\n }\n /* Calculate g */\n if (temperature < 66.0) {\n g = temperature - 2;\n g = -155.25485562709179 - 0.44596950469579133 * g + 104.49216199393888 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n } else {\n g = temperature - 50.0;\n g = 325.4494125711974 + 0.07943456536662342 * g - 28.0852963507957 * Math.log(g);\n if (g < 0) g = 0;\n if (g > 255) g = 255;\n }\n /* Calculate b */\n if (temperature >= 66.0) {\n b = 255;\n } else {\n if (temperature <= 20.0) {\n b = 0;\n } else {\n b = temperature - 10;\n b = -254.76935184120902 + 0.8274096064007395 * b + 115.67994401066147 * Math.log(b);\n if (b < 0) b = 0;\n if (b > 255) b = 255;\n }\n }\n return {r: r, b: b, g: g};\n }\n\n /**\n * @desc Convert an RGB color to an approximate kelvin temperature\n * @param kelvin - kelvin temperature\n */\n public static rgbToKelvin(rgb: RgbColor): number {\n var temperature, testRGB;\n var epsilon=0.4;\n var minTemperature = 1000;\n var maxTemperature = 40000;\n while (maxTemperature - minTemperature > epsilon) {\n temperature = (maxTemperature + minTemperature) / 2;\n testRGB = IroColor.kelvinToRgb(temperature);\n if ((testRGB.b / testRGB.r) >= (rgb.b / rgb.r)) {\n maxTemperature = temperature;\n } else {\n minTemperature = temperature;\n }\n }\n return temperature;\n }\n\n public get hsv(): HsvColor {\n // value is cloned to allow changes to be made to the values before passing them back\n const value = this.$;\n return {h: value.h, s: value.s, v: value.v};\n }\n\n public set hsv(newValue: HsvColor) {\n const oldValue = this.$;\n\n newValue = { ...oldValue, ...newValue };\n // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n if (this.onChange) {\n // Compute changed values\n let changes: ColorChanges = {\n h: false,\n v: false,\n s: false,\n a: false,\n };\n\n for (let key in oldValue) {\n changes[key] = newValue[key] != oldValue[key]\n };\n // Update the old value\n this.$ = newValue;\n // If the value has changed, call hook callback\n if (changes.h || changes.s || changes.v || changes.a) this.onChange(this, changes);\n } else {\n this.$ = newValue;\n }\n }\n\n public get hsva(): HsvColor {\n return {...this.$};\n }\n\n public set hsva(value: HsvColor) {\n this.hsv = value;\n }\n\n public get hue(): number {\n return this.$.h;\n }\n\n public set hue(value: number) {\n this.hsv = { h: value };\n }\n\n public get saturation(): number {\n return this.$.s;\n }\n\n public set saturation(value: number) {\n this.hsv = { s: value };\n }\n\n public get value(): number {\n return this.$.v;\n }\n\n public set value(value: number) {\n this.hsv = { v: value };\n }\n\n public get alpha(): number {\n return this.$.a;\n }\n\n public set alpha(value: number) {\n this.hsv = { ...this.hsv, a: value };\n }\n\n public get kelvin(): number {\n return round(IroColor.rgbToKelvin(this.raw_rgb));\n }\n\n public set kelvin(value: number) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n\n public get red(): number {\n const rgb = this.rgb;\n return rgb.r;\n }\n\n public set red(value: number) {\n this.rgb = { ...this.rgb, r: value };\n }\n\n public get green(): number {\n const rgb = this.rgb;\n return rgb.g;\n }\n\n public set green(value: number) {\n this.rgb = { ...this.rgb, g: value };\n }\n\n public get blue(): number {\n const rgb = this.rgb;\n return rgb.b;\n }\n\n public set blue(value: number) {\n this.rgb = { ...this.rgb, b: value };\n }\n\n public get rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n }\n\n public set rgb(value: RgbColor) {\n this.hsv = {\n ...IroColor.rgbToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get raw_rgb(): RgbColor {\n const {r, g, b} = IroColor.hsvToRgb(this.$);\n return {\n r: r,\n g: g,\n b: b\n };\n }\n\n public get rgba(): RgbColor {\n return { ...this.rgb, a: this.alpha };\n }\n\n public set rgba(value: RgbColor) {\n this.rgb = value;\n }\n\n public get hsl(): HslColor {\n const {h, s, l} = IroColor.hsvToHsl(this.$);\n return {\n h: round(h),\n s: round(s),\n l: round(l),\n };\n }\n\n public set hsl(value: HslColor) {\n this.hsv = {\n ...IroColor.hslToHsv(value), \n a: (value.a === undefined) ? this.alpha : value.a\n };\n }\n\n public get hsla(): HslColor {\n return { ...this.hsl, a: this.alpha };\n }\n\n public set hsla(value: HslColor) {\n this.hsl = value;\n }\n\n public get rgbString(): string {\n const rgb = this.rgb;\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n public set rgbString(value: string) {\n let match;\n let r, g, b, a = 1;\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n }\n else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.rgb = {r, g, b, a};\n } \n else {\n throw new Error('Invalid rgb string');\n }\n }\n\n public get rgbaString(): string {\n const rgba = this.rgba;\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n\n public set rgbaString(value: string) {\n this.rgbString = value;\n }\n\n public get hexString(): string {\n const rgb = this.rgb;\n return `#${ intToHex(rgb.r) }${ intToHex(rgb.g) }${ intToHex(rgb.b) }`;\n }\n\n public set hexString(value: string) {\n let match;\n let r, g, b, a = 255;\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n }\n else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n }\n else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n }\n else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n if (match) {\n this.rgb = {r, g, b, a: a / 255};\n }\n else {\n throw new Error('Invalid hex string');\n }\n }\n\n public get hex8String(): string {\n const rgba = this.rgba;\n return `#${intToHex(rgba.r)}${intToHex(rgba.g)}${intToHex(rgba.b)}${intToHex(floor(rgba.a * 255))}`;\n }\n\n public set hex8String(value: string) {\n this.hexString = value;\n }\n\n public get hslString(): string {\n const hsl = this.hsl;\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n public set hslString(value: string) {\n let match;\n let h, s, l, a = 1;\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n }\n else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n if (match) {\n this.hsl = {h, s, l, a};\n } \n else {\n throw new Error('Invalid hsl string');\n }\n }\n\n public get hslaString(): string {\n const hsla = this.hsla;\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`;\n }\n\n public set hslaString(value: string) {\n this.hslString = value;\n }\n}","import { IroColor } from './color';\nimport { SliderType } from './slider';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface InputOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderType: SliderType;\n sliderSize: number;\n minTemperature: number;\n maxTemperature: number;\n}\n\n/**\n * @desc Get input field dimensions\n * @param props - InputOptions\n */\n export function getInputDimensions(props: Partial) {\n let {sliderSize, layoutDirection} = props;\n let inputWidth: number;\n let fontSize: number;\n\n if (layoutDirection === 'vertical') {\n inputWidth = 30;\n fontSize = 12;\n } else {\n inputWidth = sliderSize <= 30 ? 26 : sliderSize;\n fontSize = sliderSize <= 30 ? 10 : 12;\n }\n\n return {\n inputWidth: inputWidth,\n inputHeight: 18,\n fontSize: fontSize\n }\n}\n\n/**\n * @desc Clamp slider value between min and max values\n * @param type - props.sliderType\n * @param value - value to clamp\n */\n export function clampSliderValue(props: Partial, value: number) {\n function clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max);\n }\n switch(props.sliderType) {\n case 'hue':\n return clamp(value, 0, 360);\n case 'saturation':\n case 'value':\n return clamp(value, 0, 100);\n case 'red':\n case 'green':\n case 'blue':\n return clamp(value, 0, 255);\n case 'alpha':\n return clamp(value, 0, 1);\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n return clamp(value, minTemperature, maxTemperature);\n }\n}\n\n/**\n * @desc Get the current slider value from input field input\n * @param props - slider props\n * @param e - KeyboardEvent\n */\nexport function getSliderValueFromInputField(e: KeyboardEvent) {\n let target = (e.target as HTMLInputElement);\n let valueNum = parseInt(target.value);\n // regex for digit or dot (.)\n if (!/^([0-9]|\\.)$/i.test((e).key)) {\n e.preventDefault();\n return valueNum;\n }\n let valueString = target.value.toString();\n if (target.selectionStart !== undefined) { // cursor position\n valueString = valueString.substring(0, target.selectionStart) +\n e.key.toString() +\n valueString.substring(target.selectionEnd);\n } else {\n valueString = valueString + e.key.toString();\n }\n return +valueString;\n}\n\n/**\n * @desc Get the current slider value from clipboard data\n * @param props - slider props\n * @param e - ClipboardEvent\n */\n export function getSliderValueFromClipboard(props: Partial, e: ClipboardEvent) {\n // allow only whole or decimal numbers\n const r = /^[+]?([.]\\d+|\\d+([.]\\d+)?)$/i;\n const valueString: string = e.clipboardData.getData('text');\n if (!r.test(valueString)) {\n return 0;\n }\n const valueNum = +valueString;\n return clampSliderValue(props, valueNum);\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\nimport { getInputDimensions } from './input';\n\nexport type SliderShape = 'bar' | 'circle' | '';\nexport type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | '';\n\nexport interface SliderOptions extends IroColorPickerOptions {\n color: IroColor;\n sliderShape: SliderShape;\n sliderType: SliderType;\n sliderSize: number;\n sliderLength: number;\n minTemperature: number;\n maxTemperature: number;\n showInput: boolean;\n showLabel: boolean;\n}\n\nexport const sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n}\n\n/**\n * @desc Get the CSS styles for the slider root\n * @param props - slider props\n */\nexport function getSliderStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the slider\n * @param props - slider props\n */\nexport function getSliderDimensions(props: Partial) {\n let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props;\n const ishorizontal = props.layoutDirection === 'horizontal';\n let length: number;\n\n if (props.sliderLength) {\n length = props.sliderLength;\n } else {\n // automatically calculate slider length\n length = width - handleRadius;\n if (props.showInput) {\n let { inputWidth, inputHeight } = getInputDimensions(props);\n length -= ishorizontal ? inputHeight : inputWidth;\n length -= 3; // padding\n }\n if (props.showLabel) {\n length -= ishorizontal ? 12 : 10;\n length -= 3; // padding\n }\n }\n\n // automatically calculate sliderSize if its not defined\n sliderSize = sliderSize ?? padding * 2 + handleRadius * 2;\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n }\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: length - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : length,\n height: ishorizontal ? length : sliderSize,\n }\n }\n}\n\n/**\n * @desc Get the current slider value for a given color, as a percentage\n * @param props - slider props\n * @param color\n */\nexport function getCurrentSliderValue(props: Partial, color: IroColor) {\n const hsva = color.hsva;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n case 'green':\n return rgb.g / 2.55;\n case 'blue':\n return rgb.b / 2.55;\n case 'alpha':\n return hsva.a * 100;\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100;\n // clamp percentage\n return Math.max(0, Math.min(percent, 100));\n case 'hue':\n return hsva.h /= 3.6;\n case 'saturation':\n return hsva.s;\n case 'value':\n default:\n return hsva.v;\n }\n}\n\n/**\n * @desc Get the current slider value from user input\n * @param props - slider props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getSliderValueFromInput(props: Partial, x: number, y: number) {\n const { handleRange, handleStart } = getSliderDimensions(props);\n let handlePos;\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n }\n // clamp handle position\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n const percent = Math.round((100 / handleRange) * handlePos);\n switch (props.sliderType) {\n case 'kelvin':\n const { minTemperature, maxTemperature } = props;\n const temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n case 'alpha':\n return percent / 100;\n case 'hue':\n return percent * 3.6;\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n default:\n return percent;\n }\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - slider props\n * @param color\n */\nexport function getSliderHandlePosition(props: Partial, color: IroColor) {\n const { width, height, handleRange, handleStart } = getSliderDimensions(props);\n const ishorizontal = props.layoutDirection === 'horizontal';\n const sliderValue = getCurrentSliderValue(props, color);\n const midPoint = ishorizontal ? width / 2 : height / 2;\n let handlePos = handleStart + (sliderValue / 100) * handleRange;\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n } \n return {\n x: ishorizontal ? midPoint : handlePos, \n y: ishorizontal ? handlePos : midPoint\n };\n}\n\n/**\n * @desc Get the gradient stops for a slider\n * @param props - slider props\n * @param color\n */\nexport function getSliderGradient(props: Partial, color: IroColor): CssGradientStops {\n const hsv = color.hsv;\n const rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [\n [0, `rgb(${ 0 },${ rgb.g },${ rgb.b })`],\n [100, `rgb(${ 255 },${ rgb.g },${ rgb.b })`],\n ];\n case 'green':\n return [\n [0, `rgb(${ rgb.r },${ 0 },${ rgb.b })`],\n [100, `rgb(${ rgb.r },${ 255 },${ rgb.b })`],\n ];\n case 'blue':\n return [\n [0, `rgb(${ rgb.r },${ rgb.g },${ 0 })`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ 255 })`],\n ];\n case 'alpha':\n return [\n [0, `rgba(${ rgb.r },${ rgb.g },${ rgb.b },0)`],\n [100, `rgb(${ rgb.r },${ rgb.g },${ rgb.b })`],\n ];\n case 'kelvin':\n const stops = [];\n const min = props.minTemperature;\n const max = props.maxTemperature;\n const numStops = 8;\n const range = max - min;\n for (let kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n const { r, g, b } = IroColor.kelvinToRgb(kelvin);\n stops.push([ 100 / numStops * stop, `rgb(${r},${g},${b})` ]);\n }\n return stops;\n case 'hue':\n return [\n [0, '#f00'],\n [16.666, '#ff0'],\n [33.333, '#0f0'],\n [50, '#0ff'],\n [66.666, '#00f'],\n [83.333, '#f0f'],\n [100, '#f00'],\n ];\n case 'saturation':\n const noSat = IroColor.hsvToHsl({h: hsv.h, s: 0, v: hsv.v});\n const fullSat = IroColor.hsvToHsl({h: hsv.h, s: 100, v: hsv.v});\n return [\n [0, `hsl(${noSat.h},${noSat.s}%,${noSat.l}%)`],\n [100, `hsl(${fullSat.h},${fullSat.s}%,${fullSat.l}%)`]\n ];\n case 'value':\n default:\n const hsl = IroColor.hsvToHsl({h: hsv.h, s: hsv.s, v: 100});\n return [\n [0, '#000'],\n [100, `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`]\n ];\n }\n}\n\n/**\n * @desc Get the gradient coords for a slider\n * @param props - slider props\n */\nexport function getSliderGradientCoords(props: Partial) {\n const ishorizontal = props.layoutDirection === 'horizontal';\n return {\n x1: '0%',\n y1: ishorizontal ? '100%' : '0%',\n x2: ishorizontal ? '0%' : '100%',\n y2: '0%'\n }\n}","import { IroColorPickerOptions } from './colorPickerOptions';\nimport { IroColor, IroColorValue } from './color';\n\nexport interface WheelProps extends IroColorPickerOptions {\n color: IroColor;\n}\n\nconst TAU = Math.PI * 2;\n\n// javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\nconst mod = (a: number, n: number) => (a % n + n) % n;\n\n// distance between points (x, y) and (0, 0)\nconst dist = (x: number, y: number) => Math.sqrt(x * x + y * y);\n\n/**\n * @param props - wheel props\n * @internal\n */\nfunction getHandleRange(props: Partial) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n\n/**\n * Returns true if point (x, y) lands inside the wheel\n * @param props - wheel props\n * @param x \n * @param y \n */\nexport function isInputInsideWheel(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n\n/**\n * @desc Get the point as the center of the wheel\n * @param props - wheel props\n */\nexport function getWheelDimensions(props: Partial) {\n const r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n\n/**\n * @desc Translate an angle according to wheelAngle and wheelDirection\n * @param props - wheel props\n * @param angle - input angle\n */\nexport function translateWheelAngle(props: Partial, angle: number, invert?: boolean) {\n const wheelAngle = props.wheelAngle;\n const wheelDirection = props.wheelDirection\n // inverted and clockwisee\n if (invert && wheelDirection === 'clockwise')\n angle = wheelAngle + angle;\n // clockwise (input handling)\n else if (wheelDirection === 'clockwise')\n angle = (360 - wheelAngle) + angle;\n // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise')\n angle = (wheelAngle + 180) - angle;\n // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise')\n angle = wheelAngle - angle;\n return mod(angle, 360);\n}\n\n/**\n * @desc Get the current handle position for a given color\n * @param props - wheel props\n * @param color\n */\nexport function getWheelHandlePosition(props: Partial, color: IroColor) {\n const hsv = color.hsv;\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n const handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n const handleDist = (hsv.s / 100) * handleRange;\n const direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction,\n }\n}\n\n/**\n * @desc Get the current wheel value from user input\n * @param props - wheel props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getWheelValueFromInput(props: Partial, x: number, y: number) {\n const { cx, cy } = getWheelDimensions(props);\n const handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y;\n // Calculate the hue by converting the angle to radians\n const hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU));\n // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n const handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round((100 / handleRange) * handleDist)\n };\n}","import { IroColor } from './color';\nimport { CssGradientStops } from './css';\nimport { IroColorPickerOptions } from './colorPickerOptions';\n\nexport interface BoxOptions extends IroColorPickerOptions {\n color: IroColor;\n}\n\n/**\n * @desc Get the CSS styles for the box root element\n * @param props - box props\n */\nexport function getBoxStyles(props: Partial) {\n return {\n [props.layoutDirection === 'horizontal' ? 'marginLeft' : 'marginTop']: props.sliderMargin\n }\n}\n\n/**\n * @desc Get the bounding dimensions of the box\n * @param props - box props\n */\nexport function getBoxDimensions(props: Partial) {\n const { width, boxHeight, padding, handleRadius } = props;\n return {\n width: width,\n height: boxHeight ?? width,\n radius: padding + handleRadius\n };\n}\n\n/**\n * @desc Get the current box value from user input\n * @param props - box props\n * @param x - global input x position\n * @param y - global input y position\n */\nexport function getBoxValueFromInput(props: Partial, x: number, y: number) {\n const { width, height, radius } = getBoxDimensions(props);\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n const percentX = ((x - handleStart) / handleRangeX) * 100;\n const percentY = ((y - handleStart) / handleRangeY) * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n }\n}\n\n/**\n * @desc Get the current box handle position for a given color\n * @param props - box props\n * @param color\n */\nexport function getBoxHandlePosition(props: Partial, color: IroColor) {\n const { width, height, radius } = getBoxDimensions(props);\n const hsv = color.hsv;\n const handleStart = radius;\n const handleRangeX = width - radius * 2;\n const handleRangeY = height - radius * 2;\n return { \n x: handleStart + (hsv.s / 100) * handleRangeX,\n y: handleStart + (handleRangeY - ((hsv.v / 100) * handleRangeY))\n }\n}\n\n/**\n * @desc Get the gradient stops for a box\n * @param props - box props\n * @param color\n */\nexport function getBoxGradients(props: Partial, color: IroColor): CssGradientStops[] {\n const hue = color.hue;\n return [\n // saturation gradient\n [\n [0, '#fff'],\n [100, `hsl(${hue},100%,50%)`],\n ],\n // lightness gradient\n [\n [0, 'rgba(0,0,0,0)'],\n [100, '#000'],\n ]\n ];\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nlet BASE_ELEMENTS: HTMLCollectionOf | undefined;\n\n/**\n * @desc Resolve an SVG reference URL\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\n * If a page is using a client-side routing library which makes use of the HTML tag, \n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\n * More info on the problem: \n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\n * https://github.com/jaames/iro.js/issues/18\n * https://github.com/jaames/iro.js/issues/45\n * https://github.com/jaames/iro.js/pull/89\n * @props url - SVG reference URL\n */\nexport function resolveSvgUrl(url: string) {\n if (!BASE_ELEMENTS)\n BASE_ELEMENTS = document.getElementsByTagName('base');\n // Sniff useragent string to check if the user is running Safari\n const ua = window.navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isIos = /iPhone|iPod|iPad/i.test(ua);\n const location = window.location;\n return ((isSafari || isIos) && (BASE_ELEMENTS.length > 0)) ? `${location.protocol}//${location.host}${location.pathname}${location.search}${url}` : url;\n}\n\n/**\n * @desc Get the path commands to draw an svg arc\n * @props cx - arc center point x\n * @props cy - arc center point y\n * @props radius - arc radius\n * @props startAngle - arc start angle\n * @props endAngle - arc end angle\n */\nexport function getSvgArcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) {\n const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1;\n startAngle *= Math.PI / 180;\n endAngle *= Math.PI / 180;\n const x1 = cx + radius * Math.cos(endAngle);\n const y1 = cy + radius * Math.sin(endAngle);\n const x2 = cx + radius * Math.cos(startAngle);\n const y2 = cy + radius * Math.sin(startAngle);\n return `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 0 ${x2} ${y2}`;\n}\n\n/**\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\n * @props x - point x position\n * @props y - point y position\n * @props handlePositions - array of {x, y} coords for each handle\n */\nexport function getHandleAtPoint(props: Partial, x: number, y: number, handlePositions: {x: number, y: number}[]) {\n for (let i = 0; i < handlePositions.length; i++) {\n const dX = handlePositions[i].x - x;\n const dY = handlePositions[i].y - y;\n const dist = Math.sqrt(dX * dX + dY * dY);\n if (dist < props.handleRadius) {\n return i;\n }\n }\n return null;\n}","import { IroColorPickerOptions } from './colorPickerOptions';\n\nexport function cssBorderStyles(props: IroColorPickerOptions) {\n return {\n boxSizing: 'border-box',\n border: `${ props.borderWidth }px solid ${ props.borderColor }`\n };\n}\n\nexport type CssGradientType = 'linear' | 'radial' | 'conical';\nexport type CssGradientStops = [number, number | string][];\n\nexport function cssGradient(type: CssGradientType, direction: string, stops: CssGradientStops) {\n return `${ type }-gradient(${ direction }, ${ stops.map(([o, col]) => `${ col } ${ o }%`).join(',') })`;\n}\n\nexport function cssValue(value: number | string) {\n if (typeof(value) === 'string')\n return value;\n return `${ value }px`;\n}","import { IroColor, IroColorValue } from './color';\n\nexport type LayoutDirection = 'vertical' | 'horizontal' | '';\n\nexport type WheelDirection = 'clockwise' | 'anticlockwise' | '';\n\nexport interface IroColorPickerOptions {\n width?: number;\n height?: number;\n color?: IroColorValue;\n colors?: IroColorValue[];\n padding?: number;\n layoutDirection?: LayoutDirection;\n borderColor?: string;\n borderWidth?: number;\n handleRadius?: number;\n activeHandleRadius?: number;\n handleSvg?: string;\n handleProps?: any;\n wheelLightness?: boolean;\n wheelAngle?: number;\n wheelDirection?: WheelDirection;\n sliderSize?: number;\n sliderMargin?: number;\n boxHeight?: number;\n}\n\nexport const iroColorPickerOptionDefaults: IroColorPickerOptions = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {x: 0, y: 0},\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n}"],"names":["CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH_3","PERMISSIVE_MATCH_4","REGEX_FUNCTIONAL_RGB","RegExp","REGEX_FUNCTIONAL_RGBA","REGEX_FUNCTIONAL_HSL","REGEX_FUNCTIONAL_HSLA","HEX_START","HEX_INT_SINGLE","HEX_INT_DOUBLE","REGEX_HEX_3","REGEX_HEX_4","REGEX_HEX_6","REGEX_HEX_8","round","Math","floor","clamp","num","min","max","parseUnit","str","isPercentage","indexOf","parseFloat","parseHexInt","parseInt","intToHex","int","toString","padStart","IroColor","value","onChange","$","h","s","v","a","set","initialValue","test","hexString","rgbString","hslString","hsva","rgb","hsv","hsl","kelvin","Error","setChannel","format","channel","reset","clone","unbind","undefined","hsvToRgb","i","f","p","q","t","mod","r","g","b","rgbToHsv","delta","hue","saturation","hsvToHsl","l","divisor","hslToHsv","kelvinToRgb","temperature","log","rgbToKelvin","testRGB","epsilon","minTemperature","maxTemperature","newValue","oldValue","changes","key","raw_rgb","alpha","match","exec","rgba","hsla","getInputDimensions","props","sliderSize","layoutDirection","inputWidth","fontSize","inputHeight","clampSliderValue","sliderType","getSliderValueFromInputField","e","target","valueNum","preventDefault","valueString","selectionStart","substring","selectionEnd","getSliderValueFromClipboard","clipboardData","getData","sliderDefaultOptions","sliderShape","getSliderStyles","sliderMargin","getSliderDimensions","width","borderWidth","handleRadius","padding","ishorizontal","length","sliderLength","showInput","showLabel","handleStart","handleRange","height","cx","cy","radius","x","y","getCurrentSliderValue","color","temperatureRange","percent","getSliderValueFromInput","handlePos","getSliderHandlePosition","sliderValue","midPoint","getSliderGradient","stops","numStops","range","stop","push","noSat","fullSat","getSliderGradientCoords","x1","y1","x2","y2","TAU","PI","n","dist","sqrt","getHandleRange","isInputInsideWheel","getWheelDimensions","translateWheelAngle","angle","invert","wheelAngle","wheelDirection","getWheelHandlePosition","handleAngle","handleDist","direction","cos","sin","getWheelValueFromInput","atan2","getBoxStyles","getBoxDimensions","boxHeight","getBoxValueFromInput","handleRangeX","handleRangeY","percentX","percentY","getBoxHandlePosition","getBoxGradients","BASE_ELEMENTS","resolveSvgUrl","url","document","getElementsByTagName","ua","window","navigator","userAgent","isSafari","isIos","location","protocol","host","pathname","search","getSvgArcPath","startAngle","endAngle","largeArcFlag","getHandleAtPoint","handlePositions","dX","dY","cssBorderStyles","boxSizing","border","borderColor","cssGradient","type","map","o","col","join","cssValue","iroColorPickerOptionDefaults","colors","activeHandleRadius","handleSvg","handleProps","wheelLightness"],"mappings":"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"} \ No newline at end of file diff --git a/dist/slider.d.ts b/dist/slider.d.ts index db9a865..bcedb28 100644 --- a/dist/slider.d.ts +++ b/dist/slider.d.ts @@ -12,6 +12,7 @@ export interface SliderOptions extends IroColorPickerOptions { minTemperature: number; maxTemperature: number; showInput: boolean; + showLabel: boolean; } export declare const sliderDefaultOptions: { sliderShape: string; diff --git a/src/input.ts b/src/input.ts index 3be5260..2931ef7 100644 --- a/src/input.ts +++ b/src/input.ts @@ -5,10 +5,35 @@ import { IroColorPickerOptions } from './colorPickerOptions'; export interface InputOptions extends IroColorPickerOptions { color: IroColor; sliderType: SliderType; + sliderSize: number; minTemperature: number; maxTemperature: number; } +/** + * @desc Get input field dimensions + * @param props - InputOptions + */ + export function getInputDimensions(props: Partial) { + let {sliderSize, layoutDirection} = props; + let inputWidth: number; + let fontSize: number; + + if (layoutDirection === 'vertical') { + inputWidth = 30; + fontSize = 12; + } else { + inputWidth = sliderSize <= 30 ? 26 : sliderSize; + fontSize = sliderSize <= 30 ? 10 : 12; + } + + return { + inputWidth: inputWidth, + inputHeight: 18, + fontSize: fontSize + } +} + /** * @desc Clamp slider value between min and max values * @param type - props.sliderType diff --git a/src/slider.ts b/src/slider.ts index fceac96..9a788e4 100644 --- a/src/slider.ts +++ b/src/slider.ts @@ -1,6 +1,7 @@ import { IroColor } from './color'; import { CssGradientStops } from './css'; import { IroColorPickerOptions } from './colorPickerOptions'; +import { getInputDimensions } from './input'; export type SliderShape = 'bar' | 'circle' | ''; export type SliderType = 'red' | 'green' | 'blue' |'alpha' | 'hue' | 'saturation' | 'value' | 'kelvin' | ''; @@ -14,6 +15,7 @@ export interface SliderOptions extends IroColorPickerOptions { minTemperature: number; maxTemperature: number; showInput: boolean; + showLabel: boolean; } export const sliderDefaultOptions = { @@ -39,14 +41,25 @@ export function getSliderStyles(props: Partial) { */ export function getSliderDimensions(props: Partial) { let { width, sliderSize: sliderSize, borderWidth, handleRadius, padding, sliderShape } = props; + const ishorizontal = props.layoutDirection === 'horizontal'; let length: number; - if (props.showInput) { - length = width - 55; + + if (props.sliderLength) { + length = props.sliderLength; } else { - length = props.sliderLength ?? width; + // automatically calculate slider length + length = width - handleRadius; + if (props.showInput) { + let { inputWidth, inputHeight } = getInputDimensions(props); + length -= ishorizontal ? inputHeight : inputWidth; + length -= 3; // padding + } + if (props.showLabel) { + length -= ishorizontal ? 12 : 10; + length -= 3; // padding + } } - const ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined sliderSize = sliderSize ?? padding * 2 + handleRadius * 2; if (sliderShape === 'circle') { @@ -94,7 +107,7 @@ export function getCurrentSliderValue(props: Partial, color: IroC const { minTemperature, maxTemperature } = props; const temperatureRange = maxTemperature - minTemperature; const percent = ((color.kelvin - minTemperature) / temperatureRange) * 100; - // clmap percentage + // clamp percentage return Math.max(0, Math.min(percent, 100)); case 'hue': return hsva.h /= 3.6; From 6ac3002dddd856ed19caafb02965b839d18f9e33 Mon Sep 17 00:00:00 2001 From: Robert Niederreiter Date: Thu, 27 Feb 2025 11:22:52 +0100 Subject: [PATCH 9/9] use pnpm instead of npm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28275b4..ca81b88 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "typescript": "^4.6.3" }, "scripts": { - "prepublishOnly": "npm run build", + "prepublishOnly": "pnpm run build", "build": "microbundle --no-compress", "dev": "microbundle watch", "test": "jest"