django-vue3-admin-web/node_modules/.vite/deps/fs-cropper-d9786edb-FTL4HHUI.js
2025-10-20 21:21:14 +08:00

2213 lines
76 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
ge
} from "./chunk-O6L55DMN.js";
import "./chunk-FNDTTSSL.js";
import {
lt
} from "./chunk-KE6WE6IM.js";
import "./chunk-KRMUJIEJ.js";
import "./chunk-YFT6OQ5R.js";
import {
B
} from "./chunk-USOO7D3G.js";
import "./chunk-F73GDDKZ.js";
import "./chunk-LK7GAOJV.js";
import "./chunk-GCDLWRBO.js";
import {
Fragment,
computed,
createBaseVNode,
createBlock,
createElementBlock,
createVNode,
defineComponent,
h,
mergeProps,
normalizeClass,
openBlock,
ref,
renderList,
resolveComponent,
resolveDynamicComponent,
toDisplayString,
vShow,
withCtx,
withDirectives
} from "./chunk-YI6SOFIT.js";
import "./chunk-PLDDJCW6.js";
// node_modules/@fast-crud/fast-extends/dist/fs-cropper-d9786edb.mjs
function ae(a, t) {
var i = Object.keys(a);
if (Object.getOwnPropertySymbols) {
var e = Object.getOwnPropertySymbols(a);
t && (e = e.filter(function(n) {
return Object.getOwnPropertyDescriptor(a, n).enumerable;
})), i.push.apply(i, e);
}
return i;
}
function we(a) {
for (var t = 1; t < arguments.length; t++) {
var i = arguments[t] != null ? arguments[t] : {};
t % 2 ? ae(Object(i), true).forEach(function(e) {
Ke(a, e, i[e]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(a, Object.getOwnPropertyDescriptors(i)) : ae(Object(i)).forEach(function(e) {
Object.defineProperty(a, e, Object.getOwnPropertyDescriptor(i, e));
});
}
return a;
}
function Qe(a, t) {
if (typeof a != "object" || !a)
return a;
var i = a[Symbol.toPrimitive];
if (i !== void 0) {
var e = i.call(a, t || "default");
if (typeof e != "object")
return e;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (t === "string" ? String : Number)(a);
}
function ye(a) {
var t = Qe(a, "string");
return typeof t == "symbol" ? t : t + "";
}
function Pt(a) {
"@babel/helpers - typeof";
return Pt = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t) {
return typeof t;
} : function(t) {
return t && typeof Symbol == "function" && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
}, Pt(a);
}
function Ze(a, t) {
if (!(a instanceof t))
throw new TypeError("Cannot call a class as a function");
}
function re(a, t) {
for (var i = 0; i < t.length; i++) {
var e = t[i];
e.enumerable = e.enumerable || false, e.configurable = true, "value" in e && (e.writable = true), Object.defineProperty(a, ye(e.key), e);
}
}
function qe(a, t, i) {
return t && re(a.prototype, t), i && re(a, i), Object.defineProperty(a, "prototype", {
writable: false
}), a;
}
function Ke(a, t, i) {
return t = ye(t), t in a ? Object.defineProperty(a, t, {
value: i,
enumerable: true,
configurable: true,
writable: true
}) : a[t] = i, a;
}
function xe(a) {
return Je(a) || ti(a) || ei(a) || ii();
}
function Je(a) {
if (Array.isArray(a))
return Ht(a);
}
function ti(a) {
if (typeof Symbol < "u" && a[Symbol.iterator] != null || a["@@iterator"] != null)
return Array.from(a);
}
function ei(a, t) {
if (a) {
if (typeof a == "string")
return Ht(a, t);
var i = Object.prototype.toString.call(a).slice(8, -1);
if (i === "Object" && a.constructor && (i = a.constructor.name), i === "Map" || i === "Set")
return Array.from(a);
if (i === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))
return Ht(a, t);
}
}
function Ht(a, t) {
(t == null || t > a.length) && (t = a.length);
for (var i = 0, e = new Array(t); i < t; i++)
e[i] = a[i];
return e;
}
function ii() {
throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
}
var Nt = typeof window < "u" && typeof window.document < "u";
var V = Nt ? window : {};
var Gt = Nt && V.document.documentElement ? "ontouchstart" in V.document.documentElement : false;
var Qt = Nt ? "PointerEvent" in V : false;
var C = "cropper";
var Zt = "all";
var De = "crop";
var Ce = "move";
var Me = "zoom";
var J = "e";
var tt = "w";
var rt = "s";
var Q = "n";
var ut = "ne";
var ft = "nw";
var dt = "se";
var gt = "sw";
var Yt = "".concat(C, "-crop");
var oe = "".concat(C, "-disabled");
var I = "".concat(C, "-hidden");
var ne = "".concat(C, "-hide");
var ai = "".concat(C, "-invisible");
var Ot = "".concat(C, "-modal");
var Wt = "".concat(C, "-move");
var vt = "".concat(C, "Action");
var Et = "".concat(C, "Preview");
var qt = "crop";
var Ee = "move";
var Te = "none";
var Xt = "crop";
var Ut = "cropend";
var jt = "cropmove";
var Vt = "cropstart";
var se = "dblclick";
var ri = Gt ? "touchstart" : "mousedown";
var oi = Gt ? "touchmove" : "mousemove";
var ni = Gt ? "touchend touchcancel" : "mouseup";
var he = Qt ? "pointerdown" : ri;
var ce = Qt ? "pointermove" : oi;
var le = Qt ? "pointerup pointercancel" : ni;
var pe = "ready";
var ue = "resize";
var fe = "wheel";
var $t = "zoom";
var de = "image/jpeg";
var si = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;
var hi = /^data:/;
var ci = /^data:image\/jpeg;base64,/;
var li = /^img|canvas$/i;
var Oe = 200;
var Ne = 100;
var ge2 = {
// Define the view mode of the cropper
viewMode: 0,
// 0, 1, 2, 3
// Define the dragging mode of the cropper
dragMode: qt,
// 'crop', 'move' or 'none'
// Define the initial aspect ratio of the crop box
initialAspectRatio: NaN,
// Define the aspect ratio of the crop box
aspectRatio: NaN,
// An object with the previous cropping result data
data: null,
// A selector for adding extra containers to preview
preview: "",
// Re-render the cropper when resize the window
responsive: true,
// Restore the cropped area after resize the window
restore: true,
// Check if the current image is a cross-origin image
checkCrossOrigin: true,
// Check the current image's Exif Orientation information
checkOrientation: true,
// Show the black modal
modal: true,
// Show the dashed lines for guiding
guides: true,
// Show the center indicator for guiding
center: true,
// Show the white modal to highlight the crop box
highlight: true,
// Show the grid background
background: true,
// Enable to crop the image automatically when initialize
autoCrop: true,
// Define the percentage of automatic cropping area when initializes
autoCropArea: 0.8,
// Enable to move the image
movable: true,
// Enable to rotate the image
rotatable: true,
// Enable to scale the image
scalable: true,
// Enable to zoom the image
zoomable: true,
// Enable to zoom the image by dragging touch
zoomOnTouch: true,
// Enable to zoom the image by wheeling mouse
zoomOnWheel: true,
// Define zoom ratio when zoom the image by wheeling mouse
wheelZoomRatio: 0.1,
// Enable to move the crop box
cropBoxMovable: true,
// Enable to resize the crop box
cropBoxResizable: true,
// Toggle drag mode between "crop" and "move" when click twice on the cropper
toggleDragModeOnDblclick: true,
// Size limitation
minCanvasWidth: 0,
minCanvasHeight: 0,
minCropBoxWidth: 0,
minCropBoxHeight: 0,
minContainerWidth: Oe,
minContainerHeight: Ne,
// Shortcuts of events
ready: null,
cropstart: null,
cropmove: null,
cropend: null,
crop: null,
zoom: null
};
var pi = '<div class="cropper-container" touch-action="none"><div class="cropper-wrap-box"><div class="cropper-canvas"></div></div><div class="cropper-drag-box"></div><div class="cropper-crop-box"><span class="cropper-view-box"></span><span class="cropper-dashed dashed-h"></span><span class="cropper-dashed dashed-v"></span><span class="cropper-center"></span><span class="cropper-face"></span><span class="cropper-line line-e" data-cropper-action="e"></span><span class="cropper-line line-n" data-cropper-action="n"></span><span class="cropper-line line-w" data-cropper-action="w"></span><span class="cropper-line line-s" data-cropper-action="s"></span><span class="cropper-point point-e" data-cropper-action="e"></span><span class="cropper-point point-n" data-cropper-action="n"></span><span class="cropper-point point-w" data-cropper-action="w"></span><span class="cropper-point point-s" data-cropper-action="s"></span><span class="cropper-point point-ne" data-cropper-action="ne"></span><span class="cropper-point point-nw" data-cropper-action="nw"></span><span class="cropper-point point-sw" data-cropper-action="sw"></span><span class="cropper-point point-se" data-cropper-action="se"></span></div></div>';
var ui = Number.isNaN || V.isNaN;
function v(a) {
return typeof a == "number" && !ui(a);
}
var me = function(t) {
return t > 0 && t < 1 / 0;
};
function zt(a) {
return typeof a > "u";
}
function et(a) {
return Pt(a) === "object" && a !== null;
}
var fi = Object.prototype.hasOwnProperty;
function ot(a) {
if (!et(a))
return false;
try {
var t = a.constructor, i = t.prototype;
return t && i && fi.call(i, "isPrototypeOf");
} catch {
return false;
}
}
function k(a) {
return typeof a == "function";
}
var di = Array.prototype.slice;
function Se(a) {
return Array.from ? Array.from(a) : di.call(a);
}
function N(a, t) {
return a && k(t) && (Array.isArray(a) || v(a.length) ? Se(a).forEach(function(i, e) {
t.call(a, i, e, a);
}) : et(a) && Object.keys(a).forEach(function(i) {
t.call(a, a[i], i, a);
})), a;
}
var M = Object.assign || function(t) {
for (var i = arguments.length, e = new Array(i > 1 ? i - 1 : 0), n = 1; n < i; n++)
e[n - 1] = arguments[n];
return et(t) && e.length > 0 && e.forEach(function(r) {
et(r) && Object.keys(r).forEach(function(o) {
t[o] = r[o];
});
}), t;
};
var gi = /\.\d*(?:0|9){12}\d*$/;
function st(a) {
var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e11;
return gi.test(a) ? Math.round(a * t) / t : a;
}
var mi = /^width|height|left|top|marginLeft|marginTop$/;
function Z(a, t) {
var i = a.style;
N(t, function(e, n) {
mi.test(n) && v(e) && (e = "".concat(e, "px")), i[n] = e;
});
}
function vi(a, t) {
return a.classList ? a.classList.contains(t) : a.className.indexOf(t) > -1;
}
function S(a, t) {
if (t) {
if (v(a.length)) {
N(a, function(e) {
S(e, t);
});
return;
}
if (a.classList) {
a.classList.add(t);
return;
}
var i = a.className.trim();
i ? i.indexOf(t) < 0 && (a.className = "".concat(i, " ").concat(t)) : a.className = t;
}
}
function j(a, t) {
if (t) {
if (v(a.length)) {
N(a, function(i) {
j(i, t);
});
return;
}
if (a.classList) {
a.classList.remove(t);
return;
}
a.className.indexOf(t) >= 0 && (a.className = a.className.replace(t, ""));
}
}
function nt(a, t, i) {
if (t) {
if (v(a.length)) {
N(a, function(e) {
nt(e, t, i);
});
return;
}
i ? S(a, t) : j(a, t);
}
}
var bi = /([a-z\d])([A-Z])/g;
function Kt(a) {
return a.replace(bi, "$1-$2").toLowerCase();
}
function Ft(a, t) {
return et(a[t]) ? a[t] : a.dataset ? a.dataset[t] : a.getAttribute("data-".concat(Kt(t)));
}
function bt(a, t, i) {
et(i) ? a[t] = i : a.dataset ? a.dataset[t] = i : a.setAttribute("data-".concat(Kt(t)), i);
}
function wi(a, t) {
if (et(a[t]))
try {
delete a[t];
} catch {
a[t] = void 0;
}
else if (a.dataset)
try {
delete a.dataset[t];
} catch {
a.dataset[t] = void 0;
}
else
a.removeAttribute("data-".concat(Kt(t)));
}
var Re = /\s\s*/;
var Be = function() {
var a = false;
if (Nt) {
var t = false, i = function() {
}, e = Object.defineProperty({}, "once", {
get: function() {
return a = true, t;
},
/**
* This setter can fix a `TypeError` in strict mode
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}
* @param {boolean} value - The value to set
*/
set: function(r) {
t = r;
}
});
V.addEventListener("test", i, e), V.removeEventListener("test", i, e);
}
return a;
}();
function X(a, t, i) {
var e = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, n = i;
t.trim().split(Re).forEach(function(r) {
if (!Be) {
var o = a.listeners;
o && o[r] && o[r][i] && (n = o[r][i], delete o[r][i], Object.keys(o[r]).length === 0 && delete o[r], Object.keys(o).length === 0 && delete a.listeners);
}
a.removeEventListener(r, n, e);
});
}
function Y(a, t, i) {
var e = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, n = i;
t.trim().split(Re).forEach(function(r) {
if (e.once && !Be) {
var o = a.listeners, s = o === void 0 ? {} : o;
n = function() {
delete s[r][i], a.removeEventListener(r, n, e);
for (var l = arguments.length, h2 = new Array(l), c = 0; c < l; c++)
h2[c] = arguments[c];
i.apply(a, h2);
}, s[r] || (s[r] = {}), s[r][i] && a.removeEventListener(r, s[r][i], e), s[r][i] = n, a.listeners = s;
}
a.addEventListener(r, n, e);
});
}
function ht(a, t, i) {
var e;
return k(Event) && k(CustomEvent) ? e = new CustomEvent(t, {
detail: i,
bubbles: true,
cancelable: true
}) : (e = document.createEvent("CustomEvent"), e.initCustomEvent(t, true, true, i)), a.dispatchEvent(e);
}
function Ae(a) {
var t = a.getBoundingClientRect();
return {
left: t.left + (window.pageXOffset - document.documentElement.clientLeft),
top: t.top + (window.pageYOffset - document.documentElement.clientTop)
};
}
var Lt = V.location;
var yi = /^(\w+:)\/\/([^:/?#]*):?(\d*)/i;
function ve(a) {
var t = a.match(yi);
return t !== null && (t[1] !== Lt.protocol || t[2] !== Lt.hostname || t[3] !== Lt.port);
}
function be(a) {
var t = "timestamp=".concat((/* @__PURE__ */ new Date()).getTime());
return a + (a.indexOf("?") === -1 ? "?" : "&") + t;
}
function mt(a) {
var t = a.rotate, i = a.scaleX, e = a.scaleY, n = a.translateX, r = a.translateY, o = [];
v(n) && n !== 0 && o.push("translateX(".concat(n, "px)")), v(r) && r !== 0 && o.push("translateY(".concat(r, "px)")), v(t) && t !== 0 && o.push("rotate(".concat(t, "deg)")), v(i) && i !== 1 && o.push("scaleX(".concat(i, ")")), v(e) && e !== 1 && o.push("scaleY(".concat(e, ")"));
var s = o.length ? o.join(" ") : "none";
return {
WebkitTransform: s,
msTransform: s,
transform: s
};
}
function xi(a) {
var t = we({}, a), i = 0;
return N(a, function(e, n) {
delete t[n], N(t, function(r) {
var o = Math.abs(e.startX - r.startX), s = Math.abs(e.startY - r.startY), p = Math.abs(e.endX - r.endX), l = Math.abs(e.endY - r.endY), h2 = Math.sqrt(o * o + s * s), c = Math.sqrt(p * p + l * l), u = (c - h2) / h2;
Math.abs(u) > Math.abs(i) && (i = u);
});
}), i;
}
function Tt(a, t) {
var i = a.pageX, e = a.pageY, n = {
endX: i,
endY: e
};
return t ? n : we({
startX: i,
startY: e
}, n);
}
function Di(a) {
var t = 0, i = 0, e = 0;
return N(a, function(n) {
var r = n.startX, o = n.startY;
t += r, i += o, e += 1;
}), t /= e, i /= e, {
pageX: t,
pageY: i
};
}
function q(a) {
var t = a.aspectRatio, i = a.height, e = a.width, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "contain", r = me(e), o = me(i);
if (r && o) {
var s = i * t;
n === "contain" && s > e || n === "cover" && s < e ? i = e / t : e = i * t;
} else
r ? i = e / t : o && (e = i * t);
return {
width: e,
height: i
};
}
function Ci(a) {
var t = a.width, i = a.height, e = a.degree;
if (e = Math.abs(e) % 180, e === 90)
return {
width: i,
height: t
};
var n = e % 90 * Math.PI / 180, r = Math.sin(n), o = Math.cos(n), s = t * o + i * r, p = t * r + i * o;
return e > 90 ? {
width: p,
height: s
} : {
width: s,
height: p
};
}
function Mi(a, t, i, e) {
var n = t.aspectRatio, r = t.naturalWidth, o = t.naturalHeight, s = t.rotate, p = s === void 0 ? 0 : s, l = t.scaleX, h2 = l === void 0 ? 1 : l, c = t.scaleY, u = c === void 0 ? 1 : c, g = i.aspectRatio, m = i.naturalWidth, y = i.naturalHeight, b = e.fillColor, E = b === void 0 ? "transparent" : b, O = e.imageSmoothingEnabled, x = O === void 0 ? true : O, z = e.imageSmoothingQuality, B2 = z === void 0 ? "low" : z, f = e.maxWidth, w = f === void 0 ? 1 / 0 : f, T = e.maxHeight, A = T === void 0 ? 1 / 0 : T, L = e.minWidth, $ = L === void 0 ? 0 : L, W = e.minHeight, P = W === void 0 ? 0 : W, _ = document.createElement("canvas"), R = _.getContext("2d"), F = q({
aspectRatio: g,
width: w,
height: A
}), K = q({
aspectRatio: g,
width: $,
height: P
}, "cover"), it = Math.min(F.width, Math.max(K.width, m)), ct = Math.min(F.height, Math.max(K.height, y)), wt = q({
aspectRatio: n,
width: w,
height: A
}), yt = q({
aspectRatio: n,
width: $,
height: P
}, "cover"), lt2 = Math.min(wt.width, Math.max(yt.width, r)), at = Math.min(wt.height, Math.max(yt.height, o)), St = [-lt2 / 2, -at / 2, lt2, at];
return _.width = st(it), _.height = st(ct), R.fillStyle = E, R.fillRect(0, 0, it, ct), R.save(), R.translate(it / 2, ct / 2), R.rotate(p * Math.PI / 180), R.scale(h2, u), R.imageSmoothingEnabled = x, R.imageSmoothingQuality = B2, R.drawImage.apply(R, [a].concat(xe(St.map(function(Rt) {
return Math.floor(st(Rt));
})))), R.restore(), _;
}
var _e = String.fromCharCode;
function Ei(a, t, i) {
var e = "";
i += t;
for (var n = t; n < i; n += 1)
e += _e(a.getUint8(n));
return e;
}
var Ti = /^data:.*,/;
function Oi(a) {
var t = a.replace(Ti, ""), i = atob(t), e = new ArrayBuffer(i.length), n = new Uint8Array(e);
return N(n, function(r, o) {
n[o] = i.charCodeAt(o);
}), e;
}
function Ni(a, t) {
for (var i = [], e = 8192, n = new Uint8Array(a); n.length > 0; )
i.push(_e.apply(null, Se(n.subarray(0, e)))), n = n.subarray(e);
return "data:".concat(t, ";base64,").concat(btoa(i.join("")));
}
function Si(a) {
var t = new DataView(a), i;
try {
var e, n, r;
if (t.getUint8(0) === 255 && t.getUint8(1) === 216)
for (var o = t.byteLength, s = 2; s + 1 < o; ) {
if (t.getUint8(s) === 255 && t.getUint8(s + 1) === 225) {
n = s;
break;
}
s += 1;
}
if (n) {
var p = n + 4, l = n + 10;
if (Ei(t, p, 4) === "Exif") {
var h2 = t.getUint16(l);
if (e = h2 === 18761, (e || h2 === 19789) && t.getUint16(l + 2, e) === 42) {
var c = t.getUint32(l + 4, e);
c >= 8 && (r = l + c);
}
}
}
if (r) {
var u = t.getUint16(r, e), g, m;
for (m = 0; m < u; m += 1)
if (g = r + m * 12 + 2, t.getUint16(g, e) === 274) {
g += 8, i = t.getUint16(g, e), t.setUint16(g, 1, e);
break;
}
}
} catch {
i = 1;
}
return i;
}
function Ri(a) {
var t = 0, i = 1, e = 1;
switch (a) {
case 2:
i = -1;
break;
case 3:
t = -180;
break;
case 4:
e = -1;
break;
case 5:
t = 90, e = -1;
break;
case 6:
t = 90;
break;
case 7:
t = 90, i = -1;
break;
case 8:
t = -90;
break;
}
return {
rotate: t,
scaleX: i,
scaleY: e
};
}
var Bi = {
render: function() {
this.initContainer(), this.initCanvas(), this.initCropBox(), this.renderCanvas(), this.cropped && this.renderCropBox();
},
initContainer: function() {
var t = this.element, i = this.options, e = this.container, n = this.cropper, r = Number(i.minContainerWidth), o = Number(i.minContainerHeight);
S(n, I), j(t, I);
var s = {
width: Math.max(e.offsetWidth, r >= 0 ? r : Oe),
height: Math.max(e.offsetHeight, o >= 0 ? o : Ne)
};
this.containerData = s, Z(n, {
width: s.width,
height: s.height
}), S(t, I), j(n, I);
},
// Canvas (image wrapper)
initCanvas: function() {
var t = this.containerData, i = this.imageData, e = this.options.viewMode, n = Math.abs(i.rotate) % 180 === 90, r = n ? i.naturalHeight : i.naturalWidth, o = n ? i.naturalWidth : i.naturalHeight, s = r / o, p = t.width, l = t.height;
t.height * s > t.width ? e === 3 ? p = t.height * s : l = t.width / s : e === 3 ? l = t.width / s : p = t.height * s;
var h2 = {
aspectRatio: s,
naturalWidth: r,
naturalHeight: o,
width: p,
height: l
};
this.canvasData = h2, this.limited = e === 1 || e === 2, this.limitCanvas(true, true), h2.width = Math.min(Math.max(h2.width, h2.minWidth), h2.maxWidth), h2.height = Math.min(Math.max(h2.height, h2.minHeight), h2.maxHeight), h2.left = (t.width - h2.width) / 2, h2.top = (t.height - h2.height) / 2, h2.oldLeft = h2.left, h2.oldTop = h2.top, this.initialCanvasData = M({}, h2);
},
limitCanvas: function(t, i) {
var e = this.options, n = this.containerData, r = this.canvasData, o = this.cropBoxData, s = e.viewMode, p = r.aspectRatio, l = this.cropped && o;
if (t) {
var h2 = Number(e.minCanvasWidth) || 0, c = Number(e.minCanvasHeight) || 0;
s > 1 ? (h2 = Math.max(h2, n.width), c = Math.max(c, n.height), s === 3 && (c * p > h2 ? h2 = c * p : c = h2 / p)) : s > 0 && (h2 ? h2 = Math.max(h2, l ? o.width : 0) : c ? c = Math.max(c, l ? o.height : 0) : l && (h2 = o.width, c = o.height, c * p > h2 ? h2 = c * p : c = h2 / p));
var u = q({
aspectRatio: p,
width: h2,
height: c
});
h2 = u.width, c = u.height, r.minWidth = h2, r.minHeight = c, r.maxWidth = 1 / 0, r.maxHeight = 1 / 0;
}
if (i)
if (s > (l ? 0 : 1)) {
var g = n.width - r.width, m = n.height - r.height;
r.minLeft = Math.min(0, g), r.minTop = Math.min(0, m), r.maxLeft = Math.max(0, g), r.maxTop = Math.max(0, m), l && this.limited && (r.minLeft = Math.min(o.left, o.left + (o.width - r.width)), r.minTop = Math.min(o.top, o.top + (o.height - r.height)), r.maxLeft = o.left, r.maxTop = o.top, s === 2 && (r.width >= n.width && (r.minLeft = Math.min(0, g), r.maxLeft = Math.max(0, g)), r.height >= n.height && (r.minTop = Math.min(0, m), r.maxTop = Math.max(0, m))));
} else
r.minLeft = -r.width, r.minTop = -r.height, r.maxLeft = n.width, r.maxTop = n.height;
},
renderCanvas: function(t, i) {
var e = this.canvasData, n = this.imageData;
if (i) {
var r = Ci({
width: n.naturalWidth * Math.abs(n.scaleX || 1),
height: n.naturalHeight * Math.abs(n.scaleY || 1),
degree: n.rotate || 0
}), o = r.width, s = r.height, p = e.width * (o / e.naturalWidth), l = e.height * (s / e.naturalHeight);
e.left -= (p - e.width) / 2, e.top -= (l - e.height) / 2, e.width = p, e.height = l, e.aspectRatio = o / s, e.naturalWidth = o, e.naturalHeight = s, this.limitCanvas(true, false);
}
(e.width > e.maxWidth || e.width < e.minWidth) && (e.left = e.oldLeft), (e.height > e.maxHeight || e.height < e.minHeight) && (e.top = e.oldTop), e.width = Math.min(Math.max(e.width, e.minWidth), e.maxWidth), e.height = Math.min(Math.max(e.height, e.minHeight), e.maxHeight), this.limitCanvas(false, true), e.left = Math.min(Math.max(e.left, e.minLeft), e.maxLeft), e.top = Math.min(Math.max(e.top, e.minTop), e.maxTop), e.oldLeft = e.left, e.oldTop = e.top, Z(this.canvas, M({
width: e.width,
height: e.height
}, mt({
translateX: e.left,
translateY: e.top
}))), this.renderImage(t), this.cropped && this.limited && this.limitCropBox(true, true);
},
renderImage: function(t) {
var i = this.canvasData, e = this.imageData, n = e.naturalWidth * (i.width / i.naturalWidth), r = e.naturalHeight * (i.height / i.naturalHeight);
M(e, {
width: n,
height: r,
left: (i.width - n) / 2,
top: (i.height - r) / 2
}), Z(this.image, M({
width: e.width,
height: e.height
}, mt(M({
translateX: e.left,
translateY: e.top
}, e)))), t && this.output();
},
initCropBox: function() {
var t = this.options, i = this.canvasData, e = t.aspectRatio || t.initialAspectRatio, n = Number(t.autoCropArea) || 0.8, r = {
width: i.width,
height: i.height
};
e && (i.height * e > i.width ? r.height = r.width / e : r.width = r.height * e), this.cropBoxData = r, this.limitCropBox(true, true), r.width = Math.min(Math.max(r.width, r.minWidth), r.maxWidth), r.height = Math.min(Math.max(r.height, r.minHeight), r.maxHeight), r.width = Math.max(r.minWidth, r.width * n), r.height = Math.max(r.minHeight, r.height * n), r.left = i.left + (i.width - r.width) / 2, r.top = i.top + (i.height - r.height) / 2, r.oldLeft = r.left, r.oldTop = r.top, this.initialCropBoxData = M({}, r);
},
limitCropBox: function(t, i) {
var e = this.options, n = this.containerData, r = this.canvasData, o = this.cropBoxData, s = this.limited, p = e.aspectRatio;
if (t) {
var l = Number(e.minCropBoxWidth) || 0, h2 = Number(e.minCropBoxHeight) || 0, c = s ? Math.min(n.width, r.width, r.width + r.left, n.width - r.left) : n.width, u = s ? Math.min(n.height, r.height, r.height + r.top, n.height - r.top) : n.height;
l = Math.min(l, n.width), h2 = Math.min(h2, n.height), p && (l && h2 ? h2 * p > l ? h2 = l / p : l = h2 * p : l ? h2 = l / p : h2 && (l = h2 * p), u * p > c ? u = c / p : c = u * p), o.minWidth = Math.min(l, c), o.minHeight = Math.min(h2, u), o.maxWidth = c, o.maxHeight = u;
}
i && (s ? (o.minLeft = Math.max(0, r.left), o.minTop = Math.max(0, r.top), o.maxLeft = Math.min(n.width, r.left + r.width) - o.width, o.maxTop = Math.min(n.height, r.top + r.height) - o.height) : (o.minLeft = 0, o.minTop = 0, o.maxLeft = n.width - o.width, o.maxTop = n.height - o.height));
},
renderCropBox: function() {
var t = this.options, i = this.containerData, e = this.cropBoxData;
(e.width > e.maxWidth || e.width < e.minWidth) && (e.left = e.oldLeft), (e.height > e.maxHeight || e.height < e.minHeight) && (e.top = e.oldTop), e.width = Math.min(Math.max(e.width, e.minWidth), e.maxWidth), e.height = Math.min(Math.max(e.height, e.minHeight), e.maxHeight), this.limitCropBox(false, true), e.left = Math.min(Math.max(e.left, e.minLeft), e.maxLeft), e.top = Math.min(Math.max(e.top, e.minTop), e.maxTop), e.oldLeft = e.left, e.oldTop = e.top, t.movable && t.cropBoxMovable && bt(this.face, vt, e.width >= i.width && e.height >= i.height ? Ce : Zt), Z(this.cropBox, M({
width: e.width,
height: e.height
}, mt({
translateX: e.left,
translateY: e.top
}))), this.cropped && this.limited && this.limitCanvas(true, true), this.disabled || this.output();
},
output: function() {
this.preview(), ht(this.element, Xt, this.getData());
}
};
var Ai = {
initPreview: function() {
var t = this.element, i = this.crossOrigin, e = this.options.preview, n = i ? this.crossOriginUrl : this.url, r = t.alt || "The image to preview", o = document.createElement("img");
if (i && (o.crossOrigin = i), o.src = n, o.alt = r, this.viewBox.appendChild(o), this.viewBoxImage = o, !!e) {
var s = e;
typeof e == "string" ? s = t.ownerDocument.querySelectorAll(e) : e.querySelector && (s = [e]), this.previews = s, N(s, function(p) {
var l = document.createElement("img");
bt(p, Et, {
width: p.offsetWidth,
height: p.offsetHeight,
html: p.innerHTML
}), i && (l.crossOrigin = i), l.src = n, l.alt = r, l.style.cssText = 'display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"', p.innerHTML = "", p.appendChild(l);
});
}
},
resetPreview: function() {
N(this.previews, function(t) {
var i = Ft(t, Et);
Z(t, {
width: i.width,
height: i.height
}), t.innerHTML = i.html, wi(t, Et);
});
},
preview: function() {
var t = this.imageData, i = this.canvasData, e = this.cropBoxData, n = e.width, r = e.height, o = t.width, s = t.height, p = e.left - i.left - t.left, l = e.top - i.top - t.top;
!this.cropped || this.disabled || (Z(this.viewBoxImage, M({
width: o,
height: s
}, mt(M({
translateX: -p,
translateY: -l
}, t)))), N(this.previews, function(h2) {
var c = Ft(h2, Et), u = c.width, g = c.height, m = u, y = g, b = 1;
n && (b = u / n, y = r * b), r && y > g && (b = g / r, m = n * b, y = g), Z(h2, {
width: m,
height: y
}), Z(h2.getElementsByTagName("img")[0], M({
width: o * b,
height: s * b
}, mt(M({
translateX: -p * b,
translateY: -l * b
}, t))));
}));
}
};
var _i = {
bind: function() {
var t = this.element, i = this.options, e = this.cropper;
k(i.cropstart) && Y(t, Vt, i.cropstart), k(i.cropmove) && Y(t, jt, i.cropmove), k(i.cropend) && Y(t, Ut, i.cropend), k(i.crop) && Y(t, Xt, i.crop), k(i.zoom) && Y(t, $t, i.zoom), Y(e, he, this.onCropStart = this.cropStart.bind(this)), i.zoomable && i.zoomOnWheel && Y(e, fe, this.onWheel = this.wheel.bind(this), {
passive: false,
capture: true
}), i.toggleDragModeOnDblclick && Y(e, se, this.onDblclick = this.dblclick.bind(this)), Y(t.ownerDocument, ce, this.onCropMove = this.cropMove.bind(this)), Y(t.ownerDocument, le, this.onCropEnd = this.cropEnd.bind(this)), i.responsive && Y(window, ue, this.onResize = this.resize.bind(this));
},
unbind: function() {
var t = this.element, i = this.options, e = this.cropper;
k(i.cropstart) && X(t, Vt, i.cropstart), k(i.cropmove) && X(t, jt, i.cropmove), k(i.cropend) && X(t, Ut, i.cropend), k(i.crop) && X(t, Xt, i.crop), k(i.zoom) && X(t, $t, i.zoom), X(e, he, this.onCropStart), i.zoomable && i.zoomOnWheel && X(e, fe, this.onWheel, {
passive: false,
capture: true
}), i.toggleDragModeOnDblclick && X(e, se, this.onDblclick), X(t.ownerDocument, ce, this.onCropMove), X(t.ownerDocument, le, this.onCropEnd), i.responsive && X(window, ue, this.onResize);
}
};
var ki = {
resize: function() {
if (!this.disabled) {
var t = this.options, i = this.container, e = this.containerData, n = i.offsetWidth / e.width, r = i.offsetHeight / e.height, o = Math.abs(n - 1) > Math.abs(r - 1) ? n : r;
if (o !== 1) {
var s, p;
t.restore && (s = this.getCanvasData(), p = this.getCropBoxData()), this.render(), t.restore && (this.setCanvasData(N(s, function(l, h2) {
s[h2] = l * o;
})), this.setCropBoxData(N(p, function(l, h2) {
p[h2] = l * o;
})));
}
}
},
dblclick: function() {
this.disabled || this.options.dragMode === Te || this.setDragMode(vi(this.dragBox, Yt) ? Ee : qt);
},
wheel: function(t) {
var i = this, e = Number(this.options.wheelZoomRatio) || 0.1, n = 1;
this.disabled || (t.preventDefault(), !this.wheeling && (this.wheeling = true, setTimeout(function() {
i.wheeling = false;
}, 50), t.deltaY ? n = t.deltaY > 0 ? 1 : -1 : t.wheelDelta ? n = -t.wheelDelta / 120 : t.detail && (n = t.detail > 0 ? 1 : -1), this.zoom(-n * e, t)));
},
cropStart: function(t) {
var i = t.buttons, e = t.button;
if (!(this.disabled || (t.type === "mousedown" || t.type === "pointerdown" && t.pointerType === "mouse") && // No primary button (Usually the left button)
(v(i) && i !== 1 || v(e) && e !== 0 || t.ctrlKey))) {
var n = this.options, r = this.pointers, o;
t.changedTouches ? N(t.changedTouches, function(s) {
r[s.identifier] = Tt(s);
}) : r[t.pointerId || 0] = Tt(t), Object.keys(r).length > 1 && n.zoomable && n.zoomOnTouch ? o = Me : o = Ft(t.target, vt), si.test(o) && ht(this.element, Vt, {
originalEvent: t,
action: o
}) !== false && (t.preventDefault(), this.action = o, this.cropping = false, o === De && (this.cropping = true, S(this.dragBox, Ot)));
}
},
cropMove: function(t) {
var i = this.action;
if (!(this.disabled || !i)) {
var e = this.pointers;
t.preventDefault(), ht(this.element, jt, {
originalEvent: t,
action: i
}) !== false && (t.changedTouches ? N(t.changedTouches, function(n) {
M(e[n.identifier] || {}, Tt(n, true));
}) : M(e[t.pointerId || 0] || {}, Tt(t, true)), this.change(t));
}
},
cropEnd: function(t) {
if (!this.disabled) {
var i = this.action, e = this.pointers;
t.changedTouches ? N(t.changedTouches, function(n) {
delete e[n.identifier];
}) : delete e[t.pointerId || 0], i && (t.preventDefault(), Object.keys(e).length || (this.action = ""), this.cropping && (this.cropping = false, nt(this.dragBox, Ot, this.cropped && this.options.modal)), ht(this.element, Ut, {
originalEvent: t,
action: i
}));
}
}
};
var Ii = {
change: function(t) {
var i = this.options, e = this.canvasData, n = this.containerData, r = this.cropBoxData, o = this.pointers, s = this.action, p = i.aspectRatio, l = r.left, h2 = r.top, c = r.width, u = r.height, g = l + c, m = h2 + u, y = 0, b = 0, E = n.width, O = n.height, x = true, z;
!p && t.shiftKey && (p = c && u ? c / u : 1), this.limited && (y = r.minLeft, b = r.minTop, E = y + Math.min(n.width, e.width, e.left + e.width), O = b + Math.min(n.height, e.height, e.top + e.height));
var B2 = o[Object.keys(o)[0]], f = {
x: B2.endX - B2.startX,
y: B2.endY - B2.startY
}, w = function(A) {
switch (A) {
case J:
g + f.x > E && (f.x = E - g);
break;
case tt:
l + f.x < y && (f.x = y - l);
break;
case Q:
h2 + f.y < b && (f.y = b - h2);
break;
case rt:
m + f.y > O && (f.y = O - m);
break;
}
};
switch (s) {
case Zt:
l += f.x, h2 += f.y;
break;
case J:
if (f.x >= 0 && (g >= E || p && (h2 <= b || m >= O))) {
x = false;
break;
}
w(J), c += f.x, c < 0 && (s = tt, c = -c, l -= c), p && (u = c / p, h2 += (r.height - u) / 2);
break;
case Q:
if (f.y <= 0 && (h2 <= b || p && (l <= y || g >= E))) {
x = false;
break;
}
w(Q), u -= f.y, h2 += f.y, u < 0 && (s = rt, u = -u, h2 -= u), p && (c = u * p, l += (r.width - c) / 2);
break;
case tt:
if (f.x <= 0 && (l <= y || p && (h2 <= b || m >= O))) {
x = false;
break;
}
w(tt), c -= f.x, l += f.x, c < 0 && (s = J, c = -c, l -= c), p && (u = c / p, h2 += (r.height - u) / 2);
break;
case rt:
if (f.y >= 0 && (m >= O || p && (l <= y || g >= E))) {
x = false;
break;
}
w(rt), u += f.y, u < 0 && (s = Q, u = -u, h2 -= u), p && (c = u * p, l += (r.width - c) / 2);
break;
case ut:
if (p) {
if (f.y <= 0 && (h2 <= b || g >= E)) {
x = false;
break;
}
w(Q), u -= f.y, h2 += f.y, c = u * p;
} else
w(Q), w(J), f.x >= 0 ? g < E ? c += f.x : f.y <= 0 && h2 <= b && (x = false) : c += f.x, f.y <= 0 ? h2 > b && (u -= f.y, h2 += f.y) : (u -= f.y, h2 += f.y);
c < 0 && u < 0 ? (s = gt, u = -u, c = -c, h2 -= u, l -= c) : c < 0 ? (s = ft, c = -c, l -= c) : u < 0 && (s = dt, u = -u, h2 -= u);
break;
case ft:
if (p) {
if (f.y <= 0 && (h2 <= b || l <= y)) {
x = false;
break;
}
w(Q), u -= f.y, h2 += f.y, c = u * p, l += r.width - c;
} else
w(Q), w(tt), f.x <= 0 ? l > y ? (c -= f.x, l += f.x) : f.y <= 0 && h2 <= b && (x = false) : (c -= f.x, l += f.x), f.y <= 0 ? h2 > b && (u -= f.y, h2 += f.y) : (u -= f.y, h2 += f.y);
c < 0 && u < 0 ? (s = dt, u = -u, c = -c, h2 -= u, l -= c) : c < 0 ? (s = ut, c = -c, l -= c) : u < 0 && (s = gt, u = -u, h2 -= u);
break;
case gt:
if (p) {
if (f.x <= 0 && (l <= y || m >= O)) {
x = false;
break;
}
w(tt), c -= f.x, l += f.x, u = c / p;
} else
w(rt), w(tt), f.x <= 0 ? l > y ? (c -= f.x, l += f.x) : f.y >= 0 && m >= O && (x = false) : (c -= f.x, l += f.x), f.y >= 0 ? m < O && (u += f.y) : u += f.y;
c < 0 && u < 0 ? (s = ut, u = -u, c = -c, h2 -= u, l -= c) : c < 0 ? (s = dt, c = -c, l -= c) : u < 0 && (s = ft, u = -u, h2 -= u);
break;
case dt:
if (p) {
if (f.x >= 0 && (g >= E || m >= O)) {
x = false;
break;
}
w(J), c += f.x, u = c / p;
} else
w(rt), w(J), f.x >= 0 ? g < E ? c += f.x : f.y >= 0 && m >= O && (x = false) : c += f.x, f.y >= 0 ? m < O && (u += f.y) : u += f.y;
c < 0 && u < 0 ? (s = ft, u = -u, c = -c, h2 -= u, l -= c) : c < 0 ? (s = gt, c = -c, l -= c) : u < 0 && (s = ut, u = -u, h2 -= u);
break;
case Ce:
this.move(f.x, f.y), x = false;
break;
case Me:
this.zoom(xi(o), t), x = false;
break;
case De:
if (!f.x || !f.y) {
x = false;
break;
}
z = Ae(this.cropper), l = B2.startX - z.left, h2 = B2.startY - z.top, c = r.minWidth, u = r.minHeight, f.x > 0 ? s = f.y > 0 ? dt : ut : f.x < 0 && (l -= c, s = f.y > 0 ? gt : ft), f.y < 0 && (h2 -= u), this.cropped || (j(this.cropBox, I), this.cropped = true, this.limited && this.limitCropBox(true, true));
break;
}
x && (r.width = c, r.height = u, r.left = l, r.top = h2, this.action = s, this.renderCropBox()), N(o, function(T) {
T.startX = T.endX, T.startY = T.endY;
});
}
};
var zi = {
// Show the crop box manually
crop: function() {
return this.ready && !this.cropped && !this.disabled && (this.cropped = true, this.limitCropBox(true, true), this.options.modal && S(this.dragBox, Ot), j(this.cropBox, I), this.setCropBoxData(this.initialCropBoxData)), this;
},
// Reset the image and crop box to their initial states
reset: function() {
return this.ready && !this.disabled && (this.imageData = M({}, this.initialImageData), this.canvasData = M({}, this.initialCanvasData), this.cropBoxData = M({}, this.initialCropBoxData), this.renderCanvas(), this.cropped && this.renderCropBox()), this;
},
// Clear the crop box
clear: function() {
return this.cropped && !this.disabled && (M(this.cropBoxData, {
left: 0,
top: 0,
width: 0,
height: 0
}), this.cropped = false, this.renderCropBox(), this.limitCanvas(true, true), this.renderCanvas(), j(this.dragBox, Ot), S(this.cropBox, I)), this;
},
/**
* Replace the image's src and rebuild the cropper
* @param {string} url - The new URL.
* @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.
* @returns {Cropper} this
*/
replace: function(t) {
var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
return !this.disabled && t && (this.isImg && (this.element.src = t), i ? (this.url = t, this.image.src = t, this.ready && (this.viewBoxImage.src = t, N(this.previews, function(e) {
e.getElementsByTagName("img")[0].src = t;
}))) : (this.isImg && (this.replaced = true), this.options.data = null, this.uncreate(), this.load(t))), this;
},
// Enable (unfreeze) the cropper
enable: function() {
return this.ready && this.disabled && (this.disabled = false, j(this.cropper, oe)), this;
},
// Disable (freeze) the cropper
disable: function() {
return this.ready && !this.disabled && (this.disabled = true, S(this.cropper, oe)), this;
},
/**
* Destroy the cropper and remove the instance from the image
* @returns {Cropper} this
*/
destroy: function() {
var t = this.element;
return t[C] ? (t[C] = void 0, this.isImg && this.replaced && (t.src = this.originalUrl), this.uncreate(), this) : this;
},
/**
* Move the canvas with relative offsets
* @param {number} offsetX - The relative offset distance on the x-axis.
* @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.
* @returns {Cropper} this
*/
move: function(t) {
var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : t, e = this.canvasData, n = e.left, r = e.top;
return this.moveTo(zt(t) ? t : n + Number(t), zt(i) ? i : r + Number(i));
},
/**
* Move the canvas to an absolute point
* @param {number} x - The x-axis coordinate.
* @param {number} [y=x] - The y-axis coordinate.
* @returns {Cropper} this
*/
moveTo: function(t) {
var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : t, e = this.canvasData, n = false;
return t = Number(t), i = Number(i), this.ready && !this.disabled && this.options.movable && (v(t) && (e.left = t, n = true), v(i) && (e.top = i, n = true), n && this.renderCanvas(true)), this;
},
/**
* Zoom the canvas with a relative ratio
* @param {number} ratio - The target ratio.
* @param {Event} _originalEvent - The original event if any.
* @returns {Cropper} this
*/
zoom: function(t, i) {
var e = this.canvasData;
return t = Number(t), t < 0 ? t = 1 / (1 - t) : t = 1 + t, this.zoomTo(e.width * t / e.naturalWidth, null, i);
},
/**
* Zoom the canvas to an absolute ratio
* @param {number} ratio - The target ratio.
* @param {Object} pivot - The zoom pivot point coordinate.
* @param {Event} _originalEvent - The original event if any.
* @returns {Cropper} this
*/
zoomTo: function(t, i, e) {
var n = this.options, r = this.canvasData, o = r.width, s = r.height, p = r.naturalWidth, l = r.naturalHeight;
if (t = Number(t), t >= 0 && this.ready && !this.disabled && n.zoomable) {
var h2 = p * t, c = l * t;
if (ht(this.element, $t, {
ratio: t,
oldRatio: o / p,
originalEvent: e
}) === false)
return this;
if (e) {
var u = this.pointers, g = Ae(this.cropper), m = u && Object.keys(u).length ? Di(u) : {
pageX: e.pageX,
pageY: e.pageY
};
r.left -= (h2 - o) * ((m.pageX - g.left - r.left) / o), r.top -= (c - s) * ((m.pageY - g.top - r.top) / s);
} else
ot(i) && v(i.x) && v(i.y) ? (r.left -= (h2 - o) * ((i.x - r.left) / o), r.top -= (c - s) * ((i.y - r.top) / s)) : (r.left -= (h2 - o) / 2, r.top -= (c - s) / 2);
r.width = h2, r.height = c, this.renderCanvas(true);
}
return this;
},
/**
* Rotate the canvas with a relative degree
* @param {number} degree - The rotate degree.
* @returns {Cropper} this
*/
rotate: function(t) {
return this.rotateTo((this.imageData.rotate || 0) + Number(t));
},
/**
* Rotate the canvas to an absolute degree
* @param {number} degree - The rotate degree.
* @returns {Cropper} this
*/
rotateTo: function(t) {
return t = Number(t), v(t) && this.ready && !this.disabled && this.options.rotatable && (this.imageData.rotate = t % 360, this.renderCanvas(true, true)), this;
},
/**
* Scale the image on the x-axis.
* @param {number} scaleX - The scale ratio on the x-axis.
* @returns {Cropper} this
*/
scaleX: function(t) {
var i = this.imageData.scaleY;
return this.scale(t, v(i) ? i : 1);
},
/**
* Scale the image on the y-axis.
* @param {number} scaleY - The scale ratio on the y-axis.
* @returns {Cropper} this
*/
scaleY: function(t) {
var i = this.imageData.scaleX;
return this.scale(v(i) ? i : 1, t);
},
/**
* Scale the image
* @param {number} scaleX - The scale ratio on the x-axis.
* @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.
* @returns {Cropper} this
*/
scale: function(t) {
var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : t, e = this.imageData, n = false;
return t = Number(t), i = Number(i), this.ready && !this.disabled && this.options.scalable && (v(t) && (e.scaleX = t, n = true), v(i) && (e.scaleY = i, n = true), n && this.renderCanvas(true, true)), this;
},
/**
* Get the cropped area position and size data (base on the original image)
* @param {boolean} [rounded=false] - Indicate if round the data values or not.
* @returns {Object} The result cropped data.
*/
getData: function() {
var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false, i = this.options, e = this.imageData, n = this.canvasData, r = this.cropBoxData, o;
if (this.ready && this.cropped) {
o = {
x: r.left - n.left,
y: r.top - n.top,
width: r.width,
height: r.height
};
var s = e.width / e.naturalWidth;
if (N(o, function(h2, c) {
o[c] = h2 / s;
}), t) {
var p = Math.round(o.y + o.height), l = Math.round(o.x + o.width);
o.x = Math.round(o.x), o.y = Math.round(o.y), o.width = l - o.x, o.height = p - o.y;
}
} else
o = {
x: 0,
y: 0,
width: 0,
height: 0
};
return i.rotatable && (o.rotate = e.rotate || 0), i.scalable && (o.scaleX = e.scaleX || 1, o.scaleY = e.scaleY || 1), o;
},
/**
* Set the cropped area position and size with new data
* @param {Object} data - The new data.
* @returns {Cropper} this
*/
setData: function(t) {
var i = this.options, e = this.imageData, n = this.canvasData, r = {};
if (this.ready && !this.disabled && ot(t)) {
var o = false;
i.rotatable && v(t.rotate) && t.rotate !== e.rotate && (e.rotate = t.rotate, o = true), i.scalable && (v(t.scaleX) && t.scaleX !== e.scaleX && (e.scaleX = t.scaleX, o = true), v(t.scaleY) && t.scaleY !== e.scaleY && (e.scaleY = t.scaleY, o = true)), o && this.renderCanvas(true, true);
var s = e.width / e.naturalWidth;
v(t.x) && (r.left = t.x * s + n.left), v(t.y) && (r.top = t.y * s + n.top), v(t.width) && (r.width = t.width * s), v(t.height) && (r.height = t.height * s), this.setCropBoxData(r);
}
return this;
},
/**
* Get the container size data.
* @returns {Object} The result container data.
*/
getContainerData: function() {
return this.ready ? M({}, this.containerData) : {};
},
/**
* Get the image position and size data.
* @returns {Object} The result image data.
*/
getImageData: function() {
return this.sized ? M({}, this.imageData) : {};
},
/**
* Get the canvas position and size data.
* @returns {Object} The result canvas data.
*/
getCanvasData: function() {
var t = this.canvasData, i = {};
return this.ready && N(["left", "top", "width", "height", "naturalWidth", "naturalHeight"], function(e) {
i[e] = t[e];
}), i;
},
/**
* Set the canvas position and size with new data.
* @param {Object} data - The new canvas data.
* @returns {Cropper} this
*/
setCanvasData: function(t) {
var i = this.canvasData, e = i.aspectRatio;
return this.ready && !this.disabled && ot(t) && (v(t.left) && (i.left = t.left), v(t.top) && (i.top = t.top), v(t.width) ? (i.width = t.width, i.height = t.width / e) : v(t.height) && (i.height = t.height, i.width = t.height * e), this.renderCanvas(true)), this;
},
/**
* Get the crop box position and size data.
* @returns {Object} The result crop box data.
*/
getCropBoxData: function() {
var t = this.cropBoxData, i;
return this.ready && this.cropped && (i = {
left: t.left,
top: t.top,
width: t.width,
height: t.height
}), i || {};
},
/**
* Set the crop box position and size with new data.
* @param {Object} data - The new crop box data.
* @returns {Cropper} this
*/
setCropBoxData: function(t) {
var i = this.cropBoxData, e = this.options.aspectRatio, n, r;
return this.ready && this.cropped && !this.disabled && ot(t) && (v(t.left) && (i.left = t.left), v(t.top) && (i.top = t.top), v(t.width) && t.width !== i.width && (n = true, i.width = t.width), v(t.height) && t.height !== i.height && (r = true, i.height = t.height), e && (n ? i.height = i.width / e : r && (i.width = i.height * e)), this.renderCropBox()), this;
},
/**
* Get a canvas drawn the cropped image.
* @param {Object} [options={}] - The config options.
* @returns {HTMLCanvasElement} - The result canvas.
*/
getCroppedCanvas: function() {
var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
if (!this.ready || !window.HTMLCanvasElement)
return null;
var i = this.canvasData, e = Mi(this.image, this.imageData, i, t);
if (!this.cropped)
return e;
var n = this.getData(t.rounded), r = n.x, o = n.y, s = n.width, p = n.height, l = e.width / Math.floor(i.naturalWidth);
l !== 1 && (r *= l, o *= l, s *= l, p *= l);
var h2 = s / p, c = q({
aspectRatio: h2,
width: t.maxWidth || 1 / 0,
height: t.maxHeight || 1 / 0
}), u = q({
aspectRatio: h2,
width: t.minWidth || 0,
height: t.minHeight || 0
}, "cover"), g = q({
aspectRatio: h2,
width: t.width || (l !== 1 ? e.width : s),
height: t.height || (l !== 1 ? e.height : p)
}), m = g.width, y = g.height;
m = Math.min(c.width, Math.max(u.width, m)), y = Math.min(c.height, Math.max(u.height, y));
var b = document.createElement("canvas"), E = b.getContext("2d");
b.width = st(m), b.height = st(y), E.fillStyle = t.fillColor || "transparent", E.fillRect(0, 0, m, y);
var O = t.imageSmoothingEnabled, x = O === void 0 ? true : O, z = t.imageSmoothingQuality;
E.imageSmoothingEnabled = x, z && (E.imageSmoothingQuality = z);
var B2 = e.width, f = e.height, w = r, T = o, A, L, $, W, P, _;
w <= -s || w > B2 ? (w = 0, A = 0, $ = 0, P = 0) : w <= 0 ? ($ = -w, w = 0, A = Math.min(B2, s + w), P = A) : w <= B2 && ($ = 0, A = Math.min(s, B2 - w), P = A), A <= 0 || T <= -p || T > f ? (T = 0, L = 0, W = 0, _ = 0) : T <= 0 ? (W = -T, T = 0, L = Math.min(f, p + T), _ = L) : T <= f && (W = 0, L = Math.min(p, f - T), _ = L);
var R = [w, T, A, L];
if (P > 0 && _ > 0) {
var F = m / s;
R.push($ * F, W * F, P * F, _ * F);
}
return E.drawImage.apply(E, [e].concat(xe(R.map(function(K) {
return Math.floor(st(K));
})))), b;
},
/**
* Change the aspect ratio of the crop box.
* @param {number} aspectRatio - The new aspect ratio.
* @returns {Cropper} this
*/
setAspectRatio: function(t) {
var i = this.options;
return !this.disabled && !zt(t) && (i.aspectRatio = Math.max(0, t) || NaN, this.ready && (this.initCropBox(), this.cropped && this.renderCropBox())), this;
},
/**
* Change the drag mode.
* @param {string} mode - The new drag mode.
* @returns {Cropper} this
*/
setDragMode: function(t) {
var i = this.options, e = this.dragBox, n = this.face;
if (this.ready && !this.disabled) {
var r = t === qt, o = i.movable && t === Ee;
t = r || o ? t : Te, i.dragMode = t, bt(e, vt, t), nt(e, Yt, r), nt(e, Wt, o), i.cropBoxMovable || (bt(n, vt, t), nt(n, Yt, r), nt(n, Wt, o));
}
return this;
}
};
var Li = V.Cropper;
var ke = function() {
function a(t) {
var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
if (Ze(this, a), !t || !li.test(t.tagName))
throw new Error("The first argument is required and must be an <img> or <canvas> element.");
this.element = t, this.options = M({}, ge2, ot(i) && i), this.cropped = false, this.disabled = false, this.pointers = {}, this.ready = false, this.reloading = false, this.replaced = false, this.sized = false, this.sizing = false, this.init();
}
return qe(a, [{
key: "init",
value: function() {
var i = this.element, e = i.tagName.toLowerCase(), n;
if (!i[C]) {
if (i[C] = this, e === "img") {
if (this.isImg = true, n = i.getAttribute("src") || "", this.originalUrl = n, !n)
return;
n = i.src;
} else
e === "canvas" && window.HTMLCanvasElement && (n = i.toDataURL());
this.load(n);
}
}
}, {
key: "load",
value: function(i) {
var e = this;
if (i) {
this.url = i, this.imageData = {};
var n = this.element, r = this.options;
if (!r.rotatable && !r.scalable && (r.checkOrientation = false), !r.checkOrientation || !window.ArrayBuffer) {
this.clone();
return;
}
if (hi.test(i)) {
ci.test(i) ? this.read(Oi(i)) : this.clone();
return;
}
var o = new XMLHttpRequest(), s = this.clone.bind(this);
this.reloading = true, this.xhr = o, o.onabort = s, o.onerror = s, o.ontimeout = s, o.onprogress = function() {
o.getResponseHeader("content-type") !== de && o.abort();
}, o.onload = function() {
e.read(o.response);
}, o.onloadend = function() {
e.reloading = false, e.xhr = null;
}, r.checkCrossOrigin && ve(i) && n.crossOrigin && (i = be(i)), o.open("GET", i, true), o.responseType = "arraybuffer", o.withCredentials = n.crossOrigin === "use-credentials", o.send();
}
}
}, {
key: "read",
value: function(i) {
var e = this.options, n = this.imageData, r = Si(i), o = 0, s = 1, p = 1;
if (r > 1) {
this.url = Ni(i, de);
var l = Ri(r);
o = l.rotate, s = l.scaleX, p = l.scaleY;
}
e.rotatable && (n.rotate = o), e.scalable && (n.scaleX = s, n.scaleY = p), this.clone();
}
}, {
key: "clone",
value: function() {
var i = this.element, e = this.url, n = i.crossOrigin, r = e;
this.options.checkCrossOrigin && ve(e) && (n || (n = "anonymous"), r = be(e)), this.crossOrigin = n, this.crossOriginUrl = r;
var o = document.createElement("img");
n && (o.crossOrigin = n), o.src = r || e, o.alt = i.alt || "The image to crop", this.image = o, o.onload = this.start.bind(this), o.onerror = this.stop.bind(this), S(o, ne), i.parentNode.insertBefore(o, i.nextSibling);
}
}, {
key: "start",
value: function() {
var i = this, e = this.image;
e.onload = null, e.onerror = null, this.sizing = true;
var n = V.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(V.navigator.userAgent), r = function(l, h2) {
M(i.imageData, {
naturalWidth: l,
naturalHeight: h2,
aspectRatio: l / h2
}), i.initialImageData = M({}, i.imageData), i.sizing = false, i.sized = true, i.build();
};
if (e.naturalWidth && !n) {
r(e.naturalWidth, e.naturalHeight);
return;
}
var o = document.createElement("img"), s = document.body || document.documentElement;
this.sizingImage = o, o.onload = function() {
r(o.width, o.height), n || s.removeChild(o);
}, o.src = e.src, n || (o.style.cssText = "left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;", s.appendChild(o));
}
}, {
key: "stop",
value: function() {
var i = this.image;
i.onload = null, i.onerror = null, i.parentNode.removeChild(i), this.image = null;
}
}, {
key: "build",
value: function() {
if (!(!this.sized || this.ready)) {
var i = this.element, e = this.options, n = this.image, r = i.parentNode, o = document.createElement("div");
o.innerHTML = pi;
var s = o.querySelector(".".concat(C, "-container")), p = s.querySelector(".".concat(C, "-canvas")), l = s.querySelector(".".concat(C, "-drag-box")), h2 = s.querySelector(".".concat(C, "-crop-box")), c = h2.querySelector(".".concat(C, "-face"));
this.container = r, this.cropper = s, this.canvas = p, this.dragBox = l, this.cropBox = h2, this.viewBox = s.querySelector(".".concat(C, "-view-box")), this.face = c, p.appendChild(n), S(i, I), r.insertBefore(s, i.nextSibling), j(n, ne), this.initPreview(), this.bind(), e.initialAspectRatio = Math.max(0, e.initialAspectRatio) || NaN, e.aspectRatio = Math.max(0, e.aspectRatio) || NaN, e.viewMode = Math.max(0, Math.min(3, Math.round(e.viewMode))) || 0, S(h2, I), e.guides || S(h2.getElementsByClassName("".concat(C, "-dashed")), I), e.center || S(h2.getElementsByClassName("".concat(C, "-center")), I), e.background && S(s, "".concat(C, "-bg")), e.highlight || S(c, ai), e.cropBoxMovable && (S(c, Wt), bt(c, vt, Zt)), e.cropBoxResizable || (S(h2.getElementsByClassName("".concat(C, "-line")), I), S(h2.getElementsByClassName("".concat(C, "-point")), I)), this.render(), this.ready = true, this.setDragMode(e.dragMode), e.autoCrop && this.crop(), this.setData(e.data), k(e.ready) && Y(i, pe, e.ready, {
once: true
}), ht(i, pe);
}
}
}, {
key: "unbuild",
value: function() {
if (this.ready) {
this.ready = false, this.unbind(), this.resetPreview();
var i = this.cropper.parentNode;
i && i.removeChild(this.cropper), j(this.element, I);
}
}
}, {
key: "uncreate",
value: function() {
this.ready ? (this.unbuild(), this.ready = false, this.cropped = false) : this.sizing ? (this.sizingImage.onload = null, this.sizing = false, this.sized = false) : this.reloading ? (this.xhr.onabort = null, this.xhr.abort()) : this.image && this.stop();
}
/**
* Get the no conflict cropper class.
* @returns {Cropper} The cropper class.
*/
}], [{
key: "noConflict",
value: function() {
return window.Cropper = Li, a;
}
/**
* Change the default options.
* @param {Object} options - The new default options.
*/
}, {
key: "setDefaults",
value: function(i) {
M(ge2, ot(i) && i);
}
}]);
}();
M(ke.prototype, Bi, Ai, _i, ki, Ii, zi);
var Pi = typeof window > "u" ? [String, Array] : [String, Array, Element, NodeList];
var Hi = {
render() {
const a = this.crossorigin || void 0;
return h("div", { style: this.containerStyle }, [
h("img", {
ref: "img",
src: this.src,
alt: this.alt || "image",
style: [{ "max-width": "100%" }, this.imgStyle],
crossorigin: a
})
]);
},
props: {
// Library props
containerStyle: Object,
src: {
type: String,
default: ""
},
alt: String,
imgStyle: Object,
// CropperJS props
viewMode: Number,
dragMode: String,
initialAspectRatio: Number,
aspectRatio: Number,
data: Object,
preview: Pi,
responsive: {
type: Boolean,
default: true
},
restore: {
type: Boolean,
default: true
},
checkCrossOrigin: {
type: Boolean,
default: true
},
checkOrientation: {
type: Boolean,
default: true
},
crossorigin: {
type: String
},
modal: {
type: Boolean,
default: true
},
guides: {
type: Boolean,
default: true
},
center: {
type: Boolean,
default: true
},
highlight: {
type: Boolean,
default: true
},
background: {
type: Boolean,
default: true
},
autoCrop: {
type: Boolean,
default: true
},
autoCropArea: Number,
movable: {
type: Boolean,
default: true
},
rotatable: {
type: Boolean,
default: true
},
scalable: {
type: Boolean,
default: true
},
zoomable: {
type: Boolean,
default: true
},
zoomOnTouch: {
type: Boolean,
default: true
},
zoomOnWheel: {
type: Boolean,
default: true
},
wheelZoomRatio: Number,
cropBoxMovable: {
type: Boolean,
default: true
},
cropBoxResizable: {
type: Boolean,
default: true
},
toggleDragModeOnDblclick: {
type: Boolean,
default: true
},
// Size limitation
minCanvasWidth: Number,
minCanvasHeight: Number,
minCropBoxWidth: Number,
minCropBoxHeight: Number,
minContainerWidth: Number,
minContainerHeight: Number,
// callbacks
ready: Function,
cropstart: Function,
cropmove: Function,
cropend: Function,
crop: Function,
zoom: Function
},
mounted() {
const { containerStyle: a, src: t, alt: i, imgStyle: e, ...n } = this.$options.props, r = {};
for (const o in n)
this[o] !== void 0 && (r[o] = this[o]);
this.cropper = new ke(this.$refs.img, r);
},
methods: {
// Reset the image and crop box to their initial states
reset() {
return this.cropper.reset();
},
// Clear the crop box
clear() {
return this.cropper.clear();
},
// Init crop box manually
initCrop() {
return this.cropper.crop();
},
/**
* Replace the image's src and rebuild the cropper
* @param {string} url - The new URL.
* @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color.
* @returns {Object} this
*/
replace(a, t = false) {
return this.cropper.replace(a, t);
},
// Enable (unfreeze) the cropper
enable() {
return this.cropper.enable();
},
// Disable (freeze) the cropper
disable() {
return this.cropper.disable();
},
// Destroy the cropper and remove the instance from the image
destroy() {
return this.cropper.destroy();
},
/**
* Move the canvas with relative offsets
* @param {number} offsetX - The relative offset distance on the x-axis.
* @param {number} offsetY - The relative offset distance on the y-axis.
* @returns {Object} this
*/
move(a, t) {
return this.cropper.move(a, t);
},
/**
* Move the canvas to an absolute point
* @param {number} x - The x-axis coordinate.
* @param {number} [y=x] - The y-axis coordinate.
* @returns {Object} this
*/
moveTo(a, t = a) {
return this.cropper.moveTo(a, t);
},
/**
* Zoom the canvas with a relative ratio
* @param {number} ratio - The target ratio.
* @param {Event} _originalEvent - The original event if any.
* @returns {Object} this
*/
relativeZoom(a, t) {
return this.cropper.zoom(a, t);
},
/**
* Zoom the canvas to an absolute ratio
* @param {number} ratio - The target ratio.
* @param {Event} _originalEvent - The original event if any.
* @returns {Object} this
*/
zoomTo(a, t) {
return this.cropper.zoomTo(a, t);
},
/**
* Rotate the canvas with a relative degree
* @param {number} degree - The rotate degree.
* @returns {Object} this
*/
rotate(a) {
return this.cropper.rotate(a);
},
/**
* Rotate the canvas to an absolute degree
* @param {number} degree - The rotate degree.
* @returns {Object} this
*/
rotateTo(a) {
return this.cropper.rotateTo(a);
},
/**
* Scale the image on the x-axis.
* @param {number} scaleX - The scale ratio on the x-axis.
* @returns {Object} this
*/
scaleX(a) {
return this.cropper.scaleX(a);
},
/**
* Scale the image on the y-axis.
* @param {number} scaleY - The scale ratio on the y-axis.
* @returns {Object} this
*/
scaleY(a) {
return this.cropper.scaleY(a);
},
/**
* Scale the image
* @param {number} scaleX - The scale ratio on the x-axis.
* @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.
* @returns {Object} this
*/
scale(a, t = a) {
return this.cropper.scale(a, t);
},
/**
* Get the cropped area position and size data (base on the original image)
* @param {boolean} [rounded=false] - Indicate if round the data values or not.
* @returns {Object} The result cropped data.
*/
getData(a = false) {
return this.cropper.getData(a);
},
/**
* Set the cropped area position and size with new data
* @param {Object} data - The new data.
* @returns {Object} this
*/
setData(a) {
return this.cropper.setData(a);
},
/**
* Get the container size data.
* @returns {Object} The result container data.
*/
getContainerData() {
return this.cropper.getContainerData();
},
/**
* Get the image position and size data.
* @returns {Object} The result image data.
*/
getImageData() {
return this.cropper.getImageData();
},
/**
* Get the canvas position and size data.
* @returns {Object} The result canvas data.
*/
getCanvasData() {
return this.cropper.getCanvasData();
},
/**
* Set the canvas position and size with new data.
* @param {Object} data - The new canvas data.
* @returns {Object} this
*/
setCanvasData(a) {
return this.cropper.setCanvasData(a);
},
/**
* Get the crop box position and size data.
* @returns {Object} The result crop box data.
*/
getCropBoxData() {
return this.cropper.getCropBoxData();
},
/**
* Set the crop box position and size with new data.
* @param {Object} data - The new crop box data.
* @returns {Object} this
*/
setCropBoxData(a) {
return this.cropper.setCropBoxData(a);
},
/**
* Get a canvas drawn the cropped image.
* @param {Object} [options={}] - The config options.
* @returns {HTMLCanvasElement} - The result canvas.
*/
getCroppedCanvas(a = {}) {
return this.cropper.getCroppedCanvas(a);
},
/**
* Change the aspect ratio of the crop box.
* @param {number} aspectRatio - The new aspect ratio.
* @returns {Object} this
*/
setAspectRatio(a) {
return this.cropper.setAspectRatio(a);
},
/**
* Change the drag mode.
* @param {string} mode - The new drag mode.
* @returns {Object} this
*/
setDragMode(a) {
return this.cropper.setDragMode(a);
}
}
};
var Yi = defineComponent({
name: "FsCropper",
components: {
VueCropper: Hi
},
props: {
// 对话框标题
title: {
type: String
},
// cropper的高度默认为浏览器可视窗口高度的40%最小270
cropperHeight: {
type: [String, Number]
},
// 对话框宽度默认50%
dialogWidth: {
type: [String, Number],
default: "50%"
},
// 图片大小限制单位MB0为不限制
maxSize: {
type: Number,
default: 5
},
// 上传提示
uploadTip: {
type: String
},
// cropperjs的参数详见https://github.com/fengyuanchen/cropperjs
cropper: {
type: Object
},
// 可接收的文件后缀
accept: {
type: String,
default: ".jpg, .jpeg, .png, .gif, .webp"
},
// 输出类型blob,dataUrl,all
output: {
type: String,
default: "blob"
// blob
},
compressQuality: {
type: Number,
default: 0.8
}
},
emits: ["cancel", "done", "ready"],
setup(a, t) {
const { ui: i } = B(), { t: e } = lt(), n = ref(false), r = ref(), o = ref(), s = ref(false), p = ref(), l = ref(), h2 = ref(), c = ref({
x: 1,
y: 1
});
function u() {
n.value = false;
}
function g() {
x(), t.emit("cancel");
}
const m = i.dialog.buildOnClosedBind(g), y = i.dialog.customClass, b = computed(() => ({
...m,
[y]: "fs-cropper-dialog",
...i.formWrapper.buildWidthBind(i.dialog.name, "960px"),
...i.formWrapper.buildInitBind(i.dialog.name),
title: a.title || e("fs.extends.cropper.title")
}));
function E(d) {
n.value = true, d != null && d !== "" && (p.value = d);
}
function O() {
n.value = false;
}
function x() {
s.value = false, o.value != null && (o.value.value = null, o.value = null), r.value != null && r.value.clear();
}
function z() {
return r.value;
}
const B2 = {
cropper: z(),
zoom: xt,
clear: x,
close: O,
open: E
};
function f(d) {
t.emit("ready", {
event: d,
...B2
});
}
function w(d) {
return d.preventDefault(), false;
}
function T() {
o.value.click();
}
function A(d) {
return d.type.indexOf("image") === -1 ? (i.message.warn("请选择合适的文件类型"), false) : a.maxSize > 0 && d.size / 1024 / 1024 > a.maxSize ? (i.message.warn(`图片大小超出最大限制(${a.maxSize}MB请重新选择.`), false) : true;
}
function L(d) {
const D = d.target.files[0];
if (D.type.indexOf("image/") === -1) {
i.message.warn("Please select an image file");
return;
}
if (typeof FileReader == "function") {
const U = new FileReader();
U.onload = (pt) => {
p.value = pt.target.result, r.value.replace(pt.target.result);
}, U.readAsDataURL(D);
} else
i.message.error("Sorry, FileReader API not supported");
}
function $(d) {
d.preventDefault();
const D = d.target.files || d.dataTransfer.files;
if (D == null)
return;
s.value = true;
const U = D[0];
A(U) && (h2.value = U, L(d));
}
function W(d, D) {
return D == null && (D = a.compressQuality), r.value.getCroppedCanvas().toDataURL(d, D);
}
async function P(d, D) {
return D == null && (D = a.compressQuality), new Promise((U, pt) => {
function He(Ye) {
U(Ye);
}
r.value.getCroppedCanvas().toBlob(He, d, D);
});
}
function _(d) {
t.emit("done", d);
}
async function R(d) {
const D = { file: d };
if (a.output === "all") {
const U = await P(d.type), pt = W(d.type);
D.blob = U, D.dataUrl = pt, _(D);
return;
}
if (a.output === "blob") {
D.blob = await P(d.type), _(D);
return;
}
a.output === "dataUrl" && (D.dataUrl = W(d.type), _(D));
}
async function F() {
if (!s.value) {
i.message.warn("请先选择图片");
return;
}
await R(h2.value), n.value = false;
}
function K() {
r.value.scaleX(c.value.x *= -1);
}
function it() {
r.value.scaleY(c.value.y *= -1);
}
function ct() {
l.value = JSON.stringify(r.value.getCropBoxData(), null, 4);
}
function wt() {
l.value = JSON.stringify(r.value.getData(), null, 4);
}
function yt(d, D) {
r.value.move(d, D);
}
function lt2() {
r.value.reset();
}
function at(d) {
r.value.rotate(d);
}
function St() {
r.value.setCropBoxData(JSON.parse(l.value));
}
function Rt() {
r.value.setData(JSON.parse(l.value));
}
function Ie() {
o.value.click();
}
function xt(d) {
r.value.relativeZoom(d);
}
const ze = computed(() => {
const d = "small";
return [
{
size: d,
round: true,
icon: i.icons.edit,
text: e("fs.extends.cropper.reChoose"),
onClick() {
T();
}
},
{
size: d,
round: true,
text: e("fs.extends.cropper.flipX"),
onClick() {
K();
}
},
{
size: d,
round: true,
text: e("fs.extends.cropper.flipY"),
onClick() {
it();
}
},
{
size: d,
round: true,
icon: i.icons.zoomIn,
onClick() {
xt(0.1);
}
},
{
size: d,
round: true,
icon: i.icons.zoomOut,
onClick() {
xt(-0.1);
}
},
{
size: d,
round: true,
icon: i.icons.refreshLeft,
onClick() {
at(90);
}
},
{
size: d,
round: true,
icon: i.icons.refreshRight,
onClick() {
at(-90);
}
},
{
size: d,
round: true,
icon: i.icons.refresh,
text: e("fs.extends.cropper.reset"),
onClick() {
lt2();
}
}
];
}), Le = computed(() => ({
title: e("fs.extends.cropper.title"),
preview: e("fs.extends.cropper.preview"),
cancel: e("fs.extends.cropper.cancel"),
confirm: e("fs.extends.cropper.confirm"),
chooseImage: e("fs.extends.cropper.chooseImage")
})), Pe = computed(() => a.uploadTip != null && a.uploadTip !== "" ? a.uploadTip : a.maxSize > 0 ? `${e("fs.extends.cropper.onlySupport")} ${a.accept.replace(/,/g, "、")},
${e("fs.extends.cropper.sizeLimit")} ${a.maxSize}M` : `${e("fs.extends.cropper.onlySupport")}${a.accept},${e("fs.extends.cropper.sizeNoLimit")}`);
return {
ui: i,
cropperRef: r,
fileInputRef: o,
dialogVisible: n,
dialogBinding: b,
isLoaded: s,
imgSrc: p,
data: l,
file: h2,
scale: c,
computedButtons: ze,
handleClose: u,
setData: Rt,
handleClosed: g,
close: O,
showFileChooser: Ie,
zoom: xt,
setCropBoxData: St,
rotate: at,
reset: lt2,
move: yt,
getData: wt,
getCropBoxData: ct,
flipY: it,
flipX: K,
doCropper: F,
doOutput: R,
getCropImageBlob: P,
getCropImageDataUrl: W,
handleChange: $,
setImage: L,
checkFile: A,
handleClick: T,
preventDefault: w,
open: E,
clear: x,
getCropperRef: z,
ready: f,
computedTexts: Le,
computedUploadTip: Pe
};
},
data() {
return {};
},
computed: {
_cropper() {
const a = {
aspectRatio: 1,
ready: this.ready
};
return this.cropper == null ? a : Object.assign(a, this.cropper);
},
_cropperHeight() {
let a = this.cropperHeight;
return a == null && (a = document.documentElement.clientHeight * 0.55, a < 270 && (a = 270)), typeof a == "number" ? a + "px" : a;
},
_dialogWidth() {
let a = this.dialogWidth;
return a == null && (a = "50%"), typeof a == "number" ? a + "px" : a;
}
}
});
var Wi = { class: "fs-cropper-dialog-wrap" };
var Xi = ["accept"];
var Ui = { class: "fs-cropper-dialog__choose fs-cropper-dialog_left" };
var ji = { class: "fs-cropper-dialog__edit fs-cropper-dialog_left" };
var Vi = { class: "fs-cropper-dialog__edit-area" };
var $i = { class: "tool-bar" };
var Fi = { class: "fs-cropper-dialog__preview" };
var Gi = { class: "fs-cropper-dialog__preview-title" };
var Qi = { class: "dialog-footer" };
function Zi(a, t, i, e, n, r) {
const o = resolveComponent("fs-button"), s = resolveComponent("vue-cropper");
return openBlock(), createBlock(resolveDynamicComponent(a.ui.dialog.name), mergeProps({
ref: "cropperDialogRef",
[a.ui.dialog.visible]: a.dialogVisible,
["onUpdate:" + a.ui.dialog.visible]: t[2] || (t[2] = (p) => a.dialogVisible = p),
"append-to-body": "",
width: "900px",
"close-on-click-modal": true
}, a.dialogBinding, { "destroy-on-close": false }), {
footer: withCtx(() => [
createBaseVNode("div", Qi, [
createVNode(o, {
size: "small",
text: a.computedTexts.cancel,
onClick: a.handleClose
}, null, 8, ["text", "onClick"]),
createVNode(o, {
type: "primary",
size: "small",
text: a.computedTexts.confirm,
onClick: t[1] || (t[1] = (p) => a.doCropper())
}, null, 8, ["text"])
])
]),
default: withCtx(() => [
createBaseVNode("div", Wi, [
withDirectives(createBaseVNode("input", {
ref: "fileInputRef",
type: "file",
accept: a.accept,
onChange: t[0] || (t[0] = (...p) => a.handleChange && a.handleChange(...p))
}, null, 40, Xi), [
[vShow, false]
]),
withDirectives(createBaseVNode("div", Ui, [
createVNode(o, {
round: "",
text: a.computedTexts.chooseImage,
onClick: a.showFileChooser
}, null, 8, ["text", "onClick"]),
createBaseVNode("p", null, toDisplayString(a.computedUploadTip), 1)
], 512), [
[vShow, !a.isLoaded]
]),
withDirectives(createBaseVNode("div", ji, [
createBaseVNode("div", Vi, [
createVNode(s, mergeProps({
ref: "cropperRef",
src: a.imgSrc,
preview: ".preview",
style: { height: a._cropperHeight }
}, a._cropper), null, 16, ["src", "style"])
]),
createBaseVNode("div", $i, [
(openBlock(), createBlock(resolveDynamicComponent(a.ui.buttonGroup.name), null, {
default: withCtx(() => [
(openBlock(true), createElementBlock(Fragment, null, renderList(a.computedButtons, (p, l) => (openBlock(), createBlock(o, mergeProps({ key: l }, { ref_for: true }, p), null, 16))), 128))
]),
_: 1
}))
])
], 512), [
[vShow, a.isLoaded]
]),
createBaseVNode("div", Fi, [
createBaseVNode("span", Gi, toDisplayString(a.computedTexts.preview), 1),
t[3] || (t[3] = createBaseVNode("div", { class: "fs-cropper-dialog__preview-120 preview" }, null, -1)),
createBaseVNode("div", {
class: normalizeClass(["fs-cropper-dialog__preview-65 preview", { round: a._cropper.aspectRatio === 1 }])
}, null, 2)
])
])
]),
_: 1
}, 16);
}
var ea = ge(Yi, [["render", Zi]]);
export {
ea as default
};
/*! Bundled license information:
@fast-crud/fast-extends/dist/fs-cropper-d9786edb.mjs:
(*!
* Cropper.js v1.6.2
* https://fengyuanchen.github.io/cropperjs
*
* Copyright 2015-present Chen Fengyuan
* Released under the MIT license
*
* Date: 2024-04-21T07:43:05.335Z
*)
*/
//# sourceMappingURL=fs-cropper-d9786edb-FTL4HHUI.js.map