@havue/components 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/components.full.js +1096 -97
  2. package/dist/components.full.min.js +1 -1
  3. package/dist/components.full.min.js.map +1 -1
  4. package/dist/components.mjs +164 -0
  5. package/dist/components.umd.js +162 -2
  6. package/dist/style.css +1 -1
  7. package/dist/types/color-picker/src/color-picker-normal/ColorPicker.vue.d.ts +16 -0
  8. package/dist/types/color-picker/src/color-picker-normal/children/ColorArea/ColorArea.vue.d.ts +18 -0
  9. package/dist/types/color-picker/src/color-picker-normal/children/ColorArea/hooks/useInteraction.d.ts +9 -0
  10. package/dist/types/color-picker/src/color-picker-normal/children/ColorForm/ColorForm.vue.d.ts +11 -0
  11. package/dist/types/color-picker/src/color-picker-rainbow/ColorPicker.vue.d.ts +15 -0
  12. package/dist/types/color-picker/src/{children → color-picker-rainbow/children}/ColorForm/ColorForm.vue.d.ts +1 -0
  13. package/dist/types/color-picker/src/color-picker-rainbow/children/PresetColors/PresetColors.vue.d.ts +10 -0
  14. package/dist/types/color-picker/src/{hooks → color-picker-rainbow/hooks}/useOperateEvent.d.ts +4 -1
  15. package/dist/types/color-picker/src/{utils → color-picker-rainbow/utils}/color.d.ts +6 -6
  16. package/dist/types/color-picker/src/constants/index.d.ts +1 -0
  17. package/dist/types/color-picker/src/index.d.ts +24 -2
  18. package/dist/types/drag-and-drop/src/Draggable.vue.d.ts +2 -2
  19. package/dist/types/drag-and-drop/src/Droppable.vue.d.ts +1 -0
  20. package/dist/types/drag-and-drop/src/manager/index.d.ts +12 -14
  21. package/dist/types/ip-input/src/IpInput.vue.d.ts +13 -0
  22. package/dist/types/ip-input/src/index.d.ts +3 -0
  23. package/dist/types/ip-input/src/utils/index.d.ts +14 -0
  24. package/dist/types/src/index.d.ts +1 -0
  25. package/package.json +5 -5
  26. package/dist/types/color-picker/src/ColorPicker.vue.d.ts +0 -18
  27. /package/dist/types/color-picker/src/{children → color-picker-normal/children}/PresetColors/PresetColors.vue.d.ts +0 -0
  28. /package/dist/types/color-picker/src/{hooks → color-picker-rainbow/hooks}/useColorArea.d.ts +0 -0
  29. /package/dist/types/color-picker/src/{utils → color-picker-rainbow/utils}/tools.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"components.full.min.js","sources":["../../utils/src/vue/install.ts","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js","../../../node_modules/.pnpm/color@4.2.3/node_modules/color/index.js","../color-picker/src/utils/color.ts","../color-picker/src/hooks/useColorArea.ts","../color-picker/src/utils/tools.ts","../color-picker/src/hooks/useOperateEvent.ts","../color-picker/src/children/ColorForm/ColorForm.vue","../color-picker/src/children/PresetColors/PresetColors.vue","../color-picker/src/ColorPicker.vue","../color-picker/src/index.ts","../../shared/src/utils/eventBus.ts","../drag-and-drop/src/manager/index.ts","../drag-and-drop/src/Draggable.vue","../drag-and-drop/src/Droppable.vue","../drag-and-drop/src/index.ts","../drag-and-scale/src/hooks/useDragAndScale.ts","../drag-and-scale/src/index.ts","../drag-and-scale/src/DragAndScale.vue"],"sourcesContent":["import type { App, Directive } from 'vue'\r\nimport type { SFCWithInstall } from './typescript'\r\n\r\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\r\n ;(main as SFCWithInstall<T>).install = (app: App): void => {\r\n for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n app.component(comp.name, comp)\r\n }\r\n }\r\n\r\n if (extra) {\r\n for (const [key, comp] of Object.entries(extra)) {\r\n ;(main as any)[key] = comp\r\n }\r\n }\r\n return main as SFCWithInstall<T> & E\r\n}\r\n\r\nexport const withInstallDirective = <T extends Directive>(directive: T, name: string) => {\r\n ;(directive as SFCWithInstall<T>).install = (app: App): void => {\r\n app.directive(name, directive)\r\n }\r\n\r\n return directive as SFCWithInstall<T>\r\n}\r\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","const colorString = require('color-string');\nconst convert = require('color-convert');\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...args) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (args.length > 0) {\n\t\t\treturn new Color(args, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...args) {\n\t\tlet color = args[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(args, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nmodule.exports = Color;\n","import type ColorConstruct from 'color'\r\nimport Color from 'color'\r\n\r\nexport type RgbColorType = {\r\n\tr: number\r\n\tg: number\r\n\tb: number\r\n}\r\n\r\nexport type HsvColorType = {\r\n\th: number\r\n\ts: number\r\n\tv: number\r\n}\r\n\r\nexport function hexToColor(hex: string): ColorConstruct {\r\n\tconst colorIns = Color(hex)\r\n\treturn colorIns\r\n}\r\n\r\n/**\r\n * 输入rgb,返回16进制颜色\r\n * @param {ColorConstruct} color\r\n * @returns {string}\r\n */\r\nexport function colorToHex(color: ColorConstruct): string {\r\n\treturn color.hex()\r\n}\r\n\r\n/**\r\n * 根据颜色值,计算得到hsv深度100的颜色和当前深度值\r\n * @param { ColorConstruct } color\r\n * @returns {\r\n * color: ColorConstruct\r\n * value: number [0-100]\r\n * }\r\n *\r\n */\r\nexport function getLightColorAndDepth(color: ColorConstruct): {\r\n\tcolor: ColorConstruct\r\n\tvalue: number\r\n} {\r\n\tconst { h, s, v } = color.hsv().object()\r\n\r\n\treturn {\r\n\t\tcolor: Color.hsv(h, s, 100),\r\n\t\tvalue: v,\r\n\t}\r\n}\r\n\r\n/**\r\n * 根据高亮区域的颜色和缩放比例,计算得到原始rgb颜色值\r\n * @param { ColorConstruct } color\r\n * @param { number } value 深度 [0-100]\r\n * @returns ColorConstruct\r\n *\r\n */\r\nexport function getOriginColorByLightAndDepth(color: ColorConstruct, value: number): ColorConstruct {\r\n\tconst { h, s } = color.hsv().object()\r\n\treturn Color.hsv(h, s, value)\r\n}\r\n\r\n/**\r\n * 根据canvas高亮区域的颜色和深度值,计算得到原始hex颜色值\r\n * @param { ColorConstruct } color\r\n * @param { number } value 深度 [0-100]\r\n * @returns string\r\n *\r\n */\r\nexport function getOriginHexByLightAndDepth(color: ColorConstruct, value: number): string {\r\n\tconst originColor = getOriginColorByLightAndDepth(color, value)\r\n\treturn colorToHex(originColor)\r\n}\r\n","import type ColorConstruct from 'color'\r\nimport { ref, onMounted } from 'vue'\r\nimport Color from 'color'\r\nimport { hexToColor } from '../utils/color'\r\n\r\nexport function useColorArea() {\r\n const colorAreaCanvas = ref<HTMLCanvasElement>()\r\n /** canvas绘制宽度 */\r\n const canvasWidth = 255 * 6 + 1\r\n /** canvas绘制高度 */\r\n const canvasHeight = 256\r\n\r\n // 有颜色透明度属性,不是纯的rgb,有误差\r\n // let imageData: Uint8ClampedArray = [] as unknown as Uint8ClampedArray\r\n\r\n /**\r\n * 绘制canvas颜色区域\r\n * @returns\r\n */\r\n function drawColorArea(): void {\r\n if (!colorAreaCanvas.value) {\r\n return\r\n }\r\n const canvas = colorAreaCanvas.value\r\n\r\n canvas.width = canvasWidth\r\n canvas.height = canvasHeight\r\n\r\n const ctx = canvas.getContext('2d')\r\n\r\n if (!ctx) {\r\n return\r\n }\r\n\r\n ctx.clearRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n // const colorStopList = ['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n\r\n // for (let i = 0; i < colorStopList.length - 1; i++) {\r\n // \tconst colorGradient = ctx.createLinearGradient(i * 255, 0, (i + 1) * 255, 0)\r\n // \tcolorGradient.addColorStop(0, colorStopList[i])\r\n // \tcolorGradient.addColorStop(1, colorStopList[i + 1])\r\n // \tctx.fillStyle = colorGradient\r\n // \tctx.fillRect(i * 255, 0, 255, canvasHeight)\r\n // }\r\n\r\n const colorGradient = ctx.createLinearGradient(0, 0, canvasWidth, 0)\r\n\r\n colorGradient.addColorStop(0, '#FF0000')\r\n colorGradient.addColorStop(1 / 6, '#FFFF00')\r\n colorGradient.addColorStop(1 / 3, '#00FF00')\r\n colorGradient.addColorStop(1 / 2, '#00FFFF')\r\n colorGradient.addColorStop(2 / 3, '#0000FF')\r\n colorGradient.addColorStop(5 / 6, '#FF00FF')\r\n colorGradient.addColorStop(1, '#FF0000')\r\n\r\n ctx.fillStyle = colorGradient\r\n\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n const whiteGradient = ctx.createLinearGradient(0, canvasHeight, 0, 0)\r\n\r\n whiteGradient.addColorStop(0, 'rgb(255 255 255 / 100%)')\r\n whiteGradient.addColorStop(1, 'rgb(255 255 255 / 0%)')\r\n\r\n ctx.fillStyle = whiteGradient\r\n\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n }\r\n\r\n function getCoordinateByHex(hex: string) {\r\n const color = hexToColor(hex)\r\n return getCoordinateByColor(color)\r\n }\r\n\r\n /**\r\n * 该颜色在canvas中的位置\r\n * @param color ColorConstruct\r\n * @returns\r\n */\r\n function getCoordinateByColor(color: ColorConstruct) {\r\n const { r, g, b } = color.rgb().object()\r\n const colorItems = [\r\n {\r\n type: 'r',\r\n value: r\r\n },\r\n {\r\n type: 'g',\r\n value: g\r\n },\r\n {\r\n type: 'b',\r\n value: b\r\n }\r\n ]\r\n\r\n colorItems.sort((a, b) => b.value - a.value)\r\n\r\n const maxColor = colorItems[0]\r\n const secondColor = colorItems[1]\r\n const curColorType = maxColor.type + secondColor.type\r\n\r\n let coordinateX = 0\r\n const coordinateY = colorItems[2].value\r\n // debugger\r\n if (curColorType === 'rg' || curColorType === 'gr') {\r\n // 红绿\r\n coordinateX = 255\r\n if (secondColor.type === 'r') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n } else if (curColorType === 'gb' || curColorType === 'bg') {\r\n // 蓝绿\r\n coordinateX = 255 * 3\r\n if (secondColor.type === 'g') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n } else if (curColorType === 'rb' || curColorType === 'br') {\r\n // 红蓝\r\n coordinateX = 255 * 5\r\n if (secondColor.type === 'b') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n }\r\n\r\n return {\r\n x: coordinateX,\r\n y: coordinateY\r\n }\r\n }\r\n\r\n /**\r\n * 目标颜色:['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n * 计算横向x,即颜色值(第二大的r/g/b值)在canvas中距离目标颜色的横向距离\r\n * 求x?\r\n * 已知:\r\n * gap = 255 - x // gap为255 减去 在顶部距离目标颜色x处的颜色值\r\n * scale = y / 255 // y为第三大的r/g/b值\r\n * ∵\r\n * gap * scale + x = target\r\n * ∴\r\n * x = (255 * target - 255 * y) / (255 - y)\r\n * @param y\r\n * @param target\r\n * @returns number\r\n */\r\n function getSecondColorDistance(y: number, target: number): number {\r\n return y === 255 ? 255 : (255 * target - 255 * y) / (255 - y)\r\n }\r\n\r\n /**\r\n * 根据canvas父级元素区域坐标获取在canvas中的颜色\r\n * @param x\r\n * @param y\r\n * @param width 坐标系宽度\r\n * @param height 坐标系高度\r\n * // 绘制的canvas颜色有偏差,且存在透明度(rgba),不为纯的rgb, 不使用imagedata,手动计算\r\n */\r\n function getColorByCoordinate(x: number, y: number, width: number, height: number): ColorConstruct {\r\n if (!colorAreaCanvas.value) {\r\n return Color()\r\n }\r\n const scaleX = canvasWidth / width\r\n const scaleY = canvasHeight / height\r\n x = Math.round(Math.min(x * scaleX, canvasWidth - 1))\r\n y = Math.round(Math.min(y * scaleY, canvasHeight - 1))\r\n const color = getBaseColorFromCoodinage(x, y)\r\n return color\r\n }\r\n\r\n /**\r\n * 根据在canvas中的坐标,计算该位置的颜色值\r\n * @param { number } x\r\n * @param { number } y\r\n * @returns number\r\n */\r\n function getBaseColorFromCoodinage(x: number, y: number) {\r\n /** r值 */\r\n let r = 0\r\n /** g值 */\r\n let g = 0\r\n /** b值 */\r\n let b = 0\r\n /** 颜色最大值 */\r\n const COLOR_GAP = 255\r\n\r\n /** 红色为255的区间 */\r\n const redRange = numberInGap(x, 0, COLOR_GAP) || numberInGap(x, COLOR_GAP * 5, COLOR_GAP * 6)\r\n\r\n /** 绿色为255的区间 */\r\n const greenRange = numberInGap(x, COLOR_GAP, COLOR_GAP * 3)\r\n\r\n /** 蓝色为255的区间 */\r\n const blueRange = numberInGap(x, COLOR_GAP * 3, COLOR_GAP * 5)\r\n\r\n if (redRange) {\r\n r = 255\r\n } else if (x <= COLOR_GAP * 2) {\r\n r = Math.max(2 * COLOR_GAP - x, 0)\r\n } else if (x >= COLOR_GAP * 4) {\r\n r = Math.max(x - COLOR_GAP * 4, 0)\r\n }\r\n\r\n if (greenRange) {\r\n g = 255\r\n } else if (x < COLOR_GAP) {\r\n g = Math.max(x, 0)\r\n } else {\r\n g = Math.max(COLOR_GAP * 4 - x, 0)\r\n }\r\n\r\n if (blueRange) {\r\n b = 255\r\n } else if (x < COLOR_GAP * 3) {\r\n b = Math.max(x - COLOR_GAP * 2, 0)\r\n } else {\r\n b = Math.max(COLOR_GAP * 6 - x, 0)\r\n }\r\n\r\n const rGap = COLOR_GAP - r\r\n const gGap = COLOR_GAP - g\r\n const bGap = COLOR_GAP - b\r\n\r\n const scale = y / COLOR_GAP\r\n\r\n r += rGap * scale\r\n g += gGap * scale\r\n b += bGap * scale\r\n\r\n return Color.rgb(r, g, b)\r\n }\r\n\r\n /**\r\n * 数值是否在区间内\r\n * @param { number } num\r\n * @param { number } begin\r\n * @param { number } end\r\n * @returns boolean\r\n */\r\n function numberInGap(num: number, begin: number, end: number) {\r\n return num >= begin && num <= end\r\n }\r\n\r\n onMounted(() => {\r\n drawColorArea()\r\n })\r\n\r\n return {\r\n canvasWidth,\r\n canvasHeight,\r\n colorAreaCanvas,\r\n drawColorArea,\r\n getCoordinateByColor,\r\n getCoordinateByHex,\r\n getColorByCoordinate\r\n }\r\n}\r\n","export function throttle<T extends (...args: any[]) => any>(fn: T, time: number = 200) {\r\n let timer: number | null = null\r\n return function (this: any, ...args: Parameters<T>) {\r\n const ctx = this\r\n\r\n if (timer) {\r\n return\r\n } else {\r\n timer = window.setTimeout(() => {\r\n fn.apply(ctx, args)\r\n timer = null\r\n }, time)\r\n }\r\n }\r\n}\r\n","import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'\r\nimport { throttle } from '../utils/tools'\r\n\r\ntype Point = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport function useOperateEvent() {\r\n const colorAreaRef = ref<HTMLDivElement>()\r\n /** 圆形颜色坐标 */\r\n const circlePickerCoordinate = reactive({\r\n x: 0,\r\n y: 0\r\n })\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n if (e.touches.length === 0) {\r\n return\r\n }\r\n e.preventDefault()\r\n\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n\r\n document.body.addEventListener('touchmove', handleTouchMove)\r\n document.body.addEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function handleTouchEnd() {\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleMounseDown(e: HTMLElementEventMap['mousedown']) {\r\n document.body.addEventListener('mousemove', handleMouseMove)\r\n document.body.addEventListener('mouseup', handleMouseUp)\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n function handleMouseMove(e: HTMLElementEventMap['mousemove']) {\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n /** 处理鼠标拖动 */\r\n const handleCirclePickerCoordinateChange = throttle(handleCirclePickerCoordinateChangeFn, 20)\r\n function handleCirclePickerCoordinateChangeFn(point: Point) {\r\n const { x: clientX, y: clientY } = point\r\n const colorAreaRect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!colorAreaRect) {\r\n return\r\n }\r\n const { left, top, width, height } = colorAreaRect\r\n\r\n let x = 0\r\n let y = 0\r\n if (clientX <= left) {\r\n x = 0\r\n } else if (clientX >= left + width) {\r\n x = width\r\n } else {\r\n x = clientX - left\r\n }\r\n\r\n if (clientY <= top) {\r\n y = 0\r\n } else if (clientY >= top + height) {\r\n y = height\r\n } else {\r\n y = clientY - top\r\n }\r\n circlePickerCoordinate.x = x\r\n circlePickerCoordinate.y = y\r\n }\r\n\r\n function handleMouseUp() {\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n }\r\n\r\n /**\r\n * 更新圆形颜色图标位置\r\n * @param x 横坐标\r\n * @param y 纵坐标\r\n * @param width 坐标系宽度\r\n * @param height 坐标系高度\r\n */\r\n function setCirclePickerCoordinate(x: number, y: number, width: number, height: number) {\r\n const colorAreaRect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!colorAreaRect) {\r\n return\r\n }\r\n const { width: AreaWidth, height: AreaHeight } = colorAreaRect\r\n const scaleX = AreaWidth / width\r\n const scaleY = AreaHeight / height\r\n circlePickerCoordinate.x = x * scaleX\r\n circlePickerCoordinate.y = y * scaleY\r\n }\r\n\r\n onMounted(() => {\r\n colorAreaRef.value?.addEventListener('touchstart', handleTouchStart)\r\n\r\n colorAreaRef.value?.addEventListener('mousedown', handleMounseDown)\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n colorAreaRef.value?.removeEventListener('touchstart', handleTouchStart)\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n\r\n colorAreaRef.value?.removeEventListener('mousedown', handleMounseDown)\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n })\r\n\r\n return {\r\n colorAreaRef,\r\n circlePickerCoordinate,\r\n setCirclePickerCoordinate\r\n }\r\n}\r\n","<template>\r\n <div class=\"hv-color-picker__color-form\">\r\n <div class=\"mb-12\">\r\n <el-input v-model=\"hexColor\" :formatter=\"hexFormater\" @change=\"handleHexColorChange\"></el-input>\r\n </div>\r\n <div class=\"hv-color-picker__form-group mb-12\">\r\n <div class=\"hv-color-picker__form-label\">RGB</div>\r\n <el-input-number\r\n v-model=\"formInputRGB.r\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputRGB.g\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputRGB.b\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n </div>\r\n <div class=\"hv-color-picker__form-group mb-12\">\r\n <div class=\"hv-color-picker__form-label\">HSV</div>\r\n <el-input-number\r\n v-model=\"formInputHSV.h\"\r\n @change=\"handleHsvColorChange\"\r\n :min=\"0\"\r\n :max=\"360\"\r\n step-strictly\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputHSV.s\"\r\n @change=\"handleHsvColorChange\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n step-strictly\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputHSV.v\"\r\n @change=\"handleHsvColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"100\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { RgbColorType, HsvColorType } from '../../utils/color'\r\nimport { ref, reactive, watch } from 'vue'\r\nimport Color from 'color'\r\n\r\nconst DEFAULT_COLOR = '#ffffff'\r\n\r\nconst props = defineProps<{\r\n modelValue: string\r\n}>()\r\nconst emits = defineEmits<{\r\n (name: 'change', value: string): void\r\n}>()\r\n\r\n/** 16进制颜色 */\r\nconst hexColor = ref<string>(Color(props.modelValue || DEFAULT_COLOR).hex())\r\n\r\n/** rgb颜色 */\r\nconst formInputRGB = reactive<RgbColorType>(\r\n Color(hexColor.value || DEFAULT_COLOR)\r\n .rgb()\r\n .object() as RgbColorType\r\n)\r\n\r\n/** hsv颜色 */\r\nconst formInputHSV = reactive<HsvColorType>(\r\n Color(hexColor.value || DEFAULT_COLOR)\r\n .hsv()\r\n .object() as HsvColorType\r\n)\r\n\r\n/**\r\n * 格式化16进制颜色输入\r\n * @param {string} value\r\n */\r\nfunction hexFormater(value: string) {\r\n return `#${value\r\n .replace(/[^0-9A-F]/gi, '')\r\n .slice(0, 6)\r\n .toUpperCase()}`\r\n}\r\n\r\n// 外部颜色更改,更新内部颜色值\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n const colorIns = Color(value)\r\n\r\n hexColor.value = colorIns.hex()\r\n\r\n const { r, g, b } = colorIns.rgb().object()\r\n const { h, s, v } = colorIns.hsv().object()\r\n\r\n Object.assign(formInputRGB, {\r\n r,\r\n g,\r\n b\r\n })\r\n Object.assign(formInputHSV, {\r\n h,\r\n s,\r\n v\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * 16进制颜色更改,触发change事件\r\n */\r\nfunction handleHexColorChange() {\r\n let value = hexColor.value || ''\r\n const len = value.replace(/[^0-9A-F]/gi, '').length\r\n if (len === 6) {\r\n emits('change', hexColor.value)\r\n } else {\r\n hexColor.value = props.modelValue\r\n }\r\n}\r\n\r\n/**\r\n * rgb颜色更改,触发change事件\r\n */\r\nfunction handleRgbColorChange() {\r\n const { r, g, b } = formInputRGB\r\n emits('change', Color.rgb(r, g, b).hex().toString())\r\n}\r\n\r\n/**\r\n * hsv颜色更改,触发change事件\r\n */\r\nfunction handleHsvColorChange() {\r\n const { h, s, v } = formInputHSV\r\n emits('change', Color.hsv(h, s, v).hex().toString())\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker__color-form {\r\n width: 100%;\r\n overflow: hidden;\r\n\r\n .mb-12 {\r\n margin-bottom: 12px;\r\n }\r\n\r\n .el-input {\r\n --el-input-border-color: #30343b;\r\n\r\n .el-input__wrapper {\r\n padding-right: 10px;\r\n padding-left: 10px;\r\n background-color: #101114;\r\n border-radius: 2px;\r\n\r\n .el-input__inner {\r\n text-align: left;\r\n }\r\n }\r\n }\r\n\r\n .hv-color-picker__form-group {\r\n display: flex;\r\n align-items: center;\r\n\r\n .hv-color-picker__form-label {\r\n width: 72px;\r\n }\r\n\r\n .el-input {\r\n flex: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker__preset\">\r\n <div class=\"hv-color-picker__preset-title\">{{ props.title || '系统预设色彩' }}</div>\r\n <div class=\"hv-color-picker__preset-list\">\r\n <div\r\n class=\"hv-color-picker__preset-list-item\"\r\n @click=\"handleClickColor(color)\"\r\n v-for=\"color in preColors\"\r\n :key=\"color\"\r\n :style=\"{ backgroundColor: color }\"\r\n ></div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst defaultPresetColors = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#E3822D',\r\n '#DCE24F',\r\n '#1DCF69',\r\n '#6DE5B9',\r\n '#11A1F2',\r\n '#AA43FF',\r\n '#F0689C',\r\n '#F8D28B',\r\n '#606368',\r\n '#E83C34',\r\n '#EEBE29',\r\n '#89F0AC',\r\n '#2FBC9E',\r\n '#56CCF2',\r\n '#1C1DFA',\r\n '#DC88F5',\r\n '#D4C595',\r\n '#C52F65'\r\n]\r\n\r\nconst props = defineProps<{\r\n title?: string\r\n presetColors?: string[]\r\n}>()\r\n\r\nconst preColors = computed(() => {\r\n return !props.presetColors ? defaultPresetColors : props.presetColors\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'change', value: string): void\r\n}>()\r\n\r\nfunction handleClickColor(color: string) {\r\n emits('change', color)\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker__preset {\r\n .hv-color-picker__preset-title {\r\n margin-bottom: 4px;\r\n font-size: 12px;\r\n color: #fff;\r\n }\r\n\r\n .hv-color-picker__preset-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .hv-color-picker__preset-list-item {\r\n width: 16px;\r\n height: 16px;\r\n\r\n // 一行十个\r\n margin-right: calc((100% - 16px * 10) / 9);\r\n margin-bottom: 4px;\r\n border-radius: 50%;\r\n\r\n &:nth-child(10n) {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker\">\r\n <div class=\"hv-color-picker__title\">{{ props.title || '颜色编辑器' }}</div>\r\n <div class=\"hv-color-picker__area-outer\">\r\n <div class=\"hv-color-picker__area\" ref=\"colorAreaRef\">\r\n <canvas ref=\"colorAreaCanvas\"></canvas>\r\n <div class=\"hv-color-picker__circle\" :style=\"cilcleStyle\"></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"hv-color-picker__slider\">\r\n <ElSlider v-model=\"colorDepth\" :min=\"0\" :max=\"100\" :show-tooltip=\"false\" :style=\"sliderBackStyle\"></ElSlider>\r\n <div class=\"hv-color-picker__origin-color\" :style=\"{ backgroundColor: originHexColor }\"></div>\r\n </div>\r\n <ColorForm :model-value=\"color\" @change=\"handleColorChange\"></ColorForm>\r\n <PresetColors\r\n @change=\"handleColorChange\"\r\n :title=\"props.presetTitle\"\r\n :presetColors=\"props.presetColors\"\r\n ></PresetColors>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type ColorConstruct from 'color'\r\nimport { ref, computed, watch, onMounted } from 'vue'\r\nimport Color from 'color'\r\nimport { useColorArea } from './hooks/useColorArea'\r\nimport { useOperateEvent } from './hooks/useOperateEvent'\r\nimport { getLightColorAndDepth, hexToColor, getOriginHexByLightAndDepth, colorToHex } from './utils/color'\r\nimport ColorForm from './children/ColorForm/ColorForm.vue'\r\nimport PresetColors from './children/PresetColors/PresetColors.vue'\r\n\r\ndefineOptions({\r\n name: 'HvColorPicker'\r\n})\r\n\r\nconst DEFAULT_COLOR = '#FFFFFF'\r\n\r\nconst props = defineProps<{\r\n title?: string\r\n presetTitle?: string\r\n presetColors?: string[]\r\n}>()\r\n\r\nconst emits = defineEmits<{\r\n (name: 'update:model-value', value: string): void\r\n}>()\r\nconst { colorAreaCanvas, getColorByCoordinate, getCoordinateByColor, canvasWidth, canvasHeight } = useColorArea()\r\nconst { colorAreaRef, circlePickerCoordinate, setCirclePickerCoordinate } = useOperateEvent()\r\n\r\n// const color = ref<string>('#ffccaa')\r\nconst color = defineModel({\r\n type: String,\r\n default: DEFAULT_COLOR\r\n})\r\n\r\n/** 高亮 在canvas颜色区域中的颜色 */\r\nconst lightColor = ref<ColorConstruct>(Color(DEFAULT_COLOR))\r\n/** 滑块 hsv 深度缩放 */\r\nconst colorDepth = ref(100)\r\n\r\n/** 根据 lightColor 以及 colorDepth 计算出的实际显示16进制颜色值*/\r\nconst originHexColor = computed(() => {\r\n if (lightColor.value) {\r\n const hex = getOriginHexByLightAndDepth(lightColor.value, colorDepth.value)\r\n return hex\r\n }\r\n return DEFAULT_COLOR\r\n})\r\n\r\n// 颜色值更改,更新显示\r\nwatch(color, (val) => {\r\n const hex = getOriginHexByLightAndDepth(lightColor.value, colorDepth.value)\r\n if (hex === val) {\r\n return\r\n }\r\n handleColorChange(val)\r\n})\r\n\r\n// 颜色区域坐标更改,计算新的颜色值\r\nwatch(\r\n () => circlePickerCoordinate,\r\n (coordianate) => {\r\n const rect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!rect) {\r\n return\r\n }\r\n\r\n const color = getColorByCoordinate(coordianate.x, coordianate.y, rect.width, rect.height)\r\n lightColor.value = color\r\n },\r\n {\r\n deep: true\r\n }\r\n)\r\n\r\n// 当前颜色圆形图标位置样式\r\nconst cilcleStyle = computed(() => {\r\n if (!color.value) {\r\n return {\r\n top: '100%',\r\n left: '0',\r\n backgroundColor: '#ffffff'\r\n }\r\n }\r\n return {\r\n top: circlePickerCoordinate.y + 'px',\r\n left: circlePickerCoordinate.x + 'px',\r\n backgroundColor: lightColor.value.hex()\r\n }\r\n})\r\n\r\n// 颜色明暗度slider背景颜色\r\nconst sliderBackStyle = computed(() => {\r\n const lightHex = colorToHex(lightColor.value)\r\n return {\r\n '--el-slider-runway-bg-color': `linear-gradient(to right, #000000, ${lightHex})`,\r\n '--el-slider-main-bg-color': lightHex\r\n }\r\n})\r\n\r\n// 颜色值更改,触发更新\r\nwatch(\r\n () => originHexColor.value,\r\n (value, oldValue) => {\r\n if (value !== oldValue) {\r\n emits('update:model-value', value)\r\n return\r\n }\r\n }\r\n)\r\n\r\n// 手动输入颜色或选择预制颜色时,计算新的颜色区域坐标\r\nfunction handleColorChange(hex: string) {\r\n const color = hexToColor(hex)\r\n const { color: lightRgb, value: depth } = getLightColorAndDepth(color)\r\n lightColor.value = lightRgb\r\n colorDepth.value = depth\r\n const coordin = getCoordinateByColor(lightRgb)\r\n setCirclePickerCoordinate(coordin.x, coordin.y, canvasWidth, canvasHeight)\r\n}\r\n\r\nonMounted(() => {\r\n handleColorChange(color.value)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker {\r\n box-sizing: border-box;\r\n width: 264px;\r\n padding: 12px;\r\n font-size: 12px;\r\n color: #fff;\r\n background-color: #212326;\r\n border: 1px solid #353d46;\r\n border-radius: 4px;\r\n box-shadow: 0 12px 24px 0 #00000080;\r\n\r\n .hv-color-picker__title {\r\n margin-bottom: 12px;\r\n font-weight: bold;\r\n }\r\n\r\n .hv-color-picker__area-outer {\r\n width: auto;\r\n border: 5px solid #000;\r\n border-radius: 3px;\r\n\r\n .hv-color-picker__area {\r\n position: relative;\r\n width: auto;\r\n height: 168px;\r\n overflow: hidden;\r\n background-color: #000;\r\n\r\n canvas {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .hv-color-picker__circle {\r\n position: absolute;\r\n box-sizing: border-box;\r\n width: 18px;\r\n height: 18px;\r\n border: 3px solid #dcdcdc;\r\n border-radius: 50%;\r\n box-shadow:\r\n 0 2px 4px -1px #0000001f,\r\n 0 4px 5px 0 #00000014,\r\n 0 1px 10px 0 #0000000d;\r\n transform: translate(-50%, -50%);\r\n }\r\n }\r\n }\r\n\r\n .hv-color-picker__slider {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .hv-color-picker__origin-color {\r\n width: 18px;\r\n height: 18px;\r\n margin-left: 12px;\r\n border-radius: 2px;\r\n }\r\n }\r\n\r\n .el-slider {\r\n box-sizing: border-box;\r\n\r\n .el-slider__runway {\r\n width: 210px;\r\n height: 8px;\r\n background: var(--el-slider-runway-bg-color);\r\n\r\n .el-slider__bar {\r\n background-color: transparent;\r\n }\r\n\r\n .el-slider__button-wrapper {\r\n .el-slider__button {\r\n box-sizing: border-box;\r\n width: 18px;\r\n height: 18px;\r\n background-color: var(--el-slider-main-bg-color);\r\n border-color: #fff;\r\n border-width: 3px;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport ColorPicker from './ColorPicker.vue'\r\n\r\nexport const HvColorPicker: SFCWithInstall<typeof ColorPicker> = withInstall(ColorPicker)\r\n\r\nexport default HvColorPicker\r\n","export type EventKey = string | symbol\r\n\r\nexport type EventHandler<T extends (...args: any) => void> = (...args: Parameters<T>) => void\r\n\r\nexport type EventHandlerSet<T extends (...args: any) => void> = Set<EventHandler<T>>\r\n\r\nexport type EventMap<Events extends Record<EventKey, (...args: any) => void>> = Map<\r\n keyof Events,\r\n EventHandlerSet<Events[keyof Events]>\r\n>\r\n\r\nexport class EventBus<Events extends Record<EventKey, (...args: any) => void>> {\r\n private _eventMap: EventMap<Events>\r\n\r\n constructor() {\r\n this._eventMap = new Map()\r\n }\r\n\r\n public on<T extends keyof Events>(key: T, handler: Events[T]): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (handlers) {\r\n handlers.add(handler)\r\n } else {\r\n const set: EventHandlerSet<Events[keyof Events]> = new Set()\r\n set.add(handler)\r\n this._eventMap.set(key, set)\r\n }\r\n }\r\n\r\n public off<T extends keyof Events>(key: T, handler?: Events[T]): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (!handlers) return\r\n\r\n if (handler) {\r\n handlers.delete(handler)\r\n } else {\r\n handlers.clear()\r\n }\r\n }\r\n\r\n public emit<T extends keyof Events>(key: T, ...payload: Parameters<Events[T]>): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (!handlers) return\r\n\r\n for (const callback of handlers.values()) {\r\n callback(...payload)\r\n }\r\n }\r\n}\r\n","import { EventBus } from '@havue/shared'\r\n\r\nexport type DragAndDropPoint = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport type DragAndDropDragType = string | number | symbol\r\n\r\nexport type DnDManagerEvents = {\r\n down: (p: DragAndDropPoint) => void\r\n 'first-move': (p: DragAndDropPoint, e: MouseEvent | TouchEvent) => void\r\n start: (p: DragAndDropPoint) => void\r\n move: (params: { type: DragAndDropDragType; data: any; point: DragAndDropPoint }) => void\r\n end: (params: { type: DragAndDropDragType; data: any; point: DragAndDropPoint }) => void\r\n}\r\n\r\nexport class DnDManager extends EventBus<DnDManagerEvents> {\r\n /** 是否开始拖动 */\r\n public isDragStart: boolean = false\r\n /** 拖动元素类型 */\r\n public dragType: DragAndDropDragType | undefined = undefined\r\n /** Draggable传递的数据,\r\n * 供Droppable使用\r\n */\r\n public dragData: any\r\n\r\n private isSendFirstMovePos = false\r\n\r\n /** 移动端长按一定时间才触发 onStart */\r\n private touchStartPressTime = 300\r\n /** touchstart事件触发的时的时间 */\r\n private touchStartTime: number = 0\r\n /** touchstart时间触发的位置 */\r\n private touchStartPosition: DragAndDropPoint = { x: 0, y: 0 }\r\n /** onMove最后位置 */\r\n private lastMovePoint: DragAndDropPoint = { x: 0, y: 0 }\r\n private emitTouchStartTimer: number | undefined = undefined\r\n private destroy: () => void = () => {}\r\n\r\n constructor() {\r\n super()\r\n this.bindEventListener()\r\n }\r\n\r\n public updateDargInfo(type: Exclude<DragAndDropDragType, undefined>, data: any) {\r\n if (type === undefined || type === null) {\r\n throw new Error('请传入拖动元素 type')\r\n }\r\n this.isDragStart = true\r\n this.dragType = type\r\n this.dragData = data\r\n\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n }\r\n\r\n /**\r\n * 通知 Draggable 开始点击\r\n * @param point\r\n */\r\n private onDown(point: DragAndDropPoint) {\r\n this.emit('down', point)\r\n }\r\n\r\n /**\r\n * 通知 Draggable 拖拽开始\r\n * @param point\r\n */\r\n private onFirstMove(point: DragAndDropPoint, e: MouseEvent | TouchEvent) {\r\n if (this.isDragStart) {\r\n return\r\n }\r\n this.isSendFirstMovePos = true\r\n this.emit('first-move', point, e)\r\n }\r\n\r\n /**\r\n * 通知 Draggable 拖拽开始\r\n * @param point\r\n */\r\n private onStart(point: DragAndDropPoint) {\r\n if (this.isDragStart) {\r\n return\r\n }\r\n this.emit('start', point)\r\n }\r\n\r\n /**\r\n * 通知 Draggable 移动\r\n * @param point\r\n * @returns\r\n */\r\n private onMove(point: DragAndDropPoint) {\r\n if (!this.isDragStart || !this.dragType) {\r\n return\r\n }\r\n this.lastMovePoint = point\r\n this.emit('move', {\r\n type: this.dragType,\r\n data: this.dragData,\r\n point: point\r\n })\r\n }\r\n\r\n /**\r\n * 结束拖拽\r\n * @returns\r\n */\r\n private onEnd() {\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n this.isSendFirstMovePos = false\r\n if (!this.isDragStart || !this.dragType) {\r\n return\r\n }\r\n this.isDragStart = false\r\n this.emit('end', {\r\n point: this.lastMovePoint,\r\n type: this.dragType,\r\n data: this.dragData\r\n })\r\n }\r\n\r\n private onMouseDown(e: MouseEvent) {\r\n // 非左键按下\r\n if (e.buttons !== 1) {\r\n this.onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n const position = {\r\n x: clientX,\r\n y: clientY\r\n }\r\n\r\n this.touchStartTime = Date.now()\r\n this.touchStartPosition = position\r\n\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n\r\n this.onDown(position)\r\n // 300ms后调用onStart(如果在此期间没有移动超过30px)\r\n this.emitTouchStartTimer = window.setTimeout(() => {\r\n this.onStart(position)\r\n }, this.touchStartPressTime)\r\n\r\n // this.onStart({\r\n // x: clientX,\r\n // y: clientY\r\n // })\r\n }\r\n\r\n private onMouseMove(e: MouseEvent) {\r\n // 非左键按下\r\n if (e.buttons !== 1) {\r\n this.onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n if (this.isDragStart) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n this.onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n } else {\r\n if (!this.isSendFirstMovePos) {\r\n this.onFirstMove(\r\n {\r\n x: clientX,\r\n y: clientY\r\n },\r\n e\r\n )\r\n }\r\n // touch 300ms内移动了超过30px,认为不是拖拽\r\n const { x, y } = this.touchStartPosition\r\n const timeInLimit = Date.now() - this.touchStartTime < this.touchStartPressTime\r\n if (timeInLimit && (Math.abs(x - clientX) > 30 || Math.abs(y - clientY) > 30)) {\r\n clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n }\r\n }\r\n\r\n // this.onMove({\r\n // x: clientX,\r\n // y: clientY\r\n // })\r\n }\r\n\r\n private onMouseUp() {\r\n this.onEnd()\r\n }\r\n\r\n private onTouchStart(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n const position = {\r\n x: clientX,\r\n y: clientY\r\n }\r\n this.touchStartTime = Date.now()\r\n this.touchStartPosition = position\r\n this.onDown(position)\r\n // 300ms后调用onStart(如果在此期间没有移动超过30px)\r\n this.emitTouchStartTimer = window.setTimeout(() => {\r\n this.onStart(position)\r\n }, this.touchStartPressTime)\r\n }\r\n\r\n private onTouchMove(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n if (this.isDragStart) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n this.onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n } else {\r\n if (!this.isSendFirstMovePos) {\r\n this.onFirstMove(\r\n {\r\n x: clientX,\r\n y: clientY\r\n },\r\n e\r\n )\r\n }\r\n // touch 300ms内移动了超过30px,认为不是拖拽\r\n const { x, y } = this.touchStartPosition\r\n const timeInLimit = Date.now() - this.touchStartTime < this.touchStartPressTime\r\n if (timeInLimit && (Math.abs(x - clientX) > 30 || Math.abs(y - clientY) > 30)) {\r\n clearTimeout(this.emitTouchStartTimer)\r\n }\r\n }\r\n }\r\n private onTouchEnd() {\r\n this.onEnd()\r\n }\r\n\r\n private bindEventListener() {\r\n if (document.body) {\r\n const onTouchStart = this.onTouchStart.bind(this)\r\n const onTouchMove = this.onTouchMove.bind(this)\r\n const onTouchEnd = this.onTouchEnd.bind(this)\r\n const onMouseDown = this.onMouseDown.bind(this)\r\n const onMouseMove = this.onMouseMove.bind(this)\r\n const onMouseUp = this.onMouseUp.bind(this)\r\n\r\n document.body.addEventListener('touchstart', onTouchStart, { passive: false })\r\n document.body.addEventListener('touchmove', onTouchMove, { passive: false })\r\n document.body.addEventListener('touchend', onTouchEnd, { passive: false })\r\n\r\n document.body.addEventListener('mousedown', onMouseDown)\r\n document.body.addEventListener('mousemove', onMouseMove)\r\n document.body.addEventListener('mouseup', onMouseUp)\r\n\r\n this.destroy = () => {\r\n document.body.removeEventListener('touchstart', onTouchStart)\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('mousedown', onMouseDown)\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n }\r\n } else {\r\n document.addEventListener('DOMContentLoaded', this.bindEventListener)\r\n }\r\n }\r\n\r\n private removeEventListener() {\r\n this.destroy()\r\n }\r\n\r\n public destroyed() {\r\n this.isDragStart = false\r\n this.dragType = undefined\r\n this.dragData = undefined\r\n this.removeEventListener()\r\n }\r\n}\r\n\r\nexport const DnDManagerInstance = new DnDManager()\r\n","<template>\r\n <div ref=\"dragItemRef\" class=\"hv-draggable\" :class=\"disabled ? 'disabled' : ''\">\r\n <slot></slot>\r\n <div class=\"hv-draggable__clone-item\" :style=\"cloneNodeStyle\" v-if=\"isDragThis\">\r\n <slot name=\"hv-drag-item\"><slot></slot></slot>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { reactive, ref, computed, onMounted, onBeforeUnmount } from 'vue'\r\nimport type { DnDManagerEvents, DragAndDropDragType, DragAndDropPoint } from './manager'\r\n\r\nimport { DnDManagerInstance } from './manager'\r\n\r\ndefineOptions({\r\n name: 'HvDraggable'\r\n})\r\n\r\nconst ImmediateEnumType = {\r\n LEFT: 'left',\r\n RIGHT: 'right',\r\n TOP: 'top',\r\n BOTTOM: 'bottom',\r\n ALL: 'all'\r\n} as const\r\n\r\ntype ImmediateType = (typeof ImmediateEnumType)[keyof typeof ImmediateEnumType]\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type: DragAndDropDragType\r\n immediate?: ImmediateType | Array<ImmediateType> | undefined\r\n disabled?: boolean\r\n data?: any\r\n }>(),\r\n {\r\n disabled: false\r\n }\r\n)\r\n\r\nconst dragItemRef = ref<HTMLElement>()\r\n/** 是否在当前组件按下 */\r\nconst isDownThis = ref(false)\r\n/** 开始按下时的点 */\r\nconst downPosition = reactive({\r\n x: 0,\r\n y: 0\r\n})\r\n/** 是否开始拖动 */\r\nconst isDragThis = ref(false)\r\nconst cloneNodePosition = reactive({\r\n x: 0,\r\n y: 0\r\n})\r\n\r\nconst immediateDirections = computed<Array<ImmediateType>>(() => {\r\n if (Array.isArray(props.immediate)) {\r\n return props.immediate\r\n }\r\n return props.immediate ? [props.immediate] : []\r\n})\r\n\r\nconst cloneNodeStyle = computed(() => {\r\n return {\r\n transform: `translate(${cloneNodePosition.x}px, ${cloneNodePosition.y}px) translate(-50%, -50%)`\r\n }\r\n})\r\n\r\nconst onDown: DnDManagerEvents['down'] = (params) => {\r\n const { x, y } = params\r\n const startEl = document.elementFromPoint(x, y)\r\n if (!props.disabled && dragItemRef.value && dragItemRef.value.contains(startEl)) {\r\n if (immediateDirections.value.includes(ImmediateEnumType.ALL)) {\r\n handleStart(params)\r\n return\r\n }\r\n isDownThis.value = true\r\n downPosition.x = x\r\n downPosition.y = y\r\n }\r\n}\r\n\r\nconst onFirstMove: DnDManagerEvents['first-move'] = (params, event) => {\r\n const { x, y } = params\r\n const directions = immediateDirections.value.filter((item) => item !== ImmediateEnumType.ALL)\r\n\r\n if (isDownThis.value && !props.disabled && directions.length) {\r\n const distanceH = x - downPosition.x\r\n const distanceHAbs = Math.abs(distanceH)\r\n const distanceV = y - downPosition.y\r\n const distanceVAbs = Math.abs(distanceV)\r\n\r\n const max = Math.max(distanceHAbs, distanceVAbs)\r\n\r\n const isMaxH = distanceHAbs === max\r\n const isMaxV = distanceVAbs === max\r\n\r\n /** 是否立即响应拖动 */\r\n let isImmediate = false\r\n\r\n if (isMaxH) {\r\n isImmediate =\r\n (directions.includes(ImmediateEnumType.LEFT) && distanceH < 0) ||\r\n (directions.includes(ImmediateEnumType.RIGHT) && distanceH > 0)\r\n }\r\n\r\n if (isMaxV && !isImmediate) {\r\n isImmediate =\r\n (directions.includes(ImmediateEnumType.TOP) && distanceV < 0) ||\r\n (directions.includes(ImmediateEnumType.BOTTOM) && distanceV > 0)\r\n }\r\n\r\n if (isImmediate) {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n handleStart(downPosition)\r\n handleMove(params)\r\n return\r\n }\r\n }\r\n}\r\n\r\nconst onStart: DnDManagerEvents['start'] = (params) => {\r\n const { x, y } = params\r\n const startEl = document.elementFromPoint(x, y)\r\n if (!props.disabled && dragItemRef.value && dragItemRef.value.contains(startEl)) {\r\n handleStart(params)\r\n }\r\n}\r\n\r\nconst onMove: DnDManagerEvents['move'] = (params) => {\r\n const { point } = params\r\n if (isDragThis.value) {\r\n handleMove(point)\r\n }\r\n}\r\n\r\nconst onEnd: DnDManagerEvents['end'] = () => {\r\n isDownThis.value = false\r\n isDragThis.value = false\r\n Object.assign(downPosition, {\r\n x: 0,\r\n y: 0\r\n })\r\n Object.assign(cloneNodePosition, {\r\n x: 0,\r\n y: 0\r\n })\r\n}\r\n\r\nfunction handleStart(point: DragAndDropPoint) {\r\n isDragThis.value = true\r\n cloneNodePosition.x = point.x\r\n cloneNodePosition.y = point.y\r\n DnDManagerInstance.updateDargInfo(props.type, props.data)\r\n}\r\n\r\nfunction handleMove(point: DragAndDropPoint) {\r\n cloneNodePosition.x = point.x\r\n cloneNodePosition.y = point.y\r\n}\r\n\r\nonMounted(() => {\r\n DnDManagerInstance.on('down', onDown)\r\n DnDManagerInstance.on('first-move', onFirstMove)\r\n DnDManagerInstance.on('start', onStart)\r\n DnDManagerInstance.on('move', onMove)\r\n DnDManagerInstance.on('end', onEnd)\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n DnDManagerInstance.off('down', onDown)\r\n DnDManagerInstance.off('first-move', onFirstMove)\r\n DnDManagerInstance.off('start', onStart)\r\n DnDManagerInstance.off('move', onMove)\r\n DnDManagerInstance.off('end', onEnd)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.hv-draggable {\r\n width: fit-content;\r\n cursor: grab;\r\n\r\n &.disabled {\r\n cursor: not-allowed;\r\n }\r\n}\r\n\r\n.hv-draggable__clone-item {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 99999;\r\n width: fit-content;\r\n cursor: grabbing;\r\n opacity: 0.8;\r\n will-change: transform;\r\n}\r\n</style>\r\n","<template>\r\n <div ref=\"dropAreaRef\" class=\"hv-droppable\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { DnDManagerEvents, DragAndDropDragType, DragAndDropPoint } from './manager'\r\nimport { computed, ref, onMounted, onBeforeUnmount } from 'vue'\r\nimport { DnDManagerInstance } from './manager'\r\n\r\ndefineOptions({\r\n name: 'HvDroppable'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'enter', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'move', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'drop', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'leave', type: DragAndDropDragType, data: any): void\r\n}>()\r\n\r\nconst props = defineProps<{\r\n acceptDragType: DragAndDropDragType | Array<DragAndDropDragType>\r\n}>()\r\n\r\nconst dropAreaRef = ref<HTMLElement>()\r\nconst isEntered = ref(false)\r\n\r\nconst acceptDragTypeList = computed(() => {\r\n return Array.isArray(props.acceptDragType) ? props.acceptDragType : [props.acceptDragType]\r\n})\r\n\r\nfunction getPositionInArea(point: DragAndDropPoint) {\r\n if (!dropAreaRef.value) {\r\n return {\r\n isInArea: false,\r\n position: {\r\n x: 0,\r\n y: 0\r\n }\r\n }\r\n }\r\n const { x: pointX, y: pointY } = point\r\n const { x, y, width, height } = dropAreaRef.value.getBoundingClientRect()\r\n\r\n const posX = pointX - x\r\n const posY = pointY - y\r\n return {\r\n isInArea: posX >= 0 && posX <= width && posY >= 0 && posY <= height,\r\n position: {\r\n x: posX,\r\n y: posY\r\n }\r\n }\r\n}\r\n\r\nconst onMove: DnDManagerEvents['move'] = (params) => {\r\n const { type, data, point } = params\r\n if (dropAreaRef.value && acceptDragTypeList.value.includes(type)) {\r\n const { isInArea, position } = getPositionInArea(point)\r\n if (isInArea) {\r\n if (isEntered.value) {\r\n emits('move', type, position, data)\r\n } else {\r\n isEntered.value = true\r\n emits('enter', type, position, data)\r\n }\r\n } else if (isEntered.value) {\r\n isEntered.value = false\r\n emits('leave', type, data)\r\n }\r\n }\r\n}\r\n\r\nconst onEnd: DnDManagerEvents['move'] = ({ type, point, data }) => {\r\n if (dropAreaRef.value && acceptDragTypeList.value.includes(type) && isEntered.value) {\r\n const { position } = getPositionInArea(point)\r\n emits('drop', type, position, data)\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n DnDManagerInstance.on('move', onMove)\r\n DnDManagerInstance.on('end', onEnd)\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n DnDManagerInstance.off('move', onMove)\r\n DnDManagerInstance.off('end', onEnd)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-droppable {\r\n position: relative;\r\n width: fit-content;\r\n}\r\n</style>\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport Draggable from './Draggable.vue'\r\nimport Droppable from './Droppable.vue'\r\n\r\nexport const HvDraggable: SFCWithInstall<typeof Draggable> = withInstall(Draggable)\r\nexport const HvDroppable: SFCWithInstall<typeof Droppable> = withInstall(Droppable)\r\n\r\nexport type { DragAndDropPoint, DragAndDropDragType, DnDManager } from './manager'\r\n","import type { MaybeRef } from 'vue'\r\nimport { computed, isRef, watch, toValue, onBeforeUnmount } from 'vue'\r\n\r\nexport type DragAndScaleOptions = {\r\n container: HTMLElement | undefined | null\r\n containerRealSize?: {\r\n width: number\r\n height: number\r\n }\r\n scaleAreaWidth?: number\r\n keepRatio?: boolean | Partial<KeepRatioType>\r\n limit?: {\r\n inContainer?: boolean\r\n minWidth?: number\r\n minHeight?: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n }\r\n disabled?: boolean\r\n onChange?: (p: DragAndScaleChangeResultType) => void\r\n onFinish?: () => void\r\n}\r\n\r\ntype KeepRatioType = {\r\n enable: boolean\r\n scaleCase: 'min' | 'max'\r\n}\r\n\r\nenum KeepRatioCaseEnum {\r\n MIN = 'min',\r\n MAX = 'max'\r\n}\r\n\r\nexport type DragAndScalePoint = {\r\n x: number\r\n y: number\r\n}\r\n\r\ntype TargetAreaType = {\r\n elX: number\r\n elY: number\r\n elWidth: number\r\n elHeight: number\r\n}\r\n\r\nexport type DragAndScaleChangeResultType = TargetAreaType & {\r\n type: 'move' | 'scale'\r\n deltaX: number\r\n deltaY: number\r\n realX: number\r\n realY: number\r\n realWidth: number\r\n realHeight: number\r\n}\r\n\r\ntype EffectDirectionType = {\r\n leftSide: boolean\r\n rightSide: boolean\r\n topSide: boolean\r\n bottomSide: boolean\r\n center: boolean\r\n}\r\n\r\nexport function useDragAndScale(\r\n target: MaybeRef<HTMLElement>,\r\n operateTarget: MaybeRef<HTMLElement>,\r\n options: MaybeRef<DragAndScaleOptions>\r\n) {\r\n const _options = computed(() => {\r\n return isRef(options) ? toValue(options) : options\r\n })\r\n /** 父级容器实际对应的宽高(非页面元素宽高) */\r\n const _containerRealSize = computed(() => {\r\n return _options.value.containerRealSize\r\n })\r\n\r\n /** 保持宽高比 */\r\n const _keepRatio = computed<KeepRatioType>(() => {\r\n const krOption =\r\n typeof _options.value.keepRatio === 'boolean'\r\n ? { enable: _options.value.keepRatio, scaleCase: KeepRatioCaseEnum.MIN }\r\n : _options.value.keepRatio\r\n return Object.assign(\r\n {\r\n scaleCase: KeepRatioCaseEnum.MIN,\r\n enable: false\r\n },\r\n krOption || {}\r\n )\r\n })\r\n\r\n /** 限制缩放最小值 */\r\n const _limit = computed(() => {\r\n const limitOpt = Object.assign(\r\n {\r\n inContainer: true,\r\n minWidth: 0,\r\n minHeight: 0,\r\n maxWidth: Infinity,\r\n maxHeight: Infinity\r\n },\r\n _options.value.limit || {}\r\n )\r\n if (limitOpt.minWidth > limitOpt.maxWidth) {\r\n limitOpt.maxWidth = limitOpt.minWidth\r\n }\r\n if (limitOpt.minHeight > limitOpt.maxHeight) {\r\n limitOpt.maxHeight = limitOpt.minHeight\r\n }\r\n return limitOpt\r\n })\r\n\r\n /** 是否禁用 */\r\n const _disabled = computed(() => {\r\n return _options.value.disabled || false\r\n })\r\n\r\n /** 缩放元素 */\r\n const _targetEl = computed(() => {\r\n return isRef(target) ? toValue(target) : target\r\n })\r\n /** 容器元素 */\r\n const _containerEl = computed(() => {\r\n return _options.value.container\r\n })\r\n\r\n /** 缩放拖拽区域元素 */\r\n const _operateEl = computed(() => {\r\n return isRef(operateTarget) ? toValue(operateTarget) : operateTarget\r\n })\r\n\r\n /** 拖动缩放起始点 */\r\n let startPoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 上次鼠标或者触点操作位置 */\r\n let lastOperatePoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 当前鼠标或者触点操作位置 */\r\n let curOperatePoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 父级容器尺寸 */\r\n const containerElSize = {\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n /** 拖拽缩放开始时,元素的位置宽高 */\r\n const startArea: TargetAreaType = {\r\n elX: 0,\r\n elY: 0,\r\n elWidth: 0,\r\n elHeight: 0\r\n }\r\n\r\n /** 操作位置 */\r\n const effectDirection: EffectDirectionType = {\r\n leftSide: false,\r\n rightSide: false,\r\n topSide: false,\r\n bottomSide: false,\r\n center: false\r\n }\r\n\r\n let isOperateStart = false\r\n let isMoved = false\r\n\r\n let realRateEl_w = 1\r\n let realRateEl_h = 1\r\n\r\n watch(\r\n () => _targetEl.value && _containerEl.value && _operateEl.value,\r\n (value) => {\r\n if (value) {\r\n bindEvent()\r\n } else {\r\n removeEvent()\r\n }\r\n }\r\n )\r\n\r\n function onStart(point: DragAndScalePoint) {\r\n if (_disabled.value) {\r\n return\r\n }\r\n // 存储拖动缩放起始点\r\n startPoint = point\r\n curOperatePoint = point\r\n\r\n if (!_containerEl.value || !_targetEl.value) {\r\n return\r\n }\r\n\r\n const {\r\n x: containerX,\r\n y: containerY,\r\n width: containerWidth,\r\n height: containerHeight\r\n } = _containerEl.value.getBoundingClientRect()\r\n\r\n Object.assign(containerElSize, {\r\n width: containerWidth,\r\n height: containerHeight\r\n })\r\n // 是否需要转换 为真实大小\r\n if (_containerRealSize.value) {\r\n const { width: realWdith, height: realHeight } = _containerRealSize.value\r\n\r\n realRateEl_w = realWdith / containerWidth\r\n realRateEl_h = realHeight / containerHeight\r\n } else {\r\n realRateEl_w = 1\r\n realRateEl_h = 1\r\n }\r\n const { x: targetX, y: targetY, width: targetW, height: targetH } = _targetEl.value.getBoundingClientRect()\r\n\r\n const { x: startX, y: startY } = point\r\n\r\n Object.assign(startArea, {\r\n elX: targetX - containerX,\r\n elY: targetY - containerY,\r\n elWidth: targetW,\r\n elHeight: targetH\r\n })\r\n\r\n const touchEl = document.elementFromPoint(startX, startY) as HTMLElement\r\n if (!touchEl) {\r\n return\r\n }\r\n // 四个边和角、中心操作区域元素都添加了data-scale-side属性\r\n // 用于判断往那个方向拖动\r\n const sides = (touchEl.dataset['scaleSide'] || '').split(',').filter((item) => !!item)\r\n if (!sides.length) {\r\n return\r\n }\r\n\r\n // let leftSide = Math.abs(startX - targetX) < _halfScaleAreaWidth.value\r\n // let topSide = Math.abs(startY - targetY) < _halfScaleAreaWidth.value\r\n // let rightSide = Math.abs(startX - targetX - targetW) < _halfScaleAreaWidth.value\r\n // let bottomSide = Math.abs(startY - targetY - targetH) < _halfScaleAreaWidth.value\r\n // const center = !leftSide && !topSide && !rightSide && !bottomSide\r\n\r\n let leftSide = sides.includes('left')\r\n let topSide = sides.includes('top')\r\n let rightSide = sides.includes('right')\r\n let bottomSide = sides.includes('bottom')\r\n const center = sides.includes('center')\r\n\r\n isOperateStart = true\r\n\r\n // 保持宽高比,认为在4个角拖动\r\n if (_keepRatio.value.enable && !center) {\r\n if (startX - targetX <= targetW / 2 && startY - targetY <= targetH / 2) {\r\n leftSide = true\r\n topSide = true\r\n }\r\n if (startX - targetX > targetW / 2 && startY - targetY <= targetH / 2) {\r\n rightSide = true\r\n topSide = true\r\n }\r\n if (startX - targetX <= targetW / 2 && startY - targetY > targetH / 2) {\r\n leftSide = true\r\n bottomSide = true\r\n }\r\n if (startX - targetX > targetW / 2 && startY - targetY > targetH / 2) {\r\n rightSide = true\r\n bottomSide = true\r\n }\r\n }\r\n\r\n Object.assign(effectDirection, {\r\n leftSide,\r\n rightSide,\r\n topSide,\r\n bottomSide,\r\n center\r\n })\r\n }\r\n\r\n function onMove(point: DragAndScalePoint) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n\r\n isMoved = true\r\n lastOperatePoint = curOperatePoint\r\n curOperatePoint = point\r\n const deltaX = point.x - startPoint.x\r\n const deltaY = point.y - startPoint.y\r\n let dX = 0\r\n let dY = 0\r\n let dW = 0\r\n let dH = 0\r\n\r\n const { elX, elY, elWidth, elHeight } = startArea\r\n const { minWidth, minHeight, maxWidth, maxHeight } = _limit.value\r\n\r\n const minElWidth = minWidth / realRateEl_w\r\n const minElHeight = minHeight / realRateEl_h\r\n const maxElWidth = maxWidth / realRateEl_w\r\n const maxElHeight = maxHeight / realRateEl_h\r\n\r\n if (effectDirection.center) {\r\n // 位置改变\r\n const containerWidth = containerElSize.width\r\n const containerHeight = containerElSize.height\r\n // 避免超出边界\r\n if (_limit.value.inContainer) {\r\n const distanceX =\r\n elX + deltaX < 0 ? -elX : elX + elWidth + deltaX > containerWidth ? containerWidth - elWidth - elX : deltaX\r\n const distanceY =\r\n elY + deltaY < 0\r\n ? -elY\r\n : elY + elHeight + deltaY > containerHeight\r\n ? containerHeight - elHeight - elY\r\n : deltaY\r\n dX = distanceX\r\n dY = distanceY\r\n } else {\r\n dX = deltaX\r\n dY = deltaY\r\n }\r\n } else {\r\n // 缩放\r\n const { leftSide, rightSide, topSide, bottomSide } = effectDirection\r\n if (leftSide) {\r\n // 避免超出左边界\r\n let distance = _limit.value.inContainer && elX + deltaX < 0 ? -elX : deltaX\r\n\r\n // 宽高限制\r\n if (elWidth - distance < minElWidth) {\r\n distance = elWidth - minElWidth\r\n }\r\n if (elWidth - distance > maxElWidth) {\r\n distance = elWidth - maxElWidth\r\n }\r\n dX = distance\r\n dW = -distance\r\n }\r\n if (rightSide) {\r\n const containerWidth = containerElSize.width\r\n // 避免超出右边界\r\n let distance =\r\n _limit.value.inContainer && elX + elWidth + deltaX > containerWidth ? containerWidth - elWidth - elX : deltaX\r\n\r\n // 宽高限制\r\n if (elWidth + distance < minElWidth) {\r\n distance = minElWidth - elWidth\r\n }\r\n if (elWidth + distance > maxElWidth) {\r\n distance = maxElWidth - elWidth\r\n }\r\n dW = distance\r\n }\r\n if (topSide) {\r\n // 避免超出上边界\r\n let distance = _limit.value.inContainer && elY + deltaY < 0 ? -elY : deltaY\r\n\r\n // 宽高限制\r\n if (elHeight - distance < minElHeight) {\r\n distance = elHeight - minElHeight\r\n }\r\n if (elHeight - distance > maxElHeight) {\r\n distance = elHeight - maxElHeight\r\n }\r\n dY = distance\r\n dH = -distance\r\n }\r\n if (bottomSide) {\r\n const containerHeight = containerElSize.height\r\n // 避免超出下边界\r\n let distance =\r\n _limit.value.inContainer && elY + elHeight + deltaY > containerHeight\r\n ? containerHeight - elHeight - elY\r\n : deltaY\r\n\r\n // 宽高限制\r\n if (elHeight + distance < minElHeight) {\r\n distance = minElHeight - elHeight\r\n }\r\n if (elHeight + distance > maxElHeight) {\r\n distance = maxElHeight - elHeight\r\n }\r\n dH = distance\r\n }\r\n\r\n // 保持宽高比\r\n if (_keepRatio.value.enable) {\r\n const dwR = dW / elWidth\r\n const dhR = dH / elHeight\r\n\r\n if (\r\n (dwR < dhR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MIN) ||\r\n (dwR > dhR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MAX)\r\n ) {\r\n //当(使用x,y改变最小值)宽度改变较少\r\n //或(使用x,y改变最大值)高度改变较少\r\n dH = dwR * elHeight\r\n // 最小高度限制\r\n if (elHeight + dH < minElHeight) {\r\n const originDw = dW\r\n dH = minElHeight - elHeight\r\n dW = (dH / elHeight) * elWidth\r\n dX = dX * (dW / originDw)\r\n }\r\n if (elHeight + dH > maxElHeight) {\r\n const originDw = dW\r\n dH = maxElHeight - elHeight\r\n dW = (dH / elHeight) * elWidth\r\n dX = dX * (dW / originDw)\r\n }\r\n\r\n // 拖动了上边,使用dH计算dY\r\n if (effectDirection.topSide) {\r\n dY = -dH\r\n }\r\n } else if (\r\n (dhR < dwR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MIN) ||\r\n (dhR > dwR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MAX)\r\n ) {\r\n //当(使用x,y改变最小值)高度改变较少\r\n //或(使用x,y改变最大值)宽度改变较少\r\n dW = dhR * elWidth\r\n // 最小宽度限制\r\n if (elWidth + dW < minElWidth) {\r\n const originDh = dH\r\n dW = minElWidth - elWidth\r\n dH = (dW / elWidth) * elHeight\r\n dY = dY * (dH / originDh)\r\n }\r\n if (elWidth + dW > maxElWidth) {\r\n const originDh = dH\r\n dW = maxElWidth - elWidth\r\n dH = (dW / elWidth) * elHeight\r\n dY = dY * (dH / originDh)\r\n }\r\n\r\n // 拖动了左边,使用dW计算dX\r\n if (effectDirection.leftSide) {\r\n dX = -dW\r\n }\r\n }\r\n\r\n // 父级容器边界限制\r\n const currentElX = elX + dX\r\n const currentElY = elY + dY\r\n const currentElW = elWidth + dW\r\n const currentElH = elHeight + dH\r\n if (\r\n _limit.value.inContainer &&\r\n (currentElX < 0 ||\r\n currentElY < 0 ||\r\n currentElX + currentElW > containerElSize.width ||\r\n currentElY + currentElH > containerElSize.height)\r\n ) {\r\n // 拖动元素超出了父级容器\r\n // 拖动元素 在父级容器内的 区域 的左上角点\r\n let clipX = currentElX < 0 ? 0 : currentElX\r\n let clipY = currentElY < 0 ? 0 : currentElY\r\n // 拖动元素 在父级容器内的 区域 的宽高\r\n let clipW =\r\n currentElX + currentElW > containerElSize.width\r\n ? containerElSize.width - clipX\r\n : currentElX + currentElW - clipX\r\n let clipH =\r\n currentElY + currentElH > containerElSize.height\r\n ? containerElSize.height - clipY\r\n : currentElY + currentElH - clipY\r\n\r\n // 拖动元素 在父级容器内的 区域 的右下角点\r\n const clipX2 = clipX + clipW\r\n const clipY2 = clipY + clipH\r\n\r\n // 保持比例后,缩放区域的宽高\r\n const clipRate = clipW / clipH\r\n const elRate = elWidth / elHeight\r\n if (clipRate < elRate) {\r\n clipH = clipW / elRate\r\n } else if (clipRate > elRate) {\r\n clipW = clipH * elRate\r\n }\r\n\r\n const { topSide, leftSide } = effectDirection\r\n\r\n // 计算保持宽高后的左上角点\r\n if (leftSide) {\r\n clipX = clipX2 - clipW\r\n }\r\n if (topSide) {\r\n clipY = clipY2 - clipH\r\n }\r\n\r\n dX = clipX - elX\r\n dY = clipY - elY\r\n dW = clipW - elWidth\r\n dH = clipH - elHeight\r\n }\r\n }\r\n }\r\n\r\n const currentElX = elX + dX\r\n const currentElY = elY + dY\r\n const currentElW = elWidth + dW\r\n const currentElH = elHeight + dH\r\n\r\n _options.value.onChange &&\r\n _options.value.onChange({\r\n type: effectDirection.center ? 'move' : 'scale',\r\n deltaX: curOperatePoint.x - lastOperatePoint.x,\r\n deltaY: curOperatePoint.y - lastOperatePoint.y,\r\n elX: currentElX,\r\n elY: currentElY,\r\n elWidth: currentElW,\r\n elHeight: currentElH,\r\n realX: currentElX * realRateEl_w,\r\n realY: currentElY * realRateEl_h,\r\n realWidth: currentElW * realRateEl_w,\r\n realHeight: currentElH * realRateEl_h\r\n })\r\n }\r\n\r\n function onEnd() {\r\n lastOperatePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n curOperatePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n if (_disabled.value || isOperateStart !== true || !isMoved) {\r\n isOperateStart = false\r\n isMoved = false\r\n return\r\n }\r\n isOperateStart = false\r\n isMoved = false\r\n _options.value.onFinish && _options.value.onFinish()\r\n }\r\n\r\n function onTouchStart(e: TouchEvent) {\r\n e.preventDefault()\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n\r\n onStart({\r\n x: clientX,\r\n y: clientY\r\n })\r\n document.body.addEventListener('touchcancel', onTouchEnd, { capture: true })\r\n document.body.addEventListener('touchmove', onTouchMove, { capture: true })\r\n document.body.addEventListener('touchend', onTouchEnd, { capture: true })\r\n }\r\n\r\n function onTouchMove(e: TouchEvent) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n e.preventDefault()\r\n e.stopPropagation()\r\n if (e.touches.length > 1) {\r\n onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n\r\n // 和起始点相同,不调用onMove\r\n if (clientX === startPoint.x && clientY === startPoint.y) {\r\n return\r\n }\r\n\r\n onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function onTouchEnd() {\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('touchcancel', onTouchEnd)\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n isMoved = false\r\n return\r\n }\r\n onEnd()\r\n }\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n e.preventDefault()\r\n // 非左键按下\r\n if ((e.buttons & 1) === 0) {\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n onStart({\r\n x: clientX,\r\n y: clientY\r\n })\r\n document.body.addEventListener('mousemove', onMouseMove, { capture: true })\r\n document.body.addEventListener('mouseup', onMouseUp, { capture: true })\r\n }\r\n\r\n function onMouseMove(e: MouseEvent) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n e.preventDefault()\r\n // 非左键按下\r\n if ((e.buttons & 1) === 0) {\r\n onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function onMouseUp() {\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n onEnd()\r\n }\r\n\r\n function bindEvent() {\r\n removeEvent()\r\n _operateEl.value.addEventListener('touchstart', onTouchStart, { capture: true })\r\n _operateEl.value.addEventListener('mousedown', onMouseDown)\r\n }\r\n\r\n function removeEvent() {\r\n _operateEl.value.removeEventListener('touchstart', onTouchStart)\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('touchcancel', onTouchEnd)\r\n\r\n _operateEl.value.removeEventListener('mousedown', onMouseDown)\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n isOperateStart = false\r\n removeEvent()\r\n })\r\n}\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport DragAndScale from './DragAndScale.vue'\r\n\r\nexport const HvDragAndScale: SFCWithInstall<typeof DragAndScale> = withInstall(DragAndScale)\r\n\r\nexport default HvDragAndScale\r\n\r\nexport type {\r\n DragAndScaleOptions,\r\n DragAndScalePoint,\r\n DragAndScaleChangeResultType,\r\n useDragAndScale\r\n} from './hooks/useDragAndScale'\r\n","<template>\r\n <div class=\"hv-drag-and-scale\" ref=\"targetRef\">\r\n <slot></slot>\r\n <div class=\"hv-drag-and-scale__zoom-mark\">\r\n <div class=\"hv-drag-and-scale__area-box\" :class=\"props.disabled ? 'disabled' : ''\" ref=\"operateRef\">\r\n <div class=\"hv-drag-and-scale__area-top hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left,top\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"top\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right,top\"></div>\r\n </div>\r\n <div class=\"hv-drag-and-scale__area-middle hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"center\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right\"></div>\r\n </div>\r\n <div class=\"hv-drag-and-scale__area-bottom hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left,bottom\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"bottom\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right,bottom\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nexport type { DragAndScaleChangeResultType } from './hooks/useDragAndScale'\r\nimport type { DragAndScaleChangeResultType, DragAndScaleOptions } from './hooks/useDragAndScale'\r\n</script>\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport { useDragAndScale } from './hooks/useDragAndScale'\r\n\r\ndefineOptions({\r\n name: 'HvDragAndScale'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'change', params: DragAndScaleChangeResultType): void\r\n (name: 'finish'): void\r\n}>()\r\n\r\nconst props = defineProps<{\r\n container: DragAndScaleOptions['container']\r\n containerRealSize?: DragAndScaleOptions['containerRealSize']\r\n keepRatio?: DragAndScaleOptions['keepRatio']\r\n limit?: DragAndScaleOptions['limit']\r\n disabled?: DragAndScaleOptions['disabled']\r\n}>()\r\n\r\nconst targetRef = ref()\r\nconst operateRef = ref()\r\n\r\nfunction onChange(params: DragAndScaleChangeResultType) {\r\n emits('change', params)\r\n}\r\n\r\nfunction onFinish() {\r\n emits('finish')\r\n}\r\n\r\nconst useDragAndScaleOptions = computed<DragAndScaleOptions>(() => {\r\n return {\r\n container: props.container,\r\n containerRealSize: props.containerRealSize,\r\n keepRatio: props.keepRatio,\r\n limit: props.limit,\r\n disabled: props.disabled,\r\n onChange,\r\n onFinish\r\n }\r\n})\r\n\r\nuseDragAndScale(targetRef, operateRef, useDragAndScaleOptions)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-drag-and-scale {\r\n --drag-box-border-width: 1px;\r\n\r\n // 周围响应拖放操作区域宽度\r\n --scale-area-width: 30px;\r\n\r\n // 缩放标志与内容的距离\r\n --scale-mark-gap: 2px;\r\n\r\n // 缩放标志 边框的宽度\r\n --scale-mark-width: 3px;\r\n\r\n // 缩放边框图标区域inset\r\n --scale-mark-inset: calc(0px - (var(--scale-mark-width) + var(--scale-mark-gap) + var(--drag-box-border-width)));\r\n\r\n // 缩放边框图标 边框长度\r\n --scale-mark-line-width: calc(var(--scale-area-width) / 2);\r\n\r\n // 缩放操作区域inset\r\n --scale-area-inset: calc(0px - var(--scale-area-width) / 2 + var(--scale-mark-width) + var(--scale-mark-gap));\r\n\r\n position: relative;\r\n box-sizing: border-box;\r\n border: var(--drag-box-border-width) dashed #fff;\r\n\r\n .hv-drag-and-scale__zoom-mark {\r\n position: absolute;\r\n inset: var(--scale-mark-inset);\r\n background:\r\n linear-gradient(to right, #fff, #fff) left top no-repeat,\r\n linear-gradient(to right, #fff, #fff) right top no-repeat,\r\n linear-gradient(to right, #fff, #fff) center top no-repeat,\r\n linear-gradient(to right, #fff, #fff) left bottom no-repeat,\r\n linear-gradient(to right, #fff, #fff) right bottom no-repeat,\r\n linear-gradient(to right, #fff, #fff) center bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left top no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left center no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right top no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right center no-repeat;\r\n background-size:\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-line-width) var(--scale-mark-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width),\r\n var(--scale-mark-width) var(--scale-mark-line-width);\r\n\r\n .hv-drag-and-scale__area-box {\r\n position: absolute;\r\n inset: var(--scale-area-inset);\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .hv-drag-and-scale__area-block {\r\n box-sizing: border-box;\r\n display: flex;\r\n width: 100%;\r\n\r\n .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-right {\r\n box-sizing: border-box;\r\n width: var(--scale-area-width);\r\n max-width: 33.3333%;\r\n height: 100%;\r\n }\r\n\r\n .hv-drag-and-scale__area-center {\r\n box-sizing: border-box;\r\n flex: 1;\r\n height: 100%;\r\n }\r\n }\r\n\r\n &.disabled {\r\n .hv-drag-and-scale__area-block {\r\n * {\r\n cursor: not-allowed !important;\r\n }\r\n }\r\n }\r\n\r\n .hv-drag-and-scale__area-middle {\r\n flex: 1;\r\n\r\n .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-right {\r\n height: 100%;\r\n cursor: ew-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-center {\r\n flex: 1;\r\n height: 100%;\r\n cursor: move;\r\n }\r\n }\r\n\r\n .hv-drag-and-scale__area-top .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-bottom .hv-drag-and-scale__area-right {\r\n cursor: nw-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-top .hv-drag-and-scale__area-right,\r\n .hv-drag-and-scale__area-bottom .hv-drag-and-scale__area-left {\r\n cursor: ne-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-top,\r\n .hv-drag-and-scale__area-bottom {\r\n box-sizing: border-box;\r\n height: var(--scale-area-width);\r\n max-height: 33.3333%;\r\n\r\n .hv-drag-and-scale__area-center {\r\n cursor: ns-resize;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"],"names":["withInstall","main","extra","app","comp","colorName","isArrayish","obj","require$$0","concat","slice","swizzle","simpleSwizzleModule","args","results","i","len","arg","fn","colorNames","require$$1","hasOwnProperty","reverseNames","name","cs","colorStringModule","string","prefix","val","model","abbr","hex","rgba","per","keyword","rgb","match","hexAlpha","i2","clamp","hsl","alpha","h","l","a","hwb","w","b","hexDouble","r","g","hsla","hwba","num","min","max","str","cssKeywords","reverseKeywords","key","convert","conversions","channels","labels","delta","s","rdif","gdif","bdif","v","diff","diffc","c","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","value","distance","z","xyz","t2","t3","t1","smin","lmin","sv","hsv","hi","f","p","q","t","vmin","sl","wh","bl","ratio","n","cmyk","lab","y2","x2","z2","lch","hr","convert$2","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","grayscale","hue","hcg","pure","mg","apple","gray","buildGraph","graph","models","deriveBFS","fromModel","queue","current","adjacents","adjacent","node","link","from","to","wrapConversion","toModel","path","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","result","routes","colorConvert","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","length","hexToColor","colorToHex","getLightColorAndDepth","getOriginColorByLightAndDepth","getOriginHexByLightAndDepth","originColor","useColorArea","colorAreaCanvas","ref","canvasWidth","canvasHeight","drawColorArea","canvas","ctx","colorGradient","whiteGradient","getCoordinateByHex","getCoordinateByColor","colorItems","maxColor","secondColor","curColorType","coordinateX","coordinateY","getSecondColorDistance","target","getColorByCoordinate","width","height","scaleX","scaleY","getBaseColorFromCoodinage","COLOR_GAP","redRange","numberInGap","greenRange","blueRange","rGap","gGap","bGap","scale","begin","end","onMounted","throttle","time","timer","useOperateEvent","colorAreaRef","circlePickerCoordinate","reactive","handleTouchStart","e","clientX","clientY","handleCirclePickerCoordinateChange","handleTouchMove","handleTouchEnd","handleMounseDown","handleMouseMove","handleMouseUp","handleCirclePickerCoordinateChangeFn","point","colorAreaRect","_a","left","top","setCirclePickerCoordinate","AreaWidth","AreaHeight","_b","onBeforeUnmount","DEFAULT_COLOR","props","__props","emits","__emit","hexColor","formInputRGB","formInputHSV","hexFormater","watch","colorIns","handleHexColorChange","handleRgbColorChange","handleHsvColorChange","defaultPresetColors","preColors","computed","handleClickColor","HvColorPicker","_useModel","lightColor","colorDepth","originHexColor","handleColorChange","coordianate","rect","cilcleStyle","sliderBackStyle","lightHex","oldValue","lightRgb","depth","coordin","EventBus","__publicField","handler","handlers","set","payload","callback","DnDManager","type","data","position","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","DnDManagerInstance","ImmediateEnumType","dragItemRef","isDownThis","downPosition","isDragThis","cloneNodePosition","immediateDirections","cloneNodeStyle","onDown","params","startEl","handleStart","onFirstMove","event","directions","item","distanceH","distanceHAbs","distanceV","distanceVAbs","isMaxH","isMaxV","isImmediate","handleMove","onStart","onMove","onEnd","dropAreaRef","isEntered","acceptDragTypeList","getPositionInArea","pointX","pointY","posX","posY","isInArea","HvDraggable","Draggable","HvDroppable","Droppable","useDragAndScale","operateTarget","options","_options","isRef","toValue","_containerRealSize","_keepRatio","krOption","_limit","limitOpt","_disabled","_targetEl","_containerEl","_operateEl","startPoint","lastOperatePoint","curOperatePoint","containerElSize","startArea","effectDirection","isOperateStart","isMoved","realRateEl_w","realRateEl_h","bindEvent","removeEvent","containerX","containerY","containerWidth","containerHeight","realWdith","realHeight","targetX","targetY","targetW","targetH","startX","startY","touchEl","sides","leftSide","topSide","rightSide","bottomSide","center","deltaX","deltaY","dX","dY","dW","dH","elX","elY","elWidth","elHeight","minWidth","minHeight","maxWidth","maxHeight","minElWidth","minElHeight","maxElWidth","maxElHeight","distanceX","distanceY","dwR","dhR","originDw","originDh","currentElX","currentElY","currentElW","currentElH","clipX","clipY","clipW","clipH","clipX2","clipY2","clipRate","elRate","HvDragAndScale","targetRef","operateRef","onChange","onFinish","useDragAndScaleOptions"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8]}
1
+ {"version":3,"file":"components.full.min.js","sources":["../../utils/src/vue/install.ts","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js","../../../node_modules/.pnpm/color@4.2.3/node_modules/color/index.js","../color-picker/src/color-picker-rainbow/utils/color.ts","../color-picker/src/color-picker-rainbow/hooks/useColorArea.ts","../color-picker/src/color-picker-rainbow/utils/tools.ts","../color-picker/src/color-picker-rainbow/hooks/useOperateEvent.ts","../color-picker/src/constants/index.ts","../color-picker/src/color-picker-rainbow/children/ColorForm/ColorForm.vue","../color-picker/src/color-picker-rainbow/children/PresetColors/PresetColors.vue","../color-picker/src/color-picker-rainbow/ColorPicker.vue","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObject.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/now.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTrim.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toNumber.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/throttle.js","../color-picker/src/color-picker-normal/children/ColorArea/hooks/useInteraction.ts","../color-picker/src/color-picker-normal/children/ColorArea/ColorArea.vue","../color-picker/src/color-picker-normal/children/ColorForm/ColorForm.vue","../color-picker/src/color-picker-normal/children/PresetColors/PresetColors.vue","../color-picker/src/color-picker-normal/ColorPicker.vue","../color-picker/src/index.ts","../../shared/src/utils/eventBus.ts","../drag-and-drop/src/manager/index.ts","../drag-and-drop/src/Draggable.vue","../drag-and-drop/src/Droppable.vue","../drag-and-drop/src/index.ts","../drag-and-scale/src/hooks/useDragAndScale.ts","../drag-and-scale/src/index.ts","../drag-and-scale/src/DragAndScale.vue","../ip-input/src/utils/index.ts","../ip-input/src/index.ts","../ip-input/src/IpInput.vue"],"sourcesContent":["import type { App, Directive } from 'vue'\r\nimport type { SFCWithInstall } from './typescript'\r\n\r\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\r\n ;(main as SFCWithInstall<T>).install = (app: App): void => {\r\n for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n app.component(comp.name, comp)\r\n }\r\n }\r\n\r\n if (extra) {\r\n for (const [key, comp] of Object.entries(extra)) {\r\n ;(main as any)[key] = comp\r\n }\r\n }\r\n return main as SFCWithInstall<T> & E\r\n}\r\n\r\nexport const withInstallDirective = <T extends Directive>(directive: T, name: string) => {\r\n ;(directive as SFCWithInstall<T>).install = (app: App): void => {\r\n app.directive(name, directive)\r\n }\r\n\r\n return directive as SFCWithInstall<T>\r\n}\r\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","const colorString = require('color-string');\nconst convert = require('color-convert');\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...args) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (args.length > 0) {\n\t\t\treturn new Color(args, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...args) {\n\t\tlet color = args[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(args, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nmodule.exports = Color;\n","import type ColorConstruct from 'color'\r\nimport Color from 'color'\r\n\r\nexport type RgbColorType = {\r\n r: number\r\n g: number\r\n b: number\r\n}\r\n\r\nexport type HsvColorType = {\r\n h: number\r\n s: number\r\n v: number\r\n}\r\n\r\nexport function hexToColor(hex: string): ColorConstruct {\r\n const colorIns = Color(hex)\r\n return colorIns\r\n}\r\n\r\n/**\r\n * 获取16进制颜色 | Gets the hexadecimal color\r\n * @param {ColorConstruct} color\r\n * @returns {string}\r\n */\r\nexport function colorToHex(color: ColorConstruct): string {\r\n return color.hex()\r\n}\r\n\r\n/**\r\n * 根据颜色值,计算得到hsv深度100的颜色和当前深度值 | Based on the color value, the color and the current depth value of hsv depth 100 are calculated\r\n * @param { ColorConstruct } color\r\n * @returns {\r\n * color: ColorConstruct\r\n * value: number [0-100]\r\n * }\r\n *\r\n */\r\nexport function getLightColorAndDepth(color: ColorConstruct): {\r\n color: ColorConstruct\r\n value: number\r\n} {\r\n const { h, s, v } = color.hsv().object()\r\n\r\n return {\r\n color: Color.hsv(h, s, 100),\r\n value: v\r\n }\r\n}\r\n\r\n/**\r\n * 根据高亮区域的颜色和缩放比例,计算得到原始rgb颜色值 | According to the color of the highlighted area and the zoom ratio, the original rgb color value is calculated\r\n * @param { ColorConstruct } color\r\n * @param { number } value 深度(value) [0-100]\r\n * @returns ColorConstruct\r\n *\r\n */\r\nexport function getOriginColorByLightAndDepth(color: ColorConstruct, value: number): ColorConstruct {\r\n const { h, s } = color.hsv().object()\r\n return Color.hsv(h, s, value)\r\n}\r\n\r\n/**\r\n * 根据canvas高亮区域的颜色和深度值,计算得到原始hex颜色值 | The raw hex color values are computed from the color and depth values of the highlighted areas of the canvas\r\n * @param { ColorConstruct } color\r\n * @param { number } value 深度(value) [0-100]\r\n * @returns string\r\n *\r\n */\r\nexport function getOriginHexByLightAndDepth(color: ColorConstruct, value: number): string {\r\n const originColor = getOriginColorByLightAndDepth(color, value)\r\n return colorToHex(originColor)\r\n}\r\n","import type ColorConstruct from 'color'\r\nimport { ref, onMounted } from 'vue'\r\nimport Color from 'color'\r\nimport { hexToColor } from '../utils/color'\r\n\r\nexport function useColorArea() {\r\n const colorAreaCanvas = ref<HTMLCanvasElement>()\r\n /** canvas绘制宽度 | canvas draw width */\r\n const canvasWidth = 255 * 6 + 1\r\n /** canvas绘制高度 | canvas draw height */\r\n const canvasHeight = 256\r\n\r\n /**\r\n * 绘制canvas颜色区域 | Draw the canvas color area\r\n * @returns\r\n */\r\n function drawColorArea(): void {\r\n if (!colorAreaCanvas.value) {\r\n return\r\n }\r\n const canvas = colorAreaCanvas.value\r\n\r\n canvas.width = canvasWidth\r\n canvas.height = canvasHeight\r\n\r\n const ctx = canvas.getContext('2d')\r\n\r\n if (!ctx) {\r\n return\r\n }\r\n\r\n ctx.clearRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n // const colorStopList = ['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n\r\n // for (let i = 0; i < colorStopList.length - 1; i++) {\r\n // \tconst colorGradient = ctx.createLinearGradient(i * 255, 0, (i + 1) * 255, 0)\r\n // \tcolorGradient.addColorStop(0, colorStopList[i])\r\n // \tcolorGradient.addColorStop(1, colorStopList[i + 1])\r\n // \tctx.fillStyle = colorGradient\r\n // \tctx.fillRect(i * 255, 0, 255, canvasHeight)\r\n // }\r\n\r\n const colorGradient = ctx.createLinearGradient(0, 0, canvasWidth, 0)\r\n\r\n colorGradient.addColorStop(0, '#FF0000')\r\n colorGradient.addColorStop(1 / 6, '#FFFF00')\r\n colorGradient.addColorStop(1 / 3, '#00FF00')\r\n colorGradient.addColorStop(1 / 2, '#00FFFF')\r\n colorGradient.addColorStop(2 / 3, '#0000FF')\r\n colorGradient.addColorStop(5 / 6, '#FF00FF')\r\n colorGradient.addColorStop(1, '#FF0000')\r\n\r\n ctx.fillStyle = colorGradient\r\n\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n const whiteGradient = ctx.createLinearGradient(0, canvasHeight, 0, 0)\r\n\r\n whiteGradient.addColorStop(0, 'rgb(255 255 255 / 100%)')\r\n whiteGradient.addColorStop(1, 'rgb(255 255 255 / 0%)')\r\n\r\n ctx.fillStyle = whiteGradient\r\n\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n }\r\n\r\n function getCoordinateByHex(hex: string) {\r\n const color = hexToColor(hex)\r\n return getCoordinateByColor(color)\r\n }\r\n\r\n /**\r\n * 获取颜色在canvas中的位置 | Gets the position of the color in the canvas\r\n * @param color ColorConstruct\r\n * @returns\r\n */\r\n function getCoordinateByColor(color: ColorConstruct) {\r\n const { r, g, b } = color.rgb().object()\r\n const colorItems = [\r\n {\r\n type: 'r',\r\n value: r\r\n },\r\n {\r\n type: 'g',\r\n value: g\r\n },\r\n {\r\n type: 'b',\r\n value: b\r\n }\r\n ]\r\n\r\n colorItems.sort((a, b) => b.value - a.value)\r\n\r\n const maxColor = colorItems[0]\r\n const secondColor = colorItems[1]\r\n const curColorType = maxColor.type + secondColor.type\r\n\r\n let coordinateX = 0\r\n const coordinateY = colorItems[2].value\r\n\r\n if (curColorType === 'rg' || curColorType === 'gr') {\r\n // 红绿 | Red-green\r\n coordinateX = 255\r\n if (secondColor.type === 'r') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n } else if (curColorType === 'gb' || curColorType === 'bg') {\r\n // 蓝绿 | blue-green\r\n coordinateX = 255 * 3\r\n if (secondColor.type === 'g') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n } else if (curColorType === 'rb' || curColorType === 'br') {\r\n // 红蓝 | red-blue\r\n coordinateX = 255 * 5\r\n if (secondColor.type === 'b') {\r\n coordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n } else {\r\n coordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n }\r\n }\r\n\r\n return {\r\n x: coordinateX,\r\n y: coordinateY\r\n }\r\n }\r\n\r\n /**\r\n * 目标颜色(Target Color):['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n *\r\n * 计算横向x,即颜色值(第二大的r/g/b值)在canvas中距离目标颜色的横向距离\r\n * (Calculate horizontal x, which is the horizontal distance of the color value (the second largest r/g/b value) from the target color in the canvas)\r\n *\r\n * 求x(Find x)?\r\n *\r\n * 已知(given):\r\n *\r\n * gap = 255 - x // gap为255 减去 在顶部距离目标颜色x处的颜色值(gap is 255 minus the color value at the top x away from the target color)\r\n *\r\n * scale = y / 255 // y为第三大的r/g/b值(y is the third largest r/g/b value)\r\n *\r\n * ∵\r\n *\r\n * gap * scale + x = target\r\n *\r\n * ∴\r\n *\r\n * x = (255 * target - 255 * y) / (255 - y)\r\n * @param y\r\n * @param target\r\n * @returns number\r\n */\r\n function getSecondColorDistance(y: number, target: number): number {\r\n return y === 255 ? 255 : (255 * target - 255 * y) / (255 - y)\r\n }\r\n\r\n /**\r\n * 根据canvas父级元素区域坐标获取在canvas中的颜色 | Gets the color in the canvas based on the region coordinates of the canvas parent element\r\n * @param x\r\n * @param y\r\n * @param width 坐标系宽度 | Width of the coordinate system\r\n * @param height 坐标系高度 | Height of the coordinate system\r\n * // 绘制的canvas颜色有偏差,且存在透明度(rgba),不为纯的rgb, 不使用imagedata,手动计算\r\n * // The color of the canvas is biased and there is transparency (rgba). It is not pure rgb. It does not use imagedata and is calculated manually\r\n */\r\n function getColorByCoordinate(x: number, y: number, width: number, height: number): ColorConstruct {\r\n if (!colorAreaCanvas.value) {\r\n return Color()\r\n }\r\n const scaleX = canvasWidth / width\r\n const scaleY = canvasHeight / height\r\n x = Math.round(Math.min(x * scaleX, canvasWidth - 1))\r\n y = Math.round(Math.min(y * scaleY, canvasHeight - 1))\r\n const color = getBaseColorFromCoodinage(x, y)\r\n return color\r\n }\r\n\r\n /**\r\n * 根据在canvas中的坐标,计算该位置的颜色值 | Based on the coordinates in the canvas, calculate the color value for that position\r\n * @param { number } x\r\n * @param { number } y\r\n * @returns number\r\n */\r\n function getBaseColorFromCoodinage(x: number, y: number) {\r\n /** 红 | red */\r\n let r = 0\r\n /** 绿 | green */\r\n let g = 0\r\n /** 蓝 | blue */\r\n let b = 0\r\n /** rgb颜色最大取值 | Maximum value of rgb color */\r\n const COLOR_GAP = 255\r\n\r\n /** 红色是否为255 | Whether red is 255 */\r\n const redRange = numberInGap(x, 0, COLOR_GAP) || numberInGap(x, COLOR_GAP * 5, COLOR_GAP * 6)\r\n\r\n /** 绿色是否为255 | Whether green is 255 */\r\n const greenRange = numberInGap(x, COLOR_GAP, COLOR_GAP * 3)\r\n\r\n /** 蓝色是否为255 | Whether blue is 255 */\r\n const blueRange = numberInGap(x, COLOR_GAP * 3, COLOR_GAP * 5)\r\n\r\n if (redRange) {\r\n r = 255\r\n } else if (x <= COLOR_GAP * 2) {\r\n r = Math.max(2 * COLOR_GAP - x, 0)\r\n } else if (x >= COLOR_GAP * 4) {\r\n r = Math.max(x - COLOR_GAP * 4, 0)\r\n }\r\n\r\n if (greenRange) {\r\n g = 255\r\n } else if (x < COLOR_GAP) {\r\n g = Math.max(x, 0)\r\n } else {\r\n g = Math.max(COLOR_GAP * 4 - x, 0)\r\n }\r\n\r\n if (blueRange) {\r\n b = 255\r\n } else if (x < COLOR_GAP * 3) {\r\n b = Math.max(x - COLOR_GAP * 2, 0)\r\n } else {\r\n b = Math.max(COLOR_GAP * 6 - x, 0)\r\n }\r\n\r\n const rGap = COLOR_GAP - r\r\n const gGap = COLOR_GAP - g\r\n const bGap = COLOR_GAP - b\r\n\r\n const scale = y / COLOR_GAP\r\n\r\n r += rGap * scale\r\n g += gGap * scale\r\n b += bGap * scale\r\n\r\n return Color.rgb(r, g, b)\r\n }\r\n\r\n /**\r\n * 数值是否在区间内 | Whether the value is in a range\r\n * @param { number } num\r\n * @param { number } begin\r\n * @param { number } end\r\n * @returns boolean\r\n */\r\n function numberInGap(num: number, begin: number, end: number) {\r\n return num >= begin && num <= end\r\n }\r\n\r\n onMounted(() => {\r\n drawColorArea()\r\n })\r\n\r\n return {\r\n canvasWidth,\r\n canvasHeight,\r\n colorAreaCanvas,\r\n drawColorArea,\r\n getCoordinateByColor,\r\n getCoordinateByHex,\r\n getColorByCoordinate\r\n }\r\n}\r\n","export function throttle<T extends (...args: any[]) => any>(fn: T, time: number = 200) {\r\n let timer: number | null = null\r\n return function (this: any, ...args: Parameters<T>) {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const ctx = this\r\n\r\n if (timer) {\r\n return\r\n } else {\r\n timer = window.setTimeout(() => {\r\n fn.apply(ctx, args)\r\n timer = null\r\n }, time)\r\n }\r\n }\r\n}\r\n","import { MaybeRef } from 'vue'\r\nimport { ref, computed, isRef, onMounted, onBeforeUnmount, reactive } from 'vue'\r\nimport { throttle } from '../utils/tools'\r\n\r\ntype Point = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport function useOperateEvent(options: { disabled: MaybeRef<boolean> }) {\r\n const colorAreaRef = ref<HTMLDivElement>()\r\n /** 当前颜色坐标 | Current color coordinates */\r\n const circlePickerCoordinate = reactive({\r\n x: 0,\r\n y: 0\r\n })\r\n\r\n const isDisabled = computed(() => {\r\n return isRef(options.disabled) ? options.disabled.value : options.disabled\r\n })\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n if (isDisabled.value) {\r\n return\r\n }\r\n if (e.touches.length === 0) {\r\n return\r\n }\r\n e.preventDefault()\r\n\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n\r\n document.body.addEventListener('touchmove', handleTouchMove)\r\n document.body.addEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function handleTouchEnd() {\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleMounseDown(e: HTMLElementEventMap['mousedown']) {\r\n if (isDisabled.value) {\r\n return\r\n }\r\n document.body.addEventListener('mousemove', handleMouseMove)\r\n document.body.addEventListener('mouseup', handleMouseUp)\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n function handleMouseMove(e: HTMLElementEventMap['mousemove']) {\r\n if (!(e.buttons && 1)) {\r\n handleMouseUp()\r\n return\r\n }\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n /** 处理鼠标拖动 | Handles mouse drag */\r\n const handleCirclePickerCoordinateChange = throttle(handleCirclePickerCoordinateChangeFn, 20)\r\n function handleCirclePickerCoordinateChangeFn(point: Point) {\r\n if (isDisabled.value) {\r\n return\r\n }\r\n const { x: clientX, y: clientY } = point\r\n const colorAreaRect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!colorAreaRect) {\r\n return\r\n }\r\n const { left, top, width, height } = colorAreaRect\r\n\r\n let x = 0\r\n let y = 0\r\n if (clientX <= left) {\r\n x = 0\r\n } else if (clientX >= left + width) {\r\n x = width\r\n } else {\r\n x = clientX - left\r\n }\r\n\r\n if (clientY <= top) {\r\n y = 0\r\n } else if (clientY >= top + height) {\r\n y = height\r\n } else {\r\n y = clientY - top\r\n }\r\n circlePickerCoordinate.x = x\r\n circlePickerCoordinate.y = y\r\n }\r\n\r\n function handleMouseUp() {\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n }\r\n\r\n /**\r\n * 更新当前颜色坐标位置 | Update the current color coordinate position\r\n * @param x 横坐标 | Horizontal coordinate\r\n * @param y 纵坐标 | Vertical coordinate\r\n * @param width 坐标系宽度 | Width of the coordinate system\r\n * @param height 坐标系高度 | Height of the coordinate system\r\n */\r\n function setCirclePickerCoordinate(x: number, y: number, width: number, height: number) {\r\n const colorAreaRect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!colorAreaRect) {\r\n return\r\n }\r\n const { width: AreaWidth, height: AreaHeight } = colorAreaRect\r\n const scaleX = AreaWidth / width\r\n const scaleY = AreaHeight / height\r\n circlePickerCoordinate.x = x * scaleX\r\n circlePickerCoordinate.y = y * scaleY\r\n }\r\n\r\n onMounted(() => {\r\n colorAreaRef.value?.addEventListener('touchstart', handleTouchStart)\r\n\r\n colorAreaRef.value?.addEventListener('mousedown', handleMounseDown)\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n colorAreaRef.value?.removeEventListener('touchstart', handleTouchStart)\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n\r\n colorAreaRef.value?.removeEventListener('mousedown', handleMounseDown)\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n })\r\n\r\n return {\r\n colorAreaRef,\r\n circlePickerCoordinate,\r\n setCirclePickerCoordinate\r\n }\r\n}\r\n","export const DEFAULT_COLOR = '#FFFFFF'\r\n","<template>\r\n <div class=\"hv-color-picker__color-form\">\r\n <div class=\"mb-12\">\r\n <el-input\r\n v-model=\"hexColor\"\r\n :disabled=\"props.disabled\"\r\n :formatter=\"hexFormater\"\r\n @change=\"handleHexColorChange\"\r\n ></el-input>\r\n </div>\r\n <div class=\"hv-color-picker__form-group mb-12\">\r\n <div class=\"hv-color-picker__form-label\">RGB</div>\r\n <el-input-number\r\n v-model=\"formInputRGB.r\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputRGB.g\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputRGB.b\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleRgbColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"255\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n </div>\r\n <div class=\"hv-color-picker__form-group mb-12\">\r\n <div class=\"hv-color-picker__form-label\">HSV</div>\r\n <el-input-number\r\n v-model=\"formInputHSV.h\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleHsvColorChange\"\r\n :min=\"0\"\r\n :max=\"360\"\r\n step-strictly\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputHSV.s\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleHsvColorChange\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n step-strictly\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputHSV.v\"\r\n :disabled=\"props.disabled\"\r\n @change=\"handleHsvColorChange\"\r\n step-strictly\r\n :min=\"0\"\r\n :max=\"100\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { RgbColorType, HsvColorType } from '../../utils/color'\r\nimport { ref, reactive, watch } from 'vue'\r\nimport Color from 'color'\r\nimport { DEFAULT_COLOR } from '../../../constants'\r\n\r\nconst props = defineProps<{\r\n modelValue: string\r\n disabled?: boolean\r\n}>()\r\nconst emits = defineEmits<{\r\n (name: 'change', value: string): void\r\n}>()\r\n\r\n/** 16进制颜色 | Hexadecimal color */\r\nconst hexColor = ref<string>(Color(props.modelValue || DEFAULT_COLOR).hex())\r\n\r\n/** rgb */\r\nconst formInputRGB = reactive<RgbColorType>(\r\n Color(hexColor.value || DEFAULT_COLOR)\r\n .rgb()\r\n .object() as RgbColorType\r\n)\r\n\r\n/** hsv */\r\nconst formInputHSV = reactive<HsvColorType>(\r\n Color(hexColor.value || DEFAULT_COLOR)\r\n .hsv()\r\n .object() as HsvColorType\r\n)\r\n\r\n/**\r\n * 格式化16进制颜色输入 | Format hexadecimal color input\r\n * @param {string} value\r\n */\r\nfunction hexFormater(value: string) {\r\n return `#${value\r\n .replace(/[^0-9A-F]/gi, '')\r\n .slice(0, 6)\r\n .toUpperCase()}`\r\n}\r\n\r\n// modelValue 属性更改,更新相关颜色字段 | modelValue property changed to update the relevant color field\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n const colorIns = Color(value)\r\n\r\n hexColor.value = colorIns.hex()\r\n\r\n const { r, g, b } = colorIns.rgb().object()\r\n const { h, s, v } = colorIns.hsv().object()\r\n\r\n Object.assign(formInputRGB, {\r\n r,\r\n g,\r\n b\r\n })\r\n Object.assign(formInputHSV, {\r\n h,\r\n s,\r\n v\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * 16进制颜色更改,触发change事件 | When the hexadecimal color changes, the change event is fired\r\n */\r\nfunction handleHexColorChange() {\r\n let value = hexColor.value || ''\r\n const len = value.replace(/[^0-9A-F]/gi, '').length\r\n if (len === 6) {\r\n emits('change', hexColor.value)\r\n } else {\r\n hexColor.value = props.modelValue\r\n }\r\n}\r\n\r\n/**\r\n * rgb颜色更改,触发change事件 | The rgb color changes, triggering the change event\r\n */\r\nfunction handleRgbColorChange() {\r\n const { r, g, b } = formInputRGB\r\n emits('change', Color.rgb(r, g, b).hex().toString())\r\n}\r\n\r\n/**\r\n * hsv颜色更改,触发change事件 | The hsv color changes, triggering the change event\r\n */\r\nfunction handleHsvColorChange() {\r\n const { h, s, v } = formInputHSV\r\n emits('change', Color.hsv(h, s, v).hex().toString())\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker__color-form {\r\n width: 100%;\r\n overflow: hidden;\r\n\r\n .mb-12 {\r\n margin-bottom: 12px;\r\n }\r\n\r\n .el-input {\r\n --el-input-border-color: #30343b;\r\n\r\n .el-input__wrapper {\r\n padding-right: 10px;\r\n padding-left: 10px;\r\n background-color: #101114;\r\n border-radius: 2px;\r\n\r\n .el-input__inner {\r\n text-align: left;\r\n }\r\n }\r\n }\r\n\r\n .hv-color-picker__form-group {\r\n display: flex;\r\n align-items: center;\r\n\r\n .hv-color-picker__form-label {\r\n width: 72px;\r\n }\r\n\r\n .el-input {\r\n flex: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker__preset\">\r\n <div class=\"hv-color-picker__preset-title\">{{ props.title || 'Preset colors' }}</div>\r\n <div class=\"hv-color-picker__preset-list\">\r\n <div\r\n class=\"hv-color-picker__preset-list-item\"\r\n @click=\"handleClickColor(color)\"\r\n v-for=\"color in preColors\"\r\n :key=\"color\"\r\n :style=\"{ backgroundColor: color }\"\r\n ></div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst defaultPresetColors = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#E3822D',\r\n '#DCE24F',\r\n '#1DCF69',\r\n '#6DE5B9',\r\n '#11A1F2',\r\n '#AA43FF',\r\n '#F0689C',\r\n '#F8D28B',\r\n '#606368',\r\n '#E83C34',\r\n '#EEBE29',\r\n '#89F0AC',\r\n '#2FBC9E',\r\n '#56CCF2',\r\n '#1C1DFA',\r\n '#DC88F5',\r\n '#D4C595',\r\n '#C52F65'\r\n]\r\n\r\nconst props = defineProps<{\r\n title?: string\r\n presetColors?: string[]\r\n}>()\r\n\r\nconst preColors = computed(() => {\r\n return !props.presetColors ? defaultPresetColors : props.presetColors\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'change', value: string): void\r\n}>()\r\n\r\nfunction handleClickColor(color: string) {\r\n emits('change', color)\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker__preset {\r\n .hv-color-picker__preset-title {\r\n margin-bottom: 4px;\r\n font-size: 12px;\r\n color: #fff;\r\n }\r\n\r\n .hv-color-picker__preset-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .hv-color-picker__preset-list-item {\r\n width: 16px;\r\n height: 16px;\r\n\r\n // 一行十个\r\n margin-right: calc((100% - 16px * 10) / 9);\r\n margin-bottom: 4px;\r\n border-radius: 50%;\r\n\r\n &:nth-child(10n) {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker\">\r\n <div class=\"hv-color-picker__title\">{{ props.title || 'Color picker' }}</div>\r\n <div class=\"hv-color-picker__area-outer\">\r\n <div class=\"hv-color-picker__area\" :class=\"isDisabled ? 'is-disabled' : ''\" ref=\"colorAreaRef\">\r\n <canvas ref=\"colorAreaCanvas\"></canvas>\r\n <div class=\"hv-color-picker__circle\" :style=\"cilcleStyle\"></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"hv-color-picker__slider\">\r\n <ElSlider\r\n v-model=\"colorDepth\"\r\n :disabled=\"props.disabled\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n :show-tooltip=\"false\"\r\n :style=\"sliderBackStyle\"\r\n ></ElSlider>\r\n <div class=\"hv-color-picker__origin-color\" :style=\"{ backgroundColor: originHexColor }\"></div>\r\n </div>\r\n <ColorForm :model-value=\"color\" :disabled=\"props.disabled\" @change=\"handleColorChange\"></ColorForm>\r\n <PresetColors\r\n @change=\"handleColorChange\"\r\n :title=\"props.presetTitle\"\r\n :presetColors=\"props.presetColors\"\r\n ></PresetColors>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type ColorConstruct from 'color'\r\nimport { ref, computed, watch, onMounted } from 'vue'\r\nimport Color from 'color'\r\nimport { useColorArea } from './hooks/useColorArea'\r\nimport { useOperateEvent } from './hooks/useOperateEvent'\r\nimport { getLightColorAndDepth, hexToColor, getOriginHexByLightAndDepth, colorToHex } from './utils/color'\r\nimport ColorForm from './children/ColorForm/ColorForm.vue'\r\nimport PresetColors from './children/PresetColors/PresetColors.vue'\r\nimport { DEFAULT_COLOR } from '../constants/index'\r\n\r\ndefineOptions({\r\n name: 'HvColorPicker'\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue: string\r\n disabled?: boolean\r\n title?: string\r\n presetTitle?: string\r\n presetColors?: string[]\r\n }>(),\r\n {\r\n modelValue: DEFAULT_COLOR\r\n }\r\n)\r\n\r\nconst emits = defineEmits<{\r\n (name: 'update:model-value', value: string): void\r\n}>()\r\n\r\nconst isDisabled = computed(() => props.disabled)\r\n\r\nconst { colorAreaCanvas, getColorByCoordinate, getCoordinateByColor, canvasWidth, canvasHeight } = useColorArea()\r\nconst { colorAreaRef, circlePickerCoordinate, setCirclePickerCoordinate } = useOperateEvent({ disabled: isDisabled })\r\n\r\n// const color = ref<string>('#ffccaa')\r\n// const color = defineModel({\r\n// type: String,\r\n// default: DEFAULT_COLOR\r\n// })\r\n\r\nconst color = computed({\r\n get() {\r\n return props.modelValue\r\n },\r\n set(value: string) {\r\n emits('update:model-value', value)\r\n }\r\n})\r\n\r\n/** 在canvas颜色区域中的颜色(明度为100) | The color in the canvas color area (Value = 100) */\r\nconst lightColor = ref<ColorConstruct>(Color(DEFAULT_COLOR))\r\n/** hsv 明度 | hsv Value */\r\nconst colorDepth = ref(100)\r\n\r\n/** 根据 lightColor 以及 colorDepth 计算出的实际显示16进制颜色值 | The actual displayed hexadecimal color value calculated from lightColor and colorDepth */\r\nconst originHexColor = computed(() => {\r\n if (lightColor.value) {\r\n const hex = getOriginHexByLightAndDepth(lightColor.value, colorDepth.value)\r\n return hex\r\n }\r\n return DEFAULT_COLOR\r\n})\r\n\r\n// 颜色值更改,更新当前颜色位置 | The color value changes, updating the current color position\r\nwatch(color, (val) => {\r\n const hex = getOriginHexByLightAndDepth(lightColor.value, colorDepth.value)\r\n if (hex === val) {\r\n return\r\n }\r\n handleColorChange(val)\r\n})\r\n\r\n// 当颜色位置更改时,计算新的颜色值 | When the color position changes, the new color value is calculated\r\nwatch(\r\n () => circlePickerCoordinate,\r\n (coordianate) => {\r\n const rect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!rect) {\r\n return\r\n }\r\n\r\n const color = getColorByCoordinate(coordianate.x, coordianate.y, rect.width, rect.height)\r\n lightColor.value = color\r\n },\r\n {\r\n deep: true\r\n }\r\n)\r\n\r\n// 当前颜色圆形图标位置样式 | Current color circular icon position and style\r\nconst cilcleStyle = computed(() => {\r\n if (!color.value) {\r\n return {\r\n top: '100%',\r\n left: '0',\r\n backgroundColor: '#ffffff'\r\n }\r\n }\r\n return {\r\n top: circlePickerCoordinate.y + 'px',\r\n left: circlePickerCoordinate.x + 'px',\r\n backgroundColor: lightColor.value.hex()\r\n }\r\n})\r\n\r\n// 颜色明暗度slider背景颜色 | Color Lightness slider background color\r\nconst sliderBackStyle = computed(() => {\r\n const lightHex = colorToHex(lightColor.value)\r\n return {\r\n '--el-slider-runway-bg-color': `linear-gradient(to right, #000000, ${lightHex})`,\r\n '--el-slider-main-bg-color': lightHex\r\n }\r\n})\r\n\r\n// 颜色值更改,触发更新 | The color value changes, triggering the update\r\nwatch(\r\n () => originHexColor.value,\r\n (value, oldValue) => {\r\n if (value !== oldValue) {\r\n emits('update:model-value', value)\r\n return\r\n }\r\n }\r\n)\r\n\r\n// 手动输入颜色或选择预制颜色时,计算新的颜色区域坐标 | When a color is entered manually or a premade color is selected, the new color area coordinates are calculated\r\nfunction handleColorChange(hex: string) {\r\n if (props.disabled) {\r\n return\r\n }\r\n const color = hexToColor(hex)\r\n const { color: lightRgb, value: depth } = getLightColorAndDepth(color)\r\n lightColor.value = lightRgb\r\n colorDepth.value = depth\r\n const coordin = getCoordinateByColor(lightRgb)\r\n setCirclePickerCoordinate(coordin.x, coordin.y, canvasWidth, canvasHeight)\r\n}\r\n\r\nonMounted(() => {\r\n handleColorChange(color.value)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-color-picker {\r\n box-sizing: border-box;\r\n width: 264px;\r\n padding: 12px;\r\n font-size: 12px;\r\n color: #fff;\r\n background-color: #212326;\r\n border: 1px solid #353d46;\r\n border-radius: 4px;\r\n box-shadow: 0 12px 24px 0 #00000080;\r\n\r\n .hv-color-picker__title {\r\n margin-bottom: 12px;\r\n font-weight: bold;\r\n }\r\n\r\n .hv-color-picker__area-outer {\r\n width: auto;\r\n border: 5px solid #000;\r\n border-radius: 3px;\r\n\r\n .hv-color-picker__area {\r\n position: relative;\r\n width: auto;\r\n height: 168px;\r\n overflow: hidden;\r\n background-color: #000;\r\n\r\n &.is-disabled {\r\n cursor: not-allowed;\r\n }\r\n\r\n canvas {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .hv-color-picker__circle {\r\n position: absolute;\r\n box-sizing: border-box;\r\n width: 18px;\r\n height: 18px;\r\n border: 3px solid #dcdcdc;\r\n border-radius: 50%;\r\n box-shadow:\r\n 0 2px 4px -1px #0000001f,\r\n 0 4px 5px 0 #00000014,\r\n 0 1px 10px 0 #0000000d;\r\n transform: translate(-50%, -50%);\r\n }\r\n }\r\n }\r\n\r\n .hv-color-picker__slider {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .hv-color-picker__origin-color {\r\n width: 18px;\r\n height: 18px;\r\n margin-left: 12px;\r\n border-radius: 2px;\r\n }\r\n }\r\n\r\n .el-slider {\r\n box-sizing: border-box;\r\n\r\n .el-slider__runway {\r\n width: 210px;\r\n height: 8px;\r\n background: var(--el-slider-runway-bg-color);\r\n\r\n .el-slider__bar {\r\n background-color: transparent;\r\n }\r\n\r\n .el-slider__button-wrapper {\r\n .el-slider__button {\r\n box-sizing: border-box;\r\n width: 18px;\r\n height: 18px;\r\n background-color: var(--el-slider-main-bg-color);\r\n border-color: #fff;\r\n border-width: 3px;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","import type { Ref } from 'vue'\r\nimport { ref, reactive, onMounted, onBeforeUnmount } from 'vue'\r\nimport throttle from 'lodash/throttle'\r\n\r\ntype Point = {\r\n x: number\r\n y: number\r\n}\r\n\r\nlet lastPoint: Partial<Point> = {\r\n x: undefined,\r\n y: undefined\r\n}\r\n\r\nexport function useInteraction(disabled: Ref<boolean>) {\r\n const colorAreaRef = ref<HTMLDivElement>()\r\n /** 当前颜色坐标 | Current color coordinates */\r\n const circlePickerCoordinate = reactive({\r\n x: 100,\r\n y: 100\r\n })\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n if (disabled.value) {\r\n return\r\n }\r\n if (e.touches.length === 0) {\r\n return\r\n }\r\n e.preventDefault()\r\n\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n\r\n document.body.addEventListener('touchmove', handleTouchMove)\r\n document.body.addEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (disabled.value) {\r\n return\r\n }\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n handleCirclePickerCoordinateChange({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function handleTouchEnd() {\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n }\r\n\r\n function handleMounseDown(e: HTMLElementEventMap['mousedown']) {\r\n if (disabled.value) {\r\n return\r\n }\r\n document.body.addEventListener('mousemove', handleMouseMove)\r\n document.body.addEventListener('mouseup', handleMouseUp)\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n function handleMouseMove(e: HTMLElementEventMap['mousemove']) {\r\n if (disabled.value) {\r\n return\r\n }\r\n if (!(e.buttons && 1)) {\r\n handleMouseUp()\r\n return\r\n }\r\n handleCirclePickerCoordinateChange({\r\n x: e.clientX,\r\n y: e.clientY\r\n })\r\n }\r\n\r\n /** 处理鼠标拖动 | Handles mouse drag */\r\n const handleCirclePickerCoordinateChange = throttle(handleCirclePickerCoordinateChangeFn, 20)\r\n // const handleCirclePickerCoordinateChange = handleCirclePickerCoordinateChangeFn\r\n function handleCirclePickerCoordinateChangeFn(point: Point) {\r\n const { x: clientX, y: clientY } = point\r\n if (lastPoint.x == point.x && lastPoint.y == point.y) {\r\n return\r\n }\r\n lastPoint = point\r\n const colorAreaRect = colorAreaRef.value?.getBoundingClientRect()\r\n if (!colorAreaRect) {\r\n return\r\n }\r\n const { left, top, width, height } = colorAreaRect\r\n\r\n let x = 0\r\n let y = 0\r\n if (clientX <= left) {\r\n x = 0\r\n } else if (clientX >= left + width) {\r\n x = width\r\n } else {\r\n x = clientX - left\r\n }\r\n\r\n if (clientY <= top) {\r\n y = 0\r\n } else if (clientY >= top + height) {\r\n y = height\r\n } else {\r\n y = clientY - top\r\n }\r\n circlePickerCoordinate.x = (x / width) * 100\r\n circlePickerCoordinate.y = ((height - y) / height) * 100\r\n }\r\n\r\n function handleMouseUp() {\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n }\r\n\r\n /**\r\n * 更新圆形颜色位置 | Update the current color position\r\n * @param x 横坐标 | Horizontal coordinate\r\n * @param y 纵坐标 | Vertical coordinate\r\n * @param width 坐标系宽度 | Width of the coordinate system\r\n * @param height 坐标系高度 | Height of the coordinate system\r\n */\r\n function setCirclePickerCoordinate(x: number, y: number) {\r\n circlePickerCoordinate.x = x\r\n circlePickerCoordinate.y = y\r\n }\r\n\r\n onMounted(() => {\r\n colorAreaRef.value?.addEventListener('touchstart', handleTouchStart)\r\n\r\n colorAreaRef.value?.addEventListener('mousedown', handleMounseDown)\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n colorAreaRef.value?.removeEventListener('touchstart', handleTouchStart)\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n\r\n colorAreaRef.value?.removeEventListener('mousedown', handleMounseDown)\r\n document.body.removeEventListener('mousemove', handleMouseMove)\r\n document.body.removeEventListener('mouseup', handleMouseUp)\r\n })\r\n\r\n return {\r\n colorAreaRef,\r\n circlePickerCoordinate,\r\n setCirclePickerCoordinate\r\n }\r\n}\r\n","<template>\r\n <div ref=\"colorAreaRef\" class=\"hv-color-picker__color-area-outer\">\r\n <div class=\"hv-color-picker__color-area\" :style=\"{ backgroundColor: props.hueColor }\">\r\n <div\r\n class=\"hv-color-picker__circle\"\r\n :style=\"{\r\n backgroundColor: state.hexColor,\r\n left: `${circlePickerCoordinate.x}%`,\r\n bottom: `${circlePickerCoordinate.y}%`\r\n }\"\r\n ></div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { reactive, computed, watch } from 'vue'\r\nimport Color from 'color'\r\nimport { useInteraction } from './hooks/useInteraction'\r\n\r\ninterface StateType {\r\n hexColor: string\r\n bgHexColor: string\r\n}\r\n\r\nconst emits = defineEmits<{\r\n (name: 'update:saturation', value: number): void\r\n (name: 'update:value', value: number): void\r\n}>()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n saturation: number\r\n value: number\r\n color: string\r\n hueColor: string\r\n disabled?: boolean\r\n }>(),\r\n {\r\n saturation: 100,\r\n value: 100\r\n }\r\n)\r\n\r\n// const saturationv = defineModel<number>('saturation', {\r\n// default: 100\r\n// })\r\n\r\n// const value = defineModel<number>('value', {\r\n// default: 100\r\n// })\r\n\r\nconst saturationv = computed<number>({\r\n get() {\r\n return props.saturation\r\n },\r\n set(value: number) {\r\n emits('update:saturation', value)\r\n }\r\n})\r\n\r\nconst value = computed<number>({\r\n get() {\r\n return props.value\r\n },\r\n set(value: number) {\r\n emits('update:value', value)\r\n }\r\n})\r\n\r\nconst isDisabled = computed(() => {\r\n return props.disabled\r\n})\r\n\r\nconst { colorAreaRef, circlePickerCoordinate, setCirclePickerCoordinate } = useInteraction(isDisabled)\r\n\r\nconst state = reactive<StateType>({\r\n hexColor: '',\r\n bgHexColor: ''\r\n})\r\n\r\nwatch(\r\n () => props.color,\r\n (c) => {\r\n const color = Color(c)\r\n state.hexColor = color.hex()\r\n let { h, s, v } = color.hsv().object()\r\n state.bgHexColor = Color({ h, s: 100, v: 100 }).hex()\r\n const curColor = Color.hsv({ h, s: circlePickerCoordinate.x, v: circlePickerCoordinate.y }).hex()\r\n if (curColor == color.hex()) {\r\n // 在底部的黑色不更改位置 | The black at the bottom does not change position\r\n s = circlePickerCoordinate.x\r\n }\r\n setCirclePickerCoordinate(s, v)\r\n },\r\n {\r\n immediate: true\r\n }\r\n)\r\n\r\nwatch(\r\n circlePickerCoordinate,\r\n (val) => {\r\n saturationv.value = val.x\r\n value.value = val.y\r\n },\r\n {\r\n deep: true\r\n }\r\n)\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.hv-color-picker__color-area-outer {\r\n position: relative;\r\n width: 216px;\r\n height: 216px;\r\n\r\n .hv-color-picker__color-area {\r\n width: 100%;\r\n height: 100%;\r\n\r\n // white\r\n &::before {\r\n position: absolute;\r\n right: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n content: '';\r\n background: linear-gradient(to right, #fff 1px, transparent 215px);\r\n }\r\n\r\n // black\r\n &::after {\r\n position: absolute;\r\n right: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n content: '';\r\n background: linear-gradient(to bottom, transparent 1px, #000 215px);\r\n }\r\n\r\n .hv-color-picker__circle {\r\n position: absolute;\r\n z-index: 1;\r\n box-sizing: border-box;\r\n width: 12px;\r\n height: 12px;\r\n pointer-events: none;\r\n border: 2px solid #fff;\r\n border-radius: 100%;\r\n box-shadow: 0 0 0 1px #0003;\r\n transform: translate(-50%, 50%);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color_picker__form mb-12\">\r\n <div class=\"hv-color-picker__form-type\">\r\n <el-select\r\n v-model=\"formType\"\r\n :disabled=\"props.disabled\"\r\n popper-class=\"hv-color-picker-popper\"\r\n @change=\"handleFormTypeChange\"\r\n :teleported=\"false\"\r\n >\r\n <el-option v-for=\"item in SelectOptions\" :key=\"item\" :label=\"item\" :value=\"item\"></el-option>\r\n </el-select>\r\n </div>\r\n <div class=\"hv-color-picker__form-body\">\r\n <el-input-number\r\n v-model=\"formInputState[0]\"\r\n @change=\"handleColorChange\"\r\n step-strictly\r\n :disabled=\"props.disabled\"\r\n :min=\"0\"\r\n :max=\"isRGB ? 255 : 360\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputState[1]\"\r\n @change=\"handleColorChange\"\r\n step-strictly\r\n :disabled=\"props.disabled\"\r\n :min=\"0\"\r\n :max=\"isRGB ? 255 : 100\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-model=\"formInputState[2]\"\r\n @change=\"handleColorChange\"\r\n step-strictly\r\n :disabled=\"props.disabled\"\r\n :min=\"0\"\r\n :max=\"isRGB ? 255 : 100\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n ></el-input-number>\r\n <el-input-number\r\n v-if=\"props.enableAlpha\"\r\n v-model=\"formInputState[3]\"\r\n @change=\"handleColorChange\"\r\n step-strictly\r\n :disabled=\"props.disabled\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n :step=\"1\"\r\n :controls=\"false\"\r\n >\r\n <template #suffix>\r\n <span>%</span>\r\n </template>\r\n </el-input-number>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type ColorCunstruct from 'color'\r\nimport Color from 'color'\r\nimport { ref, computed, watch } from 'vue'\r\nimport { DEFAULT_COLOR } from '../../../constants'\r\n\r\nconst SelectOptions = ['RGB', 'HSL', 'HSV']\r\n\r\ndefineOptions({\r\n name: 'HvColorPickerNormal'\r\n})\r\n\r\nconst props = defineProps<{\r\n modelValue: string\r\n disabled?: boolean\r\n enableAlpha?: boolean\r\n}>()\r\nconst emits = defineEmits<{\r\n (name: 'update:modelValue', value: string): void\r\n}>()\r\n\r\nconst formType = ref('RGB')\r\nconst formInputState = ref([255, 255, 255, 100])\r\n\r\nconst isRGB = computed(() => {\r\n return formType.value === 'RGB'\r\n})\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n handleFormTypeChange()\r\n },\r\n {\r\n immediate: true\r\n }\r\n)\r\n\r\nfunction handleFormTypeChange() {\r\n const color = Color(props.modelValue)\r\n const alpha = color.alpha() * 100\r\n switch (formType.value) {\r\n case 'RGB': {\r\n const arr = color.rgb().array()\r\n formInputState.value = [...arr.slice(0, 3), alpha]\r\n break\r\n }\r\n case 'HSL': {\r\n const arr = color.hsl().array()\r\n formInputState.value = [...arr.slice(0, 3), alpha]\r\n break\r\n }\r\n case 'HSV': {\r\n const arr = color.hsv().array()\r\n formInputState.value = [...arr.slice(0, 3), alpha]\r\n break\r\n }\r\n }\r\n}\r\n\r\nfunction handleColorChange() {\r\n let color: ColorCunstruct = Color(DEFAULT_COLOR)\r\n\r\n switch (formType.value) {\r\n case 'RGB': {\r\n color = Color.rgb(...formInputState.value.slice(0, 3))\r\n break\r\n }\r\n case 'HSL': {\r\n color = Color.hsl(...formInputState.value.slice(0, 3))\r\n break\r\n }\r\n case 'HSV': {\r\n color = Color.hsv(...formInputState.value.slice(0, 3))\r\n break\r\n }\r\n }\r\n emits('update:modelValue', color.alpha(props.enableAlpha ? formInputState.value[3] / 100 : 1).hexa())\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.el-select__popper.el-popper.hv-color-picker-popper {\r\n --el-bg-color-overlay: #131519;\r\n --el-border-color: #3c4452;\r\n --el-fill-color-light: #0977e5;\r\n --el-border-color-light: #565d6b;\r\n\r\n .el-select-dropdown__item {\r\n color: #a8b0c1;\r\n }\r\n}\r\n</style>\r\n<style lang=\"scss\" scoped>\r\n.hv-color_picker__form {\r\n display: flex;\r\n gap: 6px;\r\n margin-top: 6px;\r\n\r\n --el-fill-color-blank: #131519;\r\n --el-border-color: #3c4452;\r\n\r\n .hv-color-picker__form-type {\r\n :deep(.el-select) {\r\n --el-select-width: 60px;\r\n\r\n .el-select__wrapper {\r\n padding: 6px;\r\n\r\n .el-select__placeholder {\r\n width: fit-content;\r\n text-overflow: inherit;\r\n color: #c2c6cc;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .hv-color-picker__form-body {\r\n display: flex;\r\n\r\n :deep(.el-input-number) {\r\n --el-text-color-regular: #c2c6cc;\r\n\r\n flex: 1;\r\n width: 23%;\r\n\r\n &:last-child {\r\n width: 31%;\r\n }\r\n\r\n .el-input__wrapper {\r\n padding: 0 4px;\r\n\r\n .el-input__suffix {\r\n .el-input__suffix-inner {\r\n span {\r\n margin-left: 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker__preset\">\r\n <div class=\"hv-color-picker__preset-title\">{{ props.title || 'Reset colors' }}</div>\r\n <div class=\"hv-color-picker__preset-list\">\r\n <div\r\n class=\"hv-color-picker__preset-list-item\"\r\n @click=\"handleClickColor(color)\"\r\n v-for=\"color in preColors\"\r\n :key=\"color\"\r\n :style=\"{ backgroundColor: color }\"\r\n ></div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst defaultPresetColors = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#E3822D',\r\n '#DCE24F',\r\n '#1DCF69',\r\n '#6DE5B9',\r\n '#11A1F2',\r\n '#AA43FF',\r\n '#F0689C',\r\n '#F8D28B',\r\n '#606368',\r\n '#E83C34',\r\n '#EEBE29',\r\n '#89F0AC',\r\n '#2FBC9E',\r\n '#56CCF2',\r\n '#1C1DFA',\r\n '#DC88F5',\r\n '#D4C595',\r\n '#C52F65'\r\n]\r\n\r\nconst props = defineProps<{\r\n title?: string\r\n presetColors?: string[]\r\n}>()\r\n\r\nconst preColors = computed(() => {\r\n return !props.presetColors ? defaultPresetColors : props.presetColors\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'change', value: string): void\r\n}>()\r\n\r\nfunction handleClickColor(color: string) {\r\n emits('change', color)\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.hv-color-picker__preset {\r\n .hv-color-picker__preset-title {\r\n margin-bottom: 4px;\r\n font-size: 12px;\r\n color: #cad1e0;\r\n }\r\n\r\n .hv-color-picker__preset-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .hv-color-picker__preset-list-item {\r\n width: 18px;\r\n height: 18px;\r\n\r\n // 一行十个\r\n margin-right: calc((100% - 18px * 10) / 9);\r\n margin-bottom: 4px;\r\n cursor: pointer;\r\n border-radius: 2px;\r\n\r\n &:nth-child(10n) {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"hv-color-picker-normal\">\r\n <ColorArea\r\n ref=\"colorAreaRef\"\r\n :hue-color=\"hueColor\"\r\n :color=\"color\"\r\n v-model:saturation=\"saturationv\"\r\n v-model:value=\"value\"\r\n :disabled=\"props.disabled\"\r\n ></ColorArea>\r\n <div class=\"hv-color-picker__color-select-box\">\r\n <svg\r\n v-if=\"isSupportEyeDropper\"\r\n @click=\"handleOpenEyeDropper\"\r\n class=\"hv-color-picker__dropper\"\r\n :class=\"props.disabled ? 'is-disabled' : ''\"\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 28 28\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M22.9297 5.8C21.863 4.73333 20.263 4.73333 19.1964 5.8L15.463 9.53332L14.3963 8.59999C13.863 8.06666 13.063 8.06666 12.5296 8.59999C11.9963 9.13332 11.9963 9.93332 12.5296 10.4667L13.463 11.4L5.72967 19.1333C5.19634 19.6666 4.39634 21.6666 5.72967 23C7.06299 24.3333 9.06299 23.5333 9.59632 23L17.3296 15.2666L18.263 16.2C18.7964 16.7333 19.5964 16.7333 20.1297 16.2C20.663 15.6666 20.663 14.8666 20.1297 14.3333L19.1964 13.4L22.9297 9.66666C23.9964 8.46666 23.9964 6.86666 22.9297 5.8ZM8.39632 21.6666H7.06299V20.3333L14.7963 12.6L16.1296 13.9333C15.9963 13.9333 8.39632 21.6666 8.39632 21.6666Z\"\r\n fill=\"currentcolor\"\r\n />\r\n </svg>\r\n\r\n <div class=\"hv-color-picker__sliders\">\r\n <ElSlider\r\n v-model=\"hue\"\r\n :min=\"0\"\r\n :max=\"360\"\r\n :disabled=\"props.disabled\"\r\n :show-tooltip=\"false\"\r\n class=\"hv-color-picker__hue-slider\"\r\n :style=\"{\r\n '--el-slider-button-bg-color': hueColor\r\n }\"\r\n ></ElSlider>\r\n <ElSlider\r\n v-if=\"props.enableAlpha\"\r\n v-model=\"alpha\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n :disabled=\"props.disabled\"\r\n :show-tooltip=\"false\"\r\n class=\"hv-color-picker__alpha-slider\"\r\n :style=\"{\r\n '--hv-cur-full-alpha-color': fullAlphaColor\r\n }\"\r\n ></ElSlider>\r\n </div>\r\n </div>\r\n <ColorForm v-model:model-value=\"color\" :disabled=\"props.disabled\" :enable-alpha=\"props.enableAlpha\"></ColorForm>\r\n <PresetColors\r\n @change=\"handleColorChange\"\r\n :title=\"props.presetTitle\"\r\n :presetColors=\"props.presetColors\"\r\n ></PresetColors>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch, computed } from 'vue'\r\nimport Color from 'color'\r\nimport ColorArea from './children/ColorArea/ColorArea.vue'\r\nimport ColorForm from './children/ColorForm/ColorForm.vue'\r\nimport PresetColors from './children/PresetColors/PresetColors.vue'\r\nimport throttle from 'lodash/throttle'\r\nimport { DEFAULT_COLOR } from '../constants/index'\r\n\r\ndefineOptions({\r\n name: 'HvColorPickerNormal'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'update:model-value', value: string): void\r\n}>()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue: string\r\n disabled?: boolean\r\n enableAlpha?: boolean\r\n presetTitle?: string\r\n presetColors?: string[]\r\n }>(),\r\n {\r\n modelValue: DEFAULT_COLOR,\r\n enableAlpha: true\r\n }\r\n)\r\n\r\n// const color = defineModel<string>('color', {\r\n// default: DEFAULT_COLOR\r\n// })\r\n\r\nconst color = computed({\r\n get() {\r\n return props.modelValue\r\n },\r\n set(value: string) {\r\n emits('update:model-value', value)\r\n }\r\n})\r\n\r\nconst isSupportEyeDropper = !!(window as any).EyeDropper\r\n\r\nconst colorAreaRef = ref<InstanceType<typeof ColorArea>>()\r\n\r\n/** 色相 | Hue */\r\nconst hue = ref(0)\r\nconst alpha = ref(0)\r\n/** 饱和度 | saturationv */\r\nconst saturationv = ref(100)\r\n/** 明度 | value */\r\nconst value = ref(100)\r\n\r\nconst fullAlphaColor = computed(() => {\r\n return Color(color.value).alpha(1).hex()\r\n})\r\n\r\nwatch(\r\n color,\r\n (c) => {\r\n const color = Color(c)\r\n const { h, s } = color.hsv().object()\r\n saturationv.value = s\r\n const equlValues = [0, 360]\r\n alpha.value = props.enableAlpha ? Math.round(color.alpha() * 100) : 100\r\n const curColor = Color.hsv({ h: hue.value, s: saturationv.value, v: value.value, alpha: alpha.value }).hexa()\r\n if (curColor !== color.hexa()) {\r\n if (!(equlValues.includes(h) && equlValues.includes(hue.value))) {\r\n hue.value = h\r\n }\r\n }\r\n },\r\n {\r\n immediate: true\r\n }\r\n)\r\n\r\nconst hueColor = computed(() => {\r\n const color = Color({ h: hue.value, s: 100, v: 100 })\r\n return color.hex()\r\n})\r\n\r\nwatch([hue, alpha, saturationv, value], () => {\r\n reCompColor()\r\n})\r\n\r\nconst reCompColor = throttle(\r\n function reCompColor() {\r\n const newColor = Color({ h: hue.value, s: saturationv.value, v: value.value, alpha: alpha.value / 100 })\r\n\r\n color.value = props.enableAlpha ? newColor.hexa() : newColor.hex()\r\n },\r\n 50,\r\n {\r\n leading: false,\r\n trailing: true\r\n }\r\n)\r\n\r\nfunction handleOpenEyeDropper() {\r\n if (props.disabled) {\r\n return\r\n }\r\n const eyeDropper = new (window as any).EyeDropper()\r\n\r\n eyeDropper\r\n .open()\r\n .then((result) => {\r\n color.value = result.sRGBHex\r\n })\r\n .catch((e) => {\r\n console.error('Eyedropper failed to get color', e)\r\n })\r\n}\r\n\r\nfunction handleColorChange(hex: string) {\r\n if (props.disabled) {\r\n return\r\n }\r\n color.value = hex\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.hv-color-picker-normal {\r\n box-sizing: border-box;\r\n width: 248px;\r\n padding: 16px;\r\n overflow: hidden;\r\n background-color: #22252a;\r\n\r\n .hv-color-picker__color-select-box {\r\n display: flex;\r\n gap: 14px;\r\n align-items: center;\r\n margin-top: 6px;\r\n\r\n .hv-color-picker__dropper {\r\n width: 28px;\r\n height: 28px;\r\n color: #cad1e0;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n\r\n &.is-disabled {\r\n cursor: not-allowed;\r\n }\r\n\r\n &:hover {\r\n background-color: #3c4452;\r\n }\r\n\r\n &:active {\r\n color: #0977e5;\r\n background-color: #0977e533;\r\n }\r\n }\r\n\r\n .hv-color-picker__sliders {\r\n flex: 1;\r\n\r\n :deep(.el-slider) {\r\n height: 24px;\r\n\r\n .el-slider__runway {\r\n --el-slider-height: 12px;\r\n --el-slider-border-radius: 6px;\r\n }\r\n\r\n .el-slider__bar {\r\n opacity: 0;\r\n }\r\n\r\n .el-slider__button-wrapper {\r\n top: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transform: translate(-50%, -50%);\r\n\r\n --el-slider-button-wrapper-size: 20px;\r\n\r\n .el-slider__button {\r\n box-sizing: border-box;\r\n width: 14px;\r\n height: 14px;\r\n background-color: var(--el-slider-button-bg-color);\r\n border-color: #fff;\r\n border-width: 3px;\r\n }\r\n }\r\n }\r\n\r\n :deep(.hv-color-picker__hue-slider) {\r\n .el-slider__runway {\r\n background: linear-gradient(\r\n 90deg,\r\n #f00 0%,\r\n #ff0 16.67%,\r\n #0f0 33.33%,\r\n #0ff 50%,\r\n #00f 66.67%,\r\n #f0f 83.33%,\r\n #f00 100%\r\n );\r\n }\r\n }\r\n\r\n :deep(.hv-color-picker__alpha-slider) {\r\n .el-slider__runway {\r\n --el-slider-main-bg-color: var(--hv-cur-full-alpha-color);\r\n --el-slider-button-bg-color: var(--hv-cur-full-alpha-color);\r\n\r\n background:\r\n linear-gradient(to right, transparent 0%, var(--el-slider-main-bg-color) 100%),\r\n linear-gradient(to right, #e1e1e1 0%, #e1e1e1 50%, #fff 50%, #fff 100%) 0 0 / 12px 50% repeat-x,\r\n linear-gradient(to right, #e1e1e1 0%, #e1e1e1 50%, #fff 50%, #fff 100%) 6px 6px / 12px 50% repeat-x;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .mb-12 {\r\n margin-bottom: 12px;\r\n }\r\n}\r\n</style>\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport ColorPickerRainbow from './color-picker-rainbow/ColorPicker.vue'\r\nimport ColorPickerNormal from './color-picker-normal/ColorPicker.vue'\r\nexport * from './constants'\r\n\r\nexport const HvColorPicker: SFCWithInstall<typeof ColorPickerRainbow> = withInstall(ColorPickerRainbow)\r\nexport const HvColorPickerRainbow = HvColorPicker\r\n\r\nexport const HvColorPickerNormal: SFCWithInstall<typeof ColorPickerNormal> = withInstall(ColorPickerNormal)\r\n\r\nexport default HvColorPicker\r\n","export type EventKey = string | symbol\r\n\r\nexport type EventHandler<T extends (...args: any) => void> = (...args: Parameters<T>) => void\r\n\r\nexport type EventHandlerSet<T extends (...args: any) => void> = Set<EventHandler<T>>\r\n\r\nexport type EventMap<Events extends Record<EventKey, (...args: any) => void>> = Map<\r\n keyof Events,\r\n EventHandlerSet<Events[keyof Events]>\r\n>\r\n\r\nexport class EventBus<Events extends Record<EventKey, (...args: any) => void>> {\r\n private _eventMap: EventMap<Events>\r\n\r\n constructor() {\r\n this._eventMap = new Map()\r\n }\r\n\r\n public on<T extends keyof Events>(key: T, handler: Events[T]): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (handlers) {\r\n handlers.add(handler)\r\n } else {\r\n const set: EventHandlerSet<Events[keyof Events]> = new Set()\r\n set.add(handler)\r\n this._eventMap.set(key, set)\r\n }\r\n }\r\n\r\n public off<T extends keyof Events>(key: T, handler?: Events[T]): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (!handlers) return\r\n\r\n if (handler) {\r\n handlers.delete(handler)\r\n } else {\r\n handlers.clear()\r\n }\r\n }\r\n\r\n public emit<T extends keyof Events>(key: T, ...payload: Parameters<Events[T]>): void {\r\n const handlers = this._eventMap.get(key)\r\n\r\n if (!handlers) return\r\n\r\n for (const callback of handlers.values()) {\r\n callback(...payload)\r\n }\r\n }\r\n}\r\n","import { EventBus } from '@havue/shared'\r\n\r\nexport type DragAndDropPoint = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport type DragAndDropDragType = string | number | symbol\r\n\r\nexport type DnDManagerEvents = {\r\n down: (p: DragAndDropPoint) => void\r\n 'first-move': (p: DragAndDropPoint, e: MouseEvent | TouchEvent) => void\r\n start: (p: DragAndDropPoint) => void\r\n move: (params: { type: DragAndDropDragType; data: any; point: DragAndDropPoint }) => void\r\n end: (params: { type: DragAndDropDragType; data: any; point: DragAndDropPoint }) => void\r\n}\r\n\r\nexport class DnDManager extends EventBus<DnDManagerEvents> {\r\n /** 是否开始拖动 | Whether to start dragging */\r\n public isDragStart: boolean = false\r\n /** 拖动元素类型 | Drag type */\r\n public dragType: DragAndDropDragType | undefined = undefined\r\n /** Draggable传递的数据,供Droppable使用 | Draggable passes data for use by Droppable */\r\n public dragData: any\r\n\r\n private isSendFirstMovePos = false\r\n\r\n /** 长按一定时间才触发 onStart | Press and hold for a certain amount of time to trigger onStart */\r\n private touchStartPressTime = 300\r\n /** 点击触发时的时间 | The time at which the click is triggered */\r\n private touchStartTime: number = 0\r\n /** 点击触发的位置 | The position where the click event is triggered */\r\n private touchStartPosition: DragAndDropPoint = { x: 0, y: 0 }\r\n /** onMove最后位置 | onMove last position */\r\n private lastMovePoint: DragAndDropPoint = { x: 0, y: 0 }\r\n private emitTouchStartTimer: number | undefined = undefined\r\n private destroy: () => void = () => {}\r\n\r\n constructor() {\r\n super()\r\n this.bindEventListener()\r\n }\r\n\r\n public updateDargInfo(type: Exclude<DragAndDropDragType, undefined>, data: any) {\r\n if (type === undefined || type === null) {\r\n throw new Error('请传入拖动元素 type')\r\n }\r\n this.isDragStart = true\r\n this.dragType = type\r\n this.dragData = data\r\n\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n }\r\n\r\n /**\r\n * 通知 Draggable 开始点击 | Tell Draggable to start clicking\r\n * @param point\r\n */\r\n private onDown(point: DragAndDropPoint) {\r\n this.emit('down', point)\r\n }\r\n\r\n /**\r\n * 第一次移动时,通知 Draggable | On the first move, notify Draggable\r\n * @param point\r\n */\r\n private onFirstMove(point: DragAndDropPoint, e: MouseEvent | TouchEvent) {\r\n if (this.isDragStart) {\r\n return\r\n }\r\n this.isSendFirstMovePos = true\r\n this.emit('first-move', point, e)\r\n }\r\n\r\n /**\r\n * 通知 Draggable 拖拽开始 | Notify Draggable to begin the drag\r\n * @param point\r\n */\r\n private onStart(point: DragAndDropPoint) {\r\n if (this.isDragStart) {\r\n return\r\n }\r\n this.emit('start', point)\r\n }\r\n\r\n /**\r\n * 通知 Draggable 移动 | Notify Draggable to move\r\n * @param point\r\n * @returns\r\n */\r\n private onMove(point: DragAndDropPoint) {\r\n if (!this.isDragStart || !this.dragType) {\r\n return\r\n }\r\n this.lastMovePoint = point\r\n this.emit('move', {\r\n type: this.dragType,\r\n data: this.dragData,\r\n point: point\r\n })\r\n }\r\n\r\n /**\r\n * 结束拖拽 | Ending drag\r\n * @returns\r\n */\r\n private onEnd() {\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n this.isSendFirstMovePos = false\r\n if (!this.isDragStart || !this.dragType) {\r\n return\r\n }\r\n this.isDragStart = false\r\n this.emit('end', {\r\n point: this.lastMovePoint,\r\n type: this.dragType,\r\n data: this.dragData\r\n })\r\n }\r\n\r\n private onMouseDown(e: MouseEvent) {\r\n // 非左键按下 | Not left button press\r\n if (e.buttons !== 1) {\r\n this.onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n const position = {\r\n x: clientX,\r\n y: clientY\r\n }\r\n\r\n this.touchStartTime = Date.now()\r\n this.touchStartPosition = position\r\n\r\n this.emitTouchStartTimer && clearTimeout(this.emitTouchStartTimer)\r\n\r\n this.onDown(position)\r\n // touchStartPressTime ms后调用onStart(如果在此期间没有移动超过30px) | Call onStart after touchStartPressTime ms (if you haven't moved more than 30px in that time)\r\n this.emitTouchStartTimer = window.setTimeout(() => {\r\n this.onStart(position)\r\n }, this.touchStartPressTime)\r\n\r\n // this.onStart({\r\n // x: clientX,\r\n // y: clientY\r\n // })\r\n }\r\n\r\n private onMouseMove(e: MouseEvent) {\r\n // 非左键按下 | Not left button press\r\n if (e.buttons !== 1) {\r\n this.onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n if (this.isDragStart) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n this.onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n } else {\r\n if (!this.isSendFirstMovePos) {\r\n this.onFirstMove(\r\n {\r\n x: clientX,\r\n y: clientY\r\n },\r\n e\r\n )\r\n }\r\n // touchStartPressTime ms内移动了超过30px,认为不是拖拽\r\n const { x, y } = this.touchStartPosition\r\n const timeInLimit = Date.now() - this.touchStartTime < this.touchStartPressTime\r\n if (timeInLimit && (Math.abs(x - clientX) > 30 || Math.abs(y - clientY) > 30)) {\r\n clearTimeout(this.emitTouchStartTimer)\r\n this.emitTouchStartTimer = undefined\r\n }\r\n }\r\n\r\n // this.onMove({\r\n // x: clientX,\r\n // y: clientY\r\n // })\r\n }\r\n\r\n private onMouseUp() {\r\n this.onEnd()\r\n }\r\n\r\n private onTouchStart(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n const position = {\r\n x: clientX,\r\n y: clientY\r\n }\r\n this.touchStartTime = Date.now()\r\n this.touchStartPosition = position\r\n this.onDown(position)\r\n // touchStartPressTime ms后调用onStart(如果在此期间没有移动超过30px) | Call onStart after touchStartPressTime ms (if you haven't moved more than 30px in that time)\r\n this.emitTouchStartTimer = window.setTimeout(() => {\r\n this.onStart(position)\r\n }, this.touchStartPressTime)\r\n }\r\n\r\n private onTouchMove(e: TouchEvent) {\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n if (this.isDragStart) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n this.onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n } else {\r\n if (!this.isSendFirstMovePos) {\r\n this.onFirstMove(\r\n {\r\n x: clientX,\r\n y: clientY\r\n },\r\n e\r\n )\r\n }\r\n // touchStartPressTime ms内移动了超过30px,认为不是拖拽\r\n const { x, y } = this.touchStartPosition\r\n const timeInLimit = Date.now() - this.touchStartTime < this.touchStartPressTime\r\n if (timeInLimit && (Math.abs(x - clientX) > 30 || Math.abs(y - clientY) > 30)) {\r\n clearTimeout(this.emitTouchStartTimer)\r\n }\r\n }\r\n }\r\n private onTouchEnd() {\r\n this.onEnd()\r\n }\r\n\r\n private bindEventListener() {\r\n if (document.body) {\r\n const onTouchStart = this.onTouchStart.bind(this)\r\n const onTouchMove = this.onTouchMove.bind(this)\r\n const onTouchEnd = this.onTouchEnd.bind(this)\r\n const onMouseDown = this.onMouseDown.bind(this)\r\n const onMouseMove = this.onMouseMove.bind(this)\r\n const onMouseUp = this.onMouseUp.bind(this)\r\n\r\n document.body.addEventListener('touchstart', onTouchStart, { passive: false })\r\n document.body.addEventListener('touchmove', onTouchMove, { passive: false })\r\n document.body.addEventListener('touchend', onTouchEnd, { passive: false })\r\n\r\n document.body.addEventListener('mousedown', onMouseDown)\r\n document.body.addEventListener('mousemove', onMouseMove)\r\n document.body.addEventListener('mouseup', onMouseUp)\r\n\r\n this.destroy = () => {\r\n document.body.removeEventListener('touchstart', onTouchStart)\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('mousedown', onMouseDown)\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n }\r\n } else {\r\n document.addEventListener('DOMContentLoaded', this.bindEventListener)\r\n }\r\n }\r\n\r\n private removeEventListener() {\r\n this.destroy()\r\n }\r\n\r\n public destroyed() {\r\n this.isDragStart = false\r\n this.dragType = undefined\r\n this.dragData = undefined\r\n this.removeEventListener()\r\n }\r\n}\r\n\r\nexport const DnDManagerInstance = new DnDManager()\r\n","<template>\r\n <div ref=\"dragItemRef\" class=\"hv-draggable\" :class=\"disabled ? 'disabled' : ''\">\r\n <slot></slot>\r\n <div class=\"hv-draggable__clone-item\" :style=\"cloneNodeStyle\" v-if=\"isDragThis\">\r\n <slot name=\"drag-item\"><slot></slot></slot>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { reactive, ref, computed, onMounted, onBeforeUnmount } from 'vue'\r\nimport type { DnDManagerEvents, DragAndDropDragType, DragAndDropPoint } from './manager'\r\n\r\nimport { DnDManagerInstance } from './manager'\r\n\r\ndefineOptions({\r\n name: 'HvDraggable'\r\n})\r\n\r\nconst ImmediateEnumType = {\r\n LEFT: 'left',\r\n RIGHT: 'right',\r\n TOP: 'top',\r\n BOTTOM: 'bottom',\r\n ALL: 'all'\r\n} as const\r\n\r\ntype ImmediateType = (typeof ImmediateEnumType)[keyof typeof ImmediateEnumType]\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type: DragAndDropDragType\r\n immediate?: ImmediateType | Array<ImmediateType> | undefined\r\n disabled?: boolean\r\n data?: any\r\n }>(),\r\n {\r\n disabled: false\r\n }\r\n)\r\n\r\nconst dragItemRef = ref<HTMLElement>()\r\n/** 是否拖动当前组件 | Whether to drag the current component */\r\nconst isDownThis = ref(false)\r\n/** 开始按下时的位置 | Position at the beginning of the press */\r\nconst downPosition = reactive({\r\n x: 0,\r\n y: 0\r\n})\r\n/** 是否开始拖动 | Whether to start dragging */\r\nconst isDragThis = ref(false)\r\nconst cloneNodePosition = reactive({\r\n x: 0,\r\n y: 0\r\n})\r\n\r\nconst immediateDirections = computed<Array<ImmediateType>>(() => {\r\n if (Array.isArray(props.immediate)) {\r\n return props.immediate\r\n }\r\n return props.immediate ? [props.immediate] : []\r\n})\r\n\r\nconst cloneNodeStyle = computed(() => {\r\n return {\r\n transform: `translate(${cloneNodePosition.x}px, ${cloneNodePosition.y}px) translate(-50%, -50%)`\r\n }\r\n})\r\n\r\nconst onDown: DnDManagerEvents['down'] = (params) => {\r\n const { x, y } = params\r\n const startEl = document.elementFromPoint(x, y)\r\n if (!props.disabled && dragItemRef.value && dragItemRef.value.contains(startEl)) {\r\n if (immediateDirections.value.includes(ImmediateEnumType.ALL)) {\r\n handleStart(params)\r\n return\r\n }\r\n isDownThis.value = true\r\n downPosition.x = x\r\n downPosition.y = y\r\n }\r\n}\r\n\r\nconst onFirstMove: DnDManagerEvents['first-move'] = (params, event) => {\r\n const { x, y } = params\r\n const directions = immediateDirections.value.filter((item) => item !== ImmediateEnumType.ALL)\r\n\r\n if (isDownThis.value && !props.disabled && directions.length) {\r\n const distanceH = x - downPosition.x\r\n const distanceHAbs = Math.abs(distanceH)\r\n const distanceV = y - downPosition.y\r\n const distanceVAbs = Math.abs(distanceV)\r\n\r\n const max = Math.max(distanceHAbs, distanceVAbs)\r\n\r\n const isMaxH = distanceHAbs === max\r\n const isMaxV = distanceVAbs === max\r\n\r\n /** 是否立即响应拖动 | Whether to respond immediately to a drag */\r\n let isImmediate = false\r\n\r\n if (isMaxH) {\r\n isImmediate =\r\n (directions.includes(ImmediateEnumType.LEFT) && distanceH < 0) ||\r\n (directions.includes(ImmediateEnumType.RIGHT) && distanceH > 0)\r\n }\r\n\r\n if (isMaxV && !isImmediate) {\r\n isImmediate =\r\n (directions.includes(ImmediateEnumType.TOP) && distanceV < 0) ||\r\n (directions.includes(ImmediateEnumType.BOTTOM) && distanceV > 0)\r\n }\r\n\r\n if (isImmediate) {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n handleStart(downPosition)\r\n handleMove(params)\r\n return\r\n }\r\n }\r\n}\r\n\r\nconst onStart: DnDManagerEvents['start'] = (params) => {\r\n const { x, y } = params\r\n const startEl = document.elementFromPoint(x, y)\r\n if (!props.disabled && dragItemRef.value && dragItemRef.value.contains(startEl)) {\r\n handleStart(params)\r\n }\r\n}\r\n\r\nconst onMove: DnDManagerEvents['move'] = (params) => {\r\n const { point } = params\r\n if (isDragThis.value) {\r\n handleMove(point)\r\n }\r\n}\r\n\r\nconst onEnd: DnDManagerEvents['end'] = () => {\r\n isDownThis.value = false\r\n isDragThis.value = false\r\n Object.assign(downPosition, {\r\n x: 0,\r\n y: 0\r\n })\r\n Object.assign(cloneNodePosition, {\r\n x: 0,\r\n y: 0\r\n })\r\n}\r\n\r\nfunction handleStart(point: DragAndDropPoint) {\r\n isDragThis.value = true\r\n cloneNodePosition.x = point.x\r\n cloneNodePosition.y = point.y\r\n DnDManagerInstance.updateDargInfo(props.type, props.data)\r\n}\r\n\r\nfunction handleMove(point: DragAndDropPoint) {\r\n cloneNodePosition.x = point.x\r\n cloneNodePosition.y = point.y\r\n}\r\n\r\nonMounted(() => {\r\n DnDManagerInstance.on('down', onDown)\r\n DnDManagerInstance.on('first-move', onFirstMove)\r\n DnDManagerInstance.on('start', onStart)\r\n DnDManagerInstance.on('move', onMove)\r\n DnDManagerInstance.on('end', onEnd)\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n DnDManagerInstance.off('down', onDown)\r\n DnDManagerInstance.off('first-move', onFirstMove)\r\n DnDManagerInstance.off('start', onStart)\r\n DnDManagerInstance.off('move', onMove)\r\n DnDManagerInstance.off('end', onEnd)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.hv-draggable {\r\n width: fit-content;\r\n cursor: grab;\r\n\r\n &.disabled {\r\n cursor: not-allowed;\r\n }\r\n}\r\n\r\n.hv-draggable__clone-item {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 99999;\r\n width: fit-content;\r\n cursor: grabbing;\r\n opacity: 0.8;\r\n will-change: transform;\r\n}\r\n</style>\r\n","<template>\r\n <div ref=\"dropAreaRef\" class=\"hv-droppable\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { DnDManagerEvents, DragAndDropDragType, DragAndDropPoint } from './manager'\r\nimport { computed, ref, onMounted, onBeforeUnmount } from 'vue'\r\nimport { DnDManagerInstance } from './manager'\r\n\r\ndefineOptions({\r\n name: 'HvDroppable'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'enter', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'move', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'drop', type: DragAndDropDragType, point: DragAndDropPoint, data: any): void\r\n (name: 'leave', type: DragAndDropDragType, data: any): void\r\n}>()\r\n\r\nconst props = defineProps<{\r\n acceptDragType: DragAndDropDragType | Array<DragAndDropDragType>\r\n disabled?: boolean\r\n}>()\r\n\r\nconst dropAreaRef = ref<HTMLElement>()\r\nconst isEntered = ref(false)\r\n\r\nconst acceptDragTypeList = computed(() => {\r\n return Array.isArray(props.acceptDragType) ? props.acceptDragType : [props.acceptDragType]\r\n})\r\n\r\nfunction getPositionInArea(point: DragAndDropPoint) {\r\n if (!dropAreaRef.value) {\r\n return {\r\n isInArea: false,\r\n position: {\r\n x: 0,\r\n y: 0\r\n }\r\n }\r\n }\r\n const { x: pointX, y: pointY } = point\r\n const { x, y, width, height } = dropAreaRef.value.getBoundingClientRect()\r\n\r\n const posX = pointX - x\r\n const posY = pointY - y\r\n return {\r\n isInArea: posX >= 0 && posX <= width && posY >= 0 && posY <= height,\r\n position: {\r\n x: posX,\r\n y: posY\r\n }\r\n }\r\n}\r\n\r\nconst onMove: DnDManagerEvents['move'] = (params) => {\r\n if (props.disabled) {\r\n return\r\n }\r\n const { type, data, point } = params\r\n if (dropAreaRef.value && acceptDragTypeList.value.includes(type)) {\r\n const { isInArea, position } = getPositionInArea(point)\r\n if (isInArea) {\r\n if (isEntered.value) {\r\n emits('move', type, position, data)\r\n } else {\r\n isEntered.value = true\r\n emits('enter', type, position, data)\r\n }\r\n } else if (isEntered.value) {\r\n isEntered.value = false\r\n emits('leave', type, data)\r\n }\r\n }\r\n}\r\n\r\nconst onEnd: DnDManagerEvents['move'] = ({ type, point, data }) => {\r\n if (props.disabled) {\r\n return\r\n }\r\n if (dropAreaRef.value && acceptDragTypeList.value.includes(type) && isEntered.value) {\r\n const { position } = getPositionInArea(point)\r\n emits('drop', type, position, data)\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n DnDManagerInstance.on('move', onMove)\r\n DnDManagerInstance.on('end', onEnd)\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n DnDManagerInstance.off('move', onMove)\r\n DnDManagerInstance.off('end', onEnd)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-droppable {\r\n position: relative;\r\n width: fit-content;\r\n}\r\n</style>\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport Draggable from './Draggable.vue'\r\nimport Droppable from './Droppable.vue'\r\n\r\nexport const HvDraggable: SFCWithInstall<typeof Draggable> = withInstall(Draggable)\r\nexport const HvDroppable: SFCWithInstall<typeof Droppable> = withInstall(Droppable)\r\n\r\nexport type { DragAndDropPoint, DragAndDropDragType, DnDManager } from './manager'\r\n","import type { MaybeRef } from 'vue'\r\nimport { computed, isRef, watch, toValue, onBeforeUnmount } from 'vue'\r\n\r\nexport type DragAndScaleOptions = {\r\n container: HTMLElement | undefined | null\r\n containerRealSize?: {\r\n width: number\r\n height: number\r\n }\r\n scaleAreaWidth?: number\r\n keepRatio?: boolean | Partial<KeepRatioType>\r\n limit?: {\r\n inContainer?: boolean\r\n minWidth?: number\r\n minHeight?: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n }\r\n disabled?: boolean\r\n onChange?: (p: DragAndScaleChangeResultType) => void\r\n onFinish?: () => void\r\n}\r\n\r\ntype KeepRatioType = {\r\n enable: boolean\r\n scaleCase: 'min' | 'max'\r\n}\r\n\r\nenum KeepRatioCaseEnum {\r\n MIN = 'min',\r\n MAX = 'max'\r\n}\r\n\r\nexport type DragAndScalePoint = {\r\n x: number\r\n y: number\r\n}\r\n\r\ntype TargetAreaType = {\r\n elX: number\r\n elY: number\r\n elWidth: number\r\n elHeight: number\r\n}\r\n\r\nexport type DragAndScaleChangeResultType = TargetAreaType & {\r\n type: 'move' | 'scale'\r\n deltaX: number\r\n deltaY: number\r\n realX: number\r\n realY: number\r\n realWidth: number\r\n realHeight: number\r\n}\r\n\r\ntype EffectDirectionType = {\r\n leftSide: boolean\r\n rightSide: boolean\r\n topSide: boolean\r\n bottomSide: boolean\r\n center: boolean\r\n}\r\n\r\nexport function useDragAndScale(\r\n target: MaybeRef<HTMLElement>,\r\n operateTarget: MaybeRef<HTMLElement>,\r\n options: MaybeRef<DragAndScaleOptions>\r\n) {\r\n const _options = computed(() => {\r\n return isRef(options) ? toValue(options) : options\r\n })\r\n /** 外部提供的父级容器的宽高值(非页面元素宽高) | Externally provided width and height of the parent container (not the page element) */\r\n const _containerRealSize = computed(() => {\r\n return _options.value.containerRealSize\r\n })\r\n\r\n /** 保持宽高比 | Keep the aspect ratio configuration */\r\n const _keepRatio = computed<KeepRatioType>(() => {\r\n const krOption =\r\n typeof _options.value.keepRatio === 'boolean'\r\n ? { enable: _options.value.keepRatio, scaleCase: KeepRatioCaseEnum.MIN }\r\n : _options.value.keepRatio\r\n return Object.assign(\r\n {\r\n scaleCase: KeepRatioCaseEnum.MIN,\r\n enable: false\r\n },\r\n krOption || {}\r\n )\r\n })\r\n\r\n /** 限制缩放最小值 | Limit the scaling minimum */\r\n const _limit = computed(() => {\r\n const limitOpt = Object.assign(\r\n {\r\n inContainer: true,\r\n minWidth: 0,\r\n minHeight: 0,\r\n maxWidth: Infinity,\r\n maxHeight: Infinity\r\n },\r\n _options.value.limit || {}\r\n )\r\n if (limitOpt.minWidth > limitOpt.maxWidth) {\r\n limitOpt.maxWidth = limitOpt.minWidth\r\n }\r\n if (limitOpt.minHeight > limitOpt.maxHeight) {\r\n limitOpt.maxHeight = limitOpt.minHeight\r\n }\r\n return limitOpt\r\n })\r\n\r\n /** 是否禁用 | Disabled */\r\n const _disabled = computed(() => {\r\n return _options.value.disabled || false\r\n })\r\n\r\n /** 缩放元素 | Resizing elements */\r\n const _targetEl = computed(() => {\r\n return isRef(target) ? toValue(target) : target\r\n })\r\n /** 容器元素 | Container el */\r\n const _containerEl = computed(() => {\r\n return _options.value.container\r\n })\r\n\r\n /** 缩放拖拽操作区域元素 | Resize the drag and drop action area elements */\r\n const _operateEl = computed(() => {\r\n return isRef(operateTarget) ? toValue(operateTarget) : operateTarget\r\n })\r\n\r\n /** 拖动缩放起始点 | Drag the resizing starting point */\r\n let startPoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 上次鼠标或者触点操作位置 | Last mouse or touch position */\r\n let lastOperatePoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 当前鼠标或者触点操作位置 | Current mouse or touch position */\r\n let curOperatePoint: DragAndScalePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n\r\n /** 父级容器尺寸 | Parent container size */\r\n const containerElSize = {\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n /** 拖拽缩放开始时,元素的位置宽高 | The width and height of the element at the beginning of drag-and-zoom */\r\n const startArea: TargetAreaType = {\r\n elX: 0,\r\n elY: 0,\r\n elWidth: 0,\r\n elHeight: 0\r\n }\r\n\r\n /** 操作位置 | Position of operation */\r\n const effectDirection: EffectDirectionType = {\r\n leftSide: false,\r\n rightSide: false,\r\n topSide: false,\r\n bottomSide: false,\r\n center: false\r\n }\r\n\r\n let isOperateStart = false\r\n let isMoved = false\r\n\r\n let realRateEl_w = 1\r\n let realRateEl_h = 1\r\n\r\n watch(\r\n () => _targetEl.value && _containerEl.value && _operateEl.value,\r\n (value) => {\r\n if (value) {\r\n bindEvent()\r\n } else {\r\n removeEvent()\r\n }\r\n }\r\n )\r\n\r\n function onStart(point: DragAndScalePoint) {\r\n if (_disabled.value) {\r\n return\r\n }\r\n // 记录拖动缩放起始点 | Record the drag and zoom start point\r\n startPoint = point\r\n curOperatePoint = point\r\n\r\n if (!_containerEl.value || !_targetEl.value) {\r\n return\r\n }\r\n\r\n const {\r\n x: containerX,\r\n y: containerY,\r\n width: containerWidth,\r\n height: containerHeight\r\n } = _containerEl.value.getBoundingClientRect()\r\n\r\n Object.assign(containerElSize, {\r\n width: containerWidth,\r\n height: containerHeight\r\n })\r\n // 是否需要转换大小,根据外部传入的容器宽高 | Convert the size based on the width and height of the external input container\r\n if (_containerRealSize.value) {\r\n const { width: realWdith, height: realHeight } = _containerRealSize.value\r\n\r\n realRateEl_w = realWdith / containerWidth\r\n realRateEl_h = realHeight / containerHeight\r\n } else {\r\n realRateEl_w = 1\r\n realRateEl_h = 1\r\n }\r\n const { x: targetX, y: targetY, width: targetW, height: targetH } = _targetEl.value.getBoundingClientRect()\r\n\r\n const { x: startX, y: startY } = point\r\n\r\n Object.assign(startArea, {\r\n elX: targetX - containerX,\r\n elY: targetY - containerY,\r\n elWidth: targetW,\r\n elHeight: targetH\r\n })\r\n\r\n const touchEl = document.elementFromPoint(startX, startY) as HTMLElement\r\n if (!touchEl) {\r\n return\r\n }\r\n\r\n /**\r\n * 四个边和角、中心操作区域元素都添加了data-scale-side属性\r\n * The data-scale-side attribute is added to each of the four side and corner, central manipulation area elements\r\n *\r\n * 用于判断往那个方向拖动 | Used to determine which direction to drag in\r\n */\r\n const sides = (touchEl.dataset['scaleSide'] || '').split(',').filter((item) => !!item)\r\n if (!sides.length) {\r\n return\r\n }\r\n\r\n // let leftSide = Math.abs(startX - targetX) < _halfScaleAreaWidth.value\r\n // let topSide = Math.abs(startY - targetY) < _halfScaleAreaWidth.value\r\n // let rightSide = Math.abs(startX - targetX - targetW) < _halfScaleAreaWidth.value\r\n // let bottomSide = Math.abs(startY - targetY - targetH) < _halfScaleAreaWidth.value\r\n // const center = !leftSide && !topSide && !rightSide && !bottomSide\r\n\r\n let leftSide = sides.includes('left')\r\n let topSide = sides.includes('top')\r\n let rightSide = sides.includes('right')\r\n let bottomSide = sides.includes('bottom')\r\n const center = sides.includes('center')\r\n\r\n isOperateStart = true\r\n\r\n // 保持宽高比,认为在4个角拖动 | Keep the aspect ratio and consider dragging at 4 corners\r\n if (_keepRatio.value.enable && !center) {\r\n if (startX - targetX <= targetW / 2 && startY - targetY <= targetH / 2) {\r\n leftSide = true\r\n topSide = true\r\n }\r\n if (startX - targetX > targetW / 2 && startY - targetY <= targetH / 2) {\r\n rightSide = true\r\n topSide = true\r\n }\r\n if (startX - targetX <= targetW / 2 && startY - targetY > targetH / 2) {\r\n leftSide = true\r\n bottomSide = true\r\n }\r\n if (startX - targetX > targetW / 2 && startY - targetY > targetH / 2) {\r\n rightSide = true\r\n bottomSide = true\r\n }\r\n }\r\n\r\n Object.assign(effectDirection, {\r\n leftSide,\r\n rightSide,\r\n topSide,\r\n bottomSide,\r\n center\r\n })\r\n }\r\n\r\n function onMove(point: DragAndScalePoint) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n\r\n isMoved = true\r\n lastOperatePoint = curOperatePoint\r\n curOperatePoint = point\r\n const deltaX = point.x - startPoint.x\r\n const deltaY = point.y - startPoint.y\r\n let dX = 0\r\n let dY = 0\r\n let dW = 0\r\n let dH = 0\r\n\r\n const { elX, elY, elWidth, elHeight } = startArea\r\n const { minWidth, minHeight, maxWidth, maxHeight } = _limit.value\r\n\r\n const minElWidth = minWidth / realRateEl_w\r\n const minElHeight = minHeight / realRateEl_h\r\n const maxElWidth = maxWidth / realRateEl_w\r\n const maxElHeight = maxHeight / realRateEl_h\r\n\r\n if (effectDirection.center) {\r\n // 位置改变 | Change of position\r\n const containerWidth = containerElSize.width\r\n const containerHeight = containerElSize.height\r\n // 避免超出边界 | Avoid overstepping boundaries\r\n if (_limit.value.inContainer) {\r\n const distanceX =\r\n elX + deltaX < 0 ? -elX : elX + elWidth + deltaX > containerWidth ? containerWidth - elWidth - elX : deltaX\r\n const distanceY =\r\n elY + deltaY < 0\r\n ? -elY\r\n : elY + elHeight + deltaY > containerHeight\r\n ? containerHeight - elHeight - elY\r\n : deltaY\r\n dX = distanceX\r\n dY = distanceY\r\n } else {\r\n dX = deltaX\r\n dY = deltaY\r\n }\r\n } else {\r\n // 缩放 | Scaling\r\n const { leftSide, rightSide, topSide, bottomSide } = effectDirection\r\n if (leftSide) {\r\n // 避免超出左边界 | Avoid going beyond the left boundary\r\n let distance = _limit.value.inContainer && elX + deltaX < 0 ? -elX : deltaX\r\n\r\n // 宽高限制 | Width and height limit\r\n if (elWidth - distance < minElWidth) {\r\n distance = elWidth - minElWidth\r\n }\r\n if (elWidth - distance > maxElWidth) {\r\n distance = elWidth - maxElWidth\r\n }\r\n dX = distance\r\n dW = -distance\r\n }\r\n if (rightSide) {\r\n const containerWidth = containerElSize.width\r\n // 避免超出右边界 | Avoid going beyond the right boundary\r\n let distance =\r\n _limit.value.inContainer && elX + elWidth + deltaX > containerWidth ? containerWidth - elWidth - elX : deltaX\r\n\r\n // 宽高限制 | Width and height limit\r\n if (elWidth + distance < minElWidth) {\r\n distance = minElWidth - elWidth\r\n }\r\n if (elWidth + distance > maxElWidth) {\r\n distance = maxElWidth - elWidth\r\n }\r\n dW = distance\r\n }\r\n if (topSide) {\r\n // 避免超出上边界 | Avoid going beyond the upper boundary\r\n let distance = _limit.value.inContainer && elY + deltaY < 0 ? -elY : deltaY\r\n\r\n // 宽高限制 | Width and height limit\r\n if (elHeight - distance < minElHeight) {\r\n distance = elHeight - minElHeight\r\n }\r\n if (elHeight - distance > maxElHeight) {\r\n distance = elHeight - maxElHeight\r\n }\r\n dY = distance\r\n dH = -distance\r\n }\r\n if (bottomSide) {\r\n const containerHeight = containerElSize.height\r\n // 避免超出下边界 | Avoid going beyond the lower bounds\r\n let distance =\r\n _limit.value.inContainer && elY + elHeight + deltaY > containerHeight\r\n ? containerHeight - elHeight - elY\r\n : deltaY\r\n\r\n // 宽高限制 | Width and height limit\r\n if (elHeight + distance < minElHeight) {\r\n distance = minElHeight - elHeight\r\n }\r\n if (elHeight + distance > maxElHeight) {\r\n distance = maxElHeight - elHeight\r\n }\r\n dH = distance\r\n }\r\n\r\n // 保持宽高比 | Keep the aspect ratio\r\n if (_keepRatio.value.enable) {\r\n const dwR = dW / elWidth\r\n const dhR = dH / elHeight\r\n\r\n if (\r\n (dwR < dhR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MIN) ||\r\n (dwR > dhR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MAX)\r\n ) {\r\n //当(使用x,y改变最小值)宽度改变较少 | When (using x,y to change the minimum) the width changes less\r\n //或(使用x,y改变最大值)高度改变较少 | Or (using x,y to change the maximum) the height changes less\r\n dH = dwR * elHeight\r\n // 最小高度限制 | Minimum height limit\r\n if (elHeight + dH < minElHeight) {\r\n const originDw = dW\r\n dH = minElHeight - elHeight\r\n dW = (dH / elHeight) * elWidth\r\n dX = dX * (dW / originDw)\r\n }\r\n if (elHeight + dH > maxElHeight) {\r\n const originDw = dW\r\n dH = maxElHeight - elHeight\r\n dW = (dH / elHeight) * elWidth\r\n dX = dX * (dW / originDw)\r\n }\r\n\r\n // 拖动了上边,使用dH计算dY | Drag the top side, and use dH to calculate dY\r\n if (effectDirection.topSide) {\r\n dY = -dH\r\n }\r\n } else if (\r\n (dhR < dwR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MIN) ||\r\n (dhR > dwR && _keepRatio.value.scaleCase === KeepRatioCaseEnum.MAX)\r\n ) {\r\n //当(使用x,y改变最小值)高度改变较少 | When (using x,y to change the minimum) the height changes less\r\n //或(使用x,y改变最大值)宽度改变较少 | Or (using x,y to change the maximum) width changes less\r\n dW = dhR * elWidth\r\n // 最小宽度限制 | | Minimum Width limit\r\n if (elWidth + dW < minElWidth) {\r\n const originDh = dH\r\n dW = minElWidth - elWidth\r\n dH = (dW / elWidth) * elHeight\r\n dY = dY * (dH / originDh)\r\n }\r\n if (elWidth + dW > maxElWidth) {\r\n const originDh = dH\r\n dW = maxElWidth - elWidth\r\n dH = (dW / elWidth) * elHeight\r\n dY = dY * (dH / originDh)\r\n }\r\n\r\n // 拖动了左边,使用dW计算dX | Drag the left side, and use dW to calculate dX\r\n if (effectDirection.leftSide) {\r\n dX = -dW\r\n }\r\n }\r\n\r\n // 父级容器边界限制 | Parent container boundary restrictions\r\n const currentElX = elX + dX\r\n const currentElY = elY + dY\r\n const currentElW = elWidth + dW\r\n const currentElH = elHeight + dH\r\n if (\r\n _limit.value.inContainer &&\r\n (currentElX < 0 ||\r\n currentElY < 0 ||\r\n currentElX + currentElW > containerElSize.width ||\r\n currentElY + currentElH > containerElSize.height)\r\n ) {\r\n // 拖动元素超出了父级容器 | Drag an element beyond its parent container\r\n // 拖动元素 在父级容器内的 区域 的左上角点 | Drag the top-left corner of the area inside the parent container\r\n let clipX = currentElX < 0 ? 0 : currentElX\r\n let clipY = currentElY < 0 ? 0 : currentElY\r\n // 拖动元素 在父级容器内的 区域 的宽高 | Drag the width and height of the area within the parent container\r\n let clipW =\r\n currentElX + currentElW > containerElSize.width\r\n ? containerElSize.width - clipX\r\n : currentElX + currentElW - clipX\r\n let clipH =\r\n currentElY + currentElH > containerElSize.height\r\n ? containerElSize.height - clipY\r\n : currentElY + currentElH - clipY\r\n\r\n // 拖动元素 在父级容器内的 区域 的右下角点\r\n // Drag the bottom-right corner of the area where the element is inside its parent container\r\n const clipX2 = clipX + clipW\r\n const clipY2 = clipY + clipH\r\n\r\n // 保持比例后,缩放区域的宽高\r\n // After keeping the proportions, scale the width and height of the region\r\n const clipRate = clipW / clipH\r\n const elRate = elWidth / elHeight\r\n if (clipRate < elRate) {\r\n clipH = clipW / elRate\r\n } else if (clipRate > elRate) {\r\n clipW = clipH * elRate\r\n }\r\n\r\n const { topSide, leftSide } = effectDirection\r\n\r\n // 计算保持宽高后的左上角点\r\n // Calculate the top left corner point after keeping the width and height\r\n if (leftSide) {\r\n clipX = clipX2 - clipW\r\n }\r\n if (topSide) {\r\n clipY = clipY2 - clipH\r\n }\r\n\r\n dX = clipX - elX\r\n dY = clipY - elY\r\n dW = clipW - elWidth\r\n dH = clipH - elHeight\r\n }\r\n }\r\n }\r\n\r\n const currentElX = elX + dX\r\n const currentElY = elY + dY\r\n const currentElW = elWidth + dW\r\n const currentElH = elHeight + dH\r\n\r\n _options.value.onChange &&\r\n _options.value.onChange({\r\n type: effectDirection.center ? 'move' : 'scale',\r\n deltaX: curOperatePoint.x - lastOperatePoint.x,\r\n deltaY: curOperatePoint.y - lastOperatePoint.y,\r\n elX: currentElX,\r\n elY: currentElY,\r\n elWidth: currentElW,\r\n elHeight: currentElH,\r\n realX: currentElX * realRateEl_w,\r\n realY: currentElY * realRateEl_h,\r\n realWidth: currentElW * realRateEl_w,\r\n realHeight: currentElH * realRateEl_h\r\n })\r\n }\r\n\r\n function onEnd() {\r\n lastOperatePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n curOperatePoint = {\r\n x: 0,\r\n y: 0\r\n }\r\n if (_disabled.value || isOperateStart !== true || !isMoved) {\r\n isOperateStart = false\r\n isMoved = false\r\n return\r\n }\r\n isOperateStart = false\r\n isMoved = false\r\n _options.value.onFinish && _options.value.onFinish()\r\n }\r\n\r\n function onTouchStart(e: TouchEvent) {\r\n e.preventDefault()\r\n if (e.touches.length > 1) {\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n\r\n onStart({\r\n x: clientX,\r\n y: clientY\r\n })\r\n document.body.addEventListener('touchcancel', onTouchEnd, { capture: true })\r\n document.body.addEventListener('touchmove', onTouchMove, { capture: true })\r\n document.body.addEventListener('touchend', onTouchEnd, { capture: true })\r\n }\r\n\r\n function onTouchMove(e: TouchEvent) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n e.preventDefault()\r\n e.stopPropagation()\r\n if (e.touches.length > 1) {\r\n onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e.touches[0]\r\n\r\n // 和起始点相同,不调用onMove | Same as the starting point, no onMove is called\r\n if (clientX === startPoint.x && clientY === startPoint.y) {\r\n return\r\n }\r\n\r\n onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function onTouchEnd() {\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('touchcancel', onTouchEnd)\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n isMoved = false\r\n return\r\n }\r\n onEnd()\r\n }\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n e.preventDefault()\r\n // 非左键按下 | Not left button press\r\n if ((e.buttons & 1) === 0) {\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n onStart({\r\n x: clientX,\r\n y: clientY\r\n })\r\n document.body.addEventListener('mousemove', onMouseMove, { capture: true })\r\n document.body.addEventListener('mouseup', onMouseUp, { capture: true })\r\n }\r\n\r\n function onMouseMove(e: MouseEvent) {\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n e.preventDefault()\r\n // 非左键按下 | Not left button press\r\n if ((e.buttons & 1) === 0) {\r\n onEnd()\r\n return\r\n }\r\n const { clientX, clientY } = e\r\n\r\n onMove({\r\n x: clientX,\r\n y: clientY\r\n })\r\n }\r\n\r\n function onMouseUp() {\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n if (_disabled.value || isOperateStart !== true) {\r\n isOperateStart = false\r\n return\r\n }\r\n onEnd()\r\n }\r\n\r\n function bindEvent() {\r\n removeEvent()\r\n _operateEl.value.addEventListener('touchstart', onTouchStart, { capture: true })\r\n _operateEl.value.addEventListener('mousedown', onMouseDown)\r\n }\r\n\r\n function removeEvent() {\r\n _operateEl.value.removeEventListener('touchstart', onTouchStart)\r\n document.body.removeEventListener('touchmove', onTouchMove)\r\n document.body.removeEventListener('touchend', onTouchEnd)\r\n document.body.removeEventListener('touchcancel', onTouchEnd)\r\n\r\n _operateEl.value.removeEventListener('mousedown', onMouseDown)\r\n document.body.removeEventListener('mousemove', onMouseMove)\r\n document.body.removeEventListener('mouseup', onMouseUp)\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n isOperateStart = false\r\n removeEvent()\r\n })\r\n}\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport DragAndScale from './DragAndScale.vue'\r\n\r\nexport const HvDragAndScale: SFCWithInstall<typeof DragAndScale> = withInstall(DragAndScale)\r\n\r\nexport default HvDragAndScale\r\n\r\nexport type {\r\n DragAndScaleOptions,\r\n DragAndScalePoint,\r\n DragAndScaleChangeResultType,\r\n useDragAndScale\r\n} from './hooks/useDragAndScale'\r\n","<template>\r\n <div class=\"hv-drag-and-scale\" ref=\"targetRef\">\r\n <slot></slot>\r\n <div class=\"hv-drag-and-scale__zoom-mark\">\r\n <div class=\"hv-drag-and-scale__area-box\" :class=\"props.disabled ? 'disabled' : ''\" ref=\"operateRef\">\r\n <div class=\"hv-drag-and-scale__area-top hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left,top\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"top\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right,top\"></div>\r\n </div>\r\n <div class=\"hv-drag-and-scale__area-middle hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"center\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right\"></div>\r\n </div>\r\n <div class=\"hv-drag-and-scale__area-bottom hv-drag-and-scale__area-block\">\r\n <div class=\"hv-drag-and-scale__area-left\" data-scale-side=\"left,bottom\"></div>\r\n <div class=\"hv-drag-and-scale__area-center\" data-scale-side=\"bottom\"></div>\r\n <div class=\"hv-drag-and-scale__area-right\" data-scale-side=\"right,bottom\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nexport type { DragAndScaleChangeResultType } from './hooks/useDragAndScale'\r\nimport type { DragAndScaleChangeResultType, DragAndScaleOptions } from './hooks/useDragAndScale'\r\n</script>\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport { useDragAndScale } from './hooks/useDragAndScale'\r\n\r\ndefineOptions({\r\n name: 'HvDragAndScale'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'change', params: DragAndScaleChangeResultType): void\r\n (name: 'finish'): void\r\n}>()\r\n\r\nconst props = defineProps<{\r\n container: DragAndScaleOptions['container']\r\n containerRealSize?: DragAndScaleOptions['containerRealSize']\r\n keepRatio?: DragAndScaleOptions['keepRatio']\r\n limit?: DragAndScaleOptions['limit']\r\n disabled?: DragAndScaleOptions['disabled']\r\n}>()\r\n\r\nconst targetRef = ref()\r\nconst operateRef = ref()\r\n\r\nfunction onChange(params: DragAndScaleChangeResultType) {\r\n emits('change', params)\r\n}\r\n\r\nfunction onFinish() {\r\n emits('finish')\r\n}\r\n\r\nconst useDragAndScaleOptions = computed<DragAndScaleOptions>(() => {\r\n return {\r\n container: props.container,\r\n containerRealSize: props.containerRealSize,\r\n keepRatio: props.keepRatio,\r\n limit: props.limit,\r\n disabled: props.disabled,\r\n onChange,\r\n onFinish\r\n }\r\n})\r\n\r\nuseDragAndScale(targetRef, operateRef, useDragAndScaleOptions)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-drag-and-scale {\r\n --hv-dns-border-width: 1px;\r\n\r\n // 周围响应拖放操作区域宽度\r\n // Width of the area around the response drag-and-drop operation\r\n --hv-dns-response-width: 30px;\r\n\r\n // 缩放标志与内容的距离\r\n // Scale the distance of the logo from the content\r\n --hv-dns-mark-gap: 2px;\r\n\r\n // 缩放标志 边框的宽度\r\n // Resize the width of the flag border\r\n --hv-dns-mark-width: 3px;\r\n\r\n // 缩放边框图标区域inset\r\n // Resize the border icon area inset\r\n --hv-dns-mark-inset: calc(0px - (var(--hv-dns-mark-width) + var(--hv-dns-mark-gap) + var(--hv-dns-border-width)));\r\n\r\n // 缩放边框图标 边框长度\r\n // Resize the border icon border length\r\n --hv-dns-mark-border-width: calc(var(--hv-dns-response-width) / 2);\r\n\r\n // 缩放操作区域inset\r\n // Zoom the operation area inset\r\n --hv-dns-inset: calc(0px - var(--hv-dns-response-width) / 2 + var(--hv-dns-mark-width) + var(--hv-dns-mark-gap));\r\n\r\n position: relative;\r\n box-sizing: border-box;\r\n border: var(--hv-dns-border-width) dashed #fff;\r\n\r\n .hv-drag-and-scale__zoom-mark {\r\n position: absolute;\r\n inset: var(--hv-dns-mark-inset);\r\n background:\r\n linear-gradient(to right, #fff, #fff) left top no-repeat,\r\n linear-gradient(to right, #fff, #fff) right top no-repeat,\r\n linear-gradient(to right, #fff, #fff) center top no-repeat,\r\n linear-gradient(to right, #fff, #fff) left bottom no-repeat,\r\n linear-gradient(to right, #fff, #fff) right bottom no-repeat,\r\n linear-gradient(to right, #fff, #fff) center bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left top no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) left center no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right top no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right bottom no-repeat,\r\n linear-gradient(to bottom, #fff, #fff) right center no-repeat;\r\n background-size:\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-border-width) var(--hv-dns-mark-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width),\r\n var(--hv-dns-mark-width) var(--hv-dns-mark-border-width);\r\n\r\n .hv-drag-and-scale__area-box {\r\n position: absolute;\r\n inset: var(--hv-dns-inset);\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .hv-drag-and-scale__area-block {\r\n box-sizing: border-box;\r\n display: flex;\r\n width: 100%;\r\n\r\n .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-right {\r\n box-sizing: border-box;\r\n width: var(--hv-dns-response-width);\r\n max-width: 33.3333%;\r\n height: 100%;\r\n }\r\n\r\n .hv-drag-and-scale__area-center {\r\n box-sizing: border-box;\r\n flex: 1;\r\n height: 100%;\r\n }\r\n }\r\n\r\n &.disabled {\r\n .hv-drag-and-scale__area-block {\r\n * {\r\n cursor: not-allowed !important;\r\n }\r\n }\r\n }\r\n\r\n .hv-drag-and-scale__area-middle {\r\n flex: 1;\r\n\r\n .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-right {\r\n height: 100%;\r\n cursor: ew-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-center {\r\n flex: 1;\r\n height: 100%;\r\n cursor: move;\r\n }\r\n }\r\n\r\n .hv-drag-and-scale__area-top .hv-drag-and-scale__area-left,\r\n .hv-drag-and-scale__area-bottom .hv-drag-and-scale__area-right {\r\n cursor: nw-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-top .hv-drag-and-scale__area-right,\r\n .hv-drag-and-scale__area-bottom .hv-drag-and-scale__area-left {\r\n cursor: ne-resize;\r\n }\r\n\r\n .hv-drag-and-scale__area-top,\r\n .hv-drag-and-scale__area-bottom {\r\n box-sizing: border-box;\r\n height: var(--hv-dns-response-width);\r\n max-height: 33.3333%;\r\n\r\n .hv-drag-and-scale__area-center {\r\n cursor: ns-resize;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","/**\r\n * IP每一项值是否有效 | IP Whether each entry value is valid\r\n * @param val 单个IP值 | Single IP value\r\n */\r\nexport function getValidIPItemValue(val: string | number): string {\r\n const num = parseInt(val + '')\r\n return isNaN(num) ? '' : num < 0 ? '0' : num > 255 ? '255' : num + ''\r\n}\r\n\r\n/**\r\n * 光标在输入框文本中的位置 | The position of the cursor within the text of the input field\r\n * @param { HTMLInputElement } el\r\n */\r\nexport function getRange(el: HTMLInputElement) {\r\n const ret: {\r\n begin: number | null\r\n end: number | null\r\n result: string | null\r\n } = {\r\n begin: null,\r\n end: null,\r\n result: null\r\n }\r\n ret.begin = el.selectionStart || 0\r\n ret.end = el.selectionEnd || 0\r\n ret.result = el.value.substring(ret.begin, ret.end)\r\n el.focus()\r\n return ret\r\n}\r\n","import type { SFCWithInstall } from '@havue/utils'\r\nimport { withInstall } from '@havue/utils'\r\nimport IpInput from './IpInput.vue'\r\n\r\nexport const HvIpInput: SFCWithInstall<typeof IpInput> = withInstall(IpInput)\r\n","<template>\r\n <div class=\"hv-ip-input\" :class=\"props.disabled ? 'is-disabled' : ''\">\r\n <div class=\"hv-ip-input-item\" v-for=\"(value, i) in values\" :key=\"i\">\r\n <input\r\n ref=\"inputRefs\"\r\n type=\"text\"\r\n :value=\"value\"\r\n :disabled=\"props.disabled\"\r\n @input=\"(e) => handleChange(e as ChangeEvent, i)\"\r\n @keydown=\"(e) => handleKeyDown(e as InputKeyboardEvent, i)\"\r\n @paste=\"(e) => handlePaste(e, i)\"\r\n />\r\n <i v-if=\"i !== 3\">.</i>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch } from 'vue'\r\nimport { getValidIPItemValue, getRange } from './utils/index'\r\n\r\ninterface ChangeEvent extends Event {\r\n target: HTMLInputElement\r\n}\r\n\r\ninterface InputKeyboardEvent extends KeyboardEvent {\r\n target: HTMLInputElement\r\n}\r\n\r\ndefineOptions({\r\n name: 'HvIpInput'\r\n})\r\n\r\nconst emits = defineEmits<{\r\n (name: 'update:model-value', value: string): void\r\n}>()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue: string | undefined\r\n disabled?: boolean\r\n }>(),\r\n {\r\n modelValue: '...',\r\n disabled: false\r\n }\r\n)\r\n\r\nconst inputRefs = ref<Array<HTMLInputElement>>([])\r\n\r\nconst values = ref<string[]>([])\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n value = value + ''\r\n const strs = value.split('.')\r\n values.value = Array(4)\r\n .fill('')\r\n .map((_, i) => {\r\n return getValidIPItemValue(strs[i] + '')\r\n })\r\n },\r\n {\r\n immediate: true\r\n }\r\n)\r\n\r\nfunction onIPChange() {\r\n const ip = values.value.map((val) => getValidIPItemValue(val)).join('.')\r\n return emits('update:model-value', ip)\r\n}\r\n\r\nfunction handleChange(e: ChangeEvent, i: number) {\r\n if (props.disabled) {\r\n return\r\n }\r\n const curValue = e.target.value\r\n const num = getValidIPItemValue(curValue)\r\n\r\n values.value[i] = num\r\n e.target.value = num\r\n onIPChange()\r\n if (num === '') {\r\n return e.preventDefault()\r\n }\r\n\r\n if (String(num).length === 3 && i < 3) {\r\n inputRefs.value[i + 1]?.focus()\r\n }\r\n}\r\n\r\n/**\r\n * 监听键盘←、→、backspace、. 按下时进行处理 | Listen to the keyboard ←, →, backspace, and. When pressed\r\n * @param { InputKeyboardEvent } e\r\n * @param { number } i 输入框index | Input field index\r\n */\r\nfunction handleKeyDown(e: InputKeyboardEvent, i: number) {\r\n /* 37 = ←, 39 = →, 8 = backspace, 110 or 190 = . */\r\n let domId = i\r\n const { end } = getRange(e.target)\r\n switch (e.keyCode) {\r\n case 37:\r\n case 8: {\r\n // 左移或删除 | Move left or delete\r\n if (end === 0 && i > 0) {\r\n domId = i - 1\r\n }\r\n break\r\n }\r\n case 39: {\r\n // 右移 | Move right\r\n if (end === e.target.value.length && i < 3) {\r\n domId = i + 1\r\n }\r\n break\r\n }\r\n case 110:\r\n case 190: {\r\n // 输入'.' | input '.'\r\n e.preventDefault()\r\n if (i < 3) {\r\n domId = i + 1\r\n }\r\n break\r\n }\r\n }\r\n const inputEl = inputRefs.value[domId]\r\n inputEl.focus()\r\n // 确保删除或者左右移动连续,避免切换input focus,光标位置会保持在上一次聚焦位置的问题\r\n // Make sure to delete or move left and right continuously to avoid the problem of switching input focus, the cursor position will remain at the last focus position\r\n if (domId < i) {\r\n const len = inputEl.value.length\r\n inputEl.selectionStart = inputEl.selectionEnd = len\r\n } else if (domId > i) {\r\n inputEl.selectionStart = inputEl.selectionEnd = 0\r\n }\r\n}\r\n\r\n/**\r\n * 处理粘贴ip字符串事件 | Handle the paste ip string event\r\n * @param { ClipboardEvent } e\r\n * @param { number } i 输入框index | Input field index\r\n */\r\nfunction handlePaste(e: ClipboardEvent, i: number) {\r\n if (!e.clipboardData || !e.clipboardData.getData) {\r\n return\r\n }\r\n\r\n const pasteData = e.clipboardData.getData('text/plain')\r\n if (!pasteData) {\r\n return\r\n }\r\n\r\n const value = pasteData.split('.').map((v) => getValidIPItemValue(v))\r\n if (value.length !== 4 - i) {\r\n return\r\n }\r\n\r\n if (!value.every((item) => item !== '')) {\r\n return\r\n }\r\n\r\n value.forEach((val, j) => {\r\n values.value[i + j] = val + ''\r\n })\r\n\r\n onIPChange()\r\n return e.preventDefault()\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hv-ip-input {\r\n --hv-ip-input-width: 30px;\r\n\r\n display: inline-block;\r\n padding: 6px 8px;\r\n font-size: 14px;\r\n line-height: 19px;\r\n outline: none;\r\n border: 1px solid #373d48;\r\n border-radius: 4px;\r\n\r\n input {\r\n width: var(--hv-ip-input-width);\r\n text-align: center;\r\n outline: none;\r\n background-color: transparent;\r\n border: none;\r\n }\r\n\r\n &.is-disabled {\r\n cursor: not-allowed;\r\n\r\n input {\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n .hv-ip-input-item {\r\n display: inline-block;\r\n }\r\n}\r\n</style>\r\n"],"names":["withInstall","main","extra","app","comp","colorName","isArrayish","obj","require$$0","concat","slice","swizzle","simpleSwizzleModule","args","results","i","len","arg","fn","colorNames","require$$1","hasOwnProperty","reverseNames","name","cs","colorStringModule","string","prefix","val","model","abbr","hex","rgba","per","keyword","rgb","match","hexAlpha","i2","clamp","hsl","alpha","h","s","l","a","hwb","w","b","hexDouble","r","g","hsla","hwba","num","min","max","str","cssKeywords","reverseKeywords","key","convert","conversions","channels","labels","delta","rdif","gdif","bdif","v","diff","diffc","k","c","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","value","distance","z","xyz","t2","t3","t1","smin","lmin","sv","hsv","hi","f","p","q","t","vmin","sl","wh","bl","ratio","n","cmyk","lab","y2","x2","z2","lch","hr","convert$2","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","grayscale","hue","hcg","pure","mg","apple","gray","buildGraph","graph","models","deriveBFS","fromModel","queue","current","adjacents","adjacent","node","link","from","to","wrapConversion","toModel","path","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","result","routes","colorConvert","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","length","hexToColor","colorToHex","getLightColorAndDepth","getOriginColorByLightAndDepth","getOriginHexByLightAndDepth","originColor","useColorArea","colorAreaCanvas","ref","canvasWidth","canvasHeight","drawColorArea","canvas","ctx","colorGradient","whiteGradient","getCoordinateByHex","getCoordinateByColor","colorItems","maxColor","secondColor","curColorType","coordinateX","coordinateY","getSecondColorDistance","target","getColorByCoordinate","width","height","scaleX","scaleY","getBaseColorFromCoodinage","COLOR_GAP","redRange","numberInGap","greenRange","blueRange","rGap","gGap","bGap","scale","begin","end","onMounted","throttle","time","timer","useOperateEvent","options","colorAreaRef","circlePickerCoordinate","reactive","isDisabled","computed","isRef","handleTouchStart","e","clientX","clientY","handleCirclePickerCoordinateChange","handleTouchMove","handleTouchEnd","handleMounseDown","handleMouseMove","handleMouseUp","handleCirclePickerCoordinateChangeFn","point","colorAreaRect","_a","left","top","setCirclePickerCoordinate","AreaWidth","AreaHeight","_b","onBeforeUnmount","DEFAULT_COLOR","props","__props","emits","__emit","hexColor","formInputRGB","formInputHSV","hexFormater","watch","colorIns","handleHexColorChange","handleRgbColorChange","handleHsvColorChange","defaultPresetColors","preColors","handleClickColor","lightColor","colorDepth","originHexColor","handleColorChange","coordianate","rect","cilcleStyle","sliderBackStyle","lightHex","oldValue","lightRgb","depth","coordin","isObject","type","isObject_1","freeGlobal","global","_freeGlobal","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","_getRawTag","objectToString","_objectToString","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","debounce_1","throttle_1","lastPoint","useInteraction","disabled","saturationv","state","SelectOptions","formType","formInputState","isRGB","handleFormTypeChange","arr","isSupportEyeDropper","fullAlphaColor","equlValues","hueColor","reCompColor","newColor","handleOpenEyeDropper","HvColorPicker","ColorPickerRainbow","HvColorPickerRainbow","HvColorPickerNormal","ColorPickerNormal","EventBus","__publicField","handler","handlers","set","payload","callback","DnDManager","data","position","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","DnDManagerInstance","ImmediateEnumType","dragItemRef","isDownThis","downPosition","isDragThis","cloneNodePosition","immediateDirections","cloneNodeStyle","onDown","params","startEl","handleStart","onFirstMove","event","directions","item","distanceH","distanceHAbs","distanceV","distanceVAbs","isMaxH","isMaxV","isImmediate","handleMove","onStart","onMove","onEnd","dropAreaRef","isEntered","acceptDragTypeList","getPositionInArea","pointX","pointY","posX","posY","isInArea","HvDraggable","Draggable","HvDroppable","Droppable","useDragAndScale","operateTarget","_options","toValue","_containerRealSize","_keepRatio","krOption","_limit","limitOpt","_disabled","_targetEl","_containerEl","_operateEl","startPoint","lastOperatePoint","curOperatePoint","containerElSize","startArea","effectDirection","isOperateStart","isMoved","realRateEl_w","realRateEl_h","bindEvent","removeEvent","containerX","containerY","containerWidth","containerHeight","realWdith","realHeight","targetX","targetY","targetW","targetH","startX","startY","touchEl","sides","leftSide","topSide","rightSide","bottomSide","center","deltaX","deltaY","dX","dY","dW","dH","elX","elY","elWidth","elHeight","minWidth","minHeight","maxWidth","maxHeight","minElWidth","minElHeight","maxElWidth","maxElHeight","distanceX","distanceY","dwR","dhR","originDw","originDh","currentElX","currentElY","currentElW","currentElH","clipX","clipY","clipW","clipH","clipX2","clipY2","clipRate","elRate","HvDragAndScale","targetRef","operateRef","onChange","onFinish","useDragAndScaleOptions","getValidIPItemValue","getRange","el","ret","HvIpInput","inputRefs","values","strs","_","onIPChange","ip","handleChange","curValue","handleKeyDown","domId","inputEl","handlePaste","pasteData","j"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]}