@havue/components 1.0.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.
- package/README.md +3 -0
- package/dist/components.full.js +3217 -0
- package/dist/components.full.min.js +2 -0
- package/dist/components.full.min.js.map +1 -0
- package/dist/components.mjs +3 -0
- package/dist/components.umd.js +24 -0
- package/dist/style.css +1 -0
- package/dist/types/color-picker/src/ColorPicker.vue.d.ts +18 -0
- package/dist/types/color-picker/src/children/ColorForm/ColorForm.vue.d.ts +9 -0
- package/dist/types/color-picker/src/children/PresetColors/PresetColors.vue.d.ts +10 -0
- package/dist/types/color-picker/src/hooks/useColorArea.d.ts +16 -0
- package/dist/types/color-picker/src/hooks/useOperateEvent.d.ts +8 -0
- package/dist/types/color-picker/src/index.d.ts +4 -0
- package/dist/types/color-picker/src/utils/color.d.ts +47 -0
- package/dist/types/color-picker/src/utils/tools.d.ts +1 -0
- package/dist/types/drag-and-drop/src/Draggable.vue.d.ts +47 -0
- package/dist/types/drag-and-drop/src/Droppable.vue.d.ts +41 -0
- package/dist/types/drag-and-drop/src/index.d.ts +6 -0
- package/dist/types/drag-and-drop/src/manager/index.d.ts +81 -0
- package/dist/types/drag-and-scale/src/DragAndScale.vue.d.ts +29 -0
- package/dist/types/drag-and-scale/src/hooks/useDragAndScale.d.ts +45 -0
- package/dist/types/drag-and-scale/src/index.d.ts +5 -0
- package/dist/types/src/index.d.ts +3 -0
- package/package.json +51 -0
|
@@ -0,0 +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","../../shared/src/utils/eventBus.ts","../../shared/src/utils/platform.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","../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\tconst colorAreaCanvas = ref<HTMLCanvasElement>()\r\n\t/** canvas绘制宽度 */\r\n\tconst canvasWidth = 255 * 6 + 1\r\n\t/** canvas绘制高度 */\r\n\tconst canvasHeight = 256\r\n\r\n\t// 有颜色透明度属性,不是纯的rgb,有误差\r\n\t// let imageData: Uint8ClampedArray = [] as unknown as Uint8ClampedArray\r\n\r\n\t/**\r\n\t * 绘制canvas颜色区域\r\n\t * @returns\r\n\t */\r\n\tfunction drawColorArea(): void {\r\n\t\tif (!colorAreaCanvas.value) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tconst canvas = colorAreaCanvas.value\r\n\r\n\t\tcanvas.width = canvasWidth\r\n\t\tcanvas.height = canvasHeight\r\n\r\n\t\tconst ctx = canvas.getContext('2d')\r\n\r\n\t\tif (!ctx) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tctx.clearRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n\t\t// const colorStopList = ['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n\r\n\t\t// for (let i = 0; i < colorStopList.length - 1; i++) {\r\n\t\t// \tconst colorGradient = ctx.createLinearGradient(i * 255, 0, (i + 1) * 255, 0)\r\n\t\t// \tcolorGradient.addColorStop(0, colorStopList[i])\r\n\t\t// \tcolorGradient.addColorStop(1, colorStopList[i + 1])\r\n\t\t// \tctx.fillStyle = colorGradient\r\n\t\t// \tctx.fillRect(i * 255, 0, 255, canvasHeight)\r\n\t\t// }\r\n\r\n\t\tconst colorGradient = ctx.createLinearGradient(0, 0, canvasWidth, 0)\r\n\r\n\t\tcolorGradient.addColorStop(0, '#FF0000')\r\n\t\tcolorGradient.addColorStop(1 / 6, '#FFFF00')\r\n\t\tcolorGradient.addColorStop(1 / 3, '#00FF00')\r\n\t\tcolorGradient.addColorStop(1 / 2, '#00FFFF')\r\n\t\tcolorGradient.addColorStop(2 / 3, '#0000FF')\r\n\t\tcolorGradient.addColorStop(5 / 6, '#FF00FF')\r\n\t\tcolorGradient.addColorStop(1, '#FF0000')\r\n\r\n\t\tctx.fillStyle = colorGradient\r\n\r\n\t\tctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n\r\n\t\tconst whiteGradient = ctx.createLinearGradient(0, canvasHeight, 0, 0)\r\n\r\n\t\twhiteGradient.addColorStop(0, 'rgb(255 255 255 / 100%)')\r\n\t\twhiteGradient.addColorStop(1, 'rgb(255 255 255 / 0%)')\r\n\r\n\t\tctx.fillStyle = whiteGradient\r\n\r\n\t\tctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n\t}\r\n\r\n\tfunction getCoordinateByHex(hex: string) {\r\n\t\tconst color = hexToColor(hex)\r\n\t\treturn getCoordinateByColor(color)\r\n\t}\r\n\r\n\t/**\r\n\t * 该颜色在canvas中的位置\r\n\t * @param color ColorConstruct\r\n\t * @returns\r\n\t */\r\n\tfunction getCoordinateByColor(color: ColorConstruct) {\r\n\t\tconst { r, g, b } = color.rgb().object()\r\n\t\tconst colorItems = [\r\n\t\t\t{\r\n\t\t\t\ttype: 'r',\r\n\t\t\t\tvalue: r,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttype: 'g',\r\n\t\t\t\tvalue: g,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttype: 'b',\r\n\t\t\t\tvalue: b,\r\n\t\t\t},\r\n\t\t]\r\n\r\n\t\tcolorItems.sort((a, b) => b.value - a.value)\r\n\r\n\t\tconst maxColor = colorItems[0]\r\n\t\tconst secondColor = colorItems[1]\r\n\t\tconst curColorType = maxColor.type + secondColor.type\r\n\r\n\t\tlet coordinateX = 0\r\n\t\tlet coordinateY = colorItems[2].value\r\n\t\t// debugger\r\n\t\tif (curColorType === 'rg' || curColorType === 'gr') {\r\n\t\t\t// 红绿\r\n\t\t\tcoordinateX = 255\r\n\t\t\tif (secondColor.type === 'r') {\r\n\t\t\t\tcoordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t} else {\r\n\t\t\t\tcoordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t}\r\n\t\t} else if (curColorType === 'gb' || curColorType === 'bg') {\r\n\t\t\t// 蓝绿\r\n\t\t\tcoordinateX = 255 * 3\r\n\t\t\tif (secondColor.type === 'g') {\r\n\t\t\t\tcoordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t} else {\r\n\t\t\t\tcoordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t}\r\n\t\t} else if (curColorType === 'rb' || curColorType === 'br') {\r\n\t\t\t// 红蓝\r\n\t\t\tcoordinateX = 255 * 5\r\n\t\t\tif (secondColor.type === 'b') {\r\n\t\t\t\tcoordinateX += 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t} else {\r\n\t\t\t\tcoordinateX -= 255 - getSecondColorDistance(coordinateY, secondColor.value)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: coordinateX,\r\n\t\t\ty: coordinateY,\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 目标颜色:['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#FF00FF', '#FF0000']\r\n\t * 计算横向x,即颜色值(第二大的r/g/b值)在canvas中距离目标颜色的横向距离\r\n\t * 求x?\r\n\t * 已知:\r\n\t * gap = 255 - x // gap为255 减去 在顶部距离目标颜色x处的颜色值\r\n\t * scale = y / 255 // y为第三大的r/g/b值\r\n\t * ∵\r\n\t * gap * scale + x = target\r\n\t * ∴\r\n\t * x = (255 * target - 255 * y) / (255 - y)\r\n\t * @param y\r\n\t * @param target\r\n\t * @returns number\r\n\t */\r\n\tfunction getSecondColorDistance(y: number, target: number): number {\r\n\t\treturn y === 255 ? 255 : (255 * target - 255 * y) / (255 - y)\r\n\t}\r\n\r\n\t/**\r\n\t * 根据canvas父级元素区域坐标获取在canvas中的颜色\r\n\t * @param x\r\n\t * @param y\r\n\t * @param width 坐标系宽度\r\n\t * @param height 坐标系高度\r\n\t * // 绘制的canvas颜色有偏差,且存在透明度(rgba),不为纯的rgb, 不使用imagedata,手动计算\r\n\t */\r\n\tfunction getColorByCoordinate(x: number, y: number, width: number, height: number): ColorConstruct {\r\n\t\tif (!colorAreaCanvas.value) {\r\n\t\t\treturn Color()\r\n\t\t}\r\n\t\tconst scaleX = canvasWidth / width\r\n\t\tconst scaleY = canvasHeight / height\r\n\t\tx = Math.min(x * scaleX, canvasWidth - 1)\r\n\t\ty = Math.min(y * scaleY, canvasHeight - 1)\r\n\t\tconst color = getBaseColorFromCoodinage(x, y)\r\n\t\treturn color\r\n\t}\r\n\r\n\t/**\r\n\t * 根据在canvas中的坐标,计算该位置的颜色值\r\n\t * @param { number } x\r\n\t * @param { number } y\r\n\t * @returns number\r\n\t */\r\n\tfunction getBaseColorFromCoodinage(x: number, y: number) {\r\n\t\t/** r值 */\r\n\t\tlet r = 0\r\n\t\t/** g值 */\r\n\t\tlet g = 0\r\n\t\t/** b值 */\r\n\t\tlet b = 0\r\n\t\t/** 颜色最大值 */\r\n\t\tconst COLOR_GAP = 255\r\n\r\n\t\t/** 红色为255的区间 */\r\n\t\tconst redRange = numberInGap(x, 0, COLOR_GAP) || numberInGap(x, COLOR_GAP * 5, COLOR_GAP * 6)\r\n\r\n\t\t/** 绿色为255的区间 */\r\n\t\tconst greenRange = numberInGap(x, COLOR_GAP, COLOR_GAP * 3)\r\n\r\n\t\t/** 蓝色为255的区间 */\r\n\t\tconst blueRange = numberInGap(x, COLOR_GAP * 3, COLOR_GAP * 5)\r\n\r\n\t\tif (redRange) {\r\n\t\t\tr = 255\r\n\t\t} else if (x <= COLOR_GAP * 2) {\r\n\t\t\tr = Math.max(2 * COLOR_GAP - x, 0)\r\n\t\t} else if (x >= COLOR_GAP * 4) {\r\n\t\t\tr = Math.max(x - COLOR_GAP * 4, 0)\r\n\t\t}\r\n\r\n\t\tif (greenRange) {\r\n\t\t\tg = 255\r\n\t\t} else if (x < COLOR_GAP) {\r\n\t\t\tg = Math.max(x, 0)\r\n\t\t} else {\r\n\t\t\tg = Math.max(COLOR_GAP * 4 - x, 0)\r\n\t\t}\r\n\r\n\t\tif (blueRange) {\r\n\t\t\tb = 255\r\n\t\t} else if (x < COLOR_GAP * 3) {\r\n\t\t\tb = Math.max(x - COLOR_GAP * 2, 0)\r\n\t\t} else {\r\n\t\t\tb = Math.max(COLOR_GAP * 6 - x, 0)\r\n\t\t}\r\n\r\n\t\tconst rGap = COLOR_GAP - r\r\n\t\tconst gGap = COLOR_GAP - g\r\n\t\tconst bGap = COLOR_GAP - b\r\n\r\n\t\tconst scale = y / COLOR_GAP\r\n\r\n\t\tr += rGap * scale\r\n\t\tg += gGap * scale\r\n\t\tb += bGap * scale\r\n\r\n\t\treturn Color.rgb(r, g, b)\r\n\t}\r\n\r\n\t/**\r\n\t * 数值是否在区间内\r\n\t * @param { number } num\r\n\t * @param { number } begin\r\n\t * @param { number } end\r\n\t * @returns boolean\r\n\t */\r\n\tfunction numberInGap(num: number, begin: number, end: number) {\r\n\t\treturn num >= begin && num <= end\r\n\t}\r\n\r\n\tonMounted(() => {\r\n\t\tdrawColorArea()\r\n\t})\r\n\r\n\treturn {\r\n\t\tcanvasWidth,\r\n\t\tcanvasHeight,\r\n\t\tcolorAreaCanvas,\r\n\t\tdrawColorArea,\r\n\t\tgetCoordinateByColor,\r\n\t\tgetCoordinateByHex,\r\n\t\tgetColorByCoordinate,\r\n\t}\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","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","export const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)\r\n","import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'\r\nimport { throttle } from '../utils/tools'\r\nimport { isMobile } from '@havue/shared'\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 = Math.round(x)\r\n circlePickerCoordinate.y = Math.round(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 if (isMobile) {\r\n colorAreaRef.value?.addEventListener('touchstart', handleTouchStart)\r\n } else {\r\n colorAreaRef.value?.addEventListener('mousedown', handleMounseDown)\r\n }\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n if (isMobile) {\r\n colorAreaRef.value?.removeEventListener('touchstart', handleTouchStart)\r\n document.body.removeEventListener('touchmove', handleTouchMove)\r\n document.body.removeEventListener('touchend', handleTouchEnd)\r\n } else {\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\r\n return {\r\n colorAreaRef,\r\n circlePickerCoordinate,\r\n setCirclePickerCoordinate\r\n }\r\n}\r\n","<template>\r\n <div class=\"color-form\">\r\n <div class=\"hex-color mb-12\">\r\n <el-input v-model=\"hexColor\" :formatter=\"hexFormater\" @change=\"handleHexColorChange\"></el-input>\r\n </div>\r\n <div class=\"form-group mb-12\">\r\n <div class=\"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=\"form-group mb-12\">\r\n <div class=\"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\" scoped>\r\n.color-form {\r\n gap: 12px;\r\n\r\n .mb-12 {\r\n margin-bottom: 12px;\r\n }\r\n\r\n :deep(.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 .form-group {\r\n display: flex;\r\n align-items: center;\r\n\r\n .label {\r\n width: 72px;\r\n }\r\n\r\n :deep(.el-input) {\r\n flex: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"preset-colors\">\r\n <div class=\"preset-colors_title\">{{ props.title || '系统预设色彩' }}</div>\r\n <div class=\"preset-color_list\">\r\n <div\r\n class=\"preset-color_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.preset-colors {\r\n .preset-colors_title {\r\n margin-bottom: 4px;\r\n font-size: 12px;\r\n color: #fff;\r\n }\r\n\r\n .preset-color_list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .preset-color_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=\"color-picker\">\r\n <div class=\"title\">{{ props.title || '颜色编辑器' }}</div>\r\n <div class=\"color-area__wrapper\">\r\n <div class=\"color-area\" ref=\"colorAreaRef\">\r\n <canvas ref=\"colorAreaCanvas\"></canvas>\r\n <div class=\"cur-color-circle\" :style=\"cilcleStyle\"></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"slider-color\">\r\n <ElSlider v-model=\"colorDepth\" :min=\"0\" :max=\"100\" :show-tooltip=\"false\" :style=\"sliderBackStyle\"></ElSlider>\r\n <div class=\"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\" scoped>\r\n.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 .title {\r\n margin-bottom: 12px;\r\n font-weight: bold;\r\n }\r\n\r\n .color-area__wrapper {\r\n width: auto;\r\n border: 5px solid #000;\r\n border-radius: 3px;\r\n\r\n .color-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 .cur-color-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 .slider-color {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .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 :deep(.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 .color-form {\r\n width: 100%;\r\n overflow: hidden;\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","import { EventBus, isMobile } 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\ntype Events = {\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<Events> {\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 if (isMobile) {\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 } else {\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=\"draggable-area\" :class=\"disabled ? 'disabled' : ''\">\r\n <slot></slot>\r\n <div class=\"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 } from 'vue'\r\nimport type { 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\nDnDManagerInstance.on('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\nDnDManagerInstance.on('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\nDnDManagerInstance.on('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\nDnDManagerInstance.on('move', (params) => {\r\n const { point } = params\r\n if (isDragThis.value) {\r\n handleMove(point)\r\n }\r\n})\r\n\r\nDnDManagerInstance.on('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</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.draggable-area {\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.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=\"droppable-area\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { DragAndDropDragType, DragAndDropPoint } from './manager'\r\nimport { computed, ref } 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\nDnDManagerInstance.on('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\nDnDManagerInstance.on('end', ({ 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</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.droppable-area {\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\nimport { isMobile } from '@havue/shared'\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 if (isMobile) {\r\n _operateEl.value.addEventListener('touchstart', onTouchStart, { capture: true })\r\n } else {\r\n _operateEl.value.addEventListener('mousedown', onMouseDown)\r\n }\r\n }\r\n\r\n function removeEvent() {\r\n if (isMobile) {\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 } else {\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\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=\"drag-and-scale-box\" ref=\"targetRef\">\r\n <slot></slot>\r\n <div class=\"zoom-mark-box\">\r\n <div class=\"zoom-operate-box\" :class=\"props.disabled ? 'disabled' : ''\" ref=\"operateRef\">\r\n <div class=\"top-box block\">\r\n <div class=\"left-box\" data-scale-side=\"left,top\"></div>\r\n <div class=\"center-box\" data-scale-side=\"top\"></div>\r\n <div class=\"right-box\" data-scale-side=\"right,top\"></div>\r\n </div>\r\n <div class=\"middle-box block\">\r\n <div class=\"left-box\" data-scale-side=\"left\"></div>\r\n <div class=\"center-box\" data-scale-side=\"center\"></div>\r\n <div class=\"right-box\" data-scale-side=\"right\"></div>\r\n </div>\r\n <div class=\"bottom-box block\">\r\n <div class=\"left-box\" data-scale-side=\"left,bottom\"></div>\r\n <div class=\"center-box\" data-scale-side=\"bottom\"></div>\r\n <div class=\"right-box\" 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\" scoped>\r\n.drag-and-scale-box {\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 .zoom-mark-box {\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 .zoom-operate-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 .block {\r\n box-sizing: border-box;\r\n display: flex;\r\n width: 100%;\r\n\r\n .left-box,\r\n .right-box {\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 .center-box {\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 .block {\r\n * {\r\n cursor: not-allowed !important;\r\n }\r\n }\r\n }\r\n\r\n .middle-box {\r\n flex: 1;\r\n\r\n .left-box,\r\n .right-box {\r\n height: 100%;\r\n cursor: ew-resize;\r\n }\r\n\r\n .center-box {\r\n flex: 1;\r\n height: 100%;\r\n cursor: move;\r\n }\r\n }\r\n\r\n .top-box .left-box,\r\n .bottom-box .right-box {\r\n cursor: nw-resize;\r\n }\r\n\r\n .top-box .right-box,\r\n .bottom-box .left-box {\r\n cursor: ne-resize;\r\n }\r\n\r\n .top-box,\r\n .bottom-box {\r\n box-sizing: border-box;\r\n height: var(--scale-area-width);\r\n max-height: 33.3333%;\r\n\r\n .center-box {\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","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","EventBus","__publicField","handler","handlers","set","payload","callback","isMobile","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","DnDManager","type","data","position","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","DnDManagerInstance","ImmediateEnumType","dragItemRef","isDownThis","downPosition","isDragThis","cloneNodePosition","immediateDirections","cloneNodeStyle","params","startEl","handleStart","event","directions","item","distanceH","distanceHAbs","distanceV","distanceVAbs","isMaxH","isMaxV","isImmediate","handleMove","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","onStart","containerX","containerY","containerWidth","containerHeight","realWdith","realHeight","targetX","targetY","targetW","targetH","startX","startY","touchEl","sides","leftSide","topSide","rightSide","bottomSide","center","onMove","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","onEnd","HvDragAndScale","targetRef","operateRef","onChange","onFinish","useDragAndScaleOptions"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(function(global, factory) {
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("@havue/color-picker"), require("@havue/drag-and-drop"), require("@havue/drag-and-scale")) : typeof define === "function" && define.amd ? define(["exports", "@havue/color-picker", "@havue/drag-and-drop", "@havue/drag-and-scale"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.components = {}, global.colorPicker, global.dragAndDrop, global.dragAndScale));
|
|
3
|
+
})(this, function(exports2, colorPicker, dragAndDrop, dragAndScale) {
|
|
4
|
+
"use strict";
|
|
5
|
+
Object.keys(colorPicker).forEach((k) => {
|
|
6
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports2, k)) Object.defineProperty(exports2, k, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: () => colorPicker[k]
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
Object.keys(dragAndDrop).forEach((k) => {
|
|
12
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports2, k)) Object.defineProperty(exports2, k, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: () => dragAndDrop[k]
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
Object.keys(dragAndScale).forEach((k) => {
|
|
18
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports2, k)) Object.defineProperty(exports2, k, {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: () => dragAndScale[k]
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
24
|
+
});
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.color-form[data-v-30715da5]{gap:12px}.color-form .mb-12[data-v-30715da5]{margin-bottom:12px}.color-form[data-v-30715da5] .el-input{--el-input-border-color: #30343b}.color-form[data-v-30715da5] .el-input .el-input__wrapper{padding-right:10px;padding-left:10px;background-color:#101114;border-radius:2px}.color-form[data-v-30715da5] .el-input .el-input__wrapper .el-input__inner{text-align:left}.color-form .form-group[data-v-30715da5]{display:flex;align-items:center}.color-form .form-group .label[data-v-30715da5]{width:72px}.color-form .form-group[data-v-30715da5] .el-input{flex:1}.preset-colors .preset-colors_title[data-v-bf94ca7c]{margin-bottom:4px;font-size:12px;color:#fff}.preset-colors .preset-color_list[data-v-bf94ca7c]{display:flex;flex-wrap:wrap;justify-content:space-between}.preset-colors .preset-color_list .preset-color_list-item[data-v-bf94ca7c]{width:16px;height:16px;margin-right:calc((100% - 160px) / 9);margin-bottom:4px;border-radius:50%}.preset-colors .preset-color_list .preset-color_list-item[data-v-bf94ca7c]:nth-child(10n){margin-right:0}.color-picker[data-v-e1675222]{box-sizing:border-box;width:264px;padding:12px;font-size:12px;color:#fff;background-color:#212326;border:1px solid #353d46;border-radius:4px;box-shadow:0 12px 24px #00000080}.color-picker .title[data-v-e1675222]{margin-bottom:12px;font-weight:700}.color-picker .color-area__wrapper[data-v-e1675222]{width:auto;border:5px solid #000;border-radius:3px}.color-picker .color-area__wrapper .color-area[data-v-e1675222]{position:relative;width:auto;height:168px;overflow:hidden;background-color:#000}.color-picker .color-area__wrapper .color-area canvas[data-v-e1675222]{width:100%;height:100%}.color-picker .color-area__wrapper .color-area .cur-color-circle[data-v-e1675222]{position:absolute;box-sizing:border-box;width:18px;height:18px;border:3px solid #dcdcdc;border-radius:50%;box-shadow:0 2px 4px -1px #0000001f,0 4px 5px #00000014,0 1px 10px #0000000d;transform:translate(-50%,-50%)}.color-picker .slider-color[data-v-e1675222]{position:relative;display:flex;align-items:center;justify-content:space-between}.color-picker .slider-color .origin-color[data-v-e1675222]{width:18px;height:18px;margin-left:12px;border-radius:2px}.color-picker[data-v-e1675222] .el-slider{box-sizing:border-box}.color-picker[data-v-e1675222] .el-slider .el-slider__runway{width:210px;height:8px;background:var(--el-slider-runway-bg-color)}.color-picker[data-v-e1675222] .el-slider .el-slider__runway .el-slider__bar{background-color:transparent}.color-picker[data-v-e1675222] .el-slider .el-slider__runway .el-slider__button-wrapper .el-slider__button{box-sizing:border-box;width:18px;height:18px;background-color:var(--el-slider-main-bg-color);border-color:#fff;border-width:3px}.color-picker .color-form[data-v-e1675222]{width:100%;overflow:hidden}.draggable-area[data-v-8361cd1f]{width:fit-content;cursor:grab}.draggable-area.disabled[data-v-8361cd1f]{cursor:not-allowed}.draggable-clone-item[data-v-8361cd1f]{position:fixed;top:0;left:0;z-index:99999;width:fit-content;cursor:grabbing;opacity:.8;will-change:transform}.droppable-area[data-v-a40b9a59]{position:relative;width:fit-content}.drag-and-scale-box[data-v-91217104]{--drag-box-border-width: 1px;--scale-area-width: 30px;--scale-mark-gap: 2px;--scale-mark-width: 3px;--scale-mark-inset: calc(0px - (var(--scale-mark-width) + var(--scale-mark-gap) + var(--drag-box-border-width)));--scale-mark-line-width: calc(var(--scale-area-width) / 2);--scale-area-inset: calc(0px - var(--scale-area-width) / 2 + var(--scale-mark-width) + var(--scale-mark-gap));position:relative;box-sizing:border-box;border:var(--drag-box-border-width) dashed #fff}.drag-and-scale-box .zoom-mark-box[data-v-91217104]{position:absolute;inset:var(--scale-mark-inset);background:linear-gradient(to right,#fff,#fff) left top no-repeat,linear-gradient(to right,#fff,#fff) right top no-repeat,linear-gradient(to right,#fff,#fff) center top no-repeat,linear-gradient(to right,#fff,#fff) left bottom no-repeat,linear-gradient(to right,#fff,#fff) right bottom no-repeat,linear-gradient(to right,#fff,#fff) center bottom no-repeat,linear-gradient(to bottom,#fff,#fff) left top no-repeat,linear-gradient(to bottom,#fff,#fff) left bottom no-repeat,linear-gradient(to bottom,#fff,#fff) left center no-repeat,linear-gradient(to bottom,#fff,#fff) right top no-repeat,linear-gradient(to bottom,#fff,#fff) right bottom no-repeat,linear-gradient(to bottom,#fff,#fff) right center no-repeat;background-size:var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-line-width) var(--scale-mark-width),var(--scale-mark-width) var(--scale-mark-line-width),var(--scale-mark-width) var(--scale-mark-line-width),var(--scale-mark-width) var(--scale-mark-line-width),var(--scale-mark-width) var(--scale-mark-line-width),var(--scale-mark-width) var(--scale-mark-line-width),var(--scale-mark-width) var(--scale-mark-line-width)}.drag-and-scale-box .zoom-mark-box .zoom-operate-box[data-v-91217104]{position:absolute;inset:var(--scale-area-inset);box-sizing:border-box;display:flex;flex-direction:column}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .block[data-v-91217104]{box-sizing:border-box;display:flex;width:100%}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .block .left-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .block .right-box[data-v-91217104]{box-sizing:border-box;width:var(--scale-area-width);max-width:33.3333%;height:100%}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .block .center-box[data-v-91217104]{box-sizing:border-box;flex:1;height:100%}.drag-and-scale-box .zoom-mark-box .zoom-operate-box.disabled .block[data-v-91217104] *{cursor:not-allowed!important}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .middle-box[data-v-91217104]{flex:1}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .middle-box .left-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .middle-box .right-box[data-v-91217104]{height:100%;cursor:ew-resize}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .middle-box .center-box[data-v-91217104]{flex:1;height:100%;cursor:move}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .top-box .left-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .bottom-box .right-box[data-v-91217104]{cursor:nw-resize}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .top-box .right-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .bottom-box .left-box[data-v-91217104]{cursor:ne-resize}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .top-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .bottom-box[data-v-91217104]{box-sizing:border-box;height:var(--scale-area-width);max-height:33.3333%}.drag-and-scale-box .zoom-mark-box .zoom-operate-box .top-box .center-box[data-v-91217104],.drag-and-scale-box .zoom-mark-box .zoom-operate-box .bottom-box .center-box[data-v-91217104]{cursor:ns-resize}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
presetTitle?: string;
|
|
4
|
+
presetColors?: string[];
|
|
5
|
+
};
|
|
6
|
+
declare const color: import("vue").ModelRef<string, string, string, string>;
|
|
7
|
+
type __VLS_PublicProps = __VLS_Props & {
|
|
8
|
+
modelValue?: typeof color['value'];
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"update:modelValue": (value: string) => any;
|
|
12
|
+
} & {
|
|
13
|
+
"update:model-value": (value: string) => any;
|
|
14
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
15
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
16
|
+
"onUpdate:model-value"?: ((value: string) => any) | undefined;
|
|
17
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelValue: string;
|
|
3
|
+
};
|
|
4
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
5
|
+
change: (value: string) => any;
|
|
6
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
7
|
+
onChange?: ((value: string) => any) | undefined;
|
|
8
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
presetColors?: string[];
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
change: (value: string) => any;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onChange?: ((value: string) => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type ColorConstruct from 'color';
|
|
2
|
+
export declare function useColorArea(): {
|
|
3
|
+
canvasWidth: number;
|
|
4
|
+
canvasHeight: number;
|
|
5
|
+
colorAreaCanvas: import("vue").Ref<HTMLCanvasElement | undefined, HTMLCanvasElement | undefined>;
|
|
6
|
+
drawColorArea: () => void;
|
|
7
|
+
getCoordinateByColor: (color: ColorConstruct) => {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
};
|
|
11
|
+
getCoordinateByHex: (hex: string) => {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
};
|
|
15
|
+
getColorByCoordinate: (x: number, y: number, width: number, height: number) => ColorConstruct;
|
|
16
|
+
};
|