diff --git a/README.md b/README.md index b2e194f..7bc16e0 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ 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. diff --git a/dist/color.d.ts b/dist/color.d.ts index 41b5758..0c86c16 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 @@ -112,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/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..cd118ee --- /dev/null +++ b/dist/input.d.ts @@ -0,0 +1,37 @@ +import { IroColor } from './color'; +import { SliderType } from './slider'; +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 + * @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(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 2585220..0207f04 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; } @@ -60,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 @@ -107,9 +106,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 @@ -307,23 +304,51 @@ 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 }; } /** @@ -333,26 +358,23 @@ 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; - - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - var _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; }; _createClass(IroColor, [{ @@ -442,7 +464,7 @@ function () { }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); @@ -496,9 +518,23 @@ 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 }); } + }, { + 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() { @@ -525,7 +561,7 @@ 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 }); } }, { @@ -684,6 +720,108 @@ 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', @@ -714,7 +852,30 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined + var ishorizontal = props.layoutDirection === 'horizontal'; + var length; + + if (props.sliderLength) { + length = props.sliderLength; + } else { + // automatically calculate slider length + length = width - handleRadius; + + 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 + sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -731,12 +892,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 }; } } @@ -767,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)); @@ -999,8 +1160,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 +1403,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, 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 10d5a47..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/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/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 2501fd9..40cbe26 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; } @@ -60,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 @@ -107,9 +106,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 @@ -307,23 +304,51 @@ 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 }; } /** @@ -333,26 +358,23 @@ 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; - - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - var _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; }; _createClass(IroColor, [{ @@ -442,7 +464,7 @@ function () { }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); @@ -496,9 +518,23 @@ 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 }); } + }, { + 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() { @@ -525,7 +561,7 @@ 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 }); } }, { @@ -684,6 +720,108 @@ 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', @@ -714,7 +852,30 @@ function getSliderDimensions(props) { handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined + var ishorizontal = props.layoutDirection === 'horizontal'; + var length; + + if (props.sliderLength) { + length = props.sliderLength; + } else { + // automatically calculate slider length + length = width - handleRadius; + + 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 + sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -731,12 +892,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 }; } } @@ -767,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)); @@ -999,8 +1160,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 +1404,7 @@ var iroColorPickerOptionDefaults = { }; exports.IroColor = IroColor; +exports.clampSliderValue = clampSliderValue; exports.cssBorderStyles = cssBorderStyles; exports.cssGradient = cssGradient; exports.cssValue = cssValue; @@ -1253,12 +1415,15 @@ exports.getBoxStyles = getBoxStyles; exports.getBoxValueFromInput = getBoxValueFromInput; exports.getCurrentSliderValue = getCurrentSliderValue; exports.getHandleAtPoint = getHandleAtPoint; +exports.getInputDimensions = getInputDimensions; exports.getSliderDimensions = getSliderDimensions; 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..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/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/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 759f764..119039e 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,7 +444,7 @@ class IroColor { } get kelvin() { - return IroColor.rgbToKelvin(this.rgb); + return round(IroColor.rgbToKelvin(this.raw_rgb)); } set kelvin(value) { @@ -480,10 +499,23 @@ 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 }); } + 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 @@ -509,7 +541,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 }); } @@ -666,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', @@ -698,7 +836,30 @@ function getSliderDimensions(props) { padding, sliderShape } = props; - const ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined + const ishorizontal = props.layoutDirection === 'horizontal'; + let length; + + if (props.sliderLength) { + length = props.sliderLength; + } else { + // 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 + } + } // automatically calculate sliderSize if its not defined + sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -715,12 +876,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 }; } } @@ -753,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)); @@ -983,8 +1144,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 +1384,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, 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 c6225c6..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/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/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 111d15f..0b2bcc8 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; } @@ -65,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 @@ -112,9 +111,7 @@ return _int.toString(16).padStart(2, '0'); } - var IroColor = - /*#__PURE__*/ - function () { + var IroColor = /*#__PURE__*/function () { /** * @constructor Color object * @param value - initial color value @@ -312,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 }; } /** @@ -338,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; - - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; + var temperature, testRGB; + var epsilon = 0.4; + var minTemperature = 1000; + var maxTemperature = 40000; - var _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; }; _createClass(IroColor, [{ @@ -447,7 +469,7 @@ }, { key: "kelvin", get: function get() { - return IroColor.rgbToKelvin(this.rgb); + return round(IroColor.rgbToKelvin(this.raw_rgb)); }, set: function set(value) { this.rgb = IroColor.kelvinToRgb(value); @@ -501,9 +523,23 @@ }, 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 }); } + }, { + 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() { @@ -530,7 +566,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 }); } }, { @@ -689,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', @@ -719,7 +857,30 @@ handleRadius = props.handleRadius, padding = props.padding, sliderShape = props.sliderShape; - var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined + var ishorizontal = props.layoutDirection === 'horizontal'; + var length; + + if (props.sliderLength) { + length = props.sliderLength; + } else { + // automatically calculate slider length + length = width - handleRadius; + + 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 + sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2; @@ -736,12 +897,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 }; } } @@ -772,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)); @@ -1004,8 +1165,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 +1409,7 @@ }; exports.IroColor = IroColor; + exports.clampSliderValue = clampSliderValue; exports.cssBorderStyles = cssBorderStyles; exports.cssGradient = cssGradient; exports.cssValue = cssValue; @@ -1258,12 +1420,15 @@ exports.getBoxValueFromInput = getBoxValueFromInput; exports.getCurrentSliderValue = getCurrentSliderValue; exports.getHandleAtPoint = getHandleAtPoint; + exports.getInputDimensions = getInputDimensions; exports.getSliderDimensions = getSliderDimensions; 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.umd.js.map b/dist/iro-core.umd.js.map index c10cb2f..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/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/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 32b1edc..bcedb28 100644 --- a/dist/slider.d.ts +++ b/dist/slider.d.ts @@ -7,8 +7,12 @@ export interface SliderOptions extends IroColorPickerOptions { color: IroColor; sliderShape: SliderShape; sliderType: SliderType; + sliderSize: number; + sliderLength: number; minTemperature: number; maxTemperature: number; + showInput: boolean; + showLabel: boolean; } export declare const sliderDefaultOptions: { sliderShape: string; 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/color.ts b/src/color.ts index 93ab476..7e9d17e 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 @@ -296,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}; } /** @@ -320,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 { @@ -411,7 +432,7 @@ export class IroColor { } public get kelvin(): number { - return IroColor.rgbToKelvin(this.rgb); + return round(IroColor.rgbToKelvin(this.raw_rgb)); } public set kelvin(value: number) { @@ -450,14 +471,23 @@ 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 + }; + } + + public get raw_rgb(): RgbColor { + const {r, g, b} = IroColor.hsvToRgb(this.$); + return { + r: r, + g: g, + b: b }; } @@ -481,7 +511,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..2931ef7 --- /dev/null +++ b/src/input.ts @@ -0,0 +1,102 @@ +import { IroColor } from './color'; +import { SliderType } from './slider'; +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 + * @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': + 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(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)) { + 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 + */ + 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 566a6e5..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' | ''; @@ -9,8 +10,12 @@ export interface SliderOptions extends IroColorPickerOptions { color: IroColor; sliderShape: SliderShape; sliderType: SliderType; + sliderSize: number; + sliderLength: number; minTemperature: number; maxTemperature: number; + showInput: boolean; + showLabel: boolean; } export const sliderDefaultOptions = { @@ -37,6 +42,24 @@ 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.sliderLength) { + length = props.sliderLength; + } else { + // 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 + } + } + // automatically calculate sliderSize if its not defined sliderSize = sliderSize ?? padding * 2 + handleRadius * 2; if (sliderShape === 'circle') { @@ -52,12 +75,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, } } } @@ -84,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;