color-gradient-picker-vue3
Version:
A modern color and gradient picker component for Vue 3 with TypeScript support
1,154 lines (1,152 loc) • 432 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a2, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a2, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a2, prop, b[prop]);
}
return a2;
};
var __spreadProps = (a2, b) => __defProps(a2, __getOwnPropDescs(b));
import { defineComponent, inject, ref, computed, unref, onMounted, onBeforeUnmount, openBlock, createElementBlock, createElementVNode, normalizeClass, normalizeStyle, reactive, watchEffect, createCommentVNode, Fragment, renderList, toDisplayString, withDirectives, vModelText, createVNode, watch, createBlock, provide } from "vue";
import tc from "tinycolor2";
import { throttle, debounce, cloneDeep } from "lodash-es";
const gradientParser = (input = "") => {
const tokens = {
linearGradient: /^(-(webkit|o|ms|moz)-)?(linear-gradient)/i,
repeatingLinearGradient: /^(-(webkit|o|ms|moz)-)?(repeating-linear-gradient)/i,
radialGradient: /^(-(webkit|o|ms|moz)-)?(radial-gradient)/i,
repeatingRadialGradient: /^(-(webkit|o|ms|moz)-)?(repeating-radial-gradient)/i,
sideOrCorner: /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,
extentKeywords: /^(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/,
positionKeywords: /^(left|center|right|top|bottom)/i,
pixelValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))px/,
percentageValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))%/,
emValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))em/,
angleValue: /^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))deg/,
startCall: /^\(/,
endCall: /^\)/,
comma: /^,/,
hexColor: /^#([0-9a-fA-F]+)/,
literalColor: /^([a-zA-Z]+)/,
rgbColor: /^rgb/i,
spacedRgbColor: /^(\d{1,3})\s+(\d{1,3})\s+(\d{1,3})\s+\/\s+([0-1](\.\d+)?)/,
rgbaColor: /^rgba/i,
hslColor: /^hsl/i,
hsvColor: /^hsv/i,
number: /^(([0-9]*\.[0-9]+)|([0-9]+\.?))/
};
function error(msg) {
const err = new Error(input + ": " + msg);
throw err;
}
function consume(size) {
input = input.substr(size);
}
function scan(regexp) {
const blankCaptures = /^[\n\r\t\s]+/.exec(input);
if (blankCaptures) {
consume(blankCaptures[0].length);
}
const captures = regexp.exec(input);
if (captures) {
consume(captures[0].length);
}
return captures;
}
function matchListing(matcher) {
let captures = matcher();
const result = [];
if (captures) {
result.push(captures);
while (scan(tokens.comma)) {
captures = matcher();
if (captures) {
result.push(captures);
} else {
error("One extra comma");
}
}
}
return result;
}
function match(type, pattern, captureIndex) {
const captures = scan(pattern);
if (captures) {
return {
type,
value: captures[captureIndex]
};
}
}
function matchHexColor() {
const hexObj = match("hex", tokens.hexColor, 1);
if (hexObj == null ? void 0 : hexObj.value) {
const { r, g, b, a: a2 } = tc(hexObj == null ? void 0 : hexObj.value).toRgb();
return {
value: `rgba(${r}, ${g}, ${b}, ${a2})`
};
}
}
const checkCaps = (val) => {
const capIt = isUpperCase(val == null ? void 0 : val[0]);
return {
value: `${capIt ? "RGBA" : "rgba"}(${matchListing(matchNumber)})`
};
};
function matchCall(pattern, callback) {
const captures = scan(pattern);
if (captures) {
if (!scan(tokens.startCall)) {
error("Missing (");
}
const result = callback(captures);
if (!scan(tokens.endCall)) {
error("Missing )");
}
return result;
}
}
function matchHSLColor() {
return matchCall(tokens.hslColor, convertHsl);
}
function matchRGBAColor() {
return matchCall(tokens.rgbaColor, checkCaps);
}
function matchRGBColor() {
return matchCall(tokens.rgbColor, convertRgb);
}
function matchLiteralColor() {
const litObj = match("literal", tokens.literalColor, 0);
if (litObj == null ? void 0 : litObj.value) {
const { r, g, b, a: a2 } = tc(litObj == null ? void 0 : litObj.value).toRgb();
return {
value: `rgba(${r}, ${g}, ${b}, ${a2})`
};
}
}
function matchHSVColor() {
return matchCall(tokens.hsvColor, convertHsv);
}
function matchColor() {
return matchHexColor() || matchHSLColor() || matchRGBAColor() || matchRGBColor() || matchLiteralColor() || matchHSVColor();
}
function matchColorStop() {
var _a;
const color2 = matchColor();
if (!color2) {
error("Expected color definition");
}
color2.left = ~~((_a = matchDistance()) == null ? void 0 : _a.value);
return color2;
}
function matchGradient(gradientType, pattern, orientationMatcher) {
return matchCall(pattern, function() {
const orientation = orientationMatcher();
if (orientation) {
if (!scan(tokens.comma)) {
error("Missing comma before color stops");
}
}
return {
type: gradientType,
orientation,
colorStops: matchListing(matchColorStop)
};
});
}
function matchLinearOrientation() {
return matchSideOrCorner() || matchAngle();
}
function matchDefinition() {
return matchGradient(
"linear-gradient",
tokens.linearGradient,
matchLinearOrientation
) || matchGradient(
"repeating-linear-gradient",
tokens.repeatingLinearGradient,
matchLinearOrientation
) || matchGradient(
"radial-gradient",
tokens.radialGradient,
matchListRadialOrientations
) || matchGradient(
"repeating-radial-gradient",
tokens.repeatingRadialGradient,
matchListRadialOrientations
);
}
function matchListDefinitions() {
return matchListing(matchDefinition);
}
function getAST() {
var _a;
const ast = matchListDefinitions();
if (input.length > 0) {
error("Invalid input not EOF");
}
const ast0 = ast[0];
const checkSelected = (_a = ast0 == null ? void 0 : ast0.colorStops) == null ? void 0 : _a.filter(
(c) => isUpperCase(c.value)
).length;
const getGradientObj = () => {
if (checkSelected > 0) {
return ast0;
} else {
const val = (c, i) => i === 0 ? high(c) : low(c);
return __spreadProps(__spreadValues({}, ast0), {
colorStops: ast0.colorStops.map((c, i) => __spreadProps(__spreadValues({}, c), {
value: val(c, i)
}))
});
}
};
return getGradientObj();
}
function matchSideOrCorner() {
return match("directional", tokens.sideOrCorner, 1);
}
function matchAngle() {
return match("angular", tokens.angleValue, 1);
}
function matchListRadialOrientations() {
let radialOrientations, radialOrientation = matchRadialOrientation(), lookaheadCache;
if (radialOrientation) {
radialOrientations = [];
radialOrientations.push(radialOrientation);
lookaheadCache = input;
if (scan(tokens.comma)) {
radialOrientation = matchRadialOrientation();
if (radialOrientation) {
radialOrientations.push(radialOrientation);
} else {
input = lookaheadCache;
}
}
}
return radialOrientations;
}
function matchRadialOrientation() {
let radialType = matchCircle() || matchEllipse();
if (radialType) {
radialType.at = matchAtPosition();
} else {
const extent = matchExtentKeyword();
if (extent) {
radialType = extent;
const positionAt = matchAtPosition();
if (positionAt) {
radialType.at = positionAt;
}
} else {
const defaultPosition = matchPositioning();
if (defaultPosition) {
radialType = {
type: "default-radial",
// @ts-expect-error - need to circle back for these types
at: defaultPosition
};
}
}
}
return radialType;
}
function matchLength() {
return match("px", tokens.pixelValue, 1) || match("em", tokens.emValue, 1);
}
function matchCircle() {
const circle = match("shape", /^(circle)/i, 0);
if (circle) {
circle.style = matchLength() || matchExtentKeyword();
}
return circle;
}
function matchEllipse() {
const ellipse = match("shape", /^(ellipse)/i, 0);
if (ellipse) {
ellipse.style = matchDistance() || matchExtentKeyword();
}
return ellipse;
}
function matchExtentKeyword() {
return match("extent-keyword", tokens.extentKeywords, 1);
}
function matchAtPosition() {
if (match("position", /^at/, 0)) {
const positioning = matchPositioning();
if (!positioning) {
error("Missing positioning value");
}
return positioning;
}
}
function matchPositioning() {
const location = matchCoordinates();
if (location.x || location.y) {
return {
type: "position",
value: location
};
}
}
function matchCoordinates() {
return {
x: matchDistance(),
y: matchDistance()
};
}
function matchNumber() {
return scan(tokens.number)[1];
}
const convertHsl = (val) => {
const capIt = isUpperCase(val == null ? void 0 : val[0]);
const hsl2 = matchListing(matchNumber);
const { r, g, b, a: a2 } = tc({
h: hsl2[0],
s: hsl2[1],
l: hsl2[2],
a: hsl2[3] || 1
}).toRgb();
return {
value: `${capIt ? "RGBA" : "rgba"}(${r}, ${g}, ${b}, ${a2})`
};
};
const convertHsv = (val) => {
const capIt = isUpperCase(val == null ? void 0 : val[0]);
const hsv = matchListing(matchNumber);
const { r, g, b, a: a2 } = tc({
h: hsv[0],
s: hsv[1],
v: hsv[2],
a: hsv[3] || 1
}).toRgb();
return {
value: `${capIt ? "RGBA" : "rgba"}(${r}, ${g}, ${b}, ${a2})`
};
};
const convertRgb = (val) => {
const capIt = isUpperCase(val == null ? void 0 : val[0]);
const captures = scan(tokens.spacedRgbColor);
const [, r, g, b, a2 = 1] = captures || [null, ...matchListing(matchNumber)];
return {
value: `${capIt ? "RGBA" : "rgba"}(${r}, ${g}, ${b}, ${a2})`
};
};
function matchDistance() {
return match("%", tokens.percentageValue, 1) || matchPositionKeyword() || matchLength();
}
function matchPositionKeyword() {
return match("position-keyword", tokens.positionKeywords, 1);
}
return getAST();
};
var InputType = /* @__PURE__ */ ((InputType2) => {
InputType2["hsl"] = "HSL";
InputType2["rgb"] = "RGB";
InputType2["hsv"] = "HSV";
InputType2["cmyk"] = "CMYK";
return InputType2;
})(InputType || {});
var GradientType = /* @__PURE__ */ ((GradientType2) => {
GradientType2["linear"] = "linear";
GradientType2["radial"] = "radial";
return GradientType2;
})(GradientType || {});
var Modes = /* @__PURE__ */ ((Modes2) => {
Modes2["solid"] = "solid";
Modes2["gradient"] = "gradient";
return Modes2;
})(Modes || {});
var EventType = /* @__PURE__ */ ((EventType2) => {
EventType2["change"] = "change";
EventType2["update"] = "update:value";
return EventType2;
})(EventType || {});
const DEFAULT_VALUES = {
/** 默认颜色 */
DEFAULT_COLOR: "rgba(175, 51, 242, 1)",
/** 默认宽度 */
DEFAULT_WIDTH: 300,
/** 默认角度 */
DEFAULT_DEGREES: 90,
/** 最大预设颜色数量 */
MAX_PRESET_COLORS: 18,
/** 最小渐变点数量 */
MIN_GRADIENT_POINTS: 2
};
const inputTypes = [
InputType.rgb,
InputType.hsl
// InputType.hsv,
// InputType.cmyk,
];
const config = {
barSize: 18,
crossSize: 18,
delay: 150,
defaultColor: "rgba(175, 51, 242, 1)",
defaultGradient: "linear-gradient(90deg, rgb(245, 66, 245) 0%, rgb(0, 0, 255) 100%)"
};
const presetColors = [
"rgba(0,0,0,1)",
"rgba(128,128,128, 1)",
"rgba(192,192,192, 1)",
"rgba(255,255,255, 1)",
"rgba(0,0,128,1)",
"rgba(0,0,255,1)",
"rgba(0,255,255, 1)",
"rgba(0,128,0,1)",
"rgba(128,128,0, 1)",
"rgba(0,128,128,1)",
"rgba(0,255,0, 1)",
"rgba(128,0,0, 1)",
"rgba(128,0,128, 1)",
"rgba(175, 51, 242, 1)",
"rgba(255,0,255, 1)",
"rgba(255,0,0, 1)",
"rgba(240, 103, 46, 1)",
"rgba(255,255,0, 1)"
];
const { defaultColor, defaultGradient } = config;
const low = (color2) => {
var _a;
return ((_a = color2.value) == null ? void 0 : _a.toLowerCase()) || "";
};
const high = (color2) => {
var _a;
return ((_a = color2.value) == null ? void 0 : _a.toUpperCase()) || "";
};
const getColors = (value) => {
if (!value || typeof value !== "string") {
console.warn("getColors: invalid value provided");
return [{ value: defaultColor }];
}
const isGradient = value.includes("gradient");
if (isGradient) {
const isConic = value.includes("conic");
const safeValue = !isConic ? value : defaultGradient;
if (isConic) {
console.warn("Sorry we can't handle conic gradients yet");
}
try {
const obj = gradientParser(safeValue);
return (obj == null ? void 0 : obj.colorStops) || [{ value: defaultColor }];
} catch (error) {
console.error("Error parsing gradient:", error);
return [{ value: defaultColor }];
}
} else {
const safeValue = value || defaultColor;
return [{ value: safeValue }];
}
};
const formatInputValues = (value, min, max) => {
if (typeof value !== "number" || isNaN(value)) {
return min;
}
if (value < min) return min;
if (value > max) return max;
return value;
};
const round = (val) => {
if (typeof val !== "number" || isNaN(val)) {
return 0;
}
return Math.round(val);
};
const clamp = (value, min, max) => {
return Math.min(Math.max(value, min), max);
};
const percentToDecimal = (percent) => {
return clamp(percent, 0, 100) / 100;
};
const decimalToPercent = (decimal) => {
return round(clamp(decimal, 0, 1) * 100);
};
const { barSize, crossSize } = config;
const safeBounds = (e2) => {
const client = e2.target.parentNode.getBoundingClientRect();
const className = e2.target.className;
const adjuster = className === "c-resize ps-rl" ? 15 : 0;
return {
offsetLeft: (client == null ? void 0 : client.x) + adjuster,
offsetTop: client == null ? void 0 : client.y,
clientWidth: client == null ? void 0 : client.width,
clientHeight: client == null ? void 0 : client.height
};
};
function getHandleValue(e2) {
const { offsetLeft, clientWidth } = safeBounds(e2);
const pos = e2.clientX - offsetLeft - barSize / 2;
const adjuster = clientWidth - 18;
const bounded = formatInputValues(pos, 0, adjuster);
return Math.round(bounded / (adjuster / 100));
}
function computeSquareXY(s, v, squareWidth, squareHeight) {
const x = s * squareWidth - crossSize / 2;
const y = (100 - v) / 100 * squareHeight - crossSize / 2;
return [x, y];
}
const getClientXY = (e2) => {
if (e2.clientX) {
return { clientX: e2.clientX, clientY: e2.clientY };
} else {
const touch = e2.touches[0] || {};
return { clientX: touch.clientX, clientY: touch.clientY };
}
};
function computePickerPosition(e2) {
const { offsetLeft, offsetTop, clientWidth, clientHeight } = safeBounds(e2);
const { clientX, clientY } = getClientXY(e2);
const getX = () => {
const xPos = clientX - offsetLeft - crossSize / 2;
return formatInputValues(xPos, -9, clientWidth - 10);
};
const getY = () => {
const yPos = clientY - offsetTop - crossSize / 2;
return formatInputValues(yPos, -9, clientHeight - 10);
};
return [getX(), getY()];
}
const isUpperCase = (str) => {
if (!str || typeof str !== "string") return false;
return /[A-Z]/.test(str);
};
const convertShortHandDeg = (dir) => {
if (dir === "to top") {
return 0;
} else if (dir === "to bottom") {
return 180;
} else if (dir === "to left") {
return 270;
} else if (dir === "to right") {
return 90;
} else if (dir === "to top right") {
return 45;
} else if (dir === "to bottom right") {
return 135;
} else if (dir === "to bottom left") {
return 225;
} else if (dir === "to top left") {
return 315;
} else {
const safeDir = dir || 0;
const parsed = parseInt(safeDir);
return isNaN(parsed) ? 0 : parsed;
}
};
const getDegrees = (value) => {
var _a;
if (!value || typeof value !== "string") return 0;
const s1 = value.split(",")[0];
const s2 = (_a = s1 == null ? void 0 : s1.split("(")[1]) == null ? void 0 : _a.replace("deg", "");
return convertShortHandDeg(s2);
};
const getIsGradient = (value) => {
if (!value || typeof value !== "string") return false;
return value.includes("gradient");
};
const getDetails = (value) => {
if (!value || typeof value !== "string") {
return {
degrees: 0,
degreeStr: "0deg",
gradientType: ""
};
}
const gradientType = value.split("(")[0];
const degrees = getDegrees(value);
const degreeStr = gradientType === "linear-gradient" ? `${degrees}deg` : "circle";
return {
degrees,
degreeStr,
gradientType
};
};
const _sfc_main$i = /* @__PURE__ */ defineComponent({
__name: "Opacity",
setup(__props, { expose: __expose }) {
__expose();
const { colorState, changeColor } = inject("colorProvider");
const dragging = ref(false);
const left = ref(colorState.width - 18);
const bg = computed(() => {
if (colorState.hc) {
const { r, g, b } = colorState.hc;
return `linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(${r},${g},${b},.5) 100%)`;
}
return "";
});
const stopDragging = () => {
dragging.value = false;
};
const onMousedown = () => {
dragging.value = true;
};
const handleOpacity = (e2) => {
if (!colorState.hc) return;
const { r, g, b } = colorState.hc;
const newO = getHandleValue(e2) / 100;
const newColor = `rgba(${r}, ${g}, ${b}, ${newO})`;
changeColor(newColor);
};
const onMouseMove = throttle(function(e2) {
if (unref(dragging)) {
handleOpacity(e2);
}
}, 80);
const handleClick = (e2) => {
if (!unref(dragging)) {
handleOpacity(e2);
}
};
onMounted(() => {
window.addEventListener("mouseup", stopDragging);
});
onBeforeUnmount(() => {
window.removeEventListener("mouseup", stopDragging);
});
const __returned__ = { colorState, changeColor, dragging, left, bg, stopDragging, onMousedown, handleOpacity, onMouseMove, handleClick };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
var _a;
return openBlock(), createElementBlock("section", {
class: "cpg-opacity-wrap",
onMousedown: $setup.onMousedown,
onMousemove: _cache[0] || (_cache[0] = (...args) => $setup.onMouseMove && $setup.onMouseMove(...args)),
onMouseup: $setup.stopDragging
}, [
_cache[1] || (_cache[1] = createElementVNode("div", { class: "cpg-opacity-bar" }, null, -1)),
createElementVNode("div", {
class: normalizeClass(["cpg-pointer", { "cpg-cursor-pointer": $setup.dragging }]),
style: normalizeStyle({ left: $setup.left * ((_a = $setup.colorState.hc) == null ? void 0 : _a.a) + "px" })
}, null, 6),
createElementVNode("div", {
class: "cpg-opacity-color",
style: normalizeStyle({ background: $setup.bg }),
onClick: $setup.handleClick
}, null, 4)
], 32);
}
const Opacity = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$i], ["__file", "Opacity.vue"]]);
const _sfc_main$h = /* @__PURE__ */ defineComponent({
__name: "PickerArea",
setup(__props, { expose: __expose }) {
__expose();
const { colorState, isGradient, setValue, updateSelectColor } = inject(
"colorProvider"
);
const { crossSize: crossSize2 } = config;
const canvasRef = ref(null);
const dragging = ref(false);
const setDragging = (val) => dragging.value = val;
const stopDragging = () => {
setDragging(false);
};
const dragPos = reactive({
x: 0,
y: 0
});
const handleColor = (e2) => {
var _a, _b;
const [x, y] = computePickerPosition(e2);
if (x && y) {
const width = colorState.width;
const height = colorState.height;
const x1 = Math.min(x + crossSize2 / 2, width - 1);
const y1 = Math.min(y + crossSize2 / 2, height - 1);
const newS = x1 / width * 100;
const newY = 100 - y1 / height * 100;
dragPos.x = newY === 0 ? dragPos.x : x;
dragPos.y = y;
const updated = tc(
`hsva(${(_a = colorState.hc) == null ? void 0 : _a.h}, ${newS}%, ${newY}%, ${(_b = colorState.hc) == null ? void 0 : _b.a})`
);
const color2 = updated.toRgbString();
unref(isGradient) ? updateSelectColor(color2) : setValue(color2);
}
};
const handleMove = throttle(function(e2) {
if (unref(dragging)) {
handleColor(e2);
}
}, 50);
const handleCanvasDown = (e2) => {
setDragging(true);
handleColor(e2);
};
const handleMouseDown = () => {
setDragging(true);
};
const handleUp = () => {
stopDragging();
};
onMounted(() => {
window.addEventListener("mouseup", handleUp);
});
onBeforeUnmount(() => {
window.removeEventListener("mouseup", handleUp);
});
watchEffect(() => {
var _a, _b;
if (colorState.hc) {
const [x, y] = computeSquareXY(
(_a = colorState.hc) == null ? void 0 : _a.s,
((_b = colorState.hc) == null ? void 0 : _b.v) * 100,
colorState.width,
colorState.height
);
dragPos.x = x;
dragPos.y = y;
}
});
watchEffect(() => {
var _a;
const canvas = unref(canvasRef);
if (canvas) {
const width = colorState.width;
const height = colorState.height;
const hue = (_a = colorState.hc) == null ? void 0 : _a.h;
const ctx = canvas.getContext("2d", { willReadFrequently: true });
if (ctx) {
ctx.fillStyle = `hsl(${hue}, 100%, 50%)`;
ctx.fillRect(0, 0, colorState.width, height);
const gradientWhite = ctx.createLinearGradient(0, 0, width, 0);
gradientWhite.addColorStop(0, `rgba(255, 255, 255, 1)`);
gradientWhite.addColorStop(1, `rgba(255, 255, 255, 0)`);
ctx.fillStyle = gradientWhite;
ctx.fillRect(0, 0, width, height);
const gradientBlack = ctx.createLinearGradient(0, 0, 0, height);
gradientBlack.addColorStop(0, `rgba(0, 0, 0, 0)`);
gradientBlack.addColorStop(1, `rgba(0, 0, 0, 1)`);
ctx.fillStyle = gradientBlack;
ctx.fillRect(0, 0, width, height);
}
}
});
const __returned__ = { colorState, isGradient, setValue, updateSelectColor, crossSize: crossSize2, canvasRef, dragging, setDragging, stopDragging, dragPos, handleColor, handleMove, handleCanvasDown, handleMouseDown, handleUp };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
const _hoisted_1$b = { class: "relative" };
function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("section", _hoisted_1$b, [
createElementVNode("div", {
class: "cpg-picker-wrap",
style: normalizeStyle({
width: `${$setup.colorState.width}px`
}),
onMouseup: $setup.stopDragging,
onTouchend: $setup.stopDragging,
onMousedown: $setup.handleCanvasDown,
onTouchstart: $setup.handleCanvasDown,
onMousemove: _cache[0] || (_cache[0] = (...args) => $setup.handleMove && $setup.handleMove(...args))
}, [
createElementVNode("span", {
class: normalizeClass(["cpg-pointer", { "cpg-cursor-pointer": $setup.dragging }]),
style: normalizeStyle({
left: `${$setup.dragPos.x}px`,
top: `${$setup.dragPos.y}px`
}),
onMousedown: $setup.handleMouseDown
}, null, 38),
createElementVNode("canvas", {
ref: "canvasRef",
class: "cpg-picker-area",
style: normalizeStyle({
width: `${$setup.colorState.width}px`,
height: `${$setup.colorState.height}px`
})
}, null, 4)
], 36)
]);
}
const PickerArea = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$h], ["__file", "PickerArea.vue"]]);
/*!
* html2canvas 1.4.1 <https://html2canvas.hertzen.com>
* Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
* Released under MIT License
*/
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
};
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var __assign = function() {
__assign = Object.assign || function __assign2(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e2) {
reject(e2);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e2) {
reject(e2);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() {
if (t[0] & 1) throw t[1];
return t[1];
}, trys: [], ops: [] }, f2, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n) {
return function(v) {
return step([n, v]);
};
}
function step(op) {
if (f2) throw new TypeError("Generator is already executing.");
while (_) try {
if (f2 = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e2) {
op = [6, e2];
y = 0;
} finally {
f2 = t = 0;
}
if (op[0] & 5) throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __spreadArray(to, from, pack2) {
if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || from);
}
var Bounds = (
/** @class */
function() {
function Bounds2(left, top, width, height) {
this.left = left;
this.top = top;
this.width = width;
this.height = height;
}
Bounds2.prototype.add = function(x, y, w, h) {
return new Bounds2(this.left + x, this.top + y, this.width + w, this.height + h);
};
Bounds2.fromClientRect = function(context, clientRect) {
return new Bounds2(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);
};
Bounds2.fromDOMRectList = function(context, domRectList) {
var domRect = Array.from(domRectList).find(function(rect) {
return rect.width !== 0;
});
return domRect ? new Bounds2(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height) : Bounds2.EMPTY;
};
Bounds2.EMPTY = new Bounds2(0, 0, 0, 0);
return Bounds2;
}()
);
var parseBounds = function(context, node) {
return Bounds.fromClientRect(context, node.getBoundingClientRect());
};
var parseDocumentSize = function(document2) {
var body = document2.body;
var documentElement = document2.documentElement;
if (!body || !documentElement) {
throw new Error("Unable to get document size");
}
var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));
var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));
return new Bounds(0, 0, width, height);
};
var toCodePoints$1 = function(str) {
var codePoints = [];
var i = 0;
var length = str.length;
while (i < length) {
var value = str.charCodeAt(i++);
if (value >= 55296 && value <= 56319 && i < length) {
var extra = str.charCodeAt(i++);
if ((extra & 64512) === 56320) {
codePoints.push(((value & 1023) << 10) + (extra & 1023) + 65536);
} else {
codePoints.push(value);
i--;
}
} else {
codePoints.push(value);
}
}
return codePoints;
};
var fromCodePoint$1 = function() {
var codePoints = [];
for (var _i = 0; _i < arguments.length; _i++) {
codePoints[_i] = arguments[_i];
}
if (String.fromCodePoint) {
return String.fromCodePoint.apply(String, codePoints);
}
var length = codePoints.length;
if (!length) {
return "";
}
var codeUnits = [];
var index2 = -1;
var result = "";
while (++index2 < length) {
var codePoint = codePoints[index2];
if (codePoint <= 65535) {
codeUnits.push(codePoint);
} else {
codePoint -= 65536;
codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320);
}
if (index2 + 1 === length || codeUnits.length > 16384) {
result += String.fromCharCode.apply(String, codeUnits);
codeUnits.length = 0;
}
}
return result;
};
var chars$2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var lookup$2 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
for (var i$2 = 0; i$2 < chars$2.length; i$2++) {
lookup$2[chars$2.charCodeAt(i$2)] = i$2;
}
var chars$1$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var lookup$1$1 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {
lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;
}
var decode$1 = function(base642) {
var bufferLength = base642.length * 0.75, len = base642.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
if (base642[base642.length - 1] === "=") {
bufferLength--;
if (base642[base642.length - 2] === "=") {
bufferLength--;
}
}
var buffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.slice !== "undefined" ? new ArrayBuffer(bufferLength) : new Array(bufferLength);
var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);
for (i = 0; i < len; i += 4) {
encoded1 = lookup$1$1[base642.charCodeAt(i)];
encoded2 = lookup$1$1[base642.charCodeAt(i + 1)];
encoded3 = lookup$1$1[base642.charCodeAt(i + 2)];
encoded4 = lookup$1$1[base642.charCodeAt(i + 3)];
bytes[p++] = encoded1 << 2 | encoded2 >> 4;
bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
}
return buffer;
};
var polyUint16Array$1 = function(buffer) {
var length = buffer.length;
var bytes = [];
for (var i = 0; i < length; i += 2) {
bytes.push(buffer[i + 1] << 8 | buffer[i]);
}
return bytes;
};
var polyUint32Array$1 = function(buffer) {
var length = buffer.length;
var bytes = [];
for (var i = 0; i < length; i += 4) {
bytes.push(buffer[i + 3] << 24 | buffer[i + 2] << 16 | buffer[i + 1] << 8 | buffer[i]);
}
return bytes;
};
var UTRIE2_SHIFT_2$1 = 5;
var UTRIE2_SHIFT_1$1 = 6 + 5;
var UTRIE2_INDEX_SHIFT$1 = 2;
var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;
var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 65536 >> UTRIE2_SHIFT_2$1;
var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;
var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;
var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 1024 >> UTRIE2_SHIFT_2$1;
var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;
var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;
var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 2048 >> 6;
var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;
var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 65536 >> UTRIE2_SHIFT_1$1;
var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;
var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;
var slice16$1 = function(view, start, end) {
if (view.slice) {
return view.slice(start, end);
}
return new Uint16Array(Array.prototype.slice.call(view, start, end));
};
var slice32$1 = function(view, start, end) {
if (view.slice) {
return view.slice(start, end);
}
return new Uint32Array(Array.prototype.slice.call(view, start, end));
};
var createTrieFromBase64$1 = function(base642, _byteLength) {
var buffer = decode$1(base642);
var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);
var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);
var headerLength = 24;
var index2 = slice16$1(view16, headerLength / 2, view32[4] / 2);
var data = view32[5] === 2 ? slice16$1(view16, (headerLength + view32[4]) / 2) : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));
return new Trie$1(view32[0], view32[1], view32[2], view32[3], index2, data);
};
var Trie$1 = (
/** @class */
function() {
function Trie2(initialValue, errorValue, highStart, highValueIndex, index2, data) {
this.initialValue = initialValue;
this.errorValue = errorValue;
this.highStart = highStart;
this.highValueIndex = highValueIndex;
this.index = index2;
this.data = data;
}
Trie2.prototype.get = function(codePoint) {
var ix;
if (codePoint >= 0) {
if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) {
ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
return this.data[ix];
}
if (codePoint <= 65535) {
ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + (codePoint - 55296 >> UTRIE2_SHIFT_2$1)];
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
return this.data[ix];
}
if (codePoint < this.highStart) {
ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);
ix = this.index[ix];
ix += codePoint >> UTRIE2_SHIFT_2$1 & UTRIE2_INDEX_2_MASK$1;
ix = this.index[ix];
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
return this.data[ix];
}
if (codePoint <= 1114111) {
return this.data[this.highValueIndex];
}
}
return this.errorValue;
};
return Trie2;
}()
);
var chars$3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var lookup$3 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
for (var i$3 = 0; i$3 < chars$3.length; i$3++) {
lookup$3[chars$3.charCodeAt(i$3)] = i$3;
}
var base64$1 = "KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQA