Files
prop-data-guard/frontend/node_modules/element-plus/dist/index.full.js
T
2026-04-22 17:07:33 +08:00

59570 lines
2.0 MiB
Plaintext

/*! Element Plus v2.13.7 */
(function(global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) :
typeof define === 'function' && define.amd ? define(['exports', 'vue'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ElementPlus = {}), global.Vue));
})(this, function(exports, vue) {
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
//#region \0rolldown/runtime.js
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) {
__defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
}
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
//#region ../../packages/utils/dom/aria.ts
const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])`;
const isShadowRoot$1 = (e) => {
if (typeof ShadowRoot === "undefined") return false;
return e instanceof ShadowRoot;
};
const isHTMLElement$1 = (e) => {
if (typeof Element === "undefined") return false;
return e instanceof Element;
};
/**
* Determine if the testing element is visible on screen no matter if its on the viewport or not
*/
const isVisible = (element) => {
return getComputedStyle(element).position === "fixed" ? false : element.offsetParent !== null;
};
const obtainAllFocusableElements$1 = (element) => {
return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item));
};
/**
* @desc Determine if target element is focusable
* @param element {HTMLElement}
* @returns {Boolean} true if it is focusable
*/
const isFocusable = (element) => {
if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute("tabIndex") !== null) return true;
if (element.tabIndex < 0 || element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true") return false;
switch (element.nodeName) {
case "A": return !!element.href && element.rel !== "ignore";
case "INPUT": return !(element.type === "hidden" || element.type === "file");
case "BUTTON":
case "SELECT":
case "TEXTAREA": return true;
default: return false;
}
};
/**
* Trigger an event
* mouseenter, mouseleave, mouseover, keyup, change, click, etc.
* @param {HTMLElement} elm
* @param {String} name
* @param {*} opts
*/
const triggerEvent = function(elm, name, ...opts) {
let eventName;
if (name.includes("mouse") || name.includes("click")) eventName = "MouseEvents";
else if (name.includes("key")) eventName = "KeyboardEvent";
else eventName = "HTMLEvents";
const evt = document.createEvent(eventName);
evt.initEvent(name, ...opts);
elm.dispatchEvent(evt);
return elm;
};
const isLeaf = (el) => !el.getAttribute("aria-owns");
const getSibling = (el, distance, elClass) => {
const { parentNode } = el;
if (!parentNode) return null;
const siblings = parentNode.querySelectorAll(elClass);
return siblings[Array.prototype.indexOf.call(siblings, el) + distance] || null;
};
const focusElement = (el, options) => {
if (!el || !el.focus) return;
let cleanup = false;
if (isHTMLElement$1(el) && !isFocusable(el) && !el.getAttribute("tabindex")) {
el.setAttribute("tabindex", "-1");
cleanup = true;
}
el.focus(options);
if (isHTMLElement$1(el) && cleanup) el.removeAttribute("tabindex");
};
const focusNode = (el) => {
if (!el) return;
focusElement(el);
!isLeaf(el) && el.click();
};
//#endregion
//#region ../../packages/constants/aria.ts
const EVENT_CODE = {
tab: "Tab",
enter: "Enter",
space: "Space",
left: "ArrowLeft",
up: "ArrowUp",
right: "ArrowRight",
down: "ArrowDown",
esc: "Escape",
delete: "Delete",
backspace: "Backspace",
numpadEnter: "NumpadEnter",
pageUp: "PageUp",
pageDown: "PageDown",
home: "Home",
end: "End"
};
//#endregion
//#region ../../packages/constants/date.ts
const datePickTypes = [
"year",
"years",
"month",
"months",
"date",
"dates",
"week",
"datetime",
"datetimerange",
"daterange",
"monthrange",
"yearrange"
];
const WEEK_DAYS = [
"sun",
"mon",
"tue",
"wed",
"thu",
"fri",
"sat"
];
//#endregion
//#region ../../packages/constants/event.ts
const UPDATE_MODEL_EVENT = "update:modelValue";
const CHANGE_EVENT = "change";
const INPUT_EVENT = "input";
//#endregion
//#region ../../packages/constants/key.ts
const INSTALLED_KEY = Symbol("INSTALLED_KEY");
//#endregion
//#region ../../packages/constants/size.ts
const componentSizes = [
"",
"default",
"small",
"large"
];
const componentSizeMap = {
large: 40,
default: 32,
small: 24
};
//#endregion
//#region ../../packages/constants/column-alignment.ts
const columnAlignment = [
"left",
"center",
"right"
];
//#endregion
//#region ../../packages/constants/form.ts
const MINIMUM_INPUT_WIDTH = 11;
const BORDER_HORIZONTAL_WIDTH = 2;
//#endregion
//#region ../../node_modules/.pnpm/@vueuse+shared@12.0.0_typescript@5.5.4/node_modules/@vueuse/shared/index.mjs
function computedEager(fn, options) {
var _a;
const result = (0, vue.shallowRef)();
(0, vue.watchEffect)(() => {
result.value = fn();
}, {
...options,
flush: (_a = options == null ? void 0 : options.flush) != null ? _a : "sync"
});
return (0, vue.readonly)(result);
}
function tryOnScopeDispose(fn) {
if ((0, vue.getCurrentScope)()) {
(0, vue.onScopeDispose)(fn);
return true;
}
return false;
}
function toValue$1(r) {
return typeof r === "function" ? r() : (0, vue.unref)(r);
}
function toReactive(objectRef) {
if (!(0, vue.isRef)(objectRef)) return (0, vue.reactive)(objectRef);
return (0, vue.reactive)(new Proxy({}, {
get(_, p, receiver) {
return (0, vue.unref)(Reflect.get(objectRef.value, p, receiver));
},
set(_, p, value) {
if ((0, vue.isRef)(objectRef.value[p]) && !(0, vue.isRef)(value)) objectRef.value[p].value = value;
else objectRef.value[p] = value;
return true;
},
deleteProperty(_, p) {
return Reflect.deleteProperty(objectRef.value, p);
},
has(_, p) {
return Reflect.has(objectRef.value, p);
},
ownKeys() {
return Object.keys(objectRef.value);
},
getOwnPropertyDescriptor() {
return {
enumerable: true,
configurable: true
};
}
}));
}
function reactiveComputed(fn) {
return toReactive((0, vue.computed)(fn));
}
const isClient = typeof window !== "undefined" && typeof document !== "undefined";
const isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
const isDef = (val) => typeof val !== "undefined";
const notNullish = (val) => val != null;
const toString$1 = Object.prototype.toString;
const isObject$2 = (val) => toString$1.call(val) === "[object Object]";
const clamp$2 = (n, min, max) => Math.min(max, Math.max(min, n));
const noop$1 = () => {};
const isIOS = /* @__PURE__ */ getIsIOS();
function getIsIOS() {
var _a, _b;
return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));
}
function createFilterWrapper(filter, fn) {
function wrapper(...args) {
return new Promise((resolve, reject) => {
Promise.resolve(filter(() => fn.apply(this, args), {
fn,
thisArg: this,
args
})).then(resolve).catch(reject);
});
}
return wrapper;
}
function debounceFilter(ms, options = {}) {
let timer;
let maxTimer;
let lastRejector = noop$1;
const _clearTimeout = (timer2) => {
clearTimeout(timer2);
lastRejector();
lastRejector = noop$1;
};
const filter = (invoke) => {
const duration = toValue$1(ms);
const maxDuration = toValue$1(options.maxWait);
if (timer) _clearTimeout(timer);
if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {
if (maxTimer) {
_clearTimeout(maxTimer);
maxTimer = null;
}
return Promise.resolve(invoke());
}
return new Promise((resolve, reject) => {
lastRejector = options.rejectOnCancel ? reject : resolve;
if (maxDuration && !maxTimer) maxTimer = setTimeout(() => {
if (timer) _clearTimeout(timer);
maxTimer = null;
resolve(invoke());
}, maxDuration);
timer = setTimeout(() => {
if (maxTimer) _clearTimeout(maxTimer);
maxTimer = null;
resolve(invoke());
}, duration);
});
};
return filter;
}
function throttleFilter(...args) {
let lastExec = 0;
let timer;
let isLeading = true;
let lastRejector = noop$1;
let lastValue;
let ms;
let trailing;
let leading;
let rejectOnCancel;
if (!(0, vue.isRef)(args[0]) && typeof args[0] === "object") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);
else [ms, trailing = true, leading = true, rejectOnCancel = false] = args;
const clear = () => {
if (timer) {
clearTimeout(timer);
timer = void 0;
lastRejector();
lastRejector = noop$1;
}
};
const filter = (_invoke) => {
const duration = toValue$1(ms);
const elapsed = Date.now() - lastExec;
const invoke = () => {
return lastValue = _invoke();
};
clear();
if (duration <= 0) {
lastExec = Date.now();
return invoke();
}
if (elapsed > duration && (leading || !isLeading)) {
lastExec = Date.now();
invoke();
} else if (trailing) lastValue = new Promise((resolve, reject) => {
lastRejector = rejectOnCancel ? reject : resolve;
timer = setTimeout(() => {
lastExec = Date.now();
isLeading = true;
resolve(invoke());
clear();
}, Math.max(0, duration - elapsed));
});
if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);
isLeading = false;
return lastValue;
};
return filter;
}
function cacheStringFunction$1(fn) {
const cache = /* @__PURE__ */ Object.create(null);
return (str) => {
return cache[str] || (cache[str] = fn(str));
};
}
const hyphenateRE$1 = /\B([A-Z])/g;
const hyphenate$1 = cacheStringFunction$1((str) => str.replace(hyphenateRE$1, "-$1").toLowerCase());
const camelizeRE$1 = /-(\w)/g;
const camelize$1 = cacheStringFunction$1((str) => {
return str.replace(camelizeRE$1, (_, c) => c ? c.toUpperCase() : "");
});
function getLifeCycleTarget(target) {
return target || (0, vue.getCurrentInstance)();
}
function useDebounceFn(fn, ms = 200, options = {}) {
return createFilterWrapper(debounceFilter(ms, options), fn);
}
function refDebounced(value, ms = 200, options = {}) {
const debounced = (0, vue.ref)(value.value);
const updater = useDebounceFn(() => {
debounced.value = value.value;
}, ms, options);
(0, vue.watch)(value, () => updater());
return debounced;
}
function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {
return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);
}
function tryOnMounted(fn, sync = true, target) {
if (getLifeCycleTarget()) (0, vue.onMounted)(fn, target);
else if (sync) fn();
else (0, vue.nextTick)(fn);
}
function useTimeoutFn(cb, interval, options = {}) {
const { immediate = true } = options;
const isPending = (0, vue.ref)(false);
let timer = null;
function clear() {
if (timer) {
clearTimeout(timer);
timer = null;
}
}
function stop() {
isPending.value = false;
clear();
}
function start(...args) {
clear();
isPending.value = true;
timer = setTimeout(() => {
isPending.value = false;
timer = null;
cb(...args);
}, toValue$1(interval));
}
if (immediate) {
isPending.value = true;
if (isClient) start();
}
tryOnScopeDispose(stop);
return {
isPending: (0, vue.readonly)(isPending),
start,
stop
};
}
//#endregion
//#region ../../node_modules/.pnpm/@vueuse+core@12.0.0_typescript@5.5.4/node_modules/@vueuse/core/index.mjs
const defaultWindow = isClient ? window : void 0;
const defaultDocument = isClient ? window.document : void 0;
const defaultNavigator = isClient ? window.navigator : void 0;
const defaultLocation = isClient ? window.location : void 0;
function unrefElement(elRef) {
var _a;
const plain = toValue$1(elRef);
return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
}
function useEventListener(...args) {
let target;
let events;
let listeners;
let options;
if (typeof args[0] === "string" || Array.isArray(args[0])) {
[events, listeners, options] = args;
target = defaultWindow;
} else [target, events, listeners, options] = args;
if (!target) return noop$1;
if (!Array.isArray(events)) events = [events];
if (!Array.isArray(listeners)) listeners = [listeners];
const cleanups = [];
const cleanup = () => {
cleanups.forEach((fn) => fn());
cleanups.length = 0;
};
const register = (el, event, listener, options2) => {
el.addEventListener(event, listener, options2);
return () => el.removeEventListener(event, listener, options2);
};
const stopWatch = (0, vue.watch)(() => [unrefElement(target), toValue$1(options)], ([el, options2]) => {
cleanup();
if (!el) return;
const optionsClone = isObject$2(options2) ? { ...options2 } : options2;
cleanups.push(...events.flatMap((event) => {
return listeners.map((listener) => register(el, event, listener, optionsClone));
}));
}, {
immediate: true,
flush: "post"
});
const stop = () => {
stopWatch();
cleanup();
};
tryOnScopeDispose(stop);
return stop;
}
let _iOSWorkaround = false;
function onClickOutside(target, handler, options = {}) {
const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;
if (!window) return noop$1;
if (isIOS && !_iOSWorkaround) {
_iOSWorkaround = true;
Array.from(window.document.body.children).forEach((el) => el.addEventListener("click", noop$1));
window.document.documentElement.addEventListener("click", noop$1);
}
let shouldListen = true;
const shouldIgnore = (event) => {
return toValue$1(ignore).some((target2) => {
if (typeof target2 === "string") return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));
else {
const el = unrefElement(target2);
return el && (event.target === el || event.composedPath().includes(el));
}
});
};
function hasMultipleRoots(target2) {
const vm = toValue$1(target2);
return vm && vm.$.subTree.shapeFlag === 16;
}
function checkMultipleRoots(target2, event) {
const vm = toValue$1(target2);
const children = vm.$.subTree && vm.$.subTree.children;
if (children == null || !Array.isArray(children)) return false;
return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));
}
const listener = (event) => {
const el = unrefElement(target);
if (event.target == null) return;
if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;
if (!el || el === event.target || event.composedPath().includes(el)) return;
if (event.detail === 0) shouldListen = !shouldIgnore(event);
if (!shouldListen) {
shouldListen = true;
return;
}
handler(event);
};
let isProcessingClick = false;
const cleanup = [
useEventListener(window, "click", (event) => {
if (!isProcessingClick) {
isProcessingClick = true;
setTimeout(() => {
isProcessingClick = false;
}, 0);
listener(event);
}
}, {
passive: true,
capture
}),
useEventListener(window, "pointerdown", (e) => {
const el = unrefElement(target);
shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));
}, { passive: true }),
detectIframe && useEventListener(window, "blur", (event) => {
setTimeout(() => {
var _a;
const el = unrefElement(target);
if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window.document.activeElement))) handler(event);
}, 0);
})
].filter(Boolean);
const stop = () => cleanup.forEach((fn) => fn());
return stop;
}
function useMounted() {
const isMounted = (0, vue.ref)(false);
const instance = (0, vue.getCurrentInstance)();
if (instance) (0, vue.onMounted)(() => {
isMounted.value = true;
}, instance);
return isMounted;
}
function useSupported(callback) {
const isMounted = useMounted();
return (0, vue.computed)(() => {
isMounted.value;
return Boolean(callback());
});
}
function useMutationObserver(target, callback, options = {}) {
const { window = defaultWindow, ...mutationOptions } = options;
let observer;
const isSupported = useSupported(() => window && "MutationObserver" in window);
const cleanup = () => {
if (observer) {
observer.disconnect();
observer = void 0;
}
};
const targets = (0, vue.computed)(() => {
const value = toValue$1(target);
const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);
return new Set(items);
});
const stopWatch = (0, vue.watch)(() => targets.value, (targets2) => {
cleanup();
if (isSupported.value && targets2.size) {
observer = new MutationObserver(callback);
targets2.forEach((el) => observer.observe(el, mutationOptions));
}
}, {
immediate: true,
flush: "post"
});
const takeRecords = () => {
return observer == null ? void 0 : observer.takeRecords();
};
const stop = () => {
stopWatch();
cleanup();
};
tryOnScopeDispose(stop);
return {
isSupported,
stop,
takeRecords
};
}
function useActiveElement(options = {}) {
var _a;
const { window = defaultWindow, deep = true, triggerOnRemoval = false } = options;
const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;
const getDeepActiveElement = () => {
var _a2;
let element = document == null ? void 0 : document.activeElement;
if (deep) while (element == null ? void 0 : element.shadowRoot) element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;
return element;
};
const activeElement = (0, vue.ref)();
const trigger = () => {
activeElement.value = getDeepActiveElement();
};
if (window) {
useEventListener(window, "blur", (event) => {
if (event.relatedTarget !== null) return;
trigger();
}, true);
useEventListener(window, "focus", trigger, true);
}
if (triggerOnRemoval) useMutationObserver(document, (mutations) => {
mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {
if (node === activeElement.value) trigger();
});
}, {
childList: true,
subtree: true
});
trigger();
return activeElement;
}
function useMediaQuery(query, options = {}) {
const { window = defaultWindow } = options;
const isSupported = useSupported(() => window && "matchMedia" in window && typeof window.matchMedia === "function");
let mediaQuery;
const matches = (0, vue.ref)(false);
const handler = (event) => {
matches.value = event.matches;
};
const cleanup = () => {
if (!mediaQuery) return;
if ("removeEventListener" in mediaQuery) mediaQuery.removeEventListener("change", handler);
else mediaQuery.removeListener(handler);
};
const stopWatch = (0, vue.watchEffect)(() => {
if (!isSupported.value) return;
cleanup();
mediaQuery = window.matchMedia(toValue$1(query));
if ("addEventListener" in mediaQuery) mediaQuery.addEventListener("change", handler);
else mediaQuery.addListener(handler);
matches.value = mediaQuery.matches;
});
tryOnScopeDispose(() => {
stopWatch();
cleanup();
mediaQuery = void 0;
});
return matches;
}
function cloneFnJSON(source) {
return JSON.parse(JSON.stringify(source));
}
function useCssVar(prop, target, options = {}) {
const { window = defaultWindow, initialValue, observe = false } = options;
const variable = (0, vue.ref)(initialValue);
const elRef = (0, vue.computed)(() => {
var _a;
return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);
});
function updateCssVar() {
var _a;
const key = toValue$1(prop);
const el = toValue$1(elRef);
if (el && window && key) variable.value = ((_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim()) || initialValue;
}
if (observe) useMutationObserver(elRef, updateCssVar, {
attributeFilter: ["style", "class"],
window
});
(0, vue.watch)([elRef, () => toValue$1(prop)], (_, old) => {
if (old[0] && old[1]) old[0].style.removeProperty(old[1]);
updateCssVar();
}, { immediate: true });
(0, vue.watch)(variable, (val) => {
var _a;
const raw_prop = toValue$1(prop);
if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) if (val == null) elRef.value.style.removeProperty(raw_prop);
else elRef.value.style.setProperty(raw_prop, val);
});
return variable;
}
function useDocumentVisibility(options = {}) {
const { document = defaultDocument } = options;
if (!document) return (0, vue.ref)("visible");
const visibility = (0, vue.ref)(document.visibilityState);
useEventListener(document, "visibilitychange", () => {
visibility.value = document.visibilityState;
});
return visibility;
}
function useResizeObserver(target, callback, options = {}) {
const { window = defaultWindow, ...observerOptions } = options;
let observer;
const isSupported = useSupported(() => window && "ResizeObserver" in window);
const cleanup = () => {
if (observer) {
observer.disconnect();
observer = void 0;
}
};
const stopWatch = (0, vue.watch)((0, vue.computed)(() => {
const _targets = toValue$1(target);
return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];
}), (els) => {
cleanup();
if (isSupported.value && window) {
observer = new ResizeObserver(callback);
for (const _el of els) if (_el) observer.observe(_el, observerOptions);
}
}, {
immediate: true,
flush: "post"
});
const stop = () => {
cleanup();
stopWatch();
};
tryOnScopeDispose(stop);
return {
isSupported,
stop
};
}
function useElementBounding(target, options = {}) {
const { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = "sync" } = options;
const height = (0, vue.ref)(0);
const bottom = (0, vue.ref)(0);
const left = (0, vue.ref)(0);
const right = (0, vue.ref)(0);
const top = (0, vue.ref)(0);
const width = (0, vue.ref)(0);
const x = (0, vue.ref)(0);
const y = (0, vue.ref)(0);
function recalculate() {
const el = unrefElement(target);
if (!el) {
if (reset) {
height.value = 0;
bottom.value = 0;
left.value = 0;
right.value = 0;
top.value = 0;
width.value = 0;
x.value = 0;
y.value = 0;
}
return;
}
const rect = el.getBoundingClientRect();
height.value = rect.height;
bottom.value = rect.bottom;
left.value = rect.left;
right.value = rect.right;
top.value = rect.top;
width.value = rect.width;
x.value = rect.x;
y.value = rect.y;
}
function update() {
if (updateTiming === "sync") recalculate();
else if (updateTiming === "next-frame") requestAnimationFrame(() => recalculate());
}
useResizeObserver(target, update);
(0, vue.watch)(() => unrefElement(target), (ele) => !ele && update());
useMutationObserver(target, update, { attributeFilter: ["style", "class"] });
if (windowScroll) useEventListener("scroll", update, {
capture: true,
passive: true
});
if (windowResize) useEventListener("resize", update, { passive: true });
tryOnMounted(() => {
if (immediate) update();
});
return {
height,
bottom,
left,
right,
top,
width,
x,
y,
update
};
}
function useElementSize(target, initialSize = {
width: 0,
height: 0
}, options = {}) {
const { window = defaultWindow, box = "content-box" } = options;
const isSVG = (0, vue.computed)(() => {
var _a, _b;
return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes("svg");
});
const width = (0, vue.ref)(initialSize.width);
const height = (0, vue.ref)(initialSize.height);
const { stop: stop1 } = useResizeObserver(target, ([entry]) => {
const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
if (window && isSVG.value) {
const $elem = unrefElement(target);
if ($elem) {
const rect = $elem.getBoundingClientRect();
width.value = rect.width;
height.value = rect.height;
}
} else if (boxSize) {
const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];
width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
} else {
width.value = entry.contentRect.width;
height.value = entry.contentRect.height;
}
}, options);
tryOnMounted(() => {
const ele = unrefElement(target);
if (ele) {
width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width;
height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height;
}
});
const stop2 = (0, vue.watch)(() => unrefElement(target), (ele) => {
width.value = ele ? initialSize.width : 0;
height.value = ele ? initialSize.height : 0;
});
function stop() {
stop1();
stop2();
}
return {
width,
height,
stop
};
}
function useIntersectionObserver(target, callback, options = {}) {
const { root, rootMargin = "0px", threshold = 0, window = defaultWindow, immediate = true } = options;
const isSupported = useSupported(() => window && "IntersectionObserver" in window);
const targets = (0, vue.computed)(() => {
const _target = toValue$1(target);
return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);
});
let cleanup = noop$1;
const isActive = (0, vue.ref)(immediate);
const stopWatch = isSupported.value ? (0, vue.watch)(() => [
targets.value,
unrefElement(root),
isActive.value
], ([targets2, root2]) => {
cleanup();
if (!isActive.value) return;
if (!targets2.length) return;
const observer = new IntersectionObserver(callback, {
root: unrefElement(root2),
rootMargin,
threshold
});
targets2.forEach((el) => el && observer.observe(el));
cleanup = () => {
observer.disconnect();
cleanup = noop$1;
};
}, {
immediate,
flush: "post"
}) : noop$1;
const stop = () => {
cleanup();
stopWatch();
isActive.value = false;
};
tryOnScopeDispose(stop);
return {
isSupported,
isActive,
pause() {
cleanup();
isActive.value = false;
},
resume() {
isActive.value = true;
},
stop
};
}
const DEFAULT_UNITS = [
{
max: 6e4,
value: 1e3,
name: "second"
},
{
max: 276e4,
value: 6e4,
name: "minute"
},
{
max: 72e6,
value: 36e5,
name: "hour"
},
{
max: 5184e5,
value: 864e5,
name: "day"
},
{
max: 24192e5,
value: 6048e5,
name: "week"
},
{
max: 28512e6,
value: 2592e6,
name: "month"
},
{
max: Number.POSITIVE_INFINITY,
value: 31536e6,
name: "year"
}
];
function useVModel(props, key, emit, options = {}) {
var _a, _b, _c;
const { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;
const vm = (0, vue.getCurrentInstance)();
const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));
let event = eventName;
if (!key) key = "modelValue";
event = event || `update:${key.toString()}`;
const cloneFn = (val) => !clone ? val : typeof clone === "function" ? clone(val) : cloneFnJSON(val);
const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;
const triggerEmit = (value) => {
if (shouldEmit) {
if (shouldEmit(value)) _emit(event, value);
} else _emit(event, value);
};
if (passive) {
const proxy = (0, vue.ref)(getValue());
let isUpdating = false;
(0, vue.watch)(() => props[key], (v) => {
if (!isUpdating) {
isUpdating = true;
proxy.value = cloneFn(v);
(0, vue.nextTick)(() => isUpdating = false);
}
});
(0, vue.watch)(proxy, (v) => {
if (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);
}, { deep });
return proxy;
} else return (0, vue.computed)({
get() {
return getValue();
},
set(value) {
triggerEmit(value);
}
});
}
function useWindowFocus(options = {}) {
const { window = defaultWindow } = options;
if (!window) return (0, vue.ref)(false);
const focused = (0, vue.ref)(window.document.hasFocus());
useEventListener(window, "blur", () => {
focused.value = false;
});
useEventListener(window, "focus", () => {
focused.value = true;
});
return focused;
}
function useWindowSize(options = {}) {
const { window = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = "inner" } = options;
const width = (0, vue.ref)(initialWidth);
const height = (0, vue.ref)(initialHeight);
const update = () => {
if (window) if (type === "outer") {
width.value = window.outerWidth;
height.value = window.outerHeight;
} else if (includeScrollbar) {
width.value = window.innerWidth;
height.value = window.innerHeight;
} else {
width.value = window.document.documentElement.clientWidth;
height.value = window.document.documentElement.clientHeight;
}
};
update();
tryOnMounted(update);
useEventListener("resize", update, { passive: true });
if (listenOrientation) (0, vue.watch)(useMediaQuery("(orientation: portrait)"), () => update());
return {
width,
height
};
}
//#endregion
//#region ../../packages/utils/browser.ts
const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent);
const isAndroid = () => isClient && /android/i.test(window.navigator.userAgent);
//#endregion
//#region ../../packages/utils/dom/event.ts
const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => {
const handleEvent = (event) => {
const shouldPrevent = theirsHandler?.(event);
if (checkForDefaultPrevented === false || !shouldPrevent) return oursHandler?.(event);
};
return handleEvent;
};
const whenMouse = (handler) => {
return (e) => e.pointerType === "mouse" ? handler(e) : void 0;
};
const getEventCode = (event) => {
if (event.code && event.code !== "Unidentified") return event.code;
const key = getEventKey(event);
if (key) {
if (Object.values(EVENT_CODE).includes(key)) return key;
switch (key) {
case " ": return EVENT_CODE.space;
default: return "";
}
}
return "";
};
const getEventKey = (event) => {
let key = event.key && event.key !== "Unidentified" ? event.key : "";
if (!key && event.type === "keyup" && isAndroid()) {
const target = event.target;
key = target.value.charAt(target.selectionStart - 1);
}
return key;
};
//#endregion
//#region ../../packages/utils/dom/position.ts
const getOffsetTop = (el) => {
let offset = 0;
let parent = el;
while (parent) {
offset += parent.offsetTop;
parent = parent.offsetParent;
}
return offset;
};
const getOffsetTopDistance = (el, containerEl) => {
return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl));
};
const getClientXY = (event) => {
let clientX;
let clientY;
if (event.type === "touchend") {
clientY = event.changedTouches[0].clientY;
clientX = event.changedTouches[0].clientX;
} else if (event.type.startsWith("touch")) {
clientY = event.touches[0].clientY;
clientX = event.touches[0].clientX;
} else {
clientY = event.clientY;
clientX = event.clientX;
}
return {
clientX,
clientY
};
};
//#endregion
//#region ../../packages/utils/easings.ts
function easeInOutCubic(t, b, c, d) {
const cc = c - b;
t /= d / 2;
if (t < 1) return cc / 2 * t * t * t + b;
return cc / 2 * ((t -= 2) * t * t + 2) + b;
}
//#endregion
//#region ../../node_modules/.pnpm/@vue+shared@3.5.25/node_modules/@vue/shared/dist/shared.esm-bundler.js
/**
* @vue/shared v3.5.25
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
/* @__NO_SIDE_EFFECTS__ */
function makeMap(str) {
const map = /* @__PURE__ */ Object.create(null);
for (const key of str.split(",")) map[key] = 1;
return (val) => val in map;
}
const NOOP = () => {};
const hasOwnProperty$14 = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty$14.call(val, key);
const isArray$1 = Array.isArray;
const isDate = (val) => toTypeString(val) === "[object Date]";
const isFunction$1 = (val) => typeof val === "function";
const isString = (val) => typeof val === "string";
const isObject$1 = (val) => val !== null && typeof val === "object";
const isPromise = (val) => {
return (isObject$1(val) || isFunction$1(val)) && isFunction$1(val.then) && isFunction$1(val.catch);
};
const objectToString$1 = Object.prototype.toString;
const toTypeString = (value) => objectToString$1.call(value);
const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]";
const cacheStringFunction = (fn) => {
const cache = /* @__PURE__ */ Object.create(null);
return ((str) => {
return cache[str] || (cache[str] = fn(str));
});
};
const camelizeRE = /-\w/g;
const camelize = cacheStringFunction((str) => {
return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());
});
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase());
const capitalize$1 = cacheStringFunction((str) => {
return str.charAt(0).toUpperCase() + str.slice(1);
});
const toHandlerKey = cacheStringFunction((str) => {
return str ? `on${capitalize$1(str)}` : ``;
});
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_freeGlobal.js
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_root.js
/** Detect free variable `self`. */
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function("return this")();
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Symbol.js
/** Built-in value references. */
var Symbol$1 = root.Symbol;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getRawTag.js
/** Used for built-in method references. */
var objectProto$4 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$13 = objectProto$4.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString$1 = objectProto$4.toString;
/** Built-in value references. */
var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;
/**
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the raw `toStringTag`.
*/
function getRawTag(value) {
var isOwn = hasOwnProperty$13.call(value, symToStringTag$1), tag = value[symToStringTag$1];
try {
value[symToStringTag$1] = void 0;
var unmasked = true;
} catch (e) {}
var result = nativeObjectToString$1.call(value);
if (unmasked) if (isOwn) value[symToStringTag$1] = tag;
else delete value[symToStringTag$1];
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_objectToString.js
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = Object.prototype.toString;
/**
* Converts `value` to a string using `Object.prototype.toString`.
*
* @private
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
*/
function objectToString(value) {
return nativeObjectToString.call(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetTag.js
/** `Object#toString` result references. */
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
/** Built-in value references. */
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
/**
* The base implementation of `getTag` without fallbacks for buggy environments.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
function baseGetTag(value) {
if (value == null) return value === void 0 ? undefinedTag : nullTag;
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObjectLike.js
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return value != null && typeof value == "object";
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isSymbol.js
/** `Object#toString` result references. */
var symbolTag$3 = "[object Symbol]";
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayMap.js
/**
* A specialized version of `_.map` for arrays without support for iteratee
* shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
*/
function arrayMap(array, iteratee) {
var index = -1, length = array == null ? 0 : array.length, result = Array(length);
while (++index < length) result[index] = iteratee(array[index], index, array);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArray.js
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseToString.js
/** Used as references for various `Number` constants. */
var INFINITY$3 = Infinity;
/** Used to convert symbols to primitives and strings. */
var symbolProto$2 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0;
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString(value) {
if (typeof value == "string") return value;
if (isArray(value)) return arrayMap(value, baseToString) + "";
if (isSymbol(value)) return symbolToString ? symbolToString.call(value) : "";
var result = value + "";
return result == "0" && 1 / value == -INFINITY$3 ? "-0" : result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js
/** Used to match a single whitespace character. */
var reWhitespace = /\s/;
/**
* Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
* character of `string`.
*
* @private
* @param {string} string The string to inspect.
* @returns {number} Returns the index of the last non-whitespace character.
*/
function trimmedEndIndex(string) {
var index = string.length;
while (index-- && reWhitespace.test(string.charAt(index)));
return index;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js
/** Used to match leading whitespace. */
var reTrimStart = /^\s+/;
/**
* The base implementation of `_.trim`.
*
* @private
* @param {string} string The string to trim.
* @returns {string} Returns the trimmed string.
*/
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObject.js
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js
/** Used as references for various `Number` constants. */
var NAN = NaN;
/** Used to detect bad signed hexadecimal string values. */
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
/** Used to detect binary string values. */
var reIsBinary = /^0b[01]+$/i;
/** Used to detect octal string values. */
var reIsOctal = /^0o[0-7]+$/i;
/** Built-in method references without a dependency on `root`. */
var freeParseInt = parseInt;
/**
* Converts `value` to a number.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {number} Returns the number.
* @example
*
* _.toNumber(3.2);
* // => 3.2
*
* _.toNumber(Number.MIN_VALUE);
* // => 5e-324
*
* _.toNumber(Infinity);
* // => Infinity
*
* _.toNumber('3.2');
* // => 3.2
*/
function toNumber(value) {
if (typeof value == "number") return value;
if (isSymbol(value)) return NAN;
if (isObject(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject(other) ? other + "" : other;
}
if (typeof value != "string") return value === 0 ? value : +value;
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toFinite.js
/** Used as references for various `Number` constants. */
var INFINITY$2 = Infinity, MAX_INTEGER = 17976931348623157e292;
/**
* Converts `value` to a finite number.
*
* @static
* @memberOf _
* @since 4.12.0
* @category Lang
* @param {*} value The value to convert.
* @returns {number} Returns the converted number.
* @example
*
* _.toFinite(3.2);
* // => 3.2
*
* _.toFinite(Number.MIN_VALUE);
* // => 5e-324
*
* _.toFinite(Infinity);
* // => 1.7976931348623157e+308
*
* _.toFinite('3.2');
* // => 3.2
*/
function toFinite(value) {
if (!value) return value === 0 ? value : 0;
value = toNumber(value);
if (value === INFINITY$2 || value === -INFINITY$2) return (value < 0 ? -1 : 1) * MAX_INTEGER;
return value === value ? value : 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toInteger.js
/**
* Converts `value` to an integer.
*
* **Note:** This method is loosely based on
* [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {number} Returns the converted integer.
* @example
*
* _.toInteger(3.2);
* // => 3
*
* _.toInteger(Number.MIN_VALUE);
* // => 0
*
* _.toInteger(Infinity);
* // => 1.7976931348623157e+308
*
* _.toInteger('3.2');
* // => 3
*/
function toInteger(value) {
var result = toFinite(value), remainder = result % 1;
return result === result ? remainder ? result - remainder : result : 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/identity.js
/**
* This method returns the first argument it receives.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Util
* @param {*} value Any value.
* @returns {*} Returns `value`.
* @example
*
* var object = { 'a': 1 };
*
* console.log(_.identity(object) === object);
* // => true
*/
function identity(value) {
return value;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isFunction.js
/** `Object#toString` result references. */
var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
if (!isObject(value)) return false;
var tag = baseGetTag(value);
return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_coreJsData.js
/** Used to detect overreaching core-js shims. */
var coreJsData = root["__core-js_shared__"];
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isMasked.js
/** Used to detect methods masquerading as native. */
var maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toSource.js
/** Used to resolve the decompiled source of functions. */
var funcToString$2 = Function.prototype.toString;
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to convert.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString$2.call(func);
} catch (e) {}
try {
return func + "";
} catch (e) {}
}
return "";
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNative.js
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Used for built-in method references. */
var funcProto$1 = Function.prototype, objectProto$3 = Object.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString$1 = funcProto$1.toString;
/** Used to check objects for own properties. */
var hasOwnProperty$12 = objectProto$3.hasOwnProperty;
/** Used to detect if a method is native. */
var reIsNative = RegExp("^" + funcToString$1.call(hasOwnProperty$12).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$");
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) return false;
return (isFunction(value) ? reIsNative : reIsHostCtor).test(toSource(value));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getValue.js
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue$1(object, key) {
return object == null ? void 0 : object[key];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getNative.js
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = getValue$1(object, key);
return baseIsNative(value) ? value : void 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_WeakMap.js
var WeakMap$1 = getNative(root, "WeakMap");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseCreate.js
/** Built-in value references. */
var objectCreate = Object.create;
/**
* The base implementation of `_.create` without support for assigning
* properties to the created object.
*
* @private
* @param {Object} proto The object to inherit from.
* @returns {Object} Returns the new object.
*/
var baseCreate = function() {
function object() {}
return function(proto) {
if (!isObject(proto)) return {};
if (objectCreate) return objectCreate(proto);
object.prototype = proto;
var result = new object();
object.prototype = void 0;
return result;
};
}();
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_apply.js
/**
* A faster alternative to `Function#apply`, this function invokes `func`
* with the `this` binding of `thisArg` and the arguments of `args`.
*
* @private
* @param {Function} func The function to invoke.
* @param {*} thisArg The `this` binding of `func`.
* @param {Array} args The arguments to invoke `func` with.
* @returns {*} Returns the result of `func`.
*/
function apply(func, thisArg, args) {
switch (args.length) {
case 0: return func.call(thisArg);
case 1: return func.call(thisArg, args[0]);
case 2: return func.call(thisArg, args[0], args[1]);
case 3: return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/noop.js
/**
* This method returns `undefined`.
*
* @static
* @memberOf _
* @since 2.3.0
* @category Util
* @example
*
* _.times(2, _.noop);
* // => [undefined, undefined]
*/
function noop() {}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_copyArray.js
/**
* Copies the values of `source` to `array`.
*
* @private
* @param {Array} source The array to copy values from.
* @param {Array} [array=[]] The array to copy values to.
* @returns {Array} Returns `array`.
*/
function copyArray(source, array) {
var index = -1, length = source.length;
array || (array = Array(length));
while (++index < length) array[index] = source[index];
return array;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_shortOut.js
/** Used to detect hot functions by number of calls within a span of milliseconds. */
var HOT_COUNT = 800, HOT_SPAN = 16;
var nativeNow = Date.now;
/**
* Creates a function that'll short out and invoke `identity` instead
* of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
* milliseconds.
*
* @private
* @param {Function} func The function to restrict.
* @returns {Function} Returns the new shortable function.
*/
function shortOut(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
lastCalled = stamp;
if (remaining > 0) {
if (++count >= HOT_COUNT) return arguments[0];
} else count = 0;
return func.apply(void 0, arguments);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/constant.js
/**
* Creates a function that returns `value`.
*
* @static
* @memberOf _
* @since 2.4.0
* @category Util
* @param {*} value The value to return from the new function.
* @returns {Function} Returns the new constant function.
* @example
*
* var objects = _.times(2, _.constant({ 'a': 1 }));
*
* console.log(objects);
* // => [{ 'a': 1 }, { 'a': 1 }]
*
* console.log(objects[0] === objects[1]);
* // => true
*/
function constant(value) {
return function() {
return value;
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_defineProperty.js
var defineProperty = function() {
try {
var func = getNative(Object, "defineProperty");
func({}, "", {});
return func;
} catch (e) {}
}();
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSetToString.js
/**
* The base implementation of `setToString` without support for hot loop shorting.
*
* @private
* @param {Function} func The function to modify.
* @param {Function} string The `toString` result.
* @returns {Function} Returns `func`.
*/
var baseSetToString = !defineProperty ? identity : function(func, string) {
return defineProperty(func, "toString", {
"configurable": true,
"enumerable": false,
"value": constant(string),
"writable": true
});
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setToString.js
/**
* Sets the `toString` method of `func` to return `string`.
*
* @private
* @param {Function} func The function to modify.
* @param {Function} string The `toString` result.
* @returns {Function} Returns `func`.
*/
var setToString = shortOut(baseSetToString);
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayEach.js
/**
* A specialized version of `_.forEach` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns `array`.
*/
function arrayEach(array, iteratee) {
var index = -1, length = array == null ? 0 : array.length;
while (++index < length) if (iteratee(array[index], index, array) === false) break;
return array;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFindIndex.js
/**
* The base implementation of `_.findIndex` and `_.findLastIndex` without
* support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} predicate The function invoked per iteration.
* @param {number} fromIndex The index to search from.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function baseFindIndex(array, predicate, fromIndex, fromRight) {
var length = array.length, index = fromIndex + (fromRight ? 1 : -1);
while (fromRight ? index-- : ++index < length) if (predicate(array[index], index, array)) return index;
return -1;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNaN.js
/**
* The base implementation of `_.isNaN` without support for number objects.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
*/
function baseIsNaN(value) {
return value !== value;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_strictIndexOf.js
/**
* A specialized version of `_.indexOf` which performs strict equality
* comparisons of values, i.e. `===`.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} value The value to search for.
* @param {number} fromIndex The index to search from.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function strictIndexOf(array, value, fromIndex) {
var index = fromIndex - 1, length = array.length;
while (++index < length) if (array[index] === value) return index;
return -1;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIndexOf.js
/**
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} value The value to search for.
* @param {number} fromIndex The index to search from.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function baseIndexOf(array, value, fromIndex) {
return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayIncludes.js
/**
* A specialized version of `_.includes` for arrays without support for
* specifying an index to search from.
*
* @private
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
function arrayIncludes(array, value) {
return !!(array == null ? 0 : array.length) && baseIndexOf(array, value, 0) > -1;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isIndex.js
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER$1 = 9007199254740991;
/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;
/**
* Checks if `value` is a valid array-like index.
*
* @private
* @param {*} value The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
*/
function isIndex(value, length) {
var type = typeof value;
length = length == null ? MAX_SAFE_INTEGER$1 : length;
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignValue.js
/**
* The base implementation of `assignValue` and `assignMergeValue` without
* value checks.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function baseAssignValue(object, key, value) {
if (key == "__proto__" && defineProperty) defineProperty(object, key, {
"configurable": true,
"enumerable": true,
"value": value,
"writable": true
});
else object[key] = value;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/eq.js
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || value !== value && other !== other;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assignValue.js
/** Used to check objects for own properties. */
var hasOwnProperty$11 = Object.prototype.hasOwnProperty;
/**
* Assigns `value` to `key` of `object` if the existing value is not equivalent
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function assignValue(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty$11.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) baseAssignValue(object, key, value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_copyObject.js
/**
* Copies properties of `source` to `object`.
*
* @private
* @param {Object} source The object to copy properties from.
* @param {Array} props The property identifiers to copy.
* @param {Object} [object={}] The object to copy properties to.
* @param {Function} [customizer] The function to customize copied values.
* @returns {Object} Returns `object`.
*/
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index = -1, length = props.length;
while (++index < length) {
var key = props[index];
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
if (newValue === void 0) newValue = source[key];
if (isNew) baseAssignValue(object, key, newValue);
else assignValue(object, key, newValue);
}
return object;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overRest.js
var nativeMax$2 = Math.max;
/**
* A specialized version of `baseRest` which transforms the rest array.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @param {number} [start=func.length-1] The start position of the rest parameter.
* @param {Function} transform The rest array transform.
* @returns {Function} Returns the new function.
*/
function overRest(func, start, transform) {
start = nativeMax$2(start === void 0 ? func.length - 1 : start, 0);
return function() {
var args = arguments, index = -1, length = nativeMax$2(args.length - start, 0), array = Array(length);
while (++index < length) array[index] = args[start + index];
index = -1;
var otherArgs = Array(start + 1);
while (++index < start) otherArgs[index] = args[index];
otherArgs[start] = transform(array);
return apply(func, this, otherArgs);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseRest.js
/**
* The base implementation of `_.rest` which doesn't validate or coerce arguments.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @param {number} [start=func.length-1] The start position of the rest parameter.
* @returns {Function} Returns the new function.
*/
function baseRest(func, start) {
return setToString(overRest(func, start, identity), func + "");
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isLength.js
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;
/**
* Checks if `value` is a valid array-like length.
*
* **Note:** This method is loosely based on
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
* @example
*
* _.isLength(3);
* // => true
*
* _.isLength(Number.MIN_VALUE);
* // => false
*
* _.isLength(Infinity);
* // => false
*
* _.isLength('3');
* // => false
*/
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArrayLike.js
/**
* Checks if `value` is array-like. A value is considered array-like if it's
* not a function and has a `value.length` that's an integer greater than or
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
* @example
*
* _.isArrayLike([1, 2, 3]);
* // => true
*
* _.isArrayLike(document.body.children);
* // => true
*
* _.isArrayLike('abc');
* // => true
*
* _.isArrayLike(_.noop);
* // => false
*/
function isArrayLike(value) {
return value != null && isLength(value.length) && !isFunction(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isIterateeCall.js
/**
* Checks if the given arguments are from an iteratee call.
*
* @private
* @param {*} value The potential iteratee value argument.
* @param {*} index The potential iteratee index or key argument.
* @param {*} object The potential iteratee object argument.
* @returns {boolean} Returns `true` if the arguments are from an iteratee call,
* else `false`.
*/
function isIterateeCall(value, index, object) {
if (!isObject(object)) return false;
var type = typeof index;
if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) return eq(object[index], value);
return false;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createAssigner.js
/**
* Creates a function like `_.assign`.
*
* @private
* @param {Function} assigner The function to assign values.
* @returns {Function} Returns the new assigner function.
*/
function createAssigner(assigner) {
return baseRest(function(object, sources) {
var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
customizer = length < 3 ? void 0 : customizer;
length = 1;
}
object = Object(object);
while (++index < length) {
var source = sources[index];
if (source) assigner(object, source, index, customizer);
}
return object;
});
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isPrototype.js
/** Used for built-in method references. */
var objectProto$2 = Object.prototype;
/**
* Checks if `value` is likely a prototype object.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
*/
function isPrototype(value) {
var Ctor = value && value.constructor;
return value === (typeof Ctor == "function" && Ctor.prototype || objectProto$2);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTimes.js
/**
* The base implementation of `_.times` without support for iteratee shorthands
* or max array length checks.
*
* @private
* @param {number} n The number of times to invoke `iteratee`.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the array of results.
*/
function baseTimes(n, iteratee) {
var index = -1, result = Array(n);
while (++index < n) result[index] = iteratee(index);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsArguments.js
/** `Object#toString` result references. */
var argsTag$3 = "[object Arguments]";
/**
* The base implementation of `_.isArguments`.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
*/
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag$3;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArguments.js
/** Used for built-in method references. */
var objectProto$1 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$10 = objectProto$1.hasOwnProperty;
/** Built-in value references. */
var propertyIsEnumerable$1 = objectProto$1.propertyIsEnumerable;
/**
* Checks if `value` is likely an `arguments` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
* else `false`.
* @example
*
* _.isArguments(function() { return arguments; }());
* // => true
*
* _.isArguments([1, 2, 3]);
* // => false
*/
var isArguments = baseIsArguments(function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty$10.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubFalse.js
/**
* This method returns `false`.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {boolean} Returns `false`.
* @example
*
* _.times(2, _.stubFalse);
* // => [false, false]
*/
function stubFalse() {
return false;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isBuffer.js
/** Detect free variable `exports`. */
var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module;
/** Built-in value references. */
var Buffer$2 = freeModule$2 && freeModule$2.exports === freeExports$2 ? root.Buffer : void 0;
/**
* Checks if `value` is a buffer.
*
* @static
* @memberOf _
* @since 4.3.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
* @example
*
* _.isBuffer(new Buffer(2));
* // => true
*
* _.isBuffer(new Uint8Array(2));
* // => false
*/
var isBuffer = (Buffer$2 ? Buffer$2.isBuffer : void 0) || stubFalse;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsTypedArray.js
/** `Object#toString` result references. */
var argsTag$2 = "[object Arguments]", arrayTag$2 = "[object Array]", boolTag$3 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$2 = "[object Error]", funcTag$1 = "[object Function]", mapTag$5 = "[object Map]", numberTag$3 = "[object Number]", objectTag$4 = "[object Object]", regexpTag$3 = "[object RegExp]", setTag$5 = "[object Set]", stringTag$3 = "[object String]", weakMapTag$2 = "[object WeakMap]";
var arrayBufferTag$3 = "[object ArrayBuffer]", dataViewTag$4 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]";
/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true;
typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$5] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$3] = typedArrayTags[setTag$5] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false;
/**
* The base implementation of `_.isTypedArray` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
*/
function baseIsTypedArray(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUnary.js
/**
* The base implementation of `_.unary` without support for storing metadata.
*
* @private
* @param {Function} func The function to cap arguments for.
* @returns {Function} Returns the new capped function.
*/
function baseUnary(func) {
return function(value) {
return func(value);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nodeUtil.js
/** Detect free variable `exports`. */
var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module;
/** Detect free variable `process` from Node.js. */
var freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && freeGlobal.process;
/** Used to access faster Node.js helpers. */
var nodeUtil = function() {
try {
var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types;
if (types) return types;
return freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch (e) {}
}();
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isTypedArray.js
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
/**
* Checks if `value` is classified as a typed array.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
* @example
*
* _.isTypedArray(new Uint8Array);
* // => true
*
* _.isTypedArray([]);
* // => false
*/
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayLikeKeys.js
/** Used to check objects for own properties. */
var hasOwnProperty$9 = Object.prototype.hasOwnProperty;
/**
* Creates an array of the enumerable property names of the array-like `value`.
*
* @private
* @param {*} value The value to query.
* @param {boolean} inherited Specify returning inherited property names.
* @returns {Array} Returns the array of property names.
*/
function arrayLikeKeys(value, inherited) {
var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
for (var key in value) if ((inherited || hasOwnProperty$9.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) result.push(key);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overArg.js
/**
* Creates a unary function that invokes `func` with its argument transformed.
*
* @private
* @param {Function} func The function to wrap.
* @param {Function} transform The argument transform.
* @returns {Function} Returns the new function.
*/
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeys.js
var nativeKeys = overArg(Object.keys, Object);
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseKeys.js
/** Used to check objects for own properties. */
var hasOwnProperty$8 = Object.prototype.hasOwnProperty;
/**
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function baseKeys(object) {
if (!isPrototype(object)) return nativeKeys(object);
var result = [];
for (var key in Object(object)) if (hasOwnProperty$8.call(object, key) && key != "constructor") result.push(key);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/keys.js
/**
* Creates an array of the own enumerable property names of `object`.
*
* **Note:** Non-object values are coerced to objects. See the
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* for more details.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
* @example
*
* function Foo() {
* this.a = 1;
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.keys(new Foo);
* // => ['a', 'b'] (iteration order is not guaranteed)
*
* _.keys('hi');
* // => ['0', '1']
*/
function keys(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeysIn.js
/**
* This function is like
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* except that it includes inherited enumerable properties.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function nativeKeysIn(object) {
var result = [];
if (object != null) for (var key in Object(object)) result.push(key);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseKeysIn.js
/** Used to check objects for own properties. */
var hasOwnProperty$7 = Object.prototype.hasOwnProperty;
/**
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function baseKeysIn(object) {
if (!isObject(object)) return nativeKeysIn(object);
var isProto = isPrototype(object), result = [];
for (var key in object) if (!(key == "constructor" && (isProto || !hasOwnProperty$7.call(object, key)))) result.push(key);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/keysIn.js
/**
* Creates an array of the own and inherited enumerable property names of `object`.
*
* **Note:** Non-object values are coerced to objects.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Object
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
* @example
*
* function Foo() {
* this.a = 1;
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.keysIn(new Foo);
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
*/
function keysIn(object) {
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKey.js
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey(value, object) {
if (isArray(value)) return false;
var type = typeof value;
if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) return true;
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeCreate.js
var nativeCreate = getNative(Object, "create");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashClear.js
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
this.size = 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashDelete.js
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
this.size -= result ? 1 : 0;
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashGet.js
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED$2 = "__lodash_hash_undefined__";
/** Used to check objects for own properties. */
var hasOwnProperty$6 = Object.prototype.hasOwnProperty;
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED$2 ? void 0 : result;
}
return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashHas.js
/** Used to check objects for own properties. */
var hasOwnProperty$5 = Object.prototype.hasOwnProperty;
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashSet.js
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value;
return this;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Hash.js
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
Hash.prototype.clear = hashClear;
Hash.prototype["delete"] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheClear.js
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assocIndexOf.js
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) if (eq(array[length][0], key)) return length;
return -1;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheDelete.js
/** Built-in value references. */
var splice = Array.prototype.splice;
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) return false;
if (index == data.length - 1) data.pop();
else splice.call(data, index, 1);
--this.size;
return true;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheGet.js
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? void 0 : data[index][1];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheHas.js
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheSet.js
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) {
++this.size;
data.push([key, value]);
} else data[index][1] = value;
return this;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_ListCache.js
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
ListCache.prototype.clear = listCacheClear;
ListCache.prototype["delete"] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Map.js
var Map$1 = getNative(root, "Map");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheClear.js
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.size = 0;
this.__data__ = {
"hash": new Hash(),
"map": new (Map$1 || ListCache)(),
"string": new Hash()
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKeyable.js
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getMapData.js
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheDelete.js
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
var result = getMapData(this, key)["delete"](key);
this.size -= result ? 1 : 0;
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheGet.js
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheHas.js
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheSet.js
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
var data = getMapData(this, key), size = data.size;
data.set(key, value);
this.size += data.size == size ? 0 : 1;
return this;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_MapCache.js
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype["delete"] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/memoize.js
/** Error message constants. */
var FUNC_ERROR_TEXT$2 = "Expected a function";
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `clear`, `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function") throw new TypeError(FUNC_ERROR_TEXT$2);
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key)) return cache.get(key);
var result = func.apply(this, args);
memoized.cache = cache.set(key, result) || cache;
return result;
};
memoized.cache = new (memoize.Cache || MapCache)();
return memoized;
}
memoize.Cache = MapCache;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_memoizeCapped.js
/** Used as the maximum memoize cache size. */
var MAX_MEMOIZE_SIZE = 500;
/**
* A specialized version of `_.memoize` which clears the memoized function's
* cache when it exceeds `MAX_MEMOIZE_SIZE`.
*
* @private
* @param {Function} func The function to have its output memoized.
* @returns {Function} Returns the new memoized function.
*/
function memoizeCapped(func) {
var result = memoize(func, function(key) {
if (cache.size === MAX_MEMOIZE_SIZE) cache.clear();
return key;
});
var cache = result.cache;
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stringToPath.js
/** Used to match property names within property paths. */
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoizeCapped(function(string) {
var result = [];
if (string.charCodeAt(0) === 46) result.push("");
string.replace(rePropName, function(match, number, quote, subString) {
result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
});
return result;
});
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toString.js
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString(value) {
return value == null ? "" : baseToString(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_castPath.js
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @param {Object} [object] The object to query keys on.
* @returns {Array} Returns the cast property path array.
*/
function castPath(value, object) {
if (isArray(value)) return value;
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toKey.js
/** Used as references for various `Number` constants. */
var INFINITY$1 = Infinity;
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey(value) {
if (typeof value == "string" || isSymbol(value)) return value;
var result = value + "";
return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGet.js
/**
* The base implementation of `_.get` without support for default values.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @returns {*} Returns the resolved value.
*/
function baseGet(object, path) {
path = castPath(path, object);
var index = 0, length = path.length;
while (object != null && index < length) object = object[toKey(path[index++])];
return index && index == length ? object : void 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/get.js
/**
* Gets the value at `path` of `object`. If the resolved value is
* `undefined`, the `defaultValue` is returned in its place.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
* @returns {*} Returns the resolved value.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.get(object, 'a[0].b.c');
* // => 3
*
* _.get(object, ['a', '0', 'b', 'c']);
* // => 3
*
* _.get(object, 'a.b.c', 'default');
* // => 'default'
*/
function get(object, path, defaultValue) {
var result = object == null ? void 0 : baseGet(object, path);
return result === void 0 ? defaultValue : result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayPush.js
/**
* Appends the elements of `values` to `array`.
*
* @private
* @param {Array} array The array to modify.
* @param {Array} values The values to append.
* @returns {Array} Returns `array`.
*/
function arrayPush(array, values) {
var index = -1, length = values.length, offset = array.length;
while (++index < length) array[offset + index] = values[index];
return array;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isFlattenable.js
/** Built-in value references. */
var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0;
/**
* Checks if `value` is a flattenable `arguments` object or array.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
*/
function isFlattenable(value) {
return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFlatten.js
/**
* The base implementation of `_.flatten` with support for restricting flattening.
*
* @private
* @param {Array} array The array to flatten.
* @param {number} depth The maximum recursion depth.
* @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
* @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
* @param {Array} [result=[]] The initial result value.
* @returns {Array} Returns the new flattened array.
*/
function baseFlatten(array, depth, predicate, isStrict, result) {
var index = -1, length = array.length;
predicate || (predicate = isFlattenable);
result || (result = []);
while (++index < length) {
var value = array[index];
if (depth > 0 && predicate(value)) if (depth > 1) baseFlatten(value, depth - 1, predicate, isStrict, result);
else arrayPush(result, value);
else if (!isStrict) result[result.length] = value;
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js
/**
* Flattens `array` a single level deep.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Array
* @param {Array} array The array to flatten.
* @returns {Array} Returns the new flattened array.
* @example
*
* _.flatten([1, [2, [3, [4]], 5]]);
* // => [1, 2, [3, [4]], 5]
*/
function flatten(array) {
return (array == null ? 0 : array.length) ? baseFlatten(array, 1) : [];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_flatRest.js
/**
* A specialized version of `baseRest` which flattens the rest array.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @returns {Function} Returns the new function.
*/
function flatRest(func) {
return setToString(overRest(func, void 0, flatten), func + "");
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getPrototype.js
/** Built-in value references. */
var getPrototype = overArg(Object.getPrototypeOf, Object);
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isPlainObject.js
/** `Object#toString` result references. */
var objectTag$3 = "[object Object]";
/** Used for built-in method references. */
var funcProto = Function.prototype, objectProto = Object.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/** Used to check objects for own properties. */
var hasOwnProperty$4 = objectProto.hasOwnProperty;
/** Used to infer the `Object` constructor. */
var objectCtorString = funcToString.call(Object);
/**
* Checks if `value` is a plain object, that is, an object created by the
* `Object` constructor or one with a `[[Prototype]]` of `null`.
*
* @static
* @memberOf _
* @since 0.8.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
* @example
*
* function Foo() {
* this.a = 1;
* }
*
* _.isPlainObject(new Foo);
* // => false
*
* _.isPlainObject([1, 2, 3]);
* // => false
*
* _.isPlainObject({ 'x': 0, 'y': 0 });
* // => true
*
* _.isPlainObject(Object.create(null));
* // => true
*/
function isPlainObject(value) {
if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) return false;
var proto = getPrototype(value);
if (proto === null) return true;
var Ctor = hasOwnProperty$4.call(proto, "constructor") && proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSlice.js
/**
* The base implementation of `_.slice` without an iteratee call guard.
*
* @private
* @param {Array} array The array to slice.
* @param {number} [start=0] The start position.
* @param {number} [end=array.length] The end position.
* @returns {Array} Returns the slice of `array`.
*/
function baseSlice(array, start, end) {
var index = -1, length = array.length;
if (start < 0) start = -start > length ? 0 : length + start;
end = end > length ? length : end;
if (end < 0) end += length;
length = start > end ? 0 : end - start >>> 0;
start >>>= 0;
var result = Array(length);
while (++index < length) result[index] = array[index + start];
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/castArray.js
/**
* Casts `value` as an array if it's not one.
*
* @static
* @memberOf _
* @since 4.4.0
* @category Lang
* @param {*} value The value to inspect.
* @returns {Array} Returns the cast array.
* @example
*
* _.castArray(1);
* // => [1]
*
* _.castArray({ 'a': 1 });
* // => [{ 'a': 1 }]
*
* _.castArray('abc');
* // => ['abc']
*
* _.castArray(null);
* // => [null]
*
* _.castArray(undefined);
* // => [undefined]
*
* _.castArray();
* // => []
*
* var array = [1, 2, 3];
* console.log(_.castArray(array) === array);
* // => true
*/
function castArray$1() {
if (!arguments.length) return [];
var value = arguments[0];
return isArray(value) ? value : [value];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseClamp.js
/**
* The base implementation of `_.clamp` which doesn't coerce arguments.
*
* @private
* @param {number} number The number to clamp.
* @param {number} [lower] The lower bound.
* @param {number} upper The upper bound.
* @returns {number} Returns the clamped number.
*/
function baseClamp(number, lower, upper) {
if (number === number) {
if (upper !== void 0) number = number <= upper ? number : upper;
if (lower !== void 0) number = number >= lower ? number : lower;
}
return number;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/clamp.js
/**
* Clamps `number` within the inclusive `lower` and `upper` bounds.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Number
* @param {number} number The number to clamp.
* @param {number} [lower] The lower bound.
* @param {number} upper The upper bound.
* @returns {number} Returns the clamped number.
* @example
*
* _.clamp(-10, -5, 5);
* // => -5
*
* _.clamp(10, -5, 5);
* // => 5
*/
function clamp$1(number, lower, upper) {
if (upper === void 0) {
upper = lower;
lower = void 0;
}
if (upper !== void 0) {
upper = toNumber(upper);
upper = upper === upper ? upper : 0;
}
if (lower !== void 0) {
lower = toNumber(lower);
lower = lower === lower ? lower : 0;
}
return baseClamp(toNumber(number), lower, upper);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackClear.js
/**
* Removes all key-value entries from the stack.
*
* @private
* @name clear
* @memberOf Stack
*/
function stackClear() {
this.__data__ = new ListCache();
this.size = 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackDelete.js
/**
* Removes `key` and its value from the stack.
*
* @private
* @name delete
* @memberOf Stack
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function stackDelete(key) {
var data = this.__data__, result = data["delete"](key);
this.size = data.size;
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackGet.js
/**
* Gets the stack value for `key`.
*
* @private
* @name get
* @memberOf Stack
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function stackGet(key) {
return this.__data__.get(key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackHas.js
/**
* Checks if a stack value for `key` exists.
*
* @private
* @name has
* @memberOf Stack
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function stackHas(key) {
return this.__data__.has(key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackSet.js
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE$1 = 200;
/**
* Sets the stack `key` to `value`.
*
* @private
* @name set
* @memberOf Stack
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the stack cache instance.
*/
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof ListCache) {
var pairs = data.__data__;
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE$1 - 1) {
pairs.push([key, value]);
this.size = ++data.size;
return this;
}
data = this.__data__ = new MapCache(pairs);
}
data.set(key, value);
this.size = data.size;
return this;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Stack.js
/**
* Creates a stack cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Stack(entries) {
this.size = (this.__data__ = new ListCache(entries)).size;
}
Stack.prototype.clear = stackClear;
Stack.prototype["delete"] = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAssign.js
/**
* The base implementation of `_.assign` without support for multiple sources
* or `customizer` functions.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @returns {Object} Returns `object`.
*/
function baseAssign(object, source) {
return object && copyObject(source, keys(source), object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignIn.js
/**
* The base implementation of `_.assignIn` without support for multiple sources
* or `customizer` functions.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @returns {Object} Returns `object`.
*/
function baseAssignIn(object, source) {
return object && copyObject(source, keysIn(source), object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneBuffer.js
/** Detect free variable `exports`. */
var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
/** Built-in value references. */
var Buffer$1 = freeModule && freeModule.exports === freeExports ? root.Buffer : void 0, allocUnsafe = Buffer$1 ? Buffer$1.allocUnsafe : void 0;
/**
* Creates a clone of `buffer`.
*
* @private
* @param {Buffer} buffer The buffer to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Buffer} Returns the cloned buffer.
*/
function cloneBuffer(buffer, isDeep) {
if (isDeep) return buffer.slice();
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
buffer.copy(result);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayFilter.js
/**
* A specialized version of `_.filter` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {Array} Returns the new filtered array.
*/
function arrayFilter(array, predicate) {
var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) result[resIndex++] = value;
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubArray.js
/**
* This method returns a new empty array.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {Array} Returns the new empty array.
* @example
*
* var arrays = _.times(2, _.stubArray);
*
* console.log(arrays);
* // => [[], []]
*
* console.log(arrays[0] === arrays[1]);
* // => false
*/
function stubArray() {
return [];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getSymbols.js
/** Built-in value references. */
var propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
var nativeGetSymbols = Object.getOwnPropertySymbols;
/**
* Creates an array of the own enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of symbols.
*/
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
if (object == null) return [];
object = Object(object);
return arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_copySymbols.js
/**
* Copies own symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
* @param {Object} [object={}] The object to copy symbols to.
* @returns {Object} Returns `object`.
*/
function copySymbols(source, object) {
return copyObject(source, getSymbols(source), object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getSymbolsIn.js
/**
* Creates an array of the own and inherited enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of symbols.
*/
var getSymbolsIn = !Object.getOwnPropertySymbols ? stubArray : function(object) {
var result = [];
while (object) {
arrayPush(result, getSymbols(object));
object = getPrototype(object);
}
return result;
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_copySymbolsIn.js
/**
* Copies own and inherited symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
* @param {Object} [object={}] The object to copy symbols to.
* @returns {Object} Returns `object`.
*/
function copySymbolsIn(source, object) {
return copyObject(source, getSymbolsIn(source), object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetAllKeys.js
/**
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
* symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Function} keysFunc The function to get the keys of `object`.
* @param {Function} symbolsFunc The function to get the symbols of `object`.
* @returns {Array} Returns the array of property names and symbols.
*/
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeys.js
/**
* Creates an array of own enumerable property names and symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names and symbols.
*/
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeysIn.js
/**
* Creates an array of own and inherited enumerable property names and
* symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names and symbols.
*/
function getAllKeysIn(object) {
return baseGetAllKeys(object, keysIn, getSymbolsIn);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_DataView.js
var DataView = getNative(root, "DataView");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Promise.js
var Promise$1 = getNative(root, "Promise");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Set.js
var Set$1 = getNative(root, "Set");
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getTag.js
/** `Object#toString` result references. */
var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]";
var dataViewTag$3 = "[object DataView]";
/** Used to detect maps, sets, and weakmaps. */
var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);
/**
* Gets the `toStringTag` of `value`.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
var getTag = baseGetTag;
if (DataView && getTag(new DataView(/* @__PURE__ */ new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$4 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) getTag = function(value) {
var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString) switch (ctorString) {
case dataViewCtorString: return dataViewTag$3;
case mapCtorString: return mapTag$4;
case promiseCtorString: return promiseTag;
case setCtorString: return setTag$4;
case weakMapCtorString: return weakMapTag$1;
}
return result;
};
var _getTag_default = getTag;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_initCloneArray.js
/** Used to check objects for own properties. */
var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
/**
* Initializes an array clone.
*
* @private
* @param {Array} array The array to clone.
* @returns {Array} Returns the initialized clone.
*/
function initCloneArray(array) {
var length = array.length, result = new array.constructor(length);
if (length && typeof array[0] == "string" && hasOwnProperty$3.call(array, "index")) {
result.index = array.index;
result.input = array.input;
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Uint8Array.js
/** Built-in value references. */
var Uint8Array$1 = root.Uint8Array;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneArrayBuffer.js
/**
* Creates a clone of `arrayBuffer`.
*
* @private
* @param {ArrayBuffer} arrayBuffer The array buffer to clone.
* @returns {ArrayBuffer} Returns the cloned array buffer.
*/
function cloneArrayBuffer(arrayBuffer) {
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneDataView.js
/**
* Creates a clone of `dataView`.
*
* @private
* @param {Object} dataView The data view to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned data view.
*/
function cloneDataView(dataView, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneRegExp.js
/** Used to match `RegExp` flags from their coerced string values. */
var reFlags = /\w*$/;
/**
* Creates a clone of `regexp`.
*
* @private
* @param {Object} regexp The regexp to clone.
* @returns {Object} Returns the cloned regexp.
*/
function cloneRegExp(regexp) {
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
result.lastIndex = regexp.lastIndex;
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneSymbol.js
/** Used to convert symbols to primitives and strings. */
var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0;
/**
* Creates a clone of the `symbol` object.
*
* @private
* @param {Object} symbol The symbol object to clone.
* @returns {Object} Returns the cloned symbol object.
*/
function cloneSymbol(symbol) {
return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneTypedArray.js
/**
* Creates a clone of `typedArray`.
*
* @private
* @param {Object} typedArray The typed array to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned typed array.
*/
function cloneTypedArray(typedArray, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_initCloneByTag.js
/** `Object#toString` result references. */
var boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$3 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$2 = "[object RegExp]", setTag$3 = "[object Set]", stringTag$2 = "[object String]", symbolTag$2 = "[object Symbol]";
var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]";
/**
* Initializes an object clone based on its `toStringTag`.
*
* **Note:** This function only supports cloning values with tags of
* `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
*
* @private
* @param {Object} object The object to clone.
* @param {string} tag The `toStringTag` of the object to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the initialized clone.
*/
function initCloneByTag(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag$2: return cloneArrayBuffer(object);
case boolTag$2:
case dateTag$2: return new Ctor(+object);
case dataViewTag$2: return cloneDataView(object, isDeep);
case float32Tag$1:
case float64Tag$1:
case int8Tag$1:
case int16Tag$1:
case int32Tag$1:
case uint8Tag$1:
case uint8ClampedTag$1:
case uint16Tag$1:
case uint32Tag$1: return cloneTypedArray(object, isDeep);
case mapTag$3: return new Ctor();
case numberTag$2:
case stringTag$2: return new Ctor(object);
case regexpTag$2: return cloneRegExp(object);
case setTag$3: return new Ctor();
case symbolTag$2: return cloneSymbol(object);
}
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_initCloneObject.js
/**
* Initializes an object clone.
*
* @private
* @param {Object} object The object to clone.
* @returns {Object} Returns the initialized clone.
*/
function initCloneObject(object) {
return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsMap.js
/** `Object#toString` result references. */
var mapTag$2 = "[object Map]";
/**
* The base implementation of `_.isMap` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a map, else `false`.
*/
function baseIsMap(value) {
return isObjectLike(value) && _getTag_default(value) == mapTag$2;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isMap.js
var nodeIsMap = nodeUtil && nodeUtil.isMap;
/**
* Checks if `value` is classified as a `Map` object.
*
* @static
* @memberOf _
* @since 4.3.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a map, else `false`.
* @example
*
* _.isMap(new Map);
* // => true
*
* _.isMap(new WeakMap);
* // => false
*/
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsSet.js
/** `Object#toString` result references. */
var setTag$2 = "[object Set]";
/**
* The base implementation of `_.isSet` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a set, else `false`.
*/
function baseIsSet(value) {
return isObjectLike(value) && _getTag_default(value) == setTag$2;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isSet.js
var nodeIsSet = nodeUtil && nodeUtil.isSet;
/**
* Checks if `value` is classified as a `Set` object.
*
* @static
* @memberOf _
* @since 4.3.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a set, else `false`.
* @example
*
* _.isSet(new Set);
* // => true
*
* _.isSet(new WeakSet);
* // => false
*/
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseClone.js
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG$2 = 1, CLONE_FLAT_FLAG$1 = 2, CLONE_SYMBOLS_FLAG$2 = 4;
/** `Object#toString` result references. */
var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag$1 = "[object Map]", numberTag$1 = "[object Number]", objectTag$1 = "[object Object]", regexpTag$1 = "[object RegExp]", setTag$1 = "[object Set]", stringTag$1 = "[object String]", symbolTag$1 = "[object Symbol]", weakMapTag = "[object WeakMap]";
var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
/** Used to identify `toStringTag` values supported by `_.clone`. */
var cloneableTags = {};
cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$1] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$1] = cloneableTags[setTag$1] = cloneableTags[stringTag$1] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
/**
* The base implementation of `_.clone` and `_.cloneDeep` which tracks
* traversed objects.
*
* @private
* @param {*} value The value to clone.
* @param {boolean} bitmask The bitmask flags.
* 1 - Deep clone
* 2 - Flatten inherited properties
* 4 - Clone symbols
* @param {Function} [customizer] The function to customize cloning.
* @param {string} [key] The key of `value`.
* @param {Object} [object] The parent object of `value`.
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
* @returns {*} Returns the cloned value.
*/
function baseClone(value, bitmask, customizer, key, object, stack) {
var result, isDeep = bitmask & CLONE_DEEP_FLAG$2, isFlat = bitmask & CLONE_FLAT_FLAG$1, isFull = bitmask & CLONE_SYMBOLS_FLAG$2;
if (customizer) result = object ? customizer(value, key, object, stack) : customizer(value);
if (result !== void 0) return result;
if (!isObject(value)) return value;
var isArr = isArray(value);
if (isArr) {
result = initCloneArray(value);
if (!isDeep) return copyArray(value, result);
} else {
var tag = _getTag_default(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer(value)) return cloneBuffer(value, isDeep);
if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) {
result = isFlat || isFunc ? {} : initCloneObject(value);
if (!isDeep) return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));
} else {
if (!cloneableTags[tag]) return object ? value : {};
result = initCloneByTag(value, tag, isDeep);
}
}
stack || (stack = new Stack());
var stacked = stack.get(value);
if (stacked) return stacked;
stack.set(value, result);
if (isSet(value)) value.forEach(function(subValue) {
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
});
else if (isMap(value)) value.forEach(function(subValue, key) {
result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
var props = isArr ? void 0 : (isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys)(value);
arrayEach(props || value, function(subValue, key) {
if (props) {
key = subValue;
subValue = value[key];
}
assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/cloneDeep.js
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG$1 = 1, CLONE_SYMBOLS_FLAG$1 = 4;
/**
* This method is like `_.clone` except that it recursively clones `value`.
*
* @static
* @memberOf _
* @since 1.0.0
* @category Lang
* @param {*} value The value to recursively clone.
* @returns {*} Returns the deep cloned value.
* @see _.clone
* @example
*
* var objects = [{ 'a': 1 }, { 'b': 2 }];
*
* var deep = _.cloneDeep(objects);
* console.log(deep[0] === objects[0]);
* // => false
*/
function cloneDeep(value) {
return baseClone(value, CLONE_DEEP_FLAG$1 | CLONE_SYMBOLS_FLAG$1);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setCacheAdd.js
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = "__lodash_hash_undefined__";
/**
* Adds `value` to the array cache.
*
* @private
* @name add
* @memberOf SetCache
* @alias push
* @param {*} value The value to cache.
* @returns {Object} Returns the cache instance.
*/
function setCacheAdd(value) {
this.__data__.set(value, HASH_UNDEFINED);
return this;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setCacheHas.js
/**
* Checks if `value` is in the array cache.
*
* @private
* @name has
* @memberOf SetCache
* @param {*} value The value to search for.
* @returns {number} Returns `true` if `value` is found, else `false`.
*/
function setCacheHas(value) {
return this.__data__.has(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_SetCache.js
/**
*
* Creates an array cache object to store unique values.
*
* @private
* @constructor
* @param {Array} [values] The values to cache.
*/
function SetCache(values) {
var index = -1, length = values == null ? 0 : values.length;
this.__data__ = new MapCache();
while (++index < length) this.add(values[index]);
}
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arraySome.js
/**
* A specialized version of `_.some` for arrays without support for iteratee
* shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if any element passes the predicate check,
* else `false`.
*/
function arraySome(array, predicate) {
var index = -1, length = array == null ? 0 : array.length;
while (++index < length) if (predicate(array[index], index, array)) return true;
return false;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cacheHas.js
/**
* Checks if a `cache` value for `key` exists.
*
* @private
* @param {Object} cache The cache to query.
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function cacheHas(cache, key) {
return cache.has(key);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalArrays.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;
/**
* A specialized version of `baseIsEqualDeep` for arrays with support for
* partial deep comparisons.
*
* @private
* @param {Array} array The array to compare.
* @param {Array} other The other array to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) return false;
var arrStacked = stack.get(array);
var othStacked = stack.get(other);
if (arrStacked && othStacked) return arrStacked == other && othStacked == array;
var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;
stack.set(array, other);
stack.set(other, array);
while (++index < arrLength) {
var arrValue = array[index], othValue = other[index];
if (customizer) var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
if (compared !== void 0) {
if (compared) continue;
result = false;
break;
}
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) return seen.push(othIndex);
})) {
result = false;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result = false;
break;
}
}
stack["delete"](array);
stack["delete"](other);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapToArray.js
/**
* Converts `map` to its key-value pairs.
*
* @private
* @param {Object} map The map to convert.
* @returns {Array} Returns the key-value pairs.
*/
function mapToArray(map) {
var index = -1, result = Array(map.size);
map.forEach(function(value, key) {
result[++index] = [key, value];
});
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setToArray.js
/**
* Converts `set` to an array of its values.
*
* @private
* @param {Object} set The set to convert.
* @returns {Array} Returns the values.
*/
function setToArray(set) {
var index = -1, result = Array(set.size);
set.forEach(function(value) {
result[++index] = value;
});
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalByTag.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2;
/** `Object#toString` result references. */
var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]";
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]";
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
/**
* A specialized version of `baseIsEqualDeep` for comparing objects of
* the same `toStringTag`.
*
* **Note:** This function only supports comparing values with tags of
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) return false;
object = object.buffer;
other = other.buffer;
case arrayBufferTag:
if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) return false;
return true;
case boolTag:
case dateTag:
case numberTag: return eq(+object, +other);
case errorTag: return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag: return object == other + "";
case mapTag: var convert = mapToArray;
case setTag:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) return false;
var stacked = stack.get(object);
if (stacked) return stacked == other;
bitmask |= COMPARE_UNORDERED_FLAG$2;
stack.set(object, other);
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack["delete"](object);
return result;
case symbolTag: if (symbolValueOf) return symbolValueOf.call(object) == symbolValueOf.call(other);
}
return false;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalObjects.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG$3 = 1;
/** Used to check objects for own properties. */
var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
/**
* A specialized version of `baseIsEqualDeep` for objects with support for
* partial deep comparisons.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length;
if (objLength != getAllKeys(other).length && !isPartial) return false;
var index = objLength;
while (index--) {
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) return false;
}
var objStacked = stack.get(object);
var othStacked = stack.get(other);
if (objStacked && othStacked) return objStacked == other && othStacked == object;
var result = true;
stack.set(object, other);
stack.set(other, object);
var skipCtor = isPartial;
while (++index < objLength) {
key = objProps[index];
var objValue = object[key], othValue = other[key];
if (customizer) var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result = false;
break;
}
skipCtor || (skipCtor = key == "constructor");
}
if (result && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
if (objCtor != othCtor && "constructor" in object && "constructor" in other && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) result = false;
}
stack["delete"](object);
stack["delete"](other);
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqualDeep.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG$2 = 1;
/** `Object#toString` result references. */
var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]";
/** Used to check objects for own properties. */
var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
/**
* A specialized version of `baseIsEqual` for arrays and objects which performs
* deep comparisons and tracks traversed objects enabling objects with circular
* references to be compared.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : _getTag_default(object), othTag = othIsArr ? arrayTag : _getTag_default(other);
objTag = objTag == argsTag ? objectTag : objTag;
othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
if (isSameTag && isBuffer(object)) {
if (!isBuffer(other)) return false;
objIsArr = true;
objIsObj = false;
}
if (isSameTag && !objIsObj) {
stack || (stack = new Stack());
return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {
var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$1.call(other, "__wrapped__");
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack());
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) return false;
stack || (stack = new Stack());
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqual.js
/**
* The base implementation of `_.isEqual` which supports partial comparisons
* and tracks traversed objects.
*
* @private
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @param {boolean} bitmask The bitmask flags.
* 1 - Unordered comparison
* 2 - Partial comparison
* @param {Function} [customizer] The function to customize comparisons.
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
*/
function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) return true;
if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) return value !== value && other !== other;
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsMatch.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;
/**
* The base implementation of `_.isMatch` without support for iteratee shorthands.
*
* @private
* @param {Object} object The object to inspect.
* @param {Object} source The object of property values to match.
* @param {Array} matchData The property names, values, and compare flags to match.
* @param {Function} [customizer] The function to customize comparisons.
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
*/
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length, length = index, noCustomizer = !customizer;
if (object == null) return !length;
object = Object(object);
while (index--) {
var data = matchData[index];
if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return false;
}
while (++index < length) {
data = matchData[index];
var key = data[0], objValue = object[key], srcValue = data[1];
if (noCustomizer && data[2]) {
if (objValue === void 0 && !(key in object)) return false;
} else {
var stack = new Stack();
if (customizer) var result = customizer(objValue, srcValue, key, object, source, stack);
if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) return false;
}
}
return true;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isStrictComparable.js
/**
* Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` if suitable for strict
* equality comparisons, else `false`.
*/
function isStrictComparable(value) {
return value === value && !isObject(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getMatchData.js
/**
* Gets the property names, values, and compare flags of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the match data of `object`.
*/
function getMatchData(object) {
var result = keys(object), length = result.length;
while (length--) {
var key = result[length], value = object[key];
result[length] = [
key,
value,
isStrictComparable(value)
];
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_matchesStrictComparable.js
/**
* A specialized version of `matchesProperty` for source values suitable
* for strict equality comparisons, i.e. `===`.
*
* @private
* @param {string} key The key of the property to get.
* @param {*} srcValue The value to match.
* @returns {Function} Returns the new spec function.
*/
function matchesStrictComparable(key, srcValue) {
return function(object) {
if (object == null) return false;
return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMatches.js
/**
* The base implementation of `_.matches` which doesn't clone `source`.
*
* @private
* @param {Object} source The object of property values to match.
* @returns {Function} Returns the new spec function.
*/
function baseMatches(source) {
var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) return matchesStrictComparable(matchData[0][0], matchData[0][1]);
return function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHasIn.js
/**
* The base implementation of `_.hasIn` without support for deep paths.
*
* @private
* @param {Object} [object] The object to query.
* @param {Array|string} key The key to check.
* @returns {boolean} Returns `true` if `key` exists, else `false`.
*/
function baseHasIn(object, key) {
return object != null && key in Object(object);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hasPath.js
/**
* Checks if `path` exists on `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path to check.
* @param {Function} hasFunc The function to check properties.
* @returns {boolean} Returns `true` if `path` exists, else `false`.
*/
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
var index = -1, length = path.length, result = false;
while (++index < length) {
var key = toKey(path[index]);
if (!(result = object != null && hasFunc(object, key))) break;
object = object[key];
}
if (result || ++index != length) return result;
length = object == null ? 0 : object.length;
return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/hasIn.js
/**
* Checks if `path` is a direct or inherited property of `object`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path to check.
* @returns {boolean} Returns `true` if `path` exists, else `false`.
* @example
*
* var object = _.create({ 'a': _.create({ 'b': 2 }) });
*
* _.hasIn(object, 'a');
* // => true
*
* _.hasIn(object, 'a.b');
* // => true
*
* _.hasIn(object, ['a', 'b']);
* // => true
*
* _.hasIn(object, 'b');
* // => false
*/
function hasIn(object, path) {
return object != null && hasPath(object, path, baseHasIn);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMatchesProperty.js
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
/**
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
*
* @private
* @param {string} path The path of the property to get.
* @param {*} srcValue The value to match.
* @returns {Function} Returns the new spec function.
*/
function baseMatchesProperty(path, srcValue) {
if (isKey(path) && isStrictComparable(srcValue)) return matchesStrictComparable(toKey(path), srcValue);
return function(object) {
var objValue = get(object, path);
return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseProperty.js
/**
* The base implementation of `_.property` without support for deep paths.
*
* @private
* @param {string} key The key of the property to get.
* @returns {Function} Returns the new accessor function.
*/
function baseProperty(key) {
return function(object) {
return object == null ? void 0 : object[key];
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePropertyDeep.js
/**
* A specialized version of `baseProperty` which supports deep paths.
*
* @private
* @param {Array|string} path The path of the property to get.
* @returns {Function} Returns the new accessor function.
*/
function basePropertyDeep(path) {
return function(object) {
return baseGet(object, path);
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/property.js
/**
* Creates a function that returns the value at `path` of a given object.
*
* @static
* @memberOf _
* @since 2.4.0
* @category Util
* @param {Array|string} path The path of the property to get.
* @returns {Function} Returns the new accessor function.
* @example
*
* var objects = [
* { 'a': { 'b': 2 } },
* { 'a': { 'b': 1 } }
* ];
*
* _.map(objects, _.property('a.b'));
* // => [2, 1]
*
* _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
* // => [1, 2]
*/
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIteratee.js
/**
* The base implementation of `_.iteratee`.
*
* @private
* @param {*} [value=_.identity] The value to convert to an iteratee.
* @returns {Function} Returns the iteratee.
*/
function baseIteratee(value) {
if (typeof value == "function") return value;
if (value == null) return identity;
if (typeof value == "object") return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
return property(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createBaseFor.js
/**
* Creates a base function for methods like `_.forIn` and `_.forOwn`.
*
* @private
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {Function} Returns the new base function.
*/
function createBaseFor(fromRight) {
return function(object, iteratee, keysFunc) {
var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index];
if (iteratee(iterable[key], key, iterable) === false) break;
}
return object;
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFor.js
/**
* The base implementation of `baseForOwn` which iterates over `object`
* properties returned by `keysFunc` and invokes `iteratee` for each property.
* Iteratee functions may exit iteration early by explicitly returning `false`.
*
* @private
* @param {Object} object The object to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {Function} keysFunc The function to get the keys of `object`.
* @returns {Object} Returns `object`.
*/
var baseFor = createBaseFor();
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseForOwn.js
/**
* The base implementation of `_.forOwn` without support for iteratee shorthands.
*
* @private
* @param {Object} object The object to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Object} Returns `object`.
*/
function baseForOwn(object, iteratee) {
return object && baseFor(object, iteratee, keys);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createBaseEach.js
/**
* Creates a `baseEach` or `baseEachRight` function.
*
* @private
* @param {Function} eachFunc The function to iterate over a collection.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {Function} Returns the new base function.
*/
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee) {
if (collection == null) return collection;
if (!isArrayLike(collection)) return eachFunc(collection, iteratee);
var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection);
while (fromRight ? index-- : ++index < length) if (iteratee(iterable[index], index, iterable) === false) break;
return collection;
};
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseEach.js
/**
* The base implementation of `_.forEach` without support for iteratee shorthands.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array|Object} Returns `collection`.
*/
var baseEach = createBaseEach(baseForOwn);
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/now.js
/**
* Gets the timestamp of the number of milliseconds that have elapsed since
* the Unix epoch (1 January 1970 00:00:00 UTC).
*
* @static
* @memberOf _
* @since 2.4.0
* @category Date
* @returns {number} Returns the timestamp.
* @example
*
* _.defer(function(stamp) {
* console.log(_.now() - stamp);
* }, _.now());
* // => Logs the number of milliseconds it took for the deferred invocation.
*/
var now = function() {
return root.Date.now();
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/debounce.js
/** Error message constants. */
var FUNC_ERROR_TEXT$1 = "Expected a function";
var nativeMax$1 = Math.max, nativeMin$1 = Math.min;
/**
* Creates a debounced function that delays invoking `func` until after `wait`
* milliseconds have elapsed since the last time the debounced function was
* invoked. The debounced function comes with a `cancel` method to cancel
* delayed `func` invocations and a `flush` method to immediately invoke them.
* Provide `options` to indicate whether `func` should be invoked on the
* leading and/or trailing edge of the `wait` timeout. The `func` is invoked
* with the last arguments provided to the debounced function. Subsequent
* calls to the debounced function return the result of the last `func`
* invocation.
*
* **Note:** If `leading` and `trailing` options are `true`, `func` is
* invoked on the trailing edge of the timeout only if the debounced function
* is invoked more than once during the `wait` timeout.
*
* If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
* until to the next tick, similar to `setTimeout` with a timeout of `0`.
*
* See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
* for details over the differences between `_.debounce` and `_.throttle`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to debounce.
* @param {number} [wait=0] The number of milliseconds to delay.
* @param {Object} [options={}] The options object.
* @param {boolean} [options.leading=false]
* Specify invoking on the leading edge of the timeout.
* @param {number} [options.maxWait]
* The maximum time `func` is allowed to be delayed before it's invoked.
* @param {boolean} [options.trailing=true]
* Specify invoking on the trailing edge of the timeout.
* @returns {Function} Returns the new debounced function.
* @example
*
* // Avoid costly calculations while the window size is in flux.
* jQuery(window).on('resize', _.debounce(calculateLayout, 150));
*
* // Invoke `sendMail` when clicked, debouncing subsequent calls.
* jQuery(element).on('click', _.debounce(sendMail, 300, {
* 'leading': true,
* 'trailing': false
* }));
*
* // Ensure `batchLog` is invoked once after 1 second of debounced calls.
* var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
* var source = new EventSource('/stream');
* jQuery(source).on('message', debounced);
*
* // Cancel the trailing debounced invocation.
* jQuery(window).on('popstate', debounced.cancel);
*/
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") throw new TypeError(FUNC_ERROR_TEXT$1);
wait = toNumber(wait) || 0;
if (isObject(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax$1(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = void 0;
lastInvokeTime = time;
result = func.apply(thisArg, args);
return result;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout(timerExpired, wait);
return leading ? invokeFunc(time) : result;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin$1(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) return trailingEdge(time);
timerId = setTimeout(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = void 0;
if (trailing && lastArgs) return invokeFunc(time);
lastArgs = lastThis = void 0;
return result;
}
function cancel() {
if (timerId !== void 0) clearTimeout(timerId);
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = void 0;
}
function flush() {
return timerId === void 0 ? result : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === void 0) return leadingEdge(lastCallTime);
if (maxing) {
clearTimeout(timerId);
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === void 0) timerId = setTimeout(timerExpired, wait);
return result;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assignMergeValue.js
/**
* This function is like `assignValue` except that it doesn't assign
* `undefined` values.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function assignMergeValue(object, key, value) {
if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) baseAssignValue(object, key, value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArrayLikeObject.js
/**
* This method is like `_.isArrayLike` except that it also checks if `value`
* is an object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array-like object,
* else `false`.
* @example
*
* _.isArrayLikeObject([1, 2, 3]);
* // => true
*
* _.isArrayLikeObject(document.body.children);
* // => true
*
* _.isArrayLikeObject('abc');
* // => false
*
* _.isArrayLikeObject(_.noop);
* // => false
*/
function isArrayLikeObject(value) {
return isObjectLike(value) && isArrayLike(value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_safeGet.js
/**
* Gets the value at `key`, unless `key` is "__proto__" or "constructor".
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function safeGet(object, key) {
if (key === "constructor" && typeof object[key] === "function") return;
if (key == "__proto__") return;
return object[key];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toPlainObject.js
/**
* Converts `value` to a plain object flattening inherited enumerable string
* keyed properties of `value` to own properties of the plain object.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {Object} Returns the converted plain object.
* @example
*
* function Foo() {
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.assign({ 'a': 1 }, new Foo);
* // => { 'a': 1, 'b': 2 }
*
* _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
* // => { 'a': 1, 'b': 2, 'c': 3 }
*/
function toPlainObject(value) {
return copyObject(value, keysIn(value));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMergeDeep.js
/**
* A specialized version of `baseMerge` for arrays and objects which performs
* deep merges and tracks traversed objects enabling objects with circular
* references to be merged.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @param {string} key The key of the value to merge.
* @param {number} srcIndex The index of `source`.
* @param {Function} mergeFunc The function to merge values.
* @param {Function} [customizer] The function to customize assigned values.
* @param {Object} [stack] Tracks traversed source values and their merged
* counterparts.
*/
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
if (stacked) {
assignMergeValue(object, key, stacked);
return;
}
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
var isCommon = newValue === void 0;
if (isCommon) {
var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
newValue = srcValue;
if (isArr || isBuff || isTyped) if (isArray(objValue)) newValue = objValue;
else if (isArrayLikeObject(objValue)) newValue = copyArray(objValue);
else if (isBuff) {
isCommon = false;
newValue = cloneBuffer(srcValue, true);
} else if (isTyped) {
isCommon = false;
newValue = cloneTypedArray(srcValue, true);
} else newValue = [];
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
newValue = objValue;
if (isArguments(objValue)) newValue = toPlainObject(objValue);
else if (!isObject(objValue) || isFunction(objValue)) newValue = initCloneObject(srcValue);
} else isCommon = false;
}
if (isCommon) {
stack.set(srcValue, newValue);
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
stack["delete"](srcValue);
}
assignMergeValue(object, key, newValue);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMerge.js
/**
* The base implementation of `_.merge` without support for multiple sources.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @param {number} srcIndex The index of `source`.
* @param {Function} [customizer] The function to customize merged values.
* @param {Object} [stack] Tracks traversed source values and their merged
* counterparts.
*/
function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) return;
baseFor(source, function(srcValue, key) {
stack || (stack = new Stack());
if (isObject(srcValue)) baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
else {
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
if (newValue === void 0) newValue = srcValue;
assignMergeValue(object, key, newValue);
}
}, keysIn);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayIncludesWith.js
/**
* This function is like `arrayIncludes` except that it accepts a comparator.
*
* @private
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @param {Function} comparator The comparator invoked per element.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
function arrayIncludesWith(array, value, comparator) {
var index = -1, length = array == null ? 0 : array.length;
while (++index < length) if (comparator(value, array[index])) return true;
return false;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js
/**
* Gets the last element of `array`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Array
* @param {Array} array The array to query.
* @returns {*} Returns the last element of `array`.
* @example
*
* _.last([1, 2, 3]);
* // => 3
*/
function last(array) {
var length = array == null ? 0 : array.length;
return length ? array[length - 1] : void 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/findLastIndex.js
var nativeMax = Math.max, nativeMin = Math.min;
/**
* This method is like `_.findIndex` except that it iterates over elements
* of `collection` from right to left.
*
* @static
* @memberOf _
* @since 2.0.0
* @category Array
* @param {Array} array The array to inspect.
* @param {Function} [predicate=_.identity] The function invoked per iteration.
* @param {number} [fromIndex=array.length-1] The index to search from.
* @returns {number} Returns the index of the found element, else `-1`.
* @example
*
* var users = [
* { 'user': 'barney', 'active': true },
* { 'user': 'fred', 'active': false },
* { 'user': 'pebbles', 'active': false }
* ];
*
* _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
* // => 2
*
* // The `_.matches` iteratee shorthand.
* _.findLastIndex(users, { 'user': 'barney', 'active': true });
* // => 0
*
* // The `_.matchesProperty` iteratee shorthand.
* _.findLastIndex(users, ['active', false]);
* // => 2
*
* // The `_.property` iteratee shorthand.
* _.findLastIndex(users, 'active');
* // => 0
*/
function findLastIndex(array, predicate, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) return -1;
var index = length - 1;
if (fromIndex !== void 0) {
index = toInteger(fromIndex);
index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
}
return baseFindIndex(array, baseIteratee(predicate, 3), index, true);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMap.js
/**
* The base implementation of `_.map` without support for iteratee shorthands.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
*/
function baseMap(collection, iteratee) {
var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
baseEach(collection, function(value, key, collection) {
result[++index] = iteratee(value, key, collection);
});
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/map.js
/**
* Creates an array of values by running each element in `collection` thru
* `iteratee`. The iteratee is invoked with three arguments:
* (value, index|key, collection).
*
* Many lodash methods are guarded to work as iteratees for methods like
* `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
*
* The guarded methods are:
* `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
* `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
* `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
* `template`, `trim`, `trimEnd`, `trimStart`, and `words`
*
* @static
* @memberOf _
* @since 0.1.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
* @example
*
* function square(n) {
* return n * n;
* }
*
* _.map([4, 8], square);
* // => [16, 64]
*
* _.map({ 'a': 4, 'b': 8 }, square);
* // => [16, 64] (iteration order is not guaranteed)
*
* var users = [
* { 'user': 'barney' },
* { 'user': 'fred' }
* ];
*
* // The `_.property` iteratee shorthand.
* _.map(users, 'user');
* // => ['barney', 'fred']
*/
function map(collection, iteratee) {
return (isArray(collection) ? arrayMap : baseMap)(collection, baseIteratee(iteratee, 3));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatMap.js
/**
* Creates a flattened array of values by running each element in `collection`
* thru `iteratee` and flattening the mapped results. The iteratee is invoked
* with three arguments: (value, index|key, collection).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new flattened array.
* @example
*
* function duplicate(n) {
* return [n, n];
* }
*
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(collection, iteratee) {
return baseFlatten(map(collection, iteratee), 1);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flattenDeep.js
/** Used as references for various `Number` constants. */
var INFINITY = Infinity;
/**
* Recursively flattens `array`.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Array
* @param {Array} array The array to flatten.
* @returns {Array} Returns the new flattened array.
* @example
*
* _.flattenDeep([1, [2, [3, [4]], 5]]);
* // => [1, 2, 3, 4, 5]
*/
function flattenDeep(array) {
return (array == null ? 0 : array.length) ? baseFlatten(array, INFINITY) : [];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/fromPairs.js
/**
* The inverse of `_.toPairs`; this method returns an object composed
* from key-value `pairs`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Array
* @param {Array} pairs The key-value pairs.
* @returns {Object} Returns the new object.
* @example
*
* _.fromPairs([['a', 1], ['b', 2]]);
* // => { 'a': 1, 'b': 2 }
*/
function fromPairs(pairs) {
var index = -1, length = pairs == null ? 0 : pairs.length, result = {};
while (++index < length) {
var pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_parent.js
/**
* Gets the parent value at `path` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Array} path The path to get the parent value of.
* @returns {*} Returns the parent value.
*/
function parent(object, path) {
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isEqual.js
/**
* Performs a deep comparison between two values to determine if they are
* equivalent.
*
* **Note:** This method supports comparing arrays, array buffers, booleans,
* date objects, error objects, maps, numbers, `Object` objects, regexes,
* sets, strings, symbols, and typed arrays. `Object` objects are compared
* by their own, not inherited, enumerable properties. Functions and DOM
* nodes are compared by strict equality, i.e. `===`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.isEqual(object, other);
* // => true
*
* object === other;
* // => false
*/
function isEqual$1(value, other) {
return baseIsEqual(value, other);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isNil.js
/**
* Checks if `value` is `null` or `undefined`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is nullish, else `false`.
* @example
*
* _.isNil(null);
* // => true
*
* _.isNil(void 0);
* // => true
*
* _.isNil(NaN);
* // => false
*/
function isNil(value) {
return value == null;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isNull.js
/**
* Checks if `value` is `null`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `null`, else `false`.
* @example
*
* _.isNull(null);
* // => true
*
* _.isNull(void 0);
* // => false
*/
function isNull(value) {
return value === null;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isUndefined.js
/**
* Checks if `value` is `undefined`.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
* @example
*
* _.isUndefined(void 0);
* // => true
*
* _.isUndefined(null);
* // => false
*/
function isUndefined$1(value) {
return value === void 0;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/merge.js
/**
* This method is like `_.assign` except that it recursively merges own and
* inherited enumerable string keyed properties of source objects into the
* destination object. Source properties that resolve to `undefined` are
* skipped if a destination value exists. Array and plain object properties
* are merged recursively. Other objects and value types are overridden by
* assignment. Source objects are applied from left to right. Subsequent
* sources overwrite property assignments of previous sources.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @since 0.5.0
* @category Object
* @param {Object} object The destination object.
* @param {...Object} [sources] The source objects.
* @returns {Object} Returns `object`.
* @example
*
* var object = {
* 'a': [{ 'b': 2 }, { 'd': 4 }]
* };
*
* var other = {
* 'a': [{ 'c': 3 }, { 'e': 5 }]
* };
*
* _.merge(object, other);
* // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
*/
var merge = createAssigner(function(object, source, srcIndex) {
baseMerge(object, source, srcIndex);
});
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUnset.js
/** Used to check objects for own properties. */
var hasOwnProperty = Object.prototype.hasOwnProperty;
/**
* The base implementation of `_.unset`.
*
* @private
* @param {Object} object The object to modify.
* @param {Array|string} path The property path to unset.
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
*/
function baseUnset(object, path) {
path = castPath(path, object);
var index = -1, length = path.length;
if (!length) return true;
var isRootPrimitive = object == null || typeof object !== "object" && typeof object !== "function";
while (++index < length) {
var key = path[index];
if (typeof key !== "string") continue;
if (key === "__proto__" && !hasOwnProperty.call(object, "__proto__")) return false;
if (key === "constructor" && index + 1 < length && typeof path[index + 1] === "string" && path[index + 1] === "prototype") {
if (isRootPrimitive && index === 0) continue;
return false;
}
}
var obj = parent(object, path);
return obj == null || delete obj[toKey(last(path))];
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_customOmitClone.js
/**
* Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
* objects.
*
* @private
* @param {*} value The value to inspect.
* @param {string} key The key of the property to inspect.
* @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
*/
function customOmitClone(value) {
return isPlainObject(value) ? void 0 : value;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/omit.js
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
/**
* The opposite of `_.pick`; this method creates an object composed of the
* own and inherited enumerable property paths of `object` that are not omitted.
*
* **Note:** This method is considerably slower than `_.pick`.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The source object.
* @param {...(string|string[])} [paths] The property paths to omit.
* @returns {Object} Returns the new object.
* @example
*
* var object = { 'a': 1, 'b': '2', 'c': 3 };
*
* _.omit(object, ['a', 'c']);
* // => { 'b': '2' }
*/
var omit = flatRest(function(object, paths) {
var result = {};
if (object == null) return result;
var isDeep = false;
paths = arrayMap(paths, function(path) {
path = castPath(path, object);
isDeep || (isDeep = path.length > 1);
return path;
});
copyObject(object, getAllKeysIn(object), result);
if (isDeep) result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
var length = paths.length;
while (length--) baseUnset(result, paths[length]);
return result;
});
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSet.js
/**
* The base implementation of `_.set`.
*
* @private
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @param {Function} [customizer] The function to customize path creation.
* @returns {Object} Returns `object`.
*/
function baseSet(object, path, value, customizer) {
if (!isObject(object)) return object;
path = castPath(path, object);
var index = -1, length = path.length, lastIndex = length - 1, nested = object;
while (nested != null && ++index < length) {
var key = toKey(path[index]), newValue = value;
if (key === "__proto__" || key === "constructor" || key === "prototype") return object;
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : void 0;
if (newValue === void 0) newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};
}
assignValue(nested, key, newValue);
nested = nested[key];
}
return object;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePickBy.js
/**
* The base implementation of `_.pickBy` without support for iteratee shorthands.
*
* @private
* @param {Object} object The source object.
* @param {string[]} paths The property paths to pick.
* @param {Function} predicate The function invoked per property.
* @returns {Object} Returns the new object.
*/
function basePickBy(object, paths, predicate) {
var index = -1, length = paths.length, result = {};
while (++index < length) {
var path = paths[index], value = baseGet(object, path);
if (predicate(value, path)) baseSet(result, castPath(path, object), value);
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePick.js
/**
* The base implementation of `_.pick` without support for individual
* property identifiers.
*
* @private
* @param {Object} object The source object.
* @param {string[]} paths The property paths to pick.
* @returns {Object} Returns the new object.
*/
function basePick(object, paths) {
return basePickBy(object, paths, function(value, path) {
return hasIn(object, path);
});
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/pick.js
/**
* Creates an object composed of the picked `object` properties.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The source object.
* @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Object} Returns the new object.
* @example
*
* var object = { 'a': 1, 'b': '2', 'c': 3 };
*
* _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 }
*/
var pick = flatRest(function(object, paths) {
return object == null ? {} : basePick(object, paths);
});
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/set.js
/**
* Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
* it's created. Arrays are created for missing index properties while objects
* are created for all other missing properties. Use `_.setWith` to customize
* `path` creation.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @returns {Object} Returns `object`.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.set(object, 'a[0].b.c', 4);
* console.log(object.a[0].b.c);
* // => 4
*
* _.set(object, ['x', '0', 'y', 'z'], 5);
* console.log(object.x[0].y.z);
* // => 5
*/
function set(object, path, value) {
return object == null ? object : baseSet(object, path, value);
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/throttle.js
/** Error message constants. */
var FUNC_ERROR_TEXT = "Expected a function";
/**
* Creates a throttled function that only invokes `func` at most once per
* every `wait` milliseconds. The throttled function comes with a `cancel`
* method to cancel delayed `func` invocations and a `flush` method to
* immediately invoke them. Provide `options` to indicate whether `func`
* should be invoked on the leading and/or trailing edge of the `wait`
* timeout. The `func` is invoked with the last arguments provided to the
* throttled function. Subsequent calls to the throttled function return the
* result of the last `func` invocation.
*
* **Note:** If `leading` and `trailing` options are `true`, `func` is
* invoked on the trailing edge of the timeout only if the throttled function
* is invoked more than once during the `wait` timeout.
*
* If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
* until to the next tick, similar to `setTimeout` with a timeout of `0`.
*
* See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
* for details over the differences between `_.throttle` and `_.debounce`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to throttle.
* @param {number} [wait=0] The number of milliseconds to throttle invocations to.
* @param {Object} [options={}] The options object.
* @param {boolean} [options.leading=true]
* Specify invoking on the leading edge of the timeout.
* @param {boolean} [options.trailing=true]
* Specify invoking on the trailing edge of the timeout.
* @returns {Function} Returns the new throttled function.
* @example
*
* // Avoid excessively updating the position while scrolling.
* jQuery(window).on('scroll', _.throttle(updatePosition, 100));
*
* // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
* var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
* jQuery(element).on('click', throttled);
*
* // Cancel the trailing throttled invocation.
* jQuery(window).on('popstate', throttled.cancel);
*/
function throttle(func, wait, options) {
var leading = true, trailing = true;
if (typeof func != "function") throw new TypeError(FUNC_ERROR_TEXT);
if (isObject(options)) {
leading = "leading" in options ? !!options.leading : leading;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
return debounce(func, wait, {
"leading": leading,
"maxWait": wait,
"trailing": trailing
});
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createSet.js
/**
* Creates a set object of `values`.
*
* @private
* @param {Array} values The values to add to the set.
* @returns {Object} Returns the new set.
*/
var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == Infinity) ? noop : function(values) {
return new Set$1(values);
};
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUniq.js
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/**
* The base implementation of `_.uniqBy` without support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} [iteratee] The iteratee invoked per element.
* @param {Function} [comparator] The comparator invoked per element.
* @returns {Array} Returns the new duplicate free array.
*/
function baseUniq(array, iteratee, comparator) {
var index = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result;
if (comparator) {
isCommon = false;
includes = arrayIncludesWith;
} else if (length >= LARGE_ARRAY_SIZE) {
var set = iteratee ? null : createSet(array);
if (set) return setToArray(set);
isCommon = false;
includes = cacheHas;
seen = new SetCache();
} else seen = iteratee ? [] : result;
outer: while (++index < length) {
var value = array[index], computed = iteratee ? iteratee(value) : value;
value = comparator || value !== 0 ? value : 0;
if (isCommon && computed === computed) {
var seenIndex = seen.length;
while (seenIndex--) if (seen[seenIndex] === computed) continue outer;
if (iteratee) seen.push(computed);
result.push(value);
} else if (!includes(seen, computed, comparator)) {
if (seen !== result) seen.push(computed);
result.push(value);
}
}
return result;
}
//#endregion
//#region ../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/union.js
/**
* Creates an array of unique values, in order, from all given arrays using
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Array
* @param {...Array} [arrays] The arrays to inspect.
* @returns {Array} Returns the new array of combined values.
* @example
*
* _.union([2], [1, 2]);
* // => [2, 1]
*/
var union = baseRest(function(arrays) {
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
});
//#endregion
//#region ../../packages/utils/types.ts
const isUndefined = (val) => val === void 0;
const isBoolean = (val) => typeof val === "boolean";
const isNumber = (val) => typeof val === "number";
const isEmpty = (val) => !val && val !== 0 || isArray$1(val) && val.length === 0 || isObject$1(val) && !Object.keys(val).length;
const isElement$1 = (e) => {
if (typeof Element === "undefined") return false;
return e instanceof Element;
};
const isPropAbsent = (prop) => isNil(prop);
const isStringNumber = (val) => {
if (!isString(val)) return false;
return !Number.isNaN(Number(val));
};
const isWindow = (val) => val === window;
//#endregion
//#region ../../packages/utils/raf.ts
const rAF = (fn) => isClient ? window.requestAnimationFrame(fn) : setTimeout(fn, 16);
const cAF = (handle) => isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle);
//#endregion
//#region ../../packages/utils/strings.ts
/**
* fork from {@link https://github.com/sindresorhus/escape-string-regexp}
*/
const escapeStringRegexp = (string = "") => string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
const capitalize = (str) => capitalize$1(str);
//#endregion
//#region ../../packages/utils/objects.ts
const keysOf = (arr) => Object.keys(arr);
const entriesOf = (arr) => Object.entries(arr);
const getProp = (obj, path, defaultValue) => {
return {
get value() {
return get(obj, path, defaultValue);
},
set value(val) {
set(obj, path, val);
}
};
};
//#endregion
//#region ../../packages/utils/error.ts
var ElementPlusError = class extends Error {
constructor(m) {
super(m);
this.name = "ElementPlusError";
}
};
function throwError(scope, m) {
throw new ElementPlusError(`[${scope}] ${m}`);
}
function debugWarn(scope, message) {}
//#endregion
//#region ../../packages/utils/dom/style.ts
const SCOPE$9 = "utils/dom/style";
const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim());
const hasClass = (el, cls) => {
if (!el || !cls) return false;
if (cls.includes(" ")) throw new Error("className should not contain space.");
return el.classList.contains(cls);
};
const addClass = (el, cls) => {
if (!el || !cls.trim()) return;
el.classList.add(...classNameToArray(cls));
};
const removeClass = (el, cls) => {
if (!el || !cls.trim()) return;
el.classList.remove(...classNameToArray(cls));
};
const getStyle = (element, styleName) => {
if (!isClient || !element || !styleName || isShadowRoot$1(element)) return "";
let key = camelize(styleName);
if (key === "float") key = "cssFloat";
try {
const style = element.style[key];
if (style) return style;
const computed = document.defaultView?.getComputedStyle(element, "");
return computed ? computed[key] : "";
} catch {
return element.style[key];
}
};
const setStyle = (element, styleName, value) => {
if (!element || !styleName) return;
if (isObject$1(styleName)) entriesOf(styleName).forEach(([prop, value]) => setStyle(element, prop, value));
else {
const key = camelize(styleName);
element.style[key] = value;
}
};
function addUnit(value, defaultUnit = "px") {
if (!value && value !== 0) return "";
if (isNumber(value) || isStringNumber(value)) return `${value}${defaultUnit}`;
else if (isString(value)) return value;
/* @__PURE__ */ debugWarn(SCOPE$9, "binding value must be a string or number");
}
//#endregion
//#region ../../packages/utils/dom/scroll.ts
const isScroll = (el, isVertical) => {
if (!isClient) return false;
const key = {
undefined: "overflow",
true: "overflow-y",
false: "overflow-x"
}[String(isVertical)];
const overflow = getStyle(el, key);
return [
"scroll",
"auto",
"overlay"
].some((s) => overflow.includes(s));
};
const getScrollContainer = (el, isVertical) => {
if (!isClient) return;
let parent = el;
while (parent) {
if ([
window,
document,
document.documentElement
].includes(parent)) return window;
if (isScroll(parent, isVertical)) return parent;
if (isShadowRoot$1(parent)) parent = parent.host;
else parent = parent.parentNode;
}
return parent;
};
let scrollBarWidth;
const getScrollBarWidth = (namespace) => {
if (!isClient) return 0;
if (scrollBarWidth !== void 0) return scrollBarWidth;
const outer = document.createElement("div");
outer.className = `${namespace}-scrollbar__wrap`;
outer.style.visibility = "hidden";
outer.style.width = "100px";
outer.style.position = "absolute";
outer.style.top = "-9999px";
document.body.appendChild(outer);
const widthNoScroll = outer.offsetWidth;
outer.style.overflow = "scroll";
const inner = document.createElement("div");
inner.style.width = "100%";
outer.appendChild(inner);
const widthWithScroll = inner.offsetWidth;
outer.parentNode?.removeChild(outer);
scrollBarWidth = widthNoScroll - widthWithScroll;
return scrollBarWidth;
};
/**
* Scroll with in the container element, positioning the **selected** element at the top
* of the container
*/
function scrollIntoView(container, selected) {
if (!isClient) return;
if (!selected) {
container.scrollTop = 0;
return;
}
const offsetParents = [];
let pointer = selected.offsetParent;
while (pointer !== null && container !== pointer && container.contains(pointer)) {
offsetParents.push(pointer);
pointer = pointer.offsetParent;
}
const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);
const bottom = top + selected.offsetHeight;
const viewRectTop = container.scrollTop;
const viewRectBottom = viewRectTop + container.clientHeight;
if (top < viewRectTop) container.scrollTop = top;
else if (bottom > viewRectBottom) container.scrollTop = bottom - container.clientHeight;
}
function animateScrollTo(container, from, to, duration, callback) {
const startTime = Date.now();
let handle;
const scroll = () => {
const time = Date.now() - startTime;
const nextScrollTop = easeInOutCubic(time > duration ? duration : time, from, to, duration);
if (isWindow(container)) container.scrollTo(window.pageXOffset, nextScrollTop);
else container.scrollTop = nextScrollTop;
if (time < duration) handle = rAF(scroll);
else if (isFunction$1(callback)) callback();
};
scroll();
return () => {
handle && cAF(handle);
};
}
const getScrollElement = (target, container) => {
if (isWindow(container)) return target.ownerDocument.documentElement;
return container;
};
const getScrollTop = (container) => {
if (isWindow(container)) return window.scrollY;
return container.scrollTop;
};
//#endregion
//#region ../../packages/utils/dom/element.ts
const getElement = ((target) => {
if (!isClient || target === "") return null;
if (isString(target)) try {
return document.querySelector(target);
} catch {
return null;
}
return target;
});
//#endregion
//#region ../../packages/utils/vue/global-node.ts
const globalNodes = [];
let target = !isClient ? void 0 : document.body;
function createGlobalNode(id) {
const el = document.createElement("div");
if (id !== void 0) el.setAttribute("id", id);
if (target) {
target.appendChild(el);
globalNodes.push(el);
}
return el;
}
function removeGlobalNode(el) {
globalNodes.splice(globalNodes.indexOf(el), 1);
el.remove();
}
//#endregion
//#region ../../node_modules/.pnpm/@element-plus+icons-vue@2.3.2_vue@3.5.25/node_modules/@element-plus/icons-vue/dist/index.js
/*! Element Plus Icons Vue v2.3.2 */
var arrow_down_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ArrowDown",
__name: "arrow-down",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M831.872 340.864 512 652.672 192.128 340.864a30.59 30.59 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.59 30.59 0 0 0-42.752 0z"
})]));
}
});
var arrow_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ArrowLeft",
__name: "arrow-left",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0"
})]));
}
});
var arrow_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ArrowRight",
__name: "arrow-right",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512 340.864 831.872a30.59 30.59 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"
})]));
}
});
var arrow_up_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ArrowUp",
__name: "arrow-up",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"
})]));
}
});
var back_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Back",
__name: "back",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"
}), (0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"
})]));
}
});
var calendar_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Calendar",
__name: "calendar",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"
})]));
}
});
var caret_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CaretRight",
__name: "caret-right",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M384 192v640l384-320.064z"
})]));
}
});
var caret_top_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CaretTop",
__name: "caret-top",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 320 192 704h639.936z"
})]));
}
});
var check_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Check",
__name: "check",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"
})]));
}
});
var circle_check_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CircleCheckFilled",
__name: "circle-check-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"
})]));
}
});
var circle_check_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CircleCheck",
__name: "circle-check",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
}), (0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752z"
})]));
}
});
var circle_close_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CircleCloseFilled",
__name: "circle-close-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"
})]));
}
});
var circle_close_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "CircleClose",
__name: "circle-close",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"
}), (0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
})]));
}
});
var clock_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Clock",
__name: "clock",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
}),
(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"
}),
(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"
})
]));
}
});
var close_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Close",
__name: "close",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"
})]));
}
});
var d_arrow_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "DArrowLeft",
__name: "d-arrow-left",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672zm256 0a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672z"
})]));
}
});
var d_arrow_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "DArrowRight",
__name: "d-arrow-right",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L764.736 512 452.864 192a30.59 30.59 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L508.736 512 196.864 192a30.59 30.59 0 0 1 0-42.688"
})]));
}
});
var delete_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Delete",
__name: "delete",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"
})]));
}
});
var document_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Document",
__name: "document",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"
})]));
}
});
var full_screen_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "FullScreen",
__name: "full-screen",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"
})]));
}
});
var hide_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Hide",
__name: "hide",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176S0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6q-43.2 72-153.6 172.8c-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176S1024 528 1024 512s-48.001-73.6-134.401-176"
}), (0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112s-67.2 48-112 48"
})]));
}
});
var info_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "InfoFilled",
__name: "info-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"
})]));
}
});
var loading_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Loading",
__name: "loading",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248m452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248M828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0"
})]));
}
});
var minus_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Minus",
__name: "minus",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"
})]));
}
});
var more_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "MoreFilled",
__name: "more-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"
})]));
}
});
var more_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "More",
__name: "more",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"
})]));
}
});
var picture_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "PictureFilled",
__name: "picture-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"
})]));
}
});
var plus_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Plus",
__name: "plus",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"
})]));
}
});
var question_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "QuestionFilled",
__name: "question-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784"
})]));
}
});
var refresh_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "RefreshLeft",
__name: "refresh-left",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"
})]));
}
});
var refresh_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "RefreshRight",
__name: "refresh-right",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88"
})]));
}
});
var scale_to_original_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ScaleToOriginal",
__name: "scale-to-original",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512"
})]));
}
});
var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Search",
__name: "search",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"
})]));
}
});
var sort_down_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "SortDown",
__name: "sort-down",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"
})]));
}
});
var sort_up_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "SortUp",
__name: "sort-up",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"
})]));
}
});
var star_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "StarFilled",
__name: "star-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M313.6 924.48a70.4 70.4 0 0 1-74.152-5.365 70.4 70.4 0 0 1-27.992-68.875l37.888-220.928L88.96 472.96a70.4 70.4 0 0 1 3.788-104.225A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 100.246-28.595 70.4 70.4 0 0 1 25.962 28.595l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"
})]));
}
});
var star_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Star",
__name: "star",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"
})]));
}
});
var success_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "SuccessFilled",
__name: "success-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"
})]));
}
});
var view_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "View",
__name: "view",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288m0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"
})]));
}
});
var warning_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "WarningFilled",
__name: "warning-filled",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"
})]));
}
});
var zoom_in_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ZoomIn",
__name: "zoom-in",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"
})]));
}
});
var zoom_out_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ZoomOut",
__name: "zoom-out",
setup(__props) {
return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [(0, vue.createElementVNode)("path", {
fill: "currentColor",
d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"
})]));
}
});
//#endregion
//#region ../../packages/utils/vue/props/runtime.ts
const epPropKey = "__epPropKey";
const definePropType = (val) => val;
const isEpProp = (val) => isObject$1(val) && !!val[epPropKey];
/**
* @description Build prop. It can better optimize prop types
* @description 生成 prop,能更好地优化类型
* @example
// limited options
// the type will be PropType<'light' | 'dark'>
buildProp({
type: String,
values: ['light', 'dark'],
} as const)
* @example
// limited options and other types
// the type will be PropType<'small' | 'large' | number>
buildProp({
type: [String, Number],
values: ['small', 'large'],
validator: (val: unknown): val is number => typeof val === 'number',
} as const)
@link see more: https://github.com/element-plus/element-plus/pull/3341
*/
const buildProp = (prop, key) => {
if (!isObject$1(prop) || isEpProp(prop)) return prop;
const { values, required, default: defaultValue, type, validator } = prop;
const epProp = {
type,
required: !!required,
validator: values || validator ? (val) => {
let valid = false;
let allowedValues = [];
if (values) {
allowedValues = Array.from(values);
if (hasOwn(prop, "default")) allowedValues.push(defaultValue);
valid ||= allowedValues.includes(val);
}
if (validator) valid ||= validator(val);
if (!valid && allowedValues.length > 0) {
const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", ");
(0, vue.warn)(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);
}
return valid;
} : void 0,
[epPropKey]: true
};
if (hasOwn(prop, "default")) epProp.default = defaultValue;
return epProp;
};
const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [key, buildProp(option, key)]));
//#endregion
//#region ../../packages/utils/vue/icon.ts
const iconPropType = definePropType([
String,
Object,
Function
]);
const CloseComponents = { Close: close_default };
const TypeComponents = {
Close: close_default,
SuccessFilled: success_filled_default,
InfoFilled: info_filled_default,
WarningFilled: warning_filled_default,
CircleCloseFilled: circle_close_filled_default
};
const TypeComponentsMap = {
primary: info_filled_default,
success: success_filled_default,
warning: warning_filled_default,
error: circle_close_filled_default,
info: info_filled_default
};
const ValidateComponentsMap = {
validating: loading_default,
success: circle_check_default,
error: circle_close_default
};
//#endregion
//#region ../../packages/utils/vue/install.ts
const withPropsDefaultsSetter = (target) => {
const _p = target.props;
const props = isArray$1(_p) ? fromPairs(_p.map((key) => [key, {}])) : _p;
target.setPropsDefaults = (defaults) => {
if (!props) return;
for (const [key, value] of Object.entries(defaults)) {
const prop = props[key];
if (!hasOwn(props, key)) continue;
if (isPlainObject(prop)) {
props[key] = {
...prop,
default: value
};
continue;
}
props[key] = {
type: prop,
default: value
};
}
target.props = props;
};
};
const withInstall = (main, extra) => {
main.install = (app) => {
for (const comp of [main, ...Object.values(extra ?? {})]) app.component(comp.name, comp);
};
if (extra) for (const [key, comp] of Object.entries(extra)) main[key] = comp;
withPropsDefaultsSetter(main);
return main;
};
const withInstallFunction = (fn, name) => {
fn.install = (app) => {
fn._context = app._context;
app.config.globalProperties[name] = fn;
};
return fn;
};
const withInstallDirective = (directive, name) => {
directive.install = (app) => {
app.directive(name, directive);
};
return directive;
};
const withNoopInstall = (component) => {
component.install = NOOP;
withPropsDefaultsSetter(component);
return component;
};
//#endregion
//#region ../../packages/utils/vue/refs.ts
const composeRefs = (...refs) => {
return (el) => {
refs.forEach((ref) => {
ref.value = el;
});
};
};
//#endregion
//#region ../../packages/utils/vue/validator.ts
const isValidComponentSize = (val) => ["", ...componentSizes].includes(val);
//#endregion
//#region ../../packages/utils/vue/vnode.ts
const SCOPE$8 = "utils/vue/vnode";
let PatchFlags = /* @__PURE__ */ function(PatchFlags) {
PatchFlags[PatchFlags["TEXT"] = 1] = "TEXT";
PatchFlags[PatchFlags["CLASS"] = 2] = "CLASS";
PatchFlags[PatchFlags["STYLE"] = 4] = "STYLE";
PatchFlags[PatchFlags["PROPS"] = 8] = "PROPS";
PatchFlags[PatchFlags["FULL_PROPS"] = 16] = "FULL_PROPS";
PatchFlags[PatchFlags["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS";
PatchFlags[PatchFlags["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT";
PatchFlags[PatchFlags["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT";
PatchFlags[PatchFlags["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT";
PatchFlags[PatchFlags["NEED_PATCH"] = 512] = "NEED_PATCH";
PatchFlags[PatchFlags["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS";
PatchFlags[PatchFlags["HOISTED"] = -1] = "HOISTED";
PatchFlags[PatchFlags["BAIL"] = -2] = "BAIL";
return PatchFlags;
}({});
function isFragment(node) {
return (0, vue.isVNode)(node) && node.type === vue.Fragment;
}
function isComment(node) {
return (0, vue.isVNode)(node) && node.type === vue.Comment;
}
function isValidElementNode(node) {
return (0, vue.isVNode)(node) && !isFragment(node) && !isComment(node);
}
const getNormalizedProps = (node) => {
if (!(0, vue.isVNode)(node)) {
/* @__PURE__ */ debugWarn(SCOPE$8, "[getNormalizedProps] must be a VNode");
return {};
}
const raw = node.props || {};
const type = ((0, vue.isVNode)(node.type) ? node.type.props : void 0) || {};
const props = {};
Object.keys(type).forEach((key) => {
if (hasOwn(type[key], "default")) props[key] = type[key].default;
});
Object.keys(raw).forEach((key) => {
props[camelize(key)] = raw[key];
});
return props;
};
const flattedChildren = (children) => {
const vNodes = isArray$1(children) ? children : [children];
const result = [];
vNodes.forEach((child) => {
if (isArray$1(child)) result.push(...flattedChildren(child));
else if ((0, vue.isVNode)(child) && child.component?.subTree) result.push(child, ...flattedChildren(child.component.subTree));
else if ((0, vue.isVNode)(child) && isArray$1(child.children)) result.push(...flattedChildren(child.children));
else if ((0, vue.isVNode)(child) && child.shapeFlag === 2) result.push(...flattedChildren(child.type()));
else result.push(child);
});
return result;
};
//#endregion
//#region ../../packages/utils/arrays.ts
const unique = (arr) => [...new Set(arr)];
const extractFirst = (arr) => {
return isArray$1(arr) ? arr[0] : arr;
};
/** like `_.castArray`, except falsy value returns empty array. */
const castArray = (arr) => {
if (!arr && arr !== 0) return [];
return isArray$1(arr) ? arr : [arr];
};
//#endregion
//#region ../../packages/utils/typescript.ts
const mutable = (val) => val;
//#endregion
//#region ../../packages/utils/throttleByRaf.ts
function throttleByRaf(cb) {
let timer = 0;
const throttle = (...args) => {
if (timer) cAF(timer);
timer = rAF(() => {
cb(...args);
timer = 0;
});
};
throttle.cancel = () => {
cAF(timer);
timer = 0;
};
return throttle;
}
//#endregion
//#region ../../packages/utils/numbers.ts
/**
* Due to browser rendering and calculation precision loss issues,
* boundary checks cannot be based solely on value equality;
* a certain range of fluctuation is permissible.
*/
function isGreaterThan(a, b, epsilon = .03) {
return a - b > epsilon;
}
//#endregion
//#region ../../packages/hooks/use-attrs/index.ts
const DEFAULT_EXCLUDE_KEYS = ["class", "style"];
const LISTENER_PREFIX = /^on[A-Z]/;
const useAttrs = (params = {}) => {
const { excludeListeners = false, excludeKeys } = params;
const allExcludeKeys = (0, vue.computed)(() => {
return (excludeKeys?.value || []).concat(DEFAULT_EXCLUDE_KEYS);
});
const instance = (0, vue.getCurrentInstance)();
if (!instance) {
/* @__PURE__ */ debugWarn("use-attrs", "getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function");
return (0, vue.computed)(() => ({}));
}
return (0, vue.computed)(() => fromPairs(Object.entries(instance.proxy?.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key)))));
};
//#endregion
//#region ../../packages/hooks/use-calc-input-width/index.ts
function useCalcInputWidth() {
const calculatorRef = (0, vue.shallowRef)();
const calculatorWidth = (0, vue.ref)(0);
const inputStyle = (0, vue.computed)(() => ({ minWidth: `${Math.max(calculatorWidth.value, MINIMUM_INPUT_WIDTH)}px` }));
const resetCalculatorWidth = () => {
calculatorWidth.value = calculatorRef.value?.getBoundingClientRect().width ?? 0;
};
useResizeObserver(calculatorRef, resetCalculatorWidth);
return {
calculatorRef,
calculatorWidth,
inputStyle
};
}
//#endregion
//#region ../../packages/hooks/use-deprecated/index.ts
const useDeprecated = ({ from, replacement, scope, version, ref, type = "API" }, condition) => {
(0, vue.watch)(() => (0, vue.unref)(condition), (val) => {
if (val) /* @__PURE__ */ debugWarn(scope, `[${type}] ${from} is about to be deprecated in version ${version}, please use ${replacement} instead.
For more detail, please visit: ${ref}
`);
}, { immediate: true });
};
//#endregion
//#region ../../packages/hooks/use-draggable/index.ts
const useDraggable = (targetRef, dragRef, draggable, overflow) => {
const transform = {
offsetX: 0,
offsetY: 0
};
const isDragging = (0, vue.ref)(false);
const adjustPosition = (moveX, moveY) => {
if (targetRef.value) {
const { offsetX, offsetY } = transform;
const targetRect = targetRef.value.getBoundingClientRect();
const targetLeft = targetRect.left;
const targetTop = targetRect.top;
const targetWidth = targetRect.width;
const targetHeight = targetRect.height;
const clientWidth = document.documentElement.clientWidth;
const clientHeight = document.documentElement.clientHeight;
const minLeft = -targetLeft + offsetX;
const minTop = -targetTop + offsetY;
const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
const maxTop = clientHeight - targetTop - (targetHeight < clientHeight ? targetHeight : 0) + offsetY;
if (!overflow?.value) {
moveX = Math.min(Math.max(moveX, minLeft), maxLeft);
moveY = Math.min(Math.max(moveY, minTop), maxTop);
}
transform.offsetX = moveX;
transform.offsetY = moveY;
targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`;
}
};
const onMousedown = (e) => {
const downX = e.clientX;
const downY = e.clientY;
const { offsetX, offsetY } = transform;
const onMousemove = (e) => {
if (!isDragging.value) isDragging.value = true;
adjustPosition(offsetX + e.clientX - downX, offsetY + e.clientY - downY);
};
const onMouseup = () => {
isDragging.value = false;
document.removeEventListener("mousemove", onMousemove);
document.removeEventListener("mouseup", onMouseup);
};
document.addEventListener("mousemove", onMousemove);
document.addEventListener("mouseup", onMouseup);
};
const onDraggable = () => {
if (dragRef.value && targetRef.value) {
dragRef.value.addEventListener("mousedown", onMousedown);
window.addEventListener("resize", updatePosition);
}
};
const offDraggable = () => {
if (dragRef.value && targetRef.value) {
dragRef.value.removeEventListener("mousedown", onMousedown);
window.removeEventListener("resize", updatePosition);
}
};
const resetPosition = () => {
transform.offsetX = 0;
transform.offsetY = 0;
if (targetRef.value) targetRef.value.style.transform = "";
};
const updatePosition = () => {
const { offsetX, offsetY } = transform;
adjustPosition(offsetX, offsetY);
};
(0, vue.onMounted)(() => {
(0, vue.watchEffect)(() => {
if (draggable.value) onDraggable();
else offDraggable();
});
});
(0, vue.onBeforeUnmount)(() => {
offDraggable();
});
return {
isDragging,
resetPosition,
updatePosition
};
};
//#endregion
//#region ../../packages/hooks/use-focus/index.ts
const useFocus = (el) => {
return { focus: () => {
el.value?.focus?.();
} };
};
//#endregion
//#region ../../packages/locale/lang/en.ts
var en_default = {
name: "en",
el: {
breadcrumb: { label: "Breadcrumb" },
colorpicker: {
confirm: "OK",
clear: "Clear",
defaultLabel: "color picker",
description: "current color is {color}. press enter to select a new color.",
alphaLabel: "pick alpha value",
alphaDescription: "alpha {alpha}, current color is {color}",
hueLabel: "pick hue value",
hueDescription: "hue {hue}, current color is {color}",
svLabel: "pick saturation and brightness value",
svDescription: "saturation {saturation}, brightness {brightness}, current color is {color}",
predefineDescription: "select {value} as the color"
},
datepicker: {
now: "Now",
today: "Today",
cancel: "Cancel",
clear: "Clear",
confirm: "OK",
dateTablePrompt: "Use the arrow keys and enter to select the day of the month",
monthTablePrompt: "Use the arrow keys and enter to select the month",
yearTablePrompt: "Use the arrow keys and enter to select the year",
selectedDate: "Selected date",
selectDate: "Select date",
selectTime: "Select time",
startDate: "Start Date",
startTime: "Start Time",
endDate: "End Date",
endTime: "End Time",
prevYear: "Previous Year",
nextYear: "Next Year",
prevMonth: "Previous Month",
nextMonth: "Next Month",
year: "",
month1: "January",
month2: "February",
month3: "March",
month4: "April",
month5: "May",
month6: "June",
month7: "July",
month8: "August",
month9: "September",
month10: "October",
month11: "November",
month12: "December",
weeks: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
weeksFull: {
sun: "Sunday",
mon: "Monday",
tue: "Tuesday",
wed: "Wednesday",
thu: "Thursday",
fri: "Friday",
sat: "Saturday"
},
months: {
jan: "Jan",
feb: "Feb",
mar: "Mar",
apr: "Apr",
may: "May",
jun: "Jun",
jul: "Jul",
aug: "Aug",
sep: "Sep",
oct: "Oct",
nov: "Nov",
dec: "Dec"
}
},
inputNumber: {
decrease: "decrease number",
increase: "increase number"
},
select: {
loading: "Loading",
noMatch: "No matching data",
noData: "No data",
placeholder: "Select"
},
mention: { loading: "Loading" },
dropdown: { toggleDropdown: "Toggle Dropdown" },
cascader: {
noMatch: "No matching data",
loading: "Loading",
placeholder: "Select",
noData: "No data"
},
pagination: {
goto: "Go to",
pagesize: "/page",
total: "Total {total}",
pageClassifier: "",
page: "Page",
prev: "Go to previous page",
next: "Go to next page",
currentPage: "page {pager}",
prevPages: "Previous {pager} pages",
nextPages: "Next {pager} pages",
deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details"
},
dialog: { close: "Close this dialog" },
drawer: { close: "Close this dialog" },
messagebox: {
title: "Message",
confirm: "OK",
cancel: "Cancel",
error: "Illegal input",
close: "Close this dialog"
},
upload: {
deleteTip: "press delete to remove",
delete: "Delete",
preview: "Preview",
continue: "Continue"
},
slider: {
defaultLabel: "slider between {min} and {max}",
defaultRangeStartLabel: "pick start value",
defaultRangeEndLabel: "pick end value"
},
table: {
emptyText: "No Data",
confirmFilter: "Confirm",
resetFilter: "Reset",
clearFilter: "All",
sumText: "Sum",
selectAllLabel: "Select all rows",
selectRowLabel: "Select this row",
expandRowLabel: "Expand this row",
collapseRowLabel: "Collapse this row",
sortLabel: "Sort by {column}",
filterLabel: "Filter by {column}"
},
tag: { close: "Close this tag" },
tour: {
next: "Next",
previous: "Previous",
finish: "Finish",
close: "Close this dialog"
},
tree: { emptyText: "No Data" },
transfer: {
noMatch: "No matching data",
noData: "No data",
titles: ["List 1", "List 2"],
filterPlaceholder: "Enter keyword",
noCheckedFormat: "{total} items",
hasCheckedFormat: "{checked}/{total} checked"
},
image: { error: "FAILED" },
pageHeader: { title: "Back" },
popconfirm: {
confirmButtonText: "Yes",
cancelButtonText: "No"
},
carousel: {
leftArrow: "Carousel arrow left",
rightArrow: "Carousel arrow right",
indicator: "Carousel switch to index {index}"
}
}
};
//#endregion
//#region ../../packages/hooks/use-locale/index.ts
const buildTranslator = (locale) => (path, option) => translate(path, option, (0, vue.unref)(locale));
const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => `${option?.[key] ?? `{${key}}`}`);
const buildLocaleContext = (locale) => {
return {
lang: (0, vue.computed)(() => (0, vue.unref)(locale).name),
locale: (0, vue.isRef)(locale) ? locale : (0, vue.ref)(locale),
t: buildTranslator(locale)
};
};
const localeContextKey = Symbol("localeContextKey");
const useLocale = (localeOverrides) => {
const locale = localeOverrides || (0, vue.inject)(localeContextKey, (0, vue.ref)());
return buildLocaleContext((0, vue.computed)(() => locale.value || en_default));
};
//#endregion
//#region ../../packages/hooks/use-namespace/index.ts
const defaultNamespace = "el";
const statePrefix = "is-";
const _bem = (namespace, block, blockSuffix, element, modifier) => {
let cls = `${namespace}-${block}`;
if (blockSuffix) cls += `-${blockSuffix}`;
if (element) cls += `__${element}`;
if (modifier) cls += `--${modifier}`;
return cls;
};
const namespaceContextKey = Symbol("namespaceContextKey");
const useGetDerivedNamespace = (namespaceOverrides) => {
const derivedNamespace = namespaceOverrides || ((0, vue.getCurrentInstance)() ? (0, vue.inject)(namespaceContextKey, (0, vue.ref)(defaultNamespace)) : (0, vue.ref)(defaultNamespace));
return (0, vue.computed)(() => {
return (0, vue.unref)(derivedNamespace) || defaultNamespace;
});
};
const useNamespace = (block, namespaceOverrides) => {
const namespace = useGetDerivedNamespace(namespaceOverrides);
const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", "");
const e = (element) => element ? _bem(namespace.value, block, "", element, "") : "";
const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : "";
const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : "";
const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : "";
const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : "";
const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : "";
const is = (name, ...args) => {
const state = args.length >= 1 ? args[0] : true;
return name && state ? `${statePrefix}${name}` : "";
};
const cssVar = (object) => {
const styles = {};
for (const key in object) if (object[key]) styles[`--${namespace.value}-${key}`] = object[key];
return styles;
};
const cssVarBlock = (object) => {
const styles = {};
for (const key in object) if (object[key]) styles[`--${namespace.value}-${block}-${key}`] = object[key];
return styles;
};
const cssVarName = (name) => `--${namespace.value}-${name}`;
const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;
return {
namespace,
b,
e,
m,
be,
em,
bm,
bem,
is,
cssVar,
cssVarName,
cssVarBlock,
cssVarBlockName
};
};
//#endregion
//#region ../../packages/hooks/use-lockscreen/index.ts
/**
* Hook that monitoring the ref value to lock or unlock the screen.
* When the trigger became true, it assumes modal is now opened and vice versa.
* @param trigger {Ref<boolean>}
*/
const useLockscreen = (trigger, options = {}) => {
if (!(0, vue.isRef)(trigger)) throwError("[useLockscreen]", "You need to pass a ref param to this function");
const ns = options.ns || useNamespace("popup");
const hiddenCls = (0, vue.computed)(() => ns.bm("parent", "hidden"));
let scrollBarWidth = 0;
let withoutHiddenClass = false;
let bodyWidth = "0";
let cleaned = false;
const cleanup = () => {
if (cleaned) return;
cleaned = true;
setTimeout(() => {
if (typeof document === "undefined") return;
if (withoutHiddenClass && document) {
document.body.style.width = bodyWidth;
removeClass(document.body, hiddenCls.value);
}
}, 200);
};
(0, vue.watch)(trigger, (val) => {
if (!val) {
cleanup();
return;
}
cleaned = false;
withoutHiddenClass = !hasClass(document.body, hiddenCls.value);
if (withoutHiddenClass) {
bodyWidth = document.body.style.width;
addClass(document.body, hiddenCls.value);
}
scrollBarWidth = getScrollBarWidth(ns.namespace.value);
const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
const bodyOverflowY = getStyle(document.body, "overflowY");
if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) document.body.style.width = `calc(100% - ${scrollBarWidth}px)`;
});
(0, vue.onScopeDispose)(() => cleanup());
};
//#endregion
//#region ../../packages/hooks/use-modal/index.ts
const modalStack = [];
const closeModal = (e) => {
if (modalStack.length === 0) return;
if (getEventCode(e) === EVENT_CODE.esc) {
e.stopPropagation();
modalStack[modalStack.length - 1].handleClose();
}
};
const useModal = (instance, visibleRef) => {
(0, vue.watch)(visibleRef, (val) => {
if (val) modalStack.push(instance);
else modalStack.splice(modalStack.indexOf(instance), 1);
});
};
if (isClient) useEventListener(document, "keydown", closeModal);
//#endregion
//#region ../../packages/hooks/use-model-toggle/index.ts
const _prop = buildProp({
type: definePropType(Boolean),
default: null
});
const _event = buildProp({ type: definePropType(Function) });
const createModelToggleComposable = (name) => {
const updateEventKey = `update:${name}`;
const updateEventKeyRaw = `onUpdate:${name}`;
const useModelToggleEmits = [updateEventKey];
const useModelToggleProps = {
[name]: _prop,
[updateEventKeyRaw]: _event
};
const useModelToggle = ({ indicator, toggleReason, shouldHideWhenRouteChanges, shouldProceed, onShow, onHide }) => {
const instance = (0, vue.getCurrentInstance)();
const { emit } = instance;
const props = instance.props;
const hasUpdateHandler = (0, vue.computed)(() => isFunction$1(props[updateEventKeyRaw]));
const isModelBindingAbsent = (0, vue.computed)(() => props[name] === null);
const doShow = (event) => {
if (indicator.value === true) return;
indicator.value = true;
if (toggleReason) toggleReason.value = event;
if (isFunction$1(onShow)) onShow(event);
};
const doHide = (event) => {
if (indicator.value === false) return;
indicator.value = false;
if (toggleReason) toggleReason.value = event;
if (isFunction$1(onHide)) onHide(event);
};
const show = (event) => {
if (props.disabled === true || isFunction$1(shouldProceed) && !shouldProceed()) return;
const shouldEmit = hasUpdateHandler.value && isClient;
if (shouldEmit) emit(updateEventKey, true);
if (isModelBindingAbsent.value || !shouldEmit) doShow(event);
};
const hide = (event) => {
if (props.disabled === true || !isClient) return;
const shouldEmit = hasUpdateHandler.value && isClient;
if (shouldEmit) emit(updateEventKey, false);
if (isModelBindingAbsent.value || !shouldEmit) doHide(event);
};
const onChange = (val) => {
if (!isBoolean(val)) return;
if (props.disabled && val) {
if (hasUpdateHandler.value) emit(updateEventKey, false);
} else if (indicator.value !== val) if (val) doShow();
else doHide();
};
const toggle = () => {
if (indicator.value) hide();
else show();
};
(0, vue.watch)(() => props[name], onChange);
if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) (0, vue.watch)(() => ({ ...instance.proxy.$route }), () => {
if (shouldHideWhenRouteChanges.value && indicator.value) hide();
});
(0, vue.onMounted)(() => {
onChange(props[name]);
});
return {
hide,
show,
toggle,
hasUpdateHandler
};
};
return {
useModelToggle,
useModelToggleProps,
useModelToggleEmits
};
};
const { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable("modelValue");
//#endregion
//#region ../../packages/hooks/use-prevent-global/index.ts
const usePreventGlobal = (indicator, evt, cb) => {
const prevent = (e) => {
if (cb(e)) e.stopImmediatePropagation();
};
let stop = void 0;
(0, vue.watch)(() => indicator.value, (val) => {
if (val) stop = useEventListener(document, evt, prevent, true);
else stop?.();
}, { immediate: true });
};
//#endregion
//#region ../../packages/hooks/use-prop/index.ts
const useProp = (name) => {
const vm = (0, vue.getCurrentInstance)();
return (0, vue.computed)(() => (vm?.proxy?.$props)?.[name]);
};
//#endregion
//#region ../../node_modules/.pnpm/@sxzz+popperjs-es@2.11.8/node_modules/@sxzz/popperjs-es/dist/index.mjs
var L = "top", W = "bottom", T$1 = "right", P$1 = "left", me = "auto", Q = [
L,
W,
T$1,
P$1
], Y$1 = "start", Z = "end", Ye = "clippingParents", je = "viewport", ee = "popper", Ge = "reference", De = Q.reduce(function(e, t) {
return e.concat([t + "-" + Y$1, t + "-" + Z]);
}, []), Ee = [].concat(Q, [me]).reduce(function(e, t) {
return e.concat([
t,
t + "-" + Y$1,
t + "-" + Z
]);
}, []), Je = "beforeRead", Ke = "read", Qe = "afterRead", Ze = "beforeMain", et = "main", tt = "afterMain", nt = "beforeWrite", rt = "write", ot = "afterWrite", it = [
Je,
Ke,
Qe,
Ze,
et,
tt,
nt,
rt,
ot
];
function V(e) {
return e ? (e.nodeName || "").toLowerCase() : null;
}
function B(e) {
if (e == null) return window;
if (e.toString() !== "[object Window]") {
var t = e.ownerDocument;
return t && t.defaultView || window;
}
return e;
}
function G(e) {
return e instanceof B(e).Element || e instanceof Element;
}
function R(e) {
return e instanceof B(e).HTMLElement || e instanceof HTMLElement;
}
function Ae(e) {
if (typeof ShadowRoot == "undefined") return !1;
return e instanceof B(e).ShadowRoot || e instanceof ShadowRoot;
}
function Tt(e) {
var t = e.state;
Object.keys(t.elements).forEach(function(n) {
var r = t.styles[n] || {}, o = t.attributes[n] || {}, a = t.elements[n];
!R(a) || !V(a) || (Object.assign(a.style, r), Object.keys(o).forEach(function(c) {
var s = o[c];
s === !1 ? a.removeAttribute(c) : a.setAttribute(c, s === !0 ? "" : s);
}));
});
}
function Bt(e) {
var t = e.state, n = {
popper: {
position: t.options.strategy,
left: "0",
top: "0",
margin: "0"
},
arrow: { position: "absolute" },
reference: {}
};
return Object.assign(t.elements.popper.style, n.popper), t.styles = n, t.elements.arrow && Object.assign(t.elements.arrow.style, n.arrow), function() {
Object.keys(t.elements).forEach(function(r) {
var o = t.elements[r], a = t.attributes[r] || {}, s = Object.keys(t.styles.hasOwnProperty(r) ? t.styles[r] : n[r]).reduce(function(i, f) {
return i[f] = "", i;
}, {});
!R(o) || !V(o) || (Object.assign(o.style, s), Object.keys(a).forEach(function(i) {
o.removeAttribute(i);
}));
});
};
}
var ke = {
name: "applyStyles",
enabled: !0,
phase: "write",
fn: Tt,
effect: Bt,
requires: ["computeStyles"]
};
function C(e) {
return e.split("-")[0];
}
var J = Math.max, ve = Math.min, te = Math.round;
function Le() {
var e = navigator.userAgentData;
return e != null && e.brands && Array.isArray(e.brands) ? e.brands.map(function(t) {
return t.brand + "/" + t.version;
}).join(" ") : navigator.userAgent;
}
function at() {
return !/^((?!chrome|android).)*safari/i.test(Le());
}
function ne(e, t, n) {
t === void 0 && (t = !1), n === void 0 && (n = !1);
var r = e.getBoundingClientRect(), o = 1, a = 1;
t && R(e) && (o = e.offsetWidth > 0 && te(r.width) / e.offsetWidth || 1, a = e.offsetHeight > 0 && te(r.height) / e.offsetHeight || 1);
var s = (G(e) ? B(e) : window).visualViewport, i = !at() && n, f = (r.left + (i && s ? s.offsetLeft : 0)) / o, u = (r.top + (i && s ? s.offsetTop : 0)) / a, m = r.width / o, h = r.height / a;
return {
width: m,
height: h,
top: u,
right: f + m,
bottom: u + h,
left: f,
x: f,
y: u
};
}
function Pe(e) {
var t = ne(e), n = e.offsetWidth, r = e.offsetHeight;
return Math.abs(t.width - n) <= 1 && (n = t.width), Math.abs(t.height - r) <= 1 && (r = t.height), {
x: e.offsetLeft,
y: e.offsetTop,
width: n,
height: r
};
}
function st(e, t) {
var n = t.getRootNode && t.getRootNode();
if (e.contains(t)) return !0;
if (n && Ae(n)) {
var r = t;
do {
if (r && e.isSameNode(r)) return !0;
r = r.parentNode || r.host;
} while (r);
}
return !1;
}
function I$1(e) {
return B(e).getComputedStyle(e);
}
function Rt(e) {
return [
"table",
"td",
"th"
].indexOf(V(e)) >= 0;
}
function N$1(e) {
return ((G(e) ? e.ownerDocument : e.document) || window.document).documentElement;
}
function ye(e) {
return V(e) === "html" ? e : e.assignedSlot || e.parentNode || (Ae(e) ? e.host : null) || N$1(e);
}
function ft(e) {
return !R(e) || I$1(e).position === "fixed" ? null : e.offsetParent;
}
function Ht(e) {
var t = /firefox/i.test(Le());
if (/Trident/i.test(Le()) && R(e)) {
if (I$1(e).position === "fixed") return null;
}
var o = ye(e);
for (Ae(o) && (o = o.host); R(o) && ["html", "body"].indexOf(V(o)) < 0;) {
var a = I$1(o);
if (a.transform !== "none" || a.perspective !== "none" || a.contain === "paint" || ["transform", "perspective"].indexOf(a.willChange) !== -1 || t && a.willChange === "filter" || t && a.filter && a.filter !== "none") return o;
o = o.parentNode;
}
return null;
}
function se(e) {
for (var t = B(e), n = ft(e); n && Rt(n) && I$1(n).position === "static";) n = ft(n);
return n && (V(n) === "html" || V(n) === "body" && I$1(n).position === "static") ? t : n || Ht(e) || t;
}
function Me(e) {
return ["top", "bottom"].indexOf(e) >= 0 ? "x" : "y";
}
function fe(e, t, n) {
return J(e, ve(t, n));
}
function St(e, t, n) {
var r = fe(e, t, n);
return r > n ? n : r;
}
function ct() {
return {
top: 0,
right: 0,
bottom: 0,
left: 0
};
}
function ut(e) {
return Object.assign({}, ct(), e);
}
function pt(e, t) {
return t.reduce(function(n, r) {
return n[r] = e, n;
}, {});
}
var Vt = function(e, t) {
return e = typeof e == "function" ? e(Object.assign({}, t.rects, { placement: t.placement })) : e, ut(typeof e != "number" ? e : pt(e, Q));
};
function Ct(e) {
var t, n = e.state, r = e.name, o = e.options, a = n.elements.arrow, c = n.modifiersData.popperOffsets, s = C(n.placement), i = Me(s), u = [P$1, T$1].indexOf(s) >= 0 ? "height" : "width";
if (!(!a || !c)) {
var m = Vt(o.padding, n), h = Pe(a), l = i === "y" ? L : P$1, g = i === "y" ? W : T$1, p = n.rects.reference[u] + n.rects.reference[i] - c[i] - n.rects.popper[u], y = c[i] - n.rects.reference[i], b = se(a), x = b ? i === "y" ? b.clientHeight || 0 : b.clientWidth || 0 : 0, O = p / 2 - y / 2, d = m[l], v = x - h[u] - m[g], w = x / 2 - h[u] / 2 + O, $ = fe(d, w, v), j = i;
n.modifiersData[r] = (t = {}, t[j] = $, t.centerOffset = $ - w, t);
}
}
function qt(e) {
var t = e.state, r = e.options.element, o = r === void 0 ? "[data-popper-arrow]" : r;
o != null && (typeof o == "string" && (o = t.elements.popper.querySelector(o), !o) || st(t.elements.popper, o) && (t.elements.arrow = o));
}
var lt = {
name: "arrow",
enabled: !0,
phase: "main",
fn: Ct,
effect: qt,
requires: ["popperOffsets"],
requiresIfExists: ["preventOverflow"]
};
function re(e) {
return e.split("-")[1];
}
var It = {
top: "auto",
right: "auto",
bottom: "auto",
left: "auto"
};
function Nt(e, t) {
var n = e.x, r = e.y, o = t.devicePixelRatio || 1;
return {
x: te(n * o) / o || 0,
y: te(r * o) / o || 0
};
}
function dt(e) {
var t, n = e.popper, r = e.popperRect, o = e.placement, a = e.variation, c = e.offsets, s = e.position, i = e.gpuAcceleration, f = e.adaptive, u = e.roundOffsets, m = e.isFixed, h = c.x, l = h === void 0 ? 0 : h, g = c.y, p = g === void 0 ? 0 : g, y = typeof u == "function" ? u({
x: l,
y: p
}) : {
x: l,
y: p
};
l = y.x, p = y.y;
var b = c.hasOwnProperty("x"), x = c.hasOwnProperty("y"), O = P$1, d = L, v = window;
if (f) {
var w = se(n), $ = "clientHeight", j = "clientWidth";
if (w === B(n) && (w = N$1(n), I$1(w).position !== "static" && s === "absolute" && ($ = "scrollHeight", j = "scrollWidth")), w = w, o === L || (o === P$1 || o === T$1) && a === Z) {
d = W;
var D = m && w === v && v.visualViewport ? v.visualViewport.height : w[$];
p -= D - r.height, p *= i ? 1 : -1;
}
if (o === P$1 || (o === L || o === W) && a === Z) {
O = T$1;
var E = m && w === v && v.visualViewport ? v.visualViewport.width : w[j];
l -= E - r.width, l *= i ? 1 : -1;
}
}
var A = Object.assign({ position: s }, f && It), H = u === !0 ? Nt({
x: l,
y: p
}, B(n)) : {
x: l,
y: p
};
if (l = H.x, p = H.y, i) {
var k;
return Object.assign({}, A, (k = {}, k[d] = x ? "0" : "", k[O] = b ? "0" : "", k.transform = (v.devicePixelRatio || 1) <= 1 ? "translate(" + l + "px, " + p + "px)" : "translate3d(" + l + "px, " + p + "px, 0)", k));
}
return Object.assign({}, A, (t = {}, t[d] = x ? p + "px" : "", t[O] = b ? l + "px" : "", t.transform = "", t));
}
function Ft(e) {
var t = e.state, n = e.options, r = n.gpuAcceleration, o = r === void 0 ? !0 : r, a = n.adaptive, c = a === void 0 ? !0 : a, s = n.roundOffsets, i = s === void 0 ? !0 : s, f = {
placement: C(t.placement),
variation: re(t.placement),
popper: t.elements.popper,
popperRect: t.rects.popper,
gpuAcceleration: o,
isFixed: t.options.strategy === "fixed"
};
t.modifiersData.popperOffsets != null && (t.styles.popper = Object.assign({}, t.styles.popper, dt(Object.assign({}, f, {
offsets: t.modifiersData.popperOffsets,
position: t.options.strategy,
adaptive: c,
roundOffsets: i
})))), t.modifiersData.arrow != null && (t.styles.arrow = Object.assign({}, t.styles.arrow, dt(Object.assign({}, f, {
offsets: t.modifiersData.arrow,
position: "absolute",
adaptive: !1,
roundOffsets: i
})))), t.attributes.popper = Object.assign({}, t.attributes.popper, { "data-popper-placement": t.placement });
}
var We = {
name: "computeStyles",
enabled: !0,
phase: "beforeWrite",
fn: Ft,
data: {}
}, ge = { passive: !0 };
function Ut(e) {
var t = e.state, n = e.instance, r = e.options, o = r.scroll, a = o === void 0 ? !0 : o, c = r.resize, s = c === void 0 ? !0 : c, i = B(t.elements.popper), f = [].concat(t.scrollParents.reference, t.scrollParents.popper);
return a && f.forEach(function(u) {
u.addEventListener("scroll", n.update, ge);
}), s && i.addEventListener("resize", n.update, ge), function() {
a && f.forEach(function(u) {
u.removeEventListener("scroll", n.update, ge);
}), s && i.removeEventListener("resize", n.update, ge);
};
}
var Te = {
name: "eventListeners",
enabled: !0,
phase: "write",
fn: function() {},
effect: Ut,
data: {}
}, _t = {
left: "right",
right: "left",
bottom: "top",
top: "bottom"
};
function be(e) {
return e.replace(/left|right|bottom|top/g, function(t) {
return _t[t];
});
}
var zt = {
start: "end",
end: "start"
};
function ht(e) {
return e.replace(/start|end/g, function(t) {
return zt[t];
});
}
function Be(e) {
var t = B(e);
return {
scrollLeft: t.pageXOffset,
scrollTop: t.pageYOffset
};
}
function Re(e) {
return ne(N$1(e)).left + Be(e).scrollLeft;
}
function Xt(e, t) {
var n = B(e), r = N$1(e), o = n.visualViewport, a = r.clientWidth, c = r.clientHeight, s = 0, i = 0;
if (o) {
a = o.width, c = o.height;
var f = at();
(f || !f && t === "fixed") && (s = o.offsetLeft, i = o.offsetTop);
}
return {
width: a,
height: c,
x: s + Re(e),
y: i
};
}
function Yt(e) {
var t, n = N$1(e), r = Be(e), o = (t = e.ownerDocument) == null ? void 0 : t.body, a = J(n.scrollWidth, n.clientWidth, o ? o.scrollWidth : 0, o ? o.clientWidth : 0), c = J(n.scrollHeight, n.clientHeight, o ? o.scrollHeight : 0, o ? o.clientHeight : 0), s = -r.scrollLeft + Re(e), i = -r.scrollTop;
return I$1(o || n).direction === "rtl" && (s += J(n.clientWidth, o ? o.clientWidth : 0) - a), {
width: a,
height: c,
x: s,
y: i
};
}
function He(e) {
var t = I$1(e), n = t.overflow, r = t.overflowX, o = t.overflowY;
return /auto|scroll|overlay|hidden/.test(n + o + r);
}
function mt(e) {
return [
"html",
"body",
"#document"
].indexOf(V(e)) >= 0 ? e.ownerDocument.body : R(e) && He(e) ? e : mt(ye(e));
}
function ce(e, t) {
var n;
t === void 0 && (t = []);
var r = mt(e), o = r === ((n = e.ownerDocument) == null ? void 0 : n.body), a = B(r), c = o ? [a].concat(a.visualViewport || [], He(r) ? r : []) : r, s = t.concat(c);
return o ? s : s.concat(ce(ye(c)));
}
function Se(e) {
return Object.assign({}, e, {
left: e.x,
top: e.y,
right: e.x + e.width,
bottom: e.y + e.height
});
}
function Gt(e, t) {
var n = ne(e, !1, t === "fixed");
return n.top = n.top + e.clientTop, n.left = n.left + e.clientLeft, n.bottom = n.top + e.clientHeight, n.right = n.left + e.clientWidth, n.width = e.clientWidth, n.height = e.clientHeight, n.x = n.left, n.y = n.top, n;
}
function vt(e, t, n) {
return t === je ? Se(Xt(e, n)) : G(t) ? Gt(t, n) : Se(Yt(N$1(e)));
}
function Jt(e) {
var t = ce(ye(e)), r = ["absolute", "fixed"].indexOf(I$1(e).position) >= 0 && R(e) ? se(e) : e;
return G(r) ? t.filter(function(o) {
return G(o) && st(o, r) && V(o) !== "body";
}) : [];
}
function Kt(e, t, n, r) {
var o = t === "clippingParents" ? Jt(e) : [].concat(t), a = [].concat(o, [n]), c = a[0], s = a.reduce(function(i, f) {
var u = vt(e, f, r);
return i.top = J(u.top, i.top), i.right = ve(u.right, i.right), i.bottom = ve(u.bottom, i.bottom), i.left = J(u.left, i.left), i;
}, vt(e, c, r));
return s.width = s.right - s.left, s.height = s.bottom - s.top, s.x = s.left, s.y = s.top, s;
}
function yt(e) {
var t = e.reference, n = e.element, r = e.placement, o = r ? C(r) : null, a = r ? re(r) : null, c = t.x + t.width / 2 - n.width / 2, s = t.y + t.height / 2 - n.height / 2, i;
switch (o) {
case L:
i = {
x: c,
y: t.y - n.height
};
break;
case W:
i = {
x: c,
y: t.y + t.height
};
break;
case T$1:
i = {
x: t.x + t.width,
y: s
};
break;
case P$1:
i = {
x: t.x - n.width,
y: s
};
break;
default: i = {
x: t.x,
y: t.y
};
}
var f = o ? Me(o) : null;
if (f != null) {
var u = f === "y" ? "height" : "width";
switch (a) {
case Y$1:
i[f] = i[f] - (t[u] / 2 - n[u] / 2);
break;
case Z:
i[f] = i[f] + (t[u] / 2 - n[u] / 2);
break;
}
}
return i;
}
function oe(e, t) {
t === void 0 && (t = {});
var n = t, r = n.placement, o = r === void 0 ? e.placement : r, a = n.strategy, c = a === void 0 ? e.strategy : a, s = n.boundary, i = s === void 0 ? Ye : s, f = n.rootBoundary, u = f === void 0 ? je : f, m = n.elementContext, h = m === void 0 ? ee : m, l = n.altBoundary, g = l === void 0 ? !1 : l, p = n.padding, y = p === void 0 ? 0 : p, b = ut(typeof y != "number" ? y : pt(y, Q)), x = h === ee ? Ge : ee, O = e.rects.popper, d = e.elements[g ? x : h], v = Kt(G(d) ? d : d.contextElement || N$1(e.elements.popper), i, u, c), w = ne(e.elements.reference), $ = yt({
reference: w,
element: O,
placement: o
}), j = Se(Object.assign({}, O, $)), D = h === ee ? j : w, E = {
top: v.top - D.top + b.top,
bottom: D.bottom - v.bottom + b.bottom,
left: v.left - D.left + b.left,
right: D.right - v.right + b.right
}, A = e.modifiersData.offset;
if (h === ee && A) {
var H = A[o];
Object.keys(E).forEach(function(k) {
var F = [T$1, W].indexOf(k) >= 0 ? 1 : -1, U = [L, W].indexOf(k) >= 0 ? "y" : "x";
E[k] += H[U] * F;
});
}
return E;
}
function Qt(e, t) {
t === void 0 && (t = {});
var n = t, r = n.placement, o = n.boundary, a = n.rootBoundary, c = n.padding, s = n.flipVariations, i = n.allowedAutoPlacements, f = i === void 0 ? Ee : i, u = re(r), m = u ? s ? De : De.filter(function(g) {
return re(g) === u;
}) : Q, h = m.filter(function(g) {
return f.indexOf(g) >= 0;
});
h.length === 0 && (h = m);
var l = h.reduce(function(g, p) {
return g[p] = oe(e, {
placement: p,
boundary: o,
rootBoundary: a,
padding: c
})[C(p)], g;
}, {});
return Object.keys(l).sort(function(g, p) {
return l[g] - l[p];
});
}
function Zt(e) {
if (C(e) === me) return [];
var t = be(e);
return [
ht(e),
t,
ht(t)
];
}
function en(e) {
var t = e.state, n = e.options, r = e.name;
if (!t.modifiersData[r]._skip) {
for (var o = n.mainAxis, a = o === void 0 ? !0 : o, c = n.altAxis, s = c === void 0 ? !0 : c, i = n.fallbackPlacements, f = n.padding, u = n.boundary, m = n.rootBoundary, h = n.altBoundary, l = n.flipVariations, g = l === void 0 ? !0 : l, p = n.allowedAutoPlacements, y = t.options.placement, x = C(y) === y, O = i || (x || !g ? [be(y)] : Zt(y)), d = [y].concat(O).reduce(function(z, q) {
return z.concat(C(q) === me ? Qt(t, {
placement: q,
boundary: u,
rootBoundary: m,
padding: f,
flipVariations: g,
allowedAutoPlacements: p
}) : q);
}, []), v = t.rects.reference, w = t.rects.popper, $ = /* @__PURE__ */ new Map(), j = !0, D = d[0], E = 0; E < d.length; E++) {
var A = d[E], H = C(A), k = re(A) === Y$1, F = [L, W].indexOf(H) >= 0, U = F ? "width" : "height", M = oe(t, {
placement: A,
boundary: u,
rootBoundary: m,
altBoundary: h,
padding: f
}), S = F ? k ? T$1 : P$1 : k ? W : L;
v[U] > w[U] && (S = be(S));
var ue = be(S), _ = [];
if (a && _.push(M[H] <= 0), s && _.push(M[S] <= 0, M[ue] <= 0), _.every(function(z) {
return z;
})) {
D = A, j = !1;
break;
}
$.set(A, _);
}
if (j) {
for (var pe = g ? 3 : 1, xe = function(z) {
var q = d.find(function(de) {
var ae = $.get(de);
if (ae) return ae.slice(0, z).every(function(K) {
return K;
});
});
if (q) return D = q, "break";
}, ie = pe; ie > 0; ie--) if (xe(ie) === "break") break;
}
t.placement !== D && (t.modifiersData[r]._skip = !0, t.placement = D, t.reset = !0);
}
}
var gt = {
name: "flip",
enabled: !0,
phase: "main",
fn: en,
requiresIfExists: ["offset"],
data: { _skip: !1 }
};
function bt(e, t, n) {
return n === void 0 && (n = {
x: 0,
y: 0
}), {
top: e.top - t.height - n.y,
right: e.right - t.width + n.x,
bottom: e.bottom - t.height + n.y,
left: e.left - t.width - n.x
};
}
function wt(e) {
return [
L,
T$1,
W,
P$1
].some(function(t) {
return e[t] >= 0;
});
}
function tn(e) {
var t = e.state, n = e.name, r = t.rects.reference, o = t.rects.popper, a = t.modifiersData.preventOverflow, c = oe(t, { elementContext: "reference" }), s = oe(t, { altBoundary: !0 }), i = bt(c, r), f = bt(s, o, a), u = wt(i), m = wt(f);
t.modifiersData[n] = {
referenceClippingOffsets: i,
popperEscapeOffsets: f,
isReferenceHidden: u,
hasPopperEscaped: m
}, t.attributes.popper = Object.assign({}, t.attributes.popper, {
"data-popper-reference-hidden": u,
"data-popper-escaped": m
});
}
var xt = {
name: "hide",
enabled: !0,
phase: "main",
requiresIfExists: ["preventOverflow"],
fn: tn
};
function nn(e, t, n) {
var r = C(e), o = [P$1, L].indexOf(r) >= 0 ? -1 : 1, a = typeof n == "function" ? n(Object.assign({}, t, { placement: e })) : n, c = a[0], s = a[1];
return c = c || 0, s = (s || 0) * o, [P$1, T$1].indexOf(r) >= 0 ? {
x: s,
y: c
} : {
x: c,
y: s
};
}
function rn(e) {
var t = e.state, n = e.options, r = e.name, o = n.offset, a = o === void 0 ? [0, 0] : o, c = Ee.reduce(function(u, m) {
return u[m] = nn(m, t.rects, a), u;
}, {}), s = c[t.placement], i = s.x, f = s.y;
t.modifiersData.popperOffsets != null && (t.modifiersData.popperOffsets.x += i, t.modifiersData.popperOffsets.y += f), t.modifiersData[r] = c;
}
var Ot = {
name: "offset",
enabled: !0,
phase: "main",
requires: ["popperOffsets"],
fn: rn
};
function on(e) {
var t = e.state, n = e.name;
t.modifiersData[n] = yt({
reference: t.rects.reference,
element: t.rects.popper,
placement: t.placement
});
}
var Ve = {
name: "popperOffsets",
enabled: !0,
phase: "read",
fn: on,
data: {}
};
function an(e) {
return e === "x" ? "y" : "x";
}
function sn(e) {
var t = e.state, n = e.options, r = e.name, o = n.mainAxis, a = o === void 0 ? !0 : o, c = n.altAxis, s = c === void 0 ? !1 : c, i = n.boundary, f = n.rootBoundary, u = n.altBoundary, m = n.padding, h = n.tether, l = h === void 0 ? !0 : h, g = n.tetherOffset, p = g === void 0 ? 0 : g, y = oe(t, {
boundary: i,
rootBoundary: f,
padding: m,
altBoundary: u
}), b = C(t.placement), x = re(t.placement), O = !x, d = Me(b), v = an(d), w = t.modifiersData.popperOffsets, $ = t.rects.reference, j = t.rects.popper, D = typeof p == "function" ? p(Object.assign({}, t.rects, { placement: t.placement })) : p, E = typeof D == "number" ? {
mainAxis: D,
altAxis: D
} : Object.assign({
mainAxis: 0,
altAxis: 0
}, D), A = t.modifiersData.offset ? t.modifiersData.offset[t.placement] : null, H = {
x: 0,
y: 0
};
if (w) {
if (a) {
var k, F = d === "y" ? L : P$1, U = d === "y" ? W : T$1, M = d === "y" ? "height" : "width", S = w[d], ue = S + y[F], _ = S - y[U], pe = l ? -j[M] / 2 : 0, xe = x === Y$1 ? $[M] : j[M], ie = x === Y$1 ? -j[M] : -$[M], le = t.elements.arrow, z = l && le ? Pe(le) : {
width: 0,
height: 0
}, q = t.modifiersData["arrow#persistent"] ? t.modifiersData["arrow#persistent"].padding : ct(), de = q[F], ae = q[U], K = fe(0, $[M], z[M]), Et = O ? $[M] / 2 - pe - K - de - E.mainAxis : xe - K - de - E.mainAxis, At = O ? -$[M] / 2 + pe + K + ae + E.mainAxis : ie + K + ae + E.mainAxis, Oe = t.elements.arrow && se(t.elements.arrow), kt = Oe ? d === "y" ? Oe.clientTop || 0 : Oe.clientLeft || 0 : 0, Ce = (k = A == null ? void 0 : A[d]) != null ? k : 0, Lt = S + Et - Ce - kt, Pt = S + At - Ce, qe = fe(l ? ve(ue, Lt) : ue, S, l ? J(_, Pt) : _);
w[d] = qe, H[d] = qe - S;
}
if (s) {
var Ie, Mt = d === "x" ? L : P$1, Wt = d === "x" ? W : T$1, X = w[v], he = v === "y" ? "height" : "width", Ne = X + y[Mt], Fe = X - y[Wt], $e = [L, P$1].indexOf(b) !== -1, Ue = (Ie = A == null ? void 0 : A[v]) != null ? Ie : 0, _e = $e ? Ne : X - $[he] - j[he] - Ue + E.altAxis, ze = $e ? X + $[he] + j[he] - Ue - E.altAxis : Fe, Xe = l && $e ? St(_e, X, ze) : fe(l ? _e : Ne, X, l ? ze : Fe);
w[v] = Xe, H[v] = Xe - X;
}
t.modifiersData[r] = H;
}
}
var $t = {
name: "preventOverflow",
enabled: !0,
phase: "main",
fn: sn,
requiresIfExists: ["offset"]
};
function fn(e) {
return {
scrollLeft: e.scrollLeft,
scrollTop: e.scrollTop
};
}
function cn(e) {
return e === B(e) || !R(e) ? Be(e) : fn(e);
}
function un(e) {
var t = e.getBoundingClientRect(), n = te(t.width) / e.offsetWidth || 1, r = te(t.height) / e.offsetHeight || 1;
return n !== 1 || r !== 1;
}
function pn(e, t, n) {
n === void 0 && (n = !1);
var r = R(t), o = R(t) && un(t), a = N$1(t), c = ne(e, o, n), s = {
scrollLeft: 0,
scrollTop: 0
}, i = {
x: 0,
y: 0
};
return (r || !r && !n) && ((V(t) !== "body" || He(a)) && (s = cn(t)), R(t) ? (i = ne(t, !0), i.x += t.clientLeft, i.y += t.clientTop) : a && (i.x = Re(a))), {
x: c.left + s.scrollLeft - i.x,
y: c.top + s.scrollTop - i.y,
width: c.width,
height: c.height
};
}
function ln(e) {
var t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set(), r = [];
e.forEach(function(a) {
t.set(a.name, a);
});
function o(a) {
n.add(a.name);
[].concat(a.requires || [], a.requiresIfExists || []).forEach(function(s) {
if (!n.has(s)) {
var i = t.get(s);
i && o(i);
}
}), r.push(a);
}
return e.forEach(function(a) {
n.has(a.name) || o(a);
}), r;
}
function dn(e) {
var t = ln(e);
return it.reduce(function(n, r) {
return n.concat(t.filter(function(o) {
return o.phase === r;
}));
}, []);
}
function hn(e) {
var t;
return function() {
return t || (t = new Promise(function(n) {
Promise.resolve().then(function() {
t = void 0, n(e());
});
})), t;
};
}
function mn(e) {
var t = e.reduce(function(n, r) {
var o = n[r.name];
return n[r.name] = o ? Object.assign({}, o, r, {
options: Object.assign({}, o.options, r.options),
data: Object.assign({}, o.data, r.data)
}) : r, n;
}, {});
return Object.keys(t).map(function(n) {
return t[n];
});
}
var jt = {
placement: "bottom",
modifiers: [],
strategy: "absolute"
};
function Dt() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
return !t.some(function(r) {
return !(r && typeof r.getBoundingClientRect == "function");
});
}
function we(e) {
e === void 0 && (e = {});
var t = e, n = t.defaultModifiers, r = n === void 0 ? [] : n, o = t.defaultOptions, a = o === void 0 ? jt : o;
return function(c, s, i) {
i === void 0 && (i = a);
var f = {
placement: "bottom",
orderedModifiers: [],
options: Object.assign({}, jt, a),
modifiersData: {},
elements: {
reference: c,
popper: s
},
attributes: {},
styles: {}
}, u = [], m = !1, h = {
state: f,
setOptions: function(p) {
var y = typeof p == "function" ? p(f.options) : p;
g(), f.options = Object.assign({}, a, f.options, y), f.scrollParents = {
reference: G(c) ? ce(c) : c.contextElement ? ce(c.contextElement) : [],
popper: ce(s)
};
var b = dn(mn([].concat(r, f.options.modifiers)));
return f.orderedModifiers = b.filter(function(x) {
return x.enabled;
}), l(), h.update();
},
forceUpdate: function() {
if (!m) {
var p = f.elements, y = p.reference, b = p.popper;
if (Dt(y, b)) {
f.rects = {
reference: pn(y, se(b), f.options.strategy === "fixed"),
popper: Pe(b)
}, f.reset = !1, f.placement = f.options.placement, f.orderedModifiers.forEach(function(j) {
return f.modifiersData[j.name] = Object.assign({}, j.data);
});
for (var x = 0; x < f.orderedModifiers.length; x++) {
if (f.reset === !0) {
f.reset = !1, x = -1;
continue;
}
var O = f.orderedModifiers[x], d = O.fn, v = O.options, w = v === void 0 ? {} : v, $ = O.name;
typeof d == "function" && (f = d({
state: f,
options: w,
name: $,
instance: h
}) || f);
}
}
}
},
update: hn(function() {
return new Promise(function(p) {
h.forceUpdate(), p(f);
});
}),
destroy: function() {
g(), m = !0;
}
};
if (!Dt(c, s)) return h;
h.setOptions(i).then(function(p) {
!m && i.onFirstUpdate && i.onFirstUpdate(p);
});
function l() {
f.orderedModifiers.forEach(function(p) {
var y = p.name, b = p.options, x = b === void 0 ? {} : b, O = p.effect;
if (typeof O == "function") {
var d = O({
state: f,
name: y,
instance: h,
options: x
}), v = function() {};
u.push(d || v);
}
});
}
function g() {
u.forEach(function(p) {
return p();
}), u = [];
}
return h;
};
}
var vn = we(), gn = we({ defaultModifiers: [
Te,
Ve,
We,
ke
] }), wn = we({ defaultModifiers: [
Te,
Ve,
We,
ke,
Ot,
gt,
$t,
lt,
xt
] });
//#endregion
//#region ../../packages/hooks/use-popper/index.ts
const usePopper = (referenceElementRef, popperElementRef, opts = {}) => {
const stateUpdater = {
name: "updateState",
enabled: true,
phase: "write",
fn: ({ state }) => {
const derivedState = deriveState(state);
Object.assign(states.value, derivedState);
},
requires: ["computeStyles"]
};
const options = (0, vue.computed)(() => {
const { onFirstUpdate, placement, strategy, modifiers } = (0, vue.unref)(opts);
return {
onFirstUpdate,
placement: placement || "bottom",
strategy: strategy || "absolute",
modifiers: [
...modifiers || [],
stateUpdater,
{
name: "applyStyles",
enabled: false
}
]
};
});
const instanceRef = (0, vue.shallowRef)();
const states = (0, vue.ref)({
styles: {
popper: {
position: (0, vue.unref)(options).strategy,
left: "0",
top: "0"
},
arrow: { position: "absolute" }
},
attributes: {}
});
const destroy = () => {
if (!instanceRef.value) return;
instanceRef.value.destroy();
instanceRef.value = void 0;
};
(0, vue.watch)(options, (newOptions) => {
const instance = (0, vue.unref)(instanceRef);
if (instance) instance.setOptions(newOptions);
}, { deep: true });
(0, vue.watch)([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => {
destroy();
if (!referenceElement || !popperElement) return;
instanceRef.value = wn(referenceElement, popperElement, (0, vue.unref)(options));
});
(0, vue.onBeforeUnmount)(() => {
destroy();
});
return {
state: (0, vue.computed)(() => ({ ...(0, vue.unref)(instanceRef)?.state || {} })),
styles: (0, vue.computed)(() => (0, vue.unref)(states).styles),
attributes: (0, vue.computed)(() => (0, vue.unref)(states).attributes),
update: () => (0, vue.unref)(instanceRef)?.update(),
forceUpdate: () => (0, vue.unref)(instanceRef)?.forceUpdate(),
instanceRef: (0, vue.computed)(() => (0, vue.unref)(instanceRef))
};
};
function deriveState(state) {
const elements = Object.keys(state.elements);
return {
styles: fromPairs(elements.map((element) => [element, state.styles[element] || {}])),
attributes: fromPairs(elements.map((element) => [element, state.attributes[element]]))
};
}
//#endregion
//#region ../../packages/hooks/use-same-target/index.ts
const useSameTarget = (handleClick) => {
if (!handleClick) return {
onClick: NOOP,
onMousedown: NOOP,
onMouseup: NOOP
};
let mousedownTarget = false;
let mouseupTarget = false;
const onClick = (e) => {
if (mousedownTarget && mouseupTarget) handleClick(e);
mousedownTarget = mouseupTarget = false;
};
const onMousedown = (e) => {
mousedownTarget = e.target === e.currentTarget;
};
const onMouseup = (e) => {
mouseupTarget = e.target === e.currentTarget;
};
return {
onClick,
onMousedown,
onMouseup
};
};
//#endregion
//#region ../../packages/hooks/use-teleport/index.ts
const useTeleport = (contentRenderer, appendToBody) => {
const isTeleportVisible = (0, vue.ref)(false);
if (!isClient) return {
isTeleportVisible,
showTeleport: NOOP,
hideTeleport: NOOP,
renderTeleport: NOOP
};
let $el = null;
const showTeleport = () => {
isTeleportVisible.value = true;
if ($el !== null) return;
$el = createGlobalNode();
};
const hideTeleport = () => {
isTeleportVisible.value = false;
if ($el !== null) {
removeGlobalNode($el);
$el = null;
}
};
const renderTeleport = () => {
return appendToBody.value !== true ? contentRenderer() : isTeleportVisible.value ? [(0, vue.h)(vue.Teleport, { to: $el }, contentRenderer())] : void 0;
};
(0, vue.onUnmounted)(hideTeleport);
return {
isTeleportVisible,
showTeleport,
hideTeleport,
renderTeleport
};
};
//#endregion
//#region ../../packages/hooks/use-throttle-render/index.ts
const useThrottleRender = (loading, throttle = 0) => {
if (throttle === 0) return loading;
const throttled = (0, vue.ref)(isObject$1(throttle) && Boolean(throttle.initVal));
let timeoutHandle = null;
const dispatchThrottling = (timer) => {
if (isUndefined(timer)) {
throttled.value = loading.value;
return;
}
if (timeoutHandle) clearTimeout(timeoutHandle);
timeoutHandle = setTimeout(() => {
throttled.value = loading.value;
}, timer);
};
const dispatcher = (type) => {
if (type === "leading") if (isNumber(throttle)) dispatchThrottling(throttle);
else dispatchThrottling(throttle.leading);
else if (isObject$1(throttle)) dispatchThrottling(throttle.trailing);
else throttled.value = false;
};
(0, vue.onMounted)(() => dispatcher("leading"));
(0, vue.watch)(() => loading.value, (val) => {
dispatcher(val ? "leading" : "trailing");
});
return throttled;
};
//#endregion
//#region ../../packages/hooks/use-timeout/index.ts
function useTimeout() {
let timeoutHandle;
const registerTimeout = (fn, delay) => {
cancelTimeout();
timeoutHandle = globalThis.setTimeout(fn, delay);
};
const cancelTimeout = () => {
if (timeoutHandle === void 0) return;
globalThis.clearTimeout(timeoutHandle);
timeoutHandle = void 0;
};
tryOnScopeDispose(() => cancelTimeout());
return {
registerTimeout,
cancelTimeout
};
}
//#endregion
//#region ../../packages/hooks/use-transition-fallthrough/index.ts
/* istanbul ignore file */
const AFTER_APPEAR = "after-appear";
const AFTER_ENTER = "after-enter";
const AFTER_LEAVE = "after-leave";
const APPEAR = "appear";
const APPEAR_CANCELLED = "appear-cancelled";
const BEFORE_ENTER = "before-enter";
const BEFORE_LEAVE = "before-leave";
const ENTER = "enter";
const ENTER_CANCELLED = "enter-cancelled";
const LEAVE = "leave";
const LEAVE_CANCELLED = "leave-cancelled";
const useTransitionFallthroughEmits = [
AFTER_APPEAR,
AFTER_ENTER,
AFTER_LEAVE,
APPEAR,
APPEAR_CANCELLED,
BEFORE_ENTER,
BEFORE_LEAVE,
ENTER,
ENTER_CANCELLED,
LEAVE,
LEAVE_CANCELLED
];
/**
* NOTE:
* This is only a delegator for delegating transition callbacks.
* Use this at your need.
*/
/**
* Simple usage
*
* In your setups:
*
* setup() {
* const fallthroughMethods = useTransitionFallthrough()
* return fallthrough
* }
*
* In your template:
*
* <template>
* <transition name="whatever" v-bind="fallthrough">
* <slot />
* </transition>
* </template>
*
*/
const useTransitionFallthrough = () => {
const { emit } = (0, vue.getCurrentInstance)();
return {
onAfterAppear: () => {
emit(AFTER_APPEAR);
},
onAfterEnter: () => {
emit(AFTER_ENTER);
},
onAfterLeave: () => {
emit(AFTER_LEAVE);
},
onAppearCancelled: () => {
emit(APPEAR_CANCELLED);
},
onBeforeEnter: () => {
emit(BEFORE_ENTER);
},
onBeforeLeave: () => {
emit(BEFORE_LEAVE);
},
onEnter: () => {
emit(ENTER);
},
onEnterCancelled: () => {
emit(ENTER_CANCELLED);
},
onLeave: () => {
emit(LEAVE);
},
onLeaveCancelled: () => {
emit(LEAVE_CANCELLED);
}
};
};
//#endregion
//#region ../../packages/hooks/use-id/index.ts
const defaultIdInjection = {
prefix: Math.floor(Math.random() * 1e4),
current: 0
};
const ID_INJECTION_KEY = Symbol("elIdInjection");
const useIdInjection = () => {
return (0, vue.getCurrentInstance)() ? (0, vue.inject)(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;
};
const useId = (deterministicId) => {
const idInjection = useIdInjection();
if (!isClient && idInjection === defaultIdInjection) /* @__PURE__ */ debugWarn("IdInjection", `Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed
usage: app.provide(ID_INJECTION_KEY, {
prefix: number,
current: number,
})`);
const namespace = useGetDerivedNamespace();
return computedEager(() => (0, vue.unref)(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);
};
//#endregion
//#region ../../packages/hooks/use-escape-keydown/index.ts
let registeredEscapeHandlers = [];
const cachedHandler = (event) => {
if (getEventCode(event) === EVENT_CODE.esc) registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
};
const useEscapeKeydown = (handler) => {
(0, vue.onMounted)(() => {
if (registeredEscapeHandlers.length === 0) document.addEventListener("keydown", cachedHandler);
if (isClient) registeredEscapeHandlers.push(handler);
});
(0, vue.onBeforeUnmount)(() => {
registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
if (registeredEscapeHandlers.length === 0) {
if (isClient) document.removeEventListener("keydown", cachedHandler);
}
});
};
//#endregion
//#region ../../packages/hooks/use-popper-container/index.ts
const usePopperContainerId = () => {
const namespace = useGetDerivedNamespace();
const idInjection = useIdInjection();
const id = (0, vue.computed)(() => {
return `${namespace.value}-popper-container-${idInjection.prefix}`;
});
return {
id,
selector: (0, vue.computed)(() => `#${id.value}`)
};
};
const createContainer = (id) => {
const container = document.createElement("div");
container.id = id;
document.body.appendChild(container);
return container;
};
const usePopperContainer = () => {
const { id, selector } = usePopperContainerId();
(0, vue.onBeforeMount)(() => {
if (!isClient) return;
if (!document.body.querySelector(selector.value)) createContainer(id.value);
});
return {
id,
selector
};
};
//#endregion
//#region ../../packages/hooks/use-intermediate-render/index.ts
const useDelayedRender = ({ indicator, intermediateIndicator, shouldSetIntermediate = () => true, beforeShow, afterShow, afterHide, beforeHide }) => {
(0, vue.watch)(() => (0, vue.unref)(indicator), (val) => {
if (val) {
beforeShow?.();
(0, vue.nextTick)(() => {
if (!(0, vue.unref)(indicator)) return;
if (shouldSetIntermediate("show")) intermediateIndicator.value = true;
});
} else {
beforeHide?.();
(0, vue.nextTick)(() => {
if ((0, vue.unref)(indicator)) return;
if (shouldSetIntermediate("hide")) intermediateIndicator.value = false;
});
}
});
(0, vue.watch)(() => intermediateIndicator.value, (val) => {
if (val) afterShow?.();
else afterHide?.();
});
};
//#endregion
//#region ../../packages/hooks/use-delayed-toggle/index.ts
/**
* @deprecated Removed after 3.0.0, Use `UseDelayedToggleProps` instead.
*/
const useDelayedToggleProps = buildProps({
showAfter: {
type: Number,
default: 0
},
hideAfter: {
type: Number,
default: 200
},
autoClose: {
type: Number,
default: 0
}
});
const useDelayedTogglePropsDefaults = {
showAfter: 0,
hideAfter: 200,
autoClose: 0
};
const useDelayedToggle = ({ showAfter, hideAfter, autoClose, open, close }) => {
const { registerTimeout } = useTimeout();
const { registerTimeout: registerTimeoutForAutoClose, cancelTimeout: cancelTimeoutForAutoClose } = useTimeout();
const onOpen = (event, delay = (0, vue.unref)(showAfter)) => {
registerTimeout(() => {
open(event);
const _autoClose = (0, vue.unref)(autoClose);
if (isNumber(_autoClose) && _autoClose > 0) registerTimeoutForAutoClose(() => {
close(event);
}, _autoClose);
}, delay);
};
const onClose = (event, delay = (0, vue.unref)(hideAfter)) => {
cancelTimeoutForAutoClose();
registerTimeout(() => {
close(event);
}, delay);
};
return {
onOpen,
onClose
};
};
//#endregion
//#region ../../packages/hooks/use-forward-ref/index.ts
const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef");
const useForwardRef = (forwardRef) => {
const setForwardRef = ((el) => {
forwardRef.value = el;
});
(0, vue.provide)(FORWARD_REF_INJECTION_KEY, { setForwardRef });
};
const useForwardRefDirective = (setForwardRef) => {
return {
mounted(el) {
setForwardRef(el);
},
updated(el) {
setForwardRef(el);
},
unmounted() {
setForwardRef(null);
}
};
};
//#endregion
//#region ../../packages/hooks/use-z-index/index.ts
const initial = { current: 0 };
const zIndex = (0, vue.ref)(0);
const defaultInitialZIndex = 2e3;
const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey");
const zIndexContextKey = Symbol("zIndexContextKey");
const useZIndex = (zIndexOverrides) => {
const increasingInjection = (0, vue.getCurrentInstance)() ? (0, vue.inject)(ZINDEX_INJECTION_KEY, initial) : initial;
const zIndexInjection = zIndexOverrides || ((0, vue.getCurrentInstance)() ? (0, vue.inject)(zIndexContextKey, void 0) : void 0);
const initialZIndex = (0, vue.computed)(() => {
const zIndexFromInjection = (0, vue.unref)(zIndexInjection);
return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;
});
const currentZIndex = (0, vue.computed)(() => initialZIndex.value + zIndex.value);
const nextZIndex = () => {
increasingInjection.current++;
zIndex.value = increasingInjection.current;
return currentZIndex.value;
};
if (!isClient && !(0, vue.inject)(ZINDEX_INJECTION_KEY)) /* @__PURE__ */ debugWarn("ZIndexInjection", `Looks like you are using server rendering, you must provide a z-index provider to ensure the hydration process to be succeed
usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`);
return {
initialZIndex,
currentZIndex,
nextZIndex
};
};
//#endregion
//#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
const min$1 = Math.min;
const max$1 = Math.max;
const round = Math.round;
const floor$1 = Math.floor;
const createCoords = (v) => ({
x: v,
y: v
});
const oppositeSideMap = {
left: "right",
right: "left",
bottom: "top",
top: "bottom"
};
const oppositeAlignmentMap = {
start: "end",
end: "start"
};
function clamp(start, value, end) {
return max$1(start, min$1(value, end));
}
function evaluate(value, param) {
return typeof value === "function" ? value(param) : value;
}
function getSide(placement) {
return placement.split("-")[0];
}
function getAlignment(placement) {
return placement.split("-")[1];
}
function getOppositeAxis(axis) {
return axis === "x" ? "y" : "x";
}
function getAxisLength(axis) {
return axis === "y" ? "height" : "width";
}
const yAxisSides = /* @__PURE__ */ new Set(["top", "bottom"]);
function getSideAxis(placement) {
return yAxisSides.has(getSide(placement)) ? "y" : "x";
}
function getAlignmentAxis(placement) {
return getOppositeAxis(getSideAxis(placement));
}
function getAlignmentSides(placement, rects, rtl) {
if (rtl === void 0) rtl = false;
const alignment = getAlignment(placement);
const alignmentAxis = getAlignmentAxis(placement);
const length = getAxisLength(alignmentAxis);
let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
if (rects.reference[length] > rects.floating[length]) mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
}
function getExpandedPlacements(placement) {
const oppositePlacement = getOppositePlacement(placement);
return [
getOppositeAlignmentPlacement(placement),
oppositePlacement,
getOppositeAlignmentPlacement(oppositePlacement)
];
}
function getOppositeAlignmentPlacement(placement) {
return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
}
const lrPlacement = ["left", "right"];
const rlPlacement = ["right", "left"];
const tbPlacement = ["top", "bottom"];
const btPlacement = ["bottom", "top"];
function getSideList(side, isStart, rtl) {
switch (side) {
case "top":
case "bottom":
if (rtl) return isStart ? rlPlacement : lrPlacement;
return isStart ? lrPlacement : rlPlacement;
case "left":
case "right": return isStart ? tbPlacement : btPlacement;
default: return [];
}
}
function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
const alignment = getAlignment(placement);
let list = getSideList(getSide(placement), direction === "start", rtl);
if (alignment) {
list = list.map((side) => side + "-" + alignment);
if (flipAlignment) list = list.concat(list.map(getOppositeAlignmentPlacement));
}
return list;
}
function getOppositePlacement(placement) {
return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);
}
function expandPaddingObject(padding) {
return {
top: 0,
right: 0,
bottom: 0,
left: 0,
...padding
};
}
function getPaddingObject(padding) {
return typeof padding !== "number" ? expandPaddingObject(padding) : {
top: padding,
right: padding,
bottom: padding,
left: padding
};
}
function rectToClientRect(rect) {
const { x, y, width, height } = rect;
return {
width,
height,
top: y,
left: x,
right: x + width,
bottom: y + height,
x,
y
};
}
//#endregion
//#region ../../node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
function computeCoordsFromPlacement(_ref, placement, rtl) {
let { reference, floating } = _ref;
const sideAxis = getSideAxis(placement);
const alignmentAxis = getAlignmentAxis(placement);
const alignLength = getAxisLength(alignmentAxis);
const side = getSide(placement);
const isVertical = sideAxis === "y";
const commonX = reference.x + reference.width / 2 - floating.width / 2;
const commonY = reference.y + reference.height / 2 - floating.height / 2;
const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
let coords;
switch (side) {
case "top":
coords = {
x: commonX,
y: reference.y - floating.height
};
break;
case "bottom":
coords = {
x: commonX,
y: reference.y + reference.height
};
break;
case "right":
coords = {
x: reference.x + reference.width,
y: commonY
};
break;
case "left":
coords = {
x: reference.x - floating.width,
y: commonY
};
break;
default: coords = {
x: reference.x,
y: reference.y
};
}
switch (getAlignment(placement)) {
case "start":
coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
break;
case "end":
coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
break;
}
return coords;
}
/**
* Computes the `x` and `y` coordinates that will place the floating element
* next to a given reference element.
*
* This export does not have any `platform` interface logic. You will need to
* write one for the platform you are using Floating UI with.
*/
const computePosition$1 = async (reference, floating, config) => {
const { placement = "bottom", strategy = "absolute", middleware = [], platform } = config;
const validMiddleware = middleware.filter(Boolean);
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
let rects = await platform.getElementRects({
reference,
floating,
strategy
});
let { x, y } = computeCoordsFromPlacement(rects, placement, rtl);
let statefulPlacement = placement;
let middlewareData = {};
let resetCount = 0;
for (let i = 0; i < validMiddleware.length; i++) {
const { name, fn } = validMiddleware[i];
const { x: nextX, y: nextY, data, reset } = await fn({
x,
y,
initialPlacement: placement,
placement: statefulPlacement,
strategy,
middlewareData,
rects,
platform,
elements: {
reference,
floating
}
});
x = nextX != null ? nextX : x;
y = nextY != null ? nextY : y;
middlewareData = {
...middlewareData,
[name]: {
...middlewareData[name],
...data
}
};
if (reset && resetCount <= 50) {
resetCount++;
if (typeof reset === "object") {
if (reset.placement) statefulPlacement = reset.placement;
if (reset.rects) rects = reset.rects === true ? await platform.getElementRects({
reference,
floating,
strategy
}) : reset.rects;
({x, y} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
}
i = -1;
}
}
return {
x,
y,
placement: statefulPlacement,
strategy,
middlewareData
};
};
/**
* Resolves with an object of overflow side offsets that determine how much the
* element is overflowing a given clipping boundary on each side.
* - positive = overflowing the boundary by that number of pixels
* - negative = how many pixels left before it will overflow
* - 0 = lies flush with the boundary
* @see https://floating-ui.com/docs/detectOverflow
*/
async function detectOverflow$1(state, options) {
var _await$platform$isEle;
if (options === void 0) options = {};
const { x, y, platform, rects, elements, strategy } = state;
const { boundary = "clippingAncestors", rootBoundary = "viewport", elementContext = "floating", altBoundary = false, padding = 0 } = evaluate(options, state);
const paddingObject = getPaddingObject(padding);
const element = elements[altBoundary ? elementContext === "floating" ? "reference" : "floating" : elementContext];
const clippingClientRect = rectToClientRect(await platform.getClippingRect({
element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)),
boundary,
rootBoundary,
strategy
}));
const rect = elementContext === "floating" ? {
x,
y,
width: rects.floating.width,
height: rects.floating.height
} : rects.reference;
const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
const offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || {
x: 1,
y: 1
} : {
x: 1,
y: 1
};
const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
elements,
rect,
offsetParent,
strategy
}) : rect);
return {
top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
};
}
/**
* Provides data to position an inner element of the floating element so that it
* appears centered to the reference element.
* @see https://floating-ui.com/docs/arrow
*/
const arrow$1 = (options) => ({
name: "arrow",
options,
async fn(state) {
const { x, y, placement, rects, platform, elements, middlewareData } = state;
const { element, padding = 0 } = evaluate(options, state) || {};
if (element == null) return {};
const paddingObject = getPaddingObject(padding);
const coords = {
x,
y
};
const axis = getAlignmentAxis(placement);
const length = getAxisLength(axis);
const arrowDimensions = await platform.getDimensions(element);
const isYAxis = axis === "y";
const minProp = isYAxis ? "top" : "left";
const maxProp = isYAxis ? "bottom" : "right";
const clientProp = isYAxis ? "clientHeight" : "clientWidth";
const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
const startDiff = coords[axis] - rects.reference[axis];
const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
if (!clientSize || !await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent))) clientSize = elements.floating[clientProp] || rects.floating[length];
const centerToReference = endDiff / 2 - startDiff / 2;
const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
const minPadding = min$1(paddingObject[minProp], largestPossiblePadding);
const maxPadding = min$1(paddingObject[maxProp], largestPossiblePadding);
const min$1$1 = minPadding;
const max = clientSize - arrowDimensions[length] - maxPadding;
const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
const offset = clamp(min$1$1, center, max);
const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
const alignmentOffset = shouldAddOffset ? center < min$1$1 ? center - min$1$1 : center - max : 0;
return {
[axis]: coords[axis] + alignmentOffset,
data: {
[axis]: offset,
centerOffset: center - offset - alignmentOffset,
...shouldAddOffset && { alignmentOffset }
},
reset: shouldAddOffset
};
}
});
/**
* Optimizes the visibility of the floating element by flipping the `placement`
* in order to keep it in view when the preferred placement(s) will overflow the
* clipping boundary. Alternative to `autoPlacement`.
* @see https://floating-ui.com/docs/flip
*/
const flip$1 = function(options) {
if (options === void 0) options = {};
return {
name: "flip",
options,
async fn(state) {
var _middlewareData$arrow, _middlewareData$flip;
const { placement, middlewareData, rects, initialPlacement, platform, elements } = state;
const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = "bestFit", fallbackAxisSideDirection = "none", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state);
if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
const side = getSide(placement);
const initialSideAxis = getSideAxis(initialPlacement);
const isBasePlacement = getSide(initialPlacement) === initialPlacement;
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
const placements = [initialPlacement, ...fallbackPlacements];
const overflow = await detectOverflow$1(state, detectOverflowOptions);
const overflows = [];
let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
if (checkMainAxis) overflows.push(overflow[side]);
if (checkCrossAxis) {
const sides = getAlignmentSides(placement, rects, rtl);
overflows.push(overflow[sides[0]], overflow[sides[1]]);
}
overflowsData = [...overflowsData, {
placement,
overflows
}];
if (!overflows.every((side) => side <= 0)) {
var _middlewareData$flip2, _overflowsData$filter;
const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
const nextPlacement = placements[nextIndex];
if (nextPlacement) {
if (!(checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false) || overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) return {
data: {
index: nextIndex,
overflows: overflowsData
},
reset: { placement: nextPlacement }
};
}
let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
if (!resetPlacement) switch (fallbackStrategy) {
case "bestFit": {
var _overflowsData$filter2;
const placement = (_overflowsData$filter2 = overflowsData.filter((d) => {
if (hasFallbackAxisSideDirection) {
const currentSideAxis = getSideAxis(d.placement);
return currentSideAxis === initialSideAxis || currentSideAxis === "y";
}
return true;
}).map((d) => [d.placement, d.overflows.filter((overflow) => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
if (placement) resetPlacement = placement;
break;
}
case "initialPlacement":
resetPlacement = initialPlacement;
break;
}
if (placement !== resetPlacement) return { reset: { placement: resetPlacement } };
}
return {};
}
};
};
const originSides = /* @__PURE__ */ new Set(["left", "top"]);
async function convertValueToCoords(state, options) {
const { placement, platform, elements } = state;
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
const side = getSide(placement);
const alignment = getAlignment(placement);
const isVertical = getSideAxis(placement) === "y";
const mainAxisMulti = originSides.has(side) ? -1 : 1;
const crossAxisMulti = rtl && isVertical ? -1 : 1;
const rawValue = evaluate(options, state);
let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === "number" ? {
mainAxis: rawValue,
crossAxis: 0,
alignmentAxis: null
} : {
mainAxis: rawValue.mainAxis || 0,
crossAxis: rawValue.crossAxis || 0,
alignmentAxis: rawValue.alignmentAxis
};
if (alignment && typeof alignmentAxis === "number") crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
return isVertical ? {
x: crossAxis * crossAxisMulti,
y: mainAxis * mainAxisMulti
} : {
x: mainAxis * mainAxisMulti,
y: crossAxis * crossAxisMulti
};
}
/**
* Modifies the placement by translating the floating element along the
* specified axes.
* A number (shorthand for `mainAxis` or distance), or an axes configuration
* object may be passed.
* @see https://floating-ui.com/docs/offset
*/
const offset$1 = function(options) {
if (options === void 0) options = 0;
return {
name: "offset",
options,
async fn(state) {
var _middlewareData$offse, _middlewareData$arrow;
const { x, y, placement, middlewareData } = state;
const diffCoords = await convertValueToCoords(state, options);
if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
return {
x: x + diffCoords.x,
y: y + diffCoords.y,
data: {
...diffCoords,
placement
}
};
}
};
};
/**
* Optimizes the visibility of the floating element by shifting it in order to
* keep it in view when it will overflow the clipping boundary.
* @see https://floating-ui.com/docs/shift
*/
const shift$1 = function(options) {
if (options === void 0) options = {};
return {
name: "shift",
options,
async fn(state) {
const { x, y, placement } = state;
const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: (_ref) => {
let { x, y } = _ref;
return {
x,
y
};
} }, ...detectOverflowOptions } = evaluate(options, state);
const coords = {
x,
y
};
const overflow = await detectOverflow$1(state, detectOverflowOptions);
const crossAxis = getSideAxis(getSide(placement));
const mainAxis = getOppositeAxis(crossAxis);
let mainAxisCoord = coords[mainAxis];
let crossAxisCoord = coords[crossAxis];
if (checkMainAxis) {
const minSide = mainAxis === "y" ? "top" : "left";
const maxSide = mainAxis === "y" ? "bottom" : "right";
const min = mainAxisCoord + overflow[minSide];
const max = mainAxisCoord - overflow[maxSide];
mainAxisCoord = clamp(min, mainAxisCoord, max);
}
if (checkCrossAxis) {
const minSide = crossAxis === "y" ? "top" : "left";
const maxSide = crossAxis === "y" ? "bottom" : "right";
const min = crossAxisCoord + overflow[minSide];
const max = crossAxisCoord - overflow[maxSide];
crossAxisCoord = clamp(min, crossAxisCoord, max);
}
const limitedCoords = limiter.fn({
...state,
[mainAxis]: mainAxisCoord,
[crossAxis]: crossAxisCoord
});
return {
...limitedCoords,
data: {
x: limitedCoords.x - x,
y: limitedCoords.y - y,
enabled: {
[mainAxis]: checkMainAxis,
[crossAxis]: checkCrossAxis
}
}
};
}
};
};
//#endregion
//#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
function hasWindow() {
return typeof window !== "undefined";
}
function getNodeName(node) {
if (isNode(node)) return (node.nodeName || "").toLowerCase();
return "#document";
}
function getWindow(node) {
var _node$ownerDocument;
return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
}
function getDocumentElement(node) {
var _ref;
return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
}
function isNode(value) {
if (!hasWindow()) return false;
return value instanceof Node || value instanceof getWindow(value).Node;
}
function isElement(value) {
if (!hasWindow()) return false;
return value instanceof Element || value instanceof getWindow(value).Element;
}
function isHTMLElement(value) {
if (!hasWindow()) return false;
return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
}
function isShadowRoot(value) {
if (!hasWindow() || typeof ShadowRoot === "undefined") return false;
return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
}
const invalidOverflowDisplayValues = /* @__PURE__ */ new Set(["inline", "contents"]);
function isOverflowElement(element) {
const { overflow, overflowX, overflowY, display } = getComputedStyle$1(element);
return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
}
const tableElements = /* @__PURE__ */ new Set([
"table",
"td",
"th"
]);
function isTableElement(element) {
return tableElements.has(getNodeName(element));
}
const topLayerSelectors = [":popover-open", ":modal"];
function isTopLayer(element) {
return topLayerSelectors.some((selector) => {
try {
return element.matches(selector);
} catch (_e) {
return false;
}
});
}
const transformProperties = [
"transform",
"translate",
"scale",
"rotate",
"perspective"
];
const willChangeValues = [
"transform",
"translate",
"scale",
"rotate",
"perspective",
"filter"
];
const containValues = [
"paint",
"layout",
"strict",
"content"
];
function isContainingBlock(elementOrCss) {
const webkit = isWebKit();
const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
return transformProperties.some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || willChangeValues.some((value) => (css.willChange || "").includes(value)) || containValues.some((value) => (css.contain || "").includes(value));
}
function getContainingBlock(element) {
let currentNode = getParentNode(element);
while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
if (isContainingBlock(currentNode)) return currentNode;
else if (isTopLayer(currentNode)) return null;
currentNode = getParentNode(currentNode);
}
return null;
}
function isWebKit() {
if (typeof CSS === "undefined" || !CSS.supports) return false;
return CSS.supports("-webkit-backdrop-filter", "none");
}
const lastTraversableNodeNames = /* @__PURE__ */ new Set([
"html",
"body",
"#document"
]);
function isLastTraversableNode(node) {
return lastTraversableNodeNames.has(getNodeName(node));
}
function getComputedStyle$1(element) {
return getWindow(element).getComputedStyle(element);
}
function getNodeScroll(element) {
if (isElement(element)) return {
scrollLeft: element.scrollLeft,
scrollTop: element.scrollTop
};
return {
scrollLeft: element.scrollX,
scrollTop: element.scrollY
};
}
function getParentNode(node) {
if (getNodeName(node) === "html") return node;
const result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);
return isShadowRoot(result) ? result.host : result;
}
function getNearestOverflowAncestor(node) {
const parentNode = getParentNode(node);
if (isLastTraversableNode(parentNode)) return node.ownerDocument ? node.ownerDocument.body : node.body;
if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) return parentNode;
return getNearestOverflowAncestor(parentNode);
}
function getOverflowAncestors(node, list, traverseIframes) {
var _node$ownerDocument2;
if (list === void 0) list = [];
if (traverseIframes === void 0) traverseIframes = true;
const scrollableAncestor = getNearestOverflowAncestor(node);
const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
const win = getWindow(scrollableAncestor);
if (isBody) {
const frameElement = getFrameElement(win);
return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
}
return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
}
function getFrameElement(win) {
return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
}
//#endregion
//#region ../../node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
function getCssDimensions(element) {
const css = getComputedStyle$1(element);
let width = parseFloat(css.width) || 0;
let height = parseFloat(css.height) || 0;
const hasOffset = isHTMLElement(element);
const offsetWidth = hasOffset ? element.offsetWidth : width;
const offsetHeight = hasOffset ? element.offsetHeight : height;
const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
if (shouldFallback) {
width = offsetWidth;
height = offsetHeight;
}
return {
width,
height,
$: shouldFallback
};
}
function unwrapElement(element) {
return !isElement(element) ? element.contextElement : element;
}
function getScale(element) {
const domElement = unwrapElement(element);
if (!isHTMLElement(domElement)) return createCoords(1);
const rect = domElement.getBoundingClientRect();
const { width, height, $ } = getCssDimensions(domElement);
let x = ($ ? round(rect.width) : rect.width) / width;
let y = ($ ? round(rect.height) : rect.height) / height;
if (!x || !Number.isFinite(x)) x = 1;
if (!y || !Number.isFinite(y)) y = 1;
return {
x,
y
};
}
const noOffsets = /* @__PURE__ */ createCoords(0);
function getVisualOffsets(element) {
const win = getWindow(element);
if (!isWebKit() || !win.visualViewport) return noOffsets;
return {
x: win.visualViewport.offsetLeft,
y: win.visualViewport.offsetTop
};
}
function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
if (isFixed === void 0) isFixed = false;
if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) return false;
return isFixed;
}
function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
if (includeScale === void 0) includeScale = false;
if (isFixedStrategy === void 0) isFixedStrategy = false;
const clientRect = element.getBoundingClientRect();
const domElement = unwrapElement(element);
let scale = createCoords(1);
if (includeScale) if (offsetParent) {
if (isElement(offsetParent)) scale = getScale(offsetParent);
} else scale = getScale(element);
const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
let x = (clientRect.left + visualOffsets.x) / scale.x;
let y = (clientRect.top + visualOffsets.y) / scale.y;
let width = clientRect.width / scale.x;
let height = clientRect.height / scale.y;
if (domElement) {
const win = getWindow(domElement);
const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
let currentWin = win;
let currentIFrame = getFrameElement(currentWin);
while (currentIFrame && offsetParent && offsetWin !== currentWin) {
const iframeScale = getScale(currentIFrame);
const iframeRect = currentIFrame.getBoundingClientRect();
const css = getComputedStyle$1(currentIFrame);
const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
x *= iframeScale.x;
y *= iframeScale.y;
width *= iframeScale.x;
height *= iframeScale.y;
x += left;
y += top;
currentWin = getWindow(currentIFrame);
currentIFrame = getFrameElement(currentWin);
}
}
return rectToClientRect({
width,
height,
x,
y
});
}
function getWindowScrollBarX(element, rect) {
const leftScroll = getNodeScroll(element).scrollLeft;
if (!rect) return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
return rect.left + leftScroll;
}
function getHTMLOffset(documentElement, scroll) {
const htmlRect = documentElement.getBoundingClientRect();
return {
x: htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect),
y: htmlRect.top + scroll.scrollTop
};
}
function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
let { elements, rect, offsetParent, strategy } = _ref;
const isFixed = strategy === "fixed";
const documentElement = getDocumentElement(offsetParent);
const topLayer = elements ? isTopLayer(elements.floating) : false;
if (offsetParent === documentElement || topLayer && isFixed) return rect;
let scroll = {
scrollLeft: 0,
scrollTop: 0
};
let scale = createCoords(1);
const offsets = createCoords(0);
const isOffsetParentAnElement = isHTMLElement(offsetParent);
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
if (isHTMLElement(offsetParent)) {
const offsetRect = getBoundingClientRect(offsetParent);
scale = getScale(offsetParent);
offsets.x = offsetRect.x + offsetParent.clientLeft;
offsets.y = offsetRect.y + offsetParent.clientTop;
}
}
const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
return {
width: rect.width * scale.x,
height: rect.height * scale.y,
x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
};
}
function getClientRects(element) {
return Array.from(element.getClientRects());
}
function getDocumentRect(element) {
const html = getDocumentElement(element);
const scroll = getNodeScroll(element);
const body = element.ownerDocument.body;
const width = max$1(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
const height = max$1(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
let x = -scroll.scrollLeft + getWindowScrollBarX(element);
const y = -scroll.scrollTop;
if (getComputedStyle$1(body).direction === "rtl") x += max$1(html.clientWidth, body.clientWidth) - width;
return {
width,
height,
x,
y
};
}
const SCROLLBAR_MAX = 25;
function getViewportRect(element, strategy) {
const win = getWindow(element);
const html = getDocumentElement(element);
const visualViewport = win.visualViewport;
let width = html.clientWidth;
let height = html.clientHeight;
let x = 0;
let y = 0;
if (visualViewport) {
width = visualViewport.width;
height = visualViewport.height;
const visualViewportBased = isWebKit();
if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
x = visualViewport.offsetLeft;
y = visualViewport.offsetTop;
}
}
const windowScrollbarX = getWindowScrollBarX(html);
if (windowScrollbarX <= 0) {
const doc = html.ownerDocument;
const body = doc.body;
const bodyStyles = getComputedStyle(body);
const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) width -= clippingStableScrollbarWidth;
} else if (windowScrollbarX <= SCROLLBAR_MAX) width += windowScrollbarX;
return {
width,
height,
x,
y
};
}
const absoluteOrFixed = /* @__PURE__ */ new Set(["absolute", "fixed"]);
function getInnerBoundingClientRect(element, strategy) {
const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
const top = clientRect.top + element.clientTop;
const left = clientRect.left + element.clientLeft;
const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
return {
width: element.clientWidth * scale.x,
height: element.clientHeight * scale.y,
x: left * scale.x,
y: top * scale.y
};
}
function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
let rect;
if (clippingAncestor === "viewport") rect = getViewportRect(element, strategy);
else if (clippingAncestor === "document") rect = getDocumentRect(getDocumentElement(element));
else if (isElement(clippingAncestor)) rect = getInnerBoundingClientRect(clippingAncestor, strategy);
else {
const visualOffsets = getVisualOffsets(element);
rect = {
x: clippingAncestor.x - visualOffsets.x,
y: clippingAncestor.y - visualOffsets.y,
width: clippingAncestor.width,
height: clippingAncestor.height
};
}
return rectToClientRect(rect);
}
function hasFixedPositionAncestor(element, stopNode) {
const parentNode = getParentNode(element);
if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) return false;
return getComputedStyle$1(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode);
}
function getClippingElementAncestors(element, cache) {
const cachedResult = cache.get(element);
if (cachedResult) return cachedResult;
let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
let currentContainingBlockComputedStyle = null;
const elementIsFixed = getComputedStyle$1(element).position === "fixed";
let currentNode = elementIsFixed ? getParentNode(element) : element;
while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
const computedStyle = getComputedStyle$1(currentNode);
const currentNodeIsContaining = isContainingBlock(currentNode);
if (!currentNodeIsContaining && computedStyle.position === "fixed") currentContainingBlockComputedStyle = null;
if (elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode)) result = result.filter((ancestor) => ancestor !== currentNode);
else currentContainingBlockComputedStyle = computedStyle;
currentNode = getParentNode(currentNode);
}
cache.set(element, result);
return result;
}
function getClippingRect(_ref) {
let { element, boundary, rootBoundary, strategy } = _ref;
const clippingAncestors = [...boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary), rootBoundary];
const firstClippingAncestor = clippingAncestors[0];
const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
accRect.top = max$1(rect.top, accRect.top);
accRect.right = min$1(rect.right, accRect.right);
accRect.bottom = min$1(rect.bottom, accRect.bottom);
accRect.left = max$1(rect.left, accRect.left);
return accRect;
}, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
return {
width: clippingRect.right - clippingRect.left,
height: clippingRect.bottom - clippingRect.top,
x: clippingRect.left,
y: clippingRect.top
};
}
function getDimensions(element) {
const { width, height } = getCssDimensions(element);
return {
width,
height
};
}
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
const isOffsetParentAnElement = isHTMLElement(offsetParent);
const documentElement = getDocumentElement(offsetParent);
const isFixed = strategy === "fixed";
const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
let scroll = {
scrollLeft: 0,
scrollTop: 0
};
const offsets = createCoords(0);
function setLeftRTLScrollbarOffset() {
offsets.x = getWindowScrollBarX(documentElement);
}
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
if (isOffsetParentAnElement) {
const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
offsets.x = offsetRect.x + offsetParent.clientLeft;
offsets.y = offsetRect.y + offsetParent.clientTop;
} else if (documentElement) setLeftRTLScrollbarOffset();
}
if (isFixed && !isOffsetParentAnElement && documentElement) setLeftRTLScrollbarOffset();
const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
return {
x: rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x,
y: rect.top + scroll.scrollTop - offsets.y - htmlOffset.y,
width: rect.width,
height: rect.height
};
}
function isStaticPositioned(element) {
return getComputedStyle$1(element).position === "static";
}
function getTrueOffsetParent(element, polyfill) {
if (!isHTMLElement(element) || getComputedStyle$1(element).position === "fixed") return null;
if (polyfill) return polyfill(element);
let rawOffsetParent = element.offsetParent;
if (getDocumentElement(element) === rawOffsetParent) rawOffsetParent = rawOffsetParent.ownerDocument.body;
return rawOffsetParent;
}
function getOffsetParent(element, polyfill) {
const win = getWindow(element);
if (isTopLayer(element)) return win;
if (!isHTMLElement(element)) {
let svgOffsetParent = getParentNode(element);
while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) return svgOffsetParent;
svgOffsetParent = getParentNode(svgOffsetParent);
}
return win;
}
let offsetParent = getTrueOffsetParent(element, polyfill);
while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) offsetParent = getTrueOffsetParent(offsetParent, polyfill);
if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) return win;
return offsetParent || getContainingBlock(element) || win;
}
const getElementRects = async function(data) {
const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
const getDimensionsFn = this.getDimensions;
const floatingDimensions = await getDimensionsFn(data.floating);
return {
reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
floating: {
x: 0,
y: 0,
width: floatingDimensions.width,
height: floatingDimensions.height
}
};
};
function isRTL$1(element) {
return getComputedStyle$1(element).direction === "rtl";
}
const platform = {
convertOffsetParentRelativeRectToViewportRelativeRect,
getDocumentElement,
getClippingRect,
getOffsetParent,
getElementRects,
getClientRects,
getDimensions,
getScale,
isElement,
isRTL: isRTL$1
};
function rectsAreEqual(a, b) {
return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
}
function observeMove(element, onMove) {
let io = null;
let timeoutId;
const root = getDocumentElement(element);
function cleanup() {
var _io;
clearTimeout(timeoutId);
(_io = io) == null || _io.disconnect();
io = null;
}
function refresh(skip, threshold) {
if (skip === void 0) skip = false;
if (threshold === void 0) threshold = 1;
cleanup();
const elementRectForRootMargin = element.getBoundingClientRect();
const { left, top, width, height } = elementRectForRootMargin;
if (!skip) onMove();
if (!width || !height) return;
const insetTop = floor$1(top);
const insetRight = floor$1(root.clientWidth - (left + width));
const insetBottom = floor$1(root.clientHeight - (top + height));
const insetLeft = floor$1(left);
const options = {
rootMargin: -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px",
threshold: max$1(0, min$1(1, threshold)) || 1
};
let isFirstUpdate = true;
function handleObserve(entries) {
const ratio = entries[0].intersectionRatio;
if (ratio !== threshold) {
if (!isFirstUpdate) return refresh();
if (!ratio) timeoutId = setTimeout(() => {
refresh(false, 1e-7);
}, 1e3);
else refresh(false, ratio);
}
if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) refresh();
isFirstUpdate = false;
}
try {
io = new IntersectionObserver(handleObserve, {
...options,
root: root.ownerDocument
});
} catch (_e) {
io = new IntersectionObserver(handleObserve, options);
}
io.observe(element);
}
refresh(true);
return cleanup;
}
/**
* Automatically updates the position of the floating element when necessary.
* Should only be called when the floating element is mounted on the DOM or
* visible on the screen.
* @returns cleanup function that should be invoked when the floating element is
* removed from the DOM or hidden from the screen.
* @see https://floating-ui.com/docs/autoUpdate
*/
function autoUpdate(reference, floating, update, options) {
if (options === void 0) options = {};
const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === "function", layoutShift = typeof IntersectionObserver === "function", animationFrame = false } = options;
const referenceEl = unwrapElement(reference);
const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...getOverflowAncestors(floating)] : [];
ancestors.forEach((ancestor) => {
ancestorScroll && ancestor.addEventListener("scroll", update, { passive: true });
ancestorResize && ancestor.addEventListener("resize", update);
});
const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
let reobserveFrame = -1;
let resizeObserver = null;
if (elementResize) {
resizeObserver = new ResizeObserver((_ref) => {
let [firstEntry] = _ref;
if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
resizeObserver.unobserve(floating);
cancelAnimationFrame(reobserveFrame);
reobserveFrame = requestAnimationFrame(() => {
var _resizeObserver;
(_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
});
}
update();
});
if (referenceEl && !animationFrame) resizeObserver.observe(referenceEl);
resizeObserver.observe(floating);
}
let frameId;
let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
if (animationFrame) frameLoop();
function frameLoop() {
const nextRefRect = getBoundingClientRect(reference);
if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) update();
prevRefRect = nextRefRect;
frameId = requestAnimationFrame(frameLoop);
}
update();
return () => {
var _resizeObserver2;
ancestors.forEach((ancestor) => {
ancestorScroll && ancestor.removeEventListener("scroll", update);
ancestorResize && ancestor.removeEventListener("resize", update);
});
cleanupIo?.();
(_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
resizeObserver = null;
if (animationFrame) cancelAnimationFrame(frameId);
};
}
/**
* Resolves with an object of overflow side offsets that determine how much the
* element is overflowing a given clipping boundary on each side.
* - positive = overflowing the boundary by that number of pixels
* - negative = how many pixels left before it will overflow
* - 0 = lies flush with the boundary
* @see https://floating-ui.com/docs/detectOverflow
*/
const detectOverflow = detectOverflow$1;
/**
* Modifies the placement by translating the floating element along the
* specified axes.
* A number (shorthand for `mainAxis` or distance), or an axes configuration
* object may be passed.
* @see https://floating-ui.com/docs/offset
*/
const offset = offset$1;
/**
* Optimizes the visibility of the floating element by shifting it in order to
* keep it in view when it will overflow the clipping boundary.
* @see https://floating-ui.com/docs/shift
*/
const shift = shift$1;
/**
* Optimizes the visibility of the floating element by flipping the `placement`
* in order to keep it in view when the preferred placement(s) will overflow the
* clipping boundary. Alternative to `autoPlacement`.
* @see https://floating-ui.com/docs/flip
*/
const flip = flip$1;
/**
* Provides data to position an inner element of the floating element so that it
* appears centered to the reference element.
* @see https://floating-ui.com/docs/arrow
*/
const arrow = arrow$1;
/**
* Computes the `x` and `y` coordinates that will place the floating element
* next to a given reference element.
*/
const computePosition = (reference, floating, options) => {
const cache = /* @__PURE__ */ new Map();
const mergedOptions = {
platform,
...options
};
const platformWithCache = {
...mergedOptions.platform,
_c: cache
};
return computePosition$1(reference, floating, {
...mergedOptions,
platform: platformWithCache
});
};
//#endregion
//#region ../../packages/hooks/use-floating/index.ts
const useFloatingProps = buildProps({});
const unrefReference = (elRef) => {
if (!isClient) return;
if (!elRef) return elRef;
const unrefEl = unrefElement(elRef);
if (unrefEl) return unrefEl;
return (0, vue.isRef)(elRef) ? unrefEl : elRef;
};
const getPositionDataWithUnit = (record, key) => {
const value = record?.[key];
return isNil(value) ? "" : `${value}px`;
};
const useFloating = ({ middleware, placement, strategy }) => {
const referenceRef = (0, vue.ref)();
const contentRef = (0, vue.ref)();
const states = {
x: (0, vue.ref)(),
y: (0, vue.ref)(),
placement,
strategy,
middlewareData: (0, vue.ref)({})
};
const update = async () => {
if (!isClient) return;
const referenceEl = unrefReference(referenceRef);
const contentEl = unrefElement(contentRef);
if (!referenceEl || !contentEl) return;
const data = await computePosition(referenceEl, contentEl, {
placement: (0, vue.unref)(placement),
strategy: (0, vue.unref)(strategy),
middleware: (0, vue.unref)(middleware)
});
keysOf(states).forEach((key) => {
states[key].value = data[key];
});
};
(0, vue.onMounted)(() => {
(0, vue.watchEffect)(() => {
update();
});
});
return {
...states,
update,
referenceRef,
contentRef
};
};
const arrowMiddleware = ({ arrowRef, padding }) => {
return {
name: "arrow",
options: {
element: arrowRef,
padding
},
fn(args) {
const arrowEl = (0, vue.unref)(arrowRef);
if (!arrowEl) return {};
return arrow({
element: arrowEl,
padding
}).fn(args);
}
};
};
//#endregion
//#region ../../packages/hooks/use-cursor/index.ts
function useCursor(input) {
let selectionInfo;
function recordCursor() {
if (input.value == void 0) return;
const { selectionStart, selectionEnd, value } = input.value;
if (selectionStart == null || selectionEnd == null) return;
selectionInfo = {
selectionStart,
selectionEnd,
value,
beforeTxt: value.slice(0, Math.max(0, selectionStart)),
afterTxt: value.slice(Math.max(0, selectionEnd))
};
}
function setCursor() {
if (input.value == void 0 || selectionInfo == void 0) return;
const { value } = input.value;
const { beforeTxt, afterTxt, selectionStart } = selectionInfo;
if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return;
let startPos = value.length;
if (value.endsWith(afterTxt)) startPos = value.length - afterTxt.length;
else if (value.startsWith(beforeTxt)) startPos = beforeTxt.length;
else {
const beforeLastChar = beforeTxt[selectionStart - 1];
const newIndex = value.indexOf(beforeLastChar, selectionStart - 1);
if (newIndex !== -1) startPos = newIndex + 1;
}
input.value.setSelectionRange(startPos, startPos);
}
return [recordCursor, setCursor];
}
//#endregion
//#region ../../packages/hooks/use-ordered-children/index.ts
const getOrderedChildren = (vm, childComponentName, children) => {
return flattedChildren(vm.subTree).filter((n) => (0, vue.isVNode)(n) && n.type?.name === childComponentName && !!n.component).map((n) => n.component.uid).map((uid) => children[uid]).filter((p) => !!p);
};
const useOrderedChildren = (vm, childComponentName) => {
const children = (0, vue.shallowRef)({});
const orderedChildren = (0, vue.shallowRef)([]);
const nodesMap = /* @__PURE__ */ new WeakMap();
const addChild = (child) => {
children.value[child.uid] = child;
(0, vue.triggerRef)(children);
(0, vue.onMounted)(() => {
const childNode = child.getVnode().el;
const parentNode = childNode.parentNode;
if (!nodesMap.has(parentNode)) {
nodesMap.set(parentNode, []);
const originalFn = parentNode.insertBefore.bind(parentNode);
parentNode.insertBefore = (node, anchor) => {
if (nodesMap.get(parentNode).some((el) => node === el || anchor === el)) (0, vue.triggerRef)(children);
return originalFn(node, anchor);
};
}
nodesMap.get(parentNode).push(childNode);
});
};
const removeChild = (child) => {
delete children.value[child.uid];
(0, vue.triggerRef)(children);
const childNode = child.getVnode().el;
const parentNode = childNode.parentNode;
const childNodes = nodesMap.get(parentNode);
const index = childNodes.indexOf(childNode);
childNodes.splice(index, 1);
};
const sortChildren = () => {
orderedChildren.value = getOrderedChildren(vm, childComponentName, children.value);
};
const IsolatedRenderer = (props) => {
return props.render();
};
return {
children: orderedChildren,
addChild,
removeChild,
ChildrenSorter: (0, vue.defineComponent)({ setup(_, { slots }) {
return () => {
sortChildren();
return slots.default ? (0, vue.h)(IsolatedRenderer, { render: slots.default }) : null;
};
} })
};
};
//#endregion
//#region ../../packages/hooks/use-size/index.ts
const useSizeProp = buildProp({
type: String,
values: componentSizes,
required: false
});
const useSizeProps = { size: useSizeProp };
const SIZE_INJECTION_KEY = Symbol("size");
const useGlobalSize = () => {
const injectedSize = (0, vue.inject)(SIZE_INJECTION_KEY, {});
return (0, vue.computed)(() => {
return (0, vue.unref)(injectedSize.size) || "";
});
};
//#endregion
//#region ../../packages/hooks/use-focus-controller/index.ts
function useFocusController(target, { disabled, beforeFocus, afterFocus, beforeBlur, afterBlur } = {}) {
const { emit } = (0, vue.getCurrentInstance)();
const wrapperRef = (0, vue.shallowRef)();
const isFocused = (0, vue.ref)(false);
const handleFocus = (event) => {
const cancelFocus = isFunction$1(beforeFocus) ? beforeFocus(event) : false;
if ((0, vue.unref)(disabled) || isFocused.value || cancelFocus) return;
isFocused.value = true;
emit("focus", event);
afterFocus?.();
};
const handleBlur = (event) => {
const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event) : false;
if ((0, vue.unref)(disabled) || event.relatedTarget && wrapperRef.value?.contains(event.relatedTarget) || cancelBlur) return;
isFocused.value = false;
emit("blur", event);
afterBlur?.();
};
const handleClick = (event) => {
if ((0, vue.unref)(disabled) || isFocusable(event.target) || wrapperRef.value?.contains(document.activeElement) && wrapperRef.value !== document.activeElement) return;
target.value?.focus();
};
(0, vue.watch)([wrapperRef, () => (0, vue.unref)(disabled)], ([el, disabled]) => {
if (!el) return;
if (disabled) el.removeAttribute("tabindex");
else el.setAttribute("tabindex", "-1");
});
useEventListener(wrapperRef, "focus", handleFocus, true);
useEventListener(wrapperRef, "blur", handleBlur, true);
useEventListener(wrapperRef, "click", handleClick, true);
return {
isFocused,
wrapperRef,
handleFocus,
handleBlur
};
}
//#endregion
//#region ../../packages/hooks/use-composition/index.ts
function useComposition({ afterComposition, emit }) {
const isComposing = (0, vue.ref)(false);
const handleCompositionStart = (event) => {
emit?.("compositionstart", event);
isComposing.value = true;
};
const handleCompositionUpdate = (event) => {
emit?.("compositionupdate", event);
isComposing.value = true;
};
const handleCompositionEnd = (event) => {
emit?.("compositionend", event);
if (isComposing.value) {
isComposing.value = false;
(0, vue.nextTick)(() => afterComposition(event));
}
};
const handleComposition = (event) => {
event.type === "compositionend" ? handleCompositionEnd(event) : handleCompositionUpdate(event);
};
return {
isComposing,
handleComposition,
handleCompositionStart,
handleCompositionUpdate,
handleCompositionEnd
};
}
//#endregion
//#region ../../packages/hooks/use-empty-values/index.ts
const emptyValuesContextKey = Symbol("emptyValuesContextKey");
const SCOPE = "use-empty-values";
const DEFAULT_EMPTY_VALUES = [
"",
void 0,
null
];
const DEFAULT_VALUE_ON_CLEAR = void 0;
/**
* @deprecated Removed after 3.0.0, Use `UseEmptyValuesProps` instead.
*/
const useEmptyValuesProps = buildProps({
emptyValues: Array,
valueOnClear: {
type: definePropType([
String,
Number,
Boolean,
Function
]),
default: void 0,
validator: (val) => {
val = isFunction$1(val) ? val() : val;
if (isArray$1(val)) return val.every((item) => !item);
return !val;
}
}
});
const useEmptyValues = (props, defaultValue) => {
const config = (0, vue.getCurrentInstance)() ? (0, vue.inject)(emptyValuesContextKey, (0, vue.ref)({})) : (0, vue.ref)({});
const emptyValues = (0, vue.computed)(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES);
const valueOnClear = (0, vue.computed)(() => {
if (isFunction$1(props.valueOnClear)) return props.valueOnClear();
else if (props.valueOnClear !== void 0) return props.valueOnClear;
else if (isFunction$1(config.value.valueOnClear)) return config.value.valueOnClear();
else if (config.value.valueOnClear !== void 0) return config.value.valueOnClear;
return defaultValue !== void 0 ? defaultValue : DEFAULT_VALUE_ON_CLEAR;
});
const isEmptyValue = (value) => {
let result = true;
if (isArray$1(value)) result = emptyValues.value.some((emptyValue) => {
return isEqual$1(value, emptyValue);
});
else result = emptyValues.value.includes(value);
return result;
};
if (!isEmptyValue(valueOnClear.value)) /* @__PURE__ */ debugWarn(SCOPE, "value-on-clear should be a value of empty-values");
return {
emptyValues,
valueOnClear,
isEmptyValue
};
};
//#endregion
//#region ../../packages/hooks/use-aria/index.ts
/**
* @deprecated Removed after 3.0.0, Use `AriaProps` instead.
*/
const ariaProps = buildProps({
ariaLabel: String,
ariaOrientation: {
type: String,
values: [
"horizontal",
"vertical",
"undefined"
]
},
ariaControls: String
});
const useAriaProps = (arias) => {
return pick(ariaProps, arias);
};
//#endregion
//#region ../../packages/components/config-provider/src/constants.ts
const configProviderContextKey = Symbol();
//#endregion
//#region ../../packages/components/config-provider/src/hooks/use-global-config.ts
const globalConfig = (0, vue.ref)();
function useGlobalConfig(key, defaultValue = void 0) {
const config = (0, vue.getCurrentInstance)() ? (0, vue.inject)(configProviderContextKey, globalConfig) : globalConfig;
if (key) return (0, vue.computed)(() => config.value?.[key] ?? defaultValue);
else return config;
}
function useGlobalComponentSettings(block, sizeFallback) {
const config = useGlobalConfig();
const ns = useNamespace(block, (0, vue.computed)(() => config.value?.namespace || defaultNamespace));
const locale = useLocale((0, vue.computed)(() => config.value?.locale));
const zIndex = useZIndex((0, vue.computed)(() => config.value?.zIndex || defaultInitialZIndex));
const size = (0, vue.computed)(() => (0, vue.unref)(sizeFallback) || config.value?.size || "");
provideGlobalConfig((0, vue.computed)(() => (0, vue.unref)(config) || {}));
return {
ns,
locale,
zIndex,
size
};
}
const provideGlobalConfig = (config, app, global = false) => {
const inSetup = !!(0, vue.getCurrentInstance)();
const oldConfig = inSetup ? useGlobalConfig() : void 0;
const provideFn = app?.provide ?? (inSetup ? vue.provide : void 0);
if (!provideFn) {
/* @__PURE__ */ debugWarn("provideGlobalConfig", "provideGlobalConfig() can only be used inside setup().");
return;
}
const context = (0, vue.computed)(() => {
const cfg = (0, vue.unref)(config);
if (!oldConfig?.value) return cfg;
return mergeConfig(oldConfig.value, cfg);
});
provideFn(configProviderContextKey, context);
provideFn(localeContextKey, (0, vue.computed)(() => context.value.locale));
provideFn(namespaceContextKey, (0, vue.computed)(() => context.value.namespace));
provideFn(zIndexContextKey, (0, vue.computed)(() => context.value.zIndex));
provideFn(SIZE_INJECTION_KEY, { size: (0, vue.computed)(() => context.value.size || "") });
provideFn(emptyValuesContextKey, (0, vue.computed)(() => ({
emptyValues: context.value.emptyValues,
valueOnClear: context.value.valueOnClear
})));
if (global || !globalConfig.value) globalConfig.value = context.value;
return context;
};
const mergeConfig = (a, b) => {
const keys = [...new Set([...keysOf(a), ...keysOf(b)])];
const obj = {};
for (const key of keys) obj[key] = b[key] !== void 0 ? b[key] : a[key];
return obj;
};
//#endregion
//#region ../../packages/components/config-provider/src/config-provider-props.ts
const configProviderProps = buildProps({
a11y: {
type: Boolean,
default: true
},
locale: { type: definePropType(Object) },
size: useSizeProp,
button: { type: definePropType(Object) },
card: { type: definePropType(Object) },
dialog: { type: definePropType(Object) },
link: { type: definePropType(Object) },
experimentalFeatures: { type: definePropType(Object) },
keyboardNavigation: {
type: Boolean,
default: true
},
message: { type: definePropType(Object) },
zIndex: Number,
namespace: {
type: String,
default: "el"
},
table: { type: definePropType(Object) },
...useEmptyValuesProps
});
//#endregion
//#region ../../packages/components/config-provider/src/config-provider.ts
const messageConfig = { placement: "top" };
const ConfigProvider = (0, vue.defineComponent)({
name: "ElConfigProvider",
props: configProviderProps,
setup(props, { slots }) {
const config = provideGlobalConfig(props);
(0, vue.watch)(() => props.message, (val) => {
Object.assign(messageConfig, config?.value?.message ?? {}, val ?? {});
}, {
immediate: true,
deep: true
});
return () => (0, vue.renderSlot)(slots, "default", { config: config?.value });
}
});
//#endregion
//#region ../../packages/components/config-provider/index.ts
const ElConfigProvider = withInstall(ConfigProvider);
//#endregion
//#region ../../packages/element-plus/version.ts
const version$1 = "2.13.7";
//#endregion
//#region ../../packages/element-plus/make-installer.ts
const makeInstaller = (components = []) => {
const install = (app, options) => {
if (app[INSTALLED_KEY]) return;
app[INSTALLED_KEY] = true;
components.forEach((c) => app.use(c));
if (options) provideGlobalConfig(options, app, true);
};
return {
version: version$1,
install
};
};
//#endregion
//#region ../../packages/components/teleport/src/teleport.ts
const teleportProps = buildProps({
to: {
type: definePropType([String, Object]),
required: true
},
disabled: Boolean
});
//#endregion
//#region ../../packages/components/teleport/src/teleport.vue?vue&type=script&setup=true&lang.ts
var teleport_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "teleport",
props: teleportProps,
setup(__props) {
return (_ctx, _cache) => {
return _ctx.disabled ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 0 }) : ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
key: 1,
to: _ctx.to
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 8, ["to"]));
};
}
});
//#endregion
//#region ../../packages/components/teleport/src/teleport.vue
var teleport_default = teleport_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/teleport/index.ts
const ElTeleport = withInstall(teleport_default);
//#endregion
//#region ../../packages/components/affix/src/affix.ts
/**
* @deprecated Removed after 3.0.0, Use `AffixProps` instead.
*/
const affixProps = buildProps({
zIndex: {
type: definePropType([Number, String]),
default: 100
},
target: {
type: String,
default: ""
},
offset: {
type: Number,
default: 0
},
position: {
type: String,
values: ["top", "bottom"],
default: "top"
},
teleported: Boolean,
appendTo: {
type: teleportProps.to.type,
default: "body"
}
});
const affixEmits = {
scroll: ({ scrollTop, fixed }) => isNumber(scrollTop) && isBoolean(fixed),
[CHANGE_EVENT]: (fixed) => isBoolean(fixed)
};
//#endregion
//#region ../../packages/components/affix/src/affix.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$22 = "ElAffix";
var affix_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$22,
__name: "affix",
props: affixProps,
emits: affixEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("affix");
const target = (0, vue.shallowRef)();
const root = (0, vue.shallowRef)();
const scrollContainer = (0, vue.shallowRef)();
const { height: windowHeight } = useWindowSize();
const { height: rootHeight, width: rootWidth, top: rootTop, bottom: rootBottom, left: rootLeft, update: updateRoot } = useElementBounding(root, { windowScroll: false });
const targetRect = useElementBounding(target);
const fixed = (0, vue.ref)(false);
const scrollTop = (0, vue.ref)(0);
const transform = (0, vue.ref)(0);
const teleportDisabled = (0, vue.computed)(() => {
return !props.teleported || !fixed.value;
});
const rootStyle = (0, vue.computed)(() => {
return {
display: "flow-root",
height: fixed.value ? `${rootHeight.value}px` : "",
width: fixed.value ? `${rootWidth.value}px` : ""
};
});
const affixStyle = (0, vue.computed)(() => {
if (!fixed.value) return {};
const offset = addUnit(props.offset);
return {
height: `${rootHeight.value}px`,
width: `${rootWidth.value}px`,
top: props.position === "top" ? offset : "",
bottom: props.position === "bottom" ? offset : "",
left: props.teleported ? `${rootLeft.value}px` : "",
transform: transform.value ? `translateY(${transform.value}px)` : "",
zIndex: props.zIndex
};
});
const update = () => {
if (!scrollContainer.value) return;
scrollTop.value = scrollContainer.value instanceof Window ? document.documentElement.scrollTop : scrollContainer.value.scrollTop || 0;
const { position, target, offset } = props;
const rootHeightOffset = offset + rootHeight.value;
if (position === "top") if (target) {
const difference = targetRect.bottom.value - rootHeightOffset;
fixed.value = offset > rootTop.value && targetRect.bottom.value > 0;
transform.value = difference < 0 ? difference : 0;
} else fixed.value = offset > rootTop.value;
else if (target) {
const difference = windowHeight.value - targetRect.top.value - rootHeightOffset;
fixed.value = windowHeight.value - offset < rootBottom.value && windowHeight.value > targetRect.top.value;
transform.value = difference < 0 ? -difference : 0;
} else fixed.value = windowHeight.value - offset < rootBottom.value;
};
const updateRootRect = async () => {
if (!fixed.value) {
updateRoot();
return;
}
fixed.value = false;
await (0, vue.nextTick)();
updateRoot();
fixed.value = true;
};
const handleScroll = async () => {
updateRoot();
await (0, vue.nextTick)();
emit("scroll", {
scrollTop: scrollTop.value,
fixed: fixed.value
});
};
(0, vue.watch)(fixed, (val) => emit(CHANGE_EVENT, val));
(0, vue.onMounted)(() => {
if (props.target) {
target.value = document.querySelector(props.target) ?? void 0;
if (!target.value) throwError(COMPONENT_NAME$22, `Target does not exist: ${props.target}`);
} else target.value = document.documentElement;
scrollContainer.value = getScrollContainer(root.value, true);
updateRoot();
});
(0, vue.onActivated)(() => {
(0, vue.nextTick)(updateRootRect);
});
(0, vue.onDeactivated)(() => {
fixed.value = false;
});
useEventListener(scrollContainer, "scroll", handleScroll);
(0, vue.watchEffect)(update);
__expose({
update,
updateRoot: updateRootRect
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "root",
ref: root,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
style: (0, vue.normalizeStyle)(rootStyle.value)
}, [(0, vue.createVNode)((0, vue.unref)(ElTeleport), {
disabled: teleportDisabled.value,
to: __props.appendTo
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)({ [(0, vue.unref)(ns).m("fixed")]: fixed.value }),
style: (0, vue.normalizeStyle)(affixStyle.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6)]),
_: 3
}, 8, ["disabled", "to"])], 6);
};
}
});
//#endregion
//#region ../../packages/components/affix/src/affix.vue
var affix_default = affix_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/affix/index.ts
const ElAffix = withInstall(affix_default);
//#endregion
//#region ../../packages/components/alert/src/alert.ts
const alertEffects = ["light", "dark"];
/**
* @deprecated Removed after 3.0.0, Use `AlertProps` instead.
*/
const alertProps = buildProps({
title: {
type: String,
default: ""
},
description: {
type: String,
default: ""
},
type: {
type: String,
values: keysOf(TypeComponentsMap),
default: "info"
},
closable: {
type: Boolean,
default: true
},
closeText: {
type: String,
default: ""
},
showIcon: Boolean,
center: Boolean,
effect: {
type: String,
values: alertEffects,
default: "light"
}
});
const alertEmits = { close: (evt) => evt instanceof MouseEvent };
//#endregion
//#region ../../packages/components/icon/src/icon.ts
/**
* @deprecated Removed after 3.0.0, Use `IconProps` instead.
*/
const iconProps = buildProps({
size: { type: definePropType([Number, String]) },
color: { type: String }
});
//#endregion
//#region ../../packages/components/icon/src/icon.vue?vue&type=script&setup=true&lang.ts
var icon_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElIcon",
inheritAttrs: false,
__name: "icon",
props: iconProps,
setup(__props) {
const props = __props;
const ns = useNamespace("icon");
const style = (0, vue.computed)(() => {
const { size, color } = props;
const fontSize = addUnit(size);
if (!fontSize && !color) return {};
return {
fontSize,
"--color": color
};
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("i", (0, vue.mergeProps)({
class: (0, vue.unref)(ns).b(),
style: style.value
}, _ctx.$attrs), [(0, vue.renderSlot)(_ctx.$slots, "default")], 16);
};
}
});
//#endregion
//#region ../../packages/components/icon/src/icon.vue
var icon_default = icon_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/icon/index.ts
const ElIcon = withInstall(icon_default);
//#endregion
//#region ../../packages/components/alert/src/alert.vue?vue&type=script&setup=true&lang.ts
var alert_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAlert",
__name: "alert",
props: alertProps,
emits: alertEmits,
setup(__props, { emit: __emit }) {
const { Close } = TypeComponents;
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
const ns = useNamespace("alert");
const visible = (0, vue.ref)(true);
const iconComponent = (0, vue.computed)(() => TypeComponentsMap[props.type]);
const hasDesc = (0, vue.computed)(() => {
if (props.description) return true;
const slotContent = slots.default?.();
if (!slotContent) return false;
return flattedChildren(slotContent).some((child) => !isComment(child));
});
const close = (evt) => {
visible.value = false;
emit("close", evt);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
name: (0, vue.unref)(ns).b("fade"),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).m(__props.type),
(0, vue.unref)(ns).is("center", __props.center),
(0, vue.unref)(ns).is(__props.effect)
]),
role: "alert"
}, [__props.showIcon && (_ctx.$slots.icon || iconComponent.value) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).is("big", hasDesc.value)])
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))])]),
_: 3
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [
__props.title || _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("title"), { "with-description": hasDesc.value }])
}, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
hasDesc.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("description"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.description), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
__props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [__props.closeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("close-btn"), (0, vue.unref)(ns).is("customed")]),
onClick: close
}, (0, vue.toDisplayString)(__props.closeText), 3)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close-btn")),
onClick: close
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(Close))]),
_: 1
}, 8, ["class"]))], 64)) : (0, vue.createCommentVNode)("v-if", true)
], 2)], 2), [[vue.vShow, visible.value]])]),
_: 3
}, 8, ["name"]);
};
}
});
//#endregion
//#region ../../packages/components/alert/src/alert.vue
var alert_default = alert_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/alert/index.ts
const ElAlert = withInstall(alert_default);
//#endregion
//#region ../../packages/components/popper/src/popper.ts
const Effect = {
LIGHT: "light",
DARK: "dark"
};
const roleTypes = [
"dialog",
"grid",
"group",
"listbox",
"menu",
"navigation",
"tooltip",
"tree"
];
/**
* @deprecated Removed after 3.0.0, Use `PopperProps` instead.
*/
const popperProps = buildProps({ role: {
type: String,
values: roleTypes,
default: "tooltip"
} });
/** @deprecated use `popperProps` instead, and it will be deprecated in the next major version */
const usePopperProps = popperProps;
//#endregion
//#region ../../packages/components/popper/src/constants.ts
const POPPER_INJECTION_KEY = Symbol("popper");
const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent");
//#endregion
//#region ../../packages/components/popper/src/popper.vue?vue&type=script&setup=true&lang.ts
var popper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopper",
inheritAttrs: false,
__name: "popper",
props: popperProps,
setup(__props, { expose: __expose }) {
const props = __props;
const popperProvides = {
triggerRef: (0, vue.ref)(),
popperInstanceRef: (0, vue.ref)(),
contentRef: (0, vue.ref)(),
referenceRef: (0, vue.ref)(),
role: (0, vue.computed)(() => props.role)
};
__expose(popperProvides);
(0, vue.provide)(POPPER_INJECTION_KEY, popperProvides);
return (_ctx, _cache) => {
return (0, vue.renderSlot)(_ctx.$slots, "default");
};
}
});
//#endregion
//#region ../../packages/components/popper/src/popper.vue
var popper_default = popper_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/popper/src/arrow.vue?vue&type=script&setup=true&lang.ts
var arrow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopperArrow",
inheritAttrs: false,
__name: "arrow",
setup(__props, { expose: __expose }) {
const ns = useNamespace("popper");
const { arrowRef, arrowStyle } = (0, vue.inject)(POPPER_CONTENT_INJECTION_KEY, void 0);
(0, vue.onBeforeUnmount)(() => {
arrowRef.value = void 0;
});
__expose({ arrowRef });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
ref_key: "arrowRef",
ref: arrowRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow")),
style: (0, vue.normalizeStyle)((0, vue.unref)(arrowStyle)),
"data-popper-arrow": ""
}, null, 6);
};
}
});
//#endregion
//#region ../../packages/components/popper/src/arrow.vue
var arrow_default = arrow_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/popper/src/trigger.ts
/**
* @deprecated Removed after 3.0.0, Use `PopperTriggerProps` instead.
*/
const popperTriggerProps = buildProps({
virtualRef: { type: definePropType(Object) },
virtualTriggering: Boolean,
onMouseenter: { type: definePropType(Function) },
onMouseleave: { type: definePropType(Function) },
onClick: { type: definePropType(Function) },
onKeydown: { type: definePropType(Function) },
onFocus: { type: definePropType(Function) },
onBlur: { type: definePropType(Function) },
onContextmenu: { type: definePropType(Function) },
id: String,
open: Boolean
});
/** @deprecated use `popperTriggerProps` instead, and it will be deprecated in the next major version */
const usePopperTriggerProps = popperTriggerProps;
//#endregion
//#region ../../packages/components/slot/src/only-child.tsx
const NAME = "ElOnlyChild";
const OnlyChild = /* @__PURE__ */ (0, vue.defineComponent)({
name: NAME,
setup(_, { slots, attrs }) {
const forwardRefDirective = useForwardRefDirective((0, vue.inject)(FORWARD_REF_INJECTION_KEY)?.setForwardRef ?? NOOP);
return () => {
const defaultSlot = slots.default?.(attrs);
if (!defaultSlot) return null;
const [firstLegitNode, length] = findFirstLegitChild(defaultSlot);
if (!firstLegitNode) {
/* @__PURE__ */ debugWarn(NAME, "no valid child node found");
return null;
}
if (length > 1) /* @__PURE__ */ debugWarn(NAME, "requires exact only one valid child.");
return (0, vue.withDirectives)((0, vue.cloneVNode)(firstLegitNode, attrs), [[forwardRefDirective]]);
};
}
});
function findFirstLegitChild(node) {
if (!node) return [null, 0];
const children = node;
const len = children.filter((c) => c.type !== vue.Comment).length;
for (const child of children) {
/**
* when user uses h(Fragment, [text]) to render plain string,
* this switch case just cannot handle, when the value is primitives
* we should just return the wrapped string
*/
if (isObject$1(child)) switch (child.type) {
case vue.Comment: continue;
case vue.Text:
case "svg": return [wrapTextContent(child), len];
case vue.Fragment: return findFirstLegitChild(child.children);
default: return [child, len];
}
return [wrapTextContent(child), len];
}
return [null, 0];
}
function wrapTextContent(s) {
const ns = useNamespace("only-child");
return (0, vue.createVNode)("span", { "class": ns.e("content") }, [s]);
}
//#endregion
//#region ../../packages/components/popper/src/trigger.vue?vue&type=script&setup=true&lang.ts
var trigger_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopperTrigger",
inheritAttrs: false,
__name: "trigger",
props: popperTriggerProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { role, triggerRef } = (0, vue.inject)(POPPER_INJECTION_KEY, void 0);
useForwardRef(triggerRef);
const ariaControls = (0, vue.computed)(() => {
return ariaHaspopup.value ? props.id : void 0;
});
const ariaDescribedby = (0, vue.computed)(() => {
if (role && role.value === "tooltip") return props.open && props.id ? props.id : void 0;
});
const ariaHaspopup = (0, vue.computed)(() => {
if (role && role.value !== "tooltip") return role.value;
});
const ariaExpanded = (0, vue.computed)(() => {
return ariaHaspopup.value ? `${props.open}` : void 0;
});
let virtualTriggerAriaStopWatch = void 0;
const TRIGGER_ELE_EVENTS = [
"onMouseenter",
"onMouseleave",
"onClick",
"onKeydown",
"onFocus",
"onBlur",
"onContextmenu"
];
(0, vue.onMounted)(() => {
(0, vue.watch)(() => props.virtualRef, (virtualEl) => {
if (virtualEl) triggerRef.value = unrefElement(virtualEl);
}, { immediate: true });
(0, vue.watch)(triggerRef, (el, prevEl) => {
virtualTriggerAriaStopWatch?.();
virtualTriggerAriaStopWatch = void 0;
if (isElement$1(prevEl)) TRIGGER_ELE_EVENTS.forEach((eventName) => {
const handler = props[eventName];
if (handler) prevEl.removeEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
});
if (isElement$1(el)) {
TRIGGER_ELE_EVENTS.forEach((eventName) => {
const handler = props[eventName];
if (handler) el.addEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
});
if (isFocusable(el)) virtualTriggerAriaStopWatch = (0, vue.watch)([
ariaControls,
ariaDescribedby,
ariaHaspopup,
ariaExpanded
], (watches) => {
[
"aria-controls",
"aria-describedby",
"aria-haspopup",
"aria-expanded"
].forEach((key, idx) => {
isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);
});
}, { immediate: true });
}
if (isElement$1(prevEl) && isFocusable(prevEl)) [
"aria-controls",
"aria-describedby",
"aria-haspopup",
"aria-expanded"
].forEach((key) => prevEl.removeAttribute(key));
}, { immediate: true });
});
(0, vue.onBeforeUnmount)(() => {
virtualTriggerAriaStopWatch?.();
virtualTriggerAriaStopWatch = void 0;
if (triggerRef.value && isElement$1(triggerRef.value)) {
const el = triggerRef.value;
TRIGGER_ELE_EVENTS.forEach((eventName) => {
const handler = props[eventName];
if (handler) el.removeEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
});
triggerRef.value = void 0;
}
});
__expose({ triggerRef });
return (_ctx, _cache) => {
return !__props.virtualTriggering ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(OnlyChild), (0, vue.mergeProps)({ key: 0 }, _ctx.$attrs, {
"aria-controls": ariaControls.value,
"aria-describedby": ariaDescribedby.value,
"aria-expanded": ariaExpanded.value,
"aria-haspopup": ariaHaspopup.value
}), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16, [
"aria-controls",
"aria-describedby",
"aria-expanded",
"aria-haspopup"
])) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/popper/src/trigger.vue
var trigger_default = trigger_vue_vue_type_script_setup_true_lang_default$1;
//#endregion
//#region ../../packages/components/popper/src/arrow.ts
/**
* @deprecated Removed after 3.0.0, Use `PopperArrowProps` instead.
*/
const popperArrowProps = buildProps({ arrowOffset: {
type: Number,
default: 5
} });
const popperArrowPropsDefaults = { arrowOffset: 5 };
/** @deprecated use `popperArrowProps` instead, and it will be deprecated in the next major version */
const usePopperArrowProps = popperArrowProps;
//#endregion
//#region ../../packages/components/popper/src/content.ts
const POSITIONING_STRATEGIES = ["fixed", "absolute"];
/**
* @deprecated Removed after 3.0.0, Use `PopperCoreConfigProps` instead.
*/
const popperCoreConfigProps = buildProps({
boundariesPadding: {
type: Number,
default: 0
},
fallbackPlacements: {
type: definePropType(Array),
default: void 0
},
gpuAcceleration: {
type: Boolean,
default: true
},
offset: {
type: Number,
default: 12
},
placement: {
type: String,
values: Ee,
default: "bottom"
},
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
strategy: {
type: String,
values: POSITIONING_STRATEGIES,
default: "absolute"
}
});
/**
* @deprecated Removed after 3.0.0, Use `PopperContentProps` instead.
*/
const popperContentProps = buildProps({
...popperCoreConfigProps,
...popperArrowProps,
id: String,
style: { type: definePropType([
String,
Array,
Object
]) },
className: { type: definePropType([
String,
Array,
Object
]) },
effect: {
type: definePropType(String),
default: "dark"
},
visible: Boolean,
enterable: {
type: Boolean,
default: true
},
pure: Boolean,
focusOnShow: Boolean,
trapping: Boolean,
popperClass: { type: definePropType([
String,
Array,
Object
]) },
popperStyle: { type: definePropType([
String,
Array,
Object
]) },
referenceEl: { type: definePropType(Object) },
triggerTargetEl: { type: definePropType(Object) },
stopPopperMouseEvent: {
type: Boolean,
default: true
},
virtualTriggering: Boolean,
zIndex: Number,
...useAriaProps(["ariaLabel"]),
loop: Boolean
});
const popperCoreConfigPropsDefaults = {
boundariesPadding: 0,
gpuAcceleration: true,
offset: 12,
placement: "bottom",
popperOptions: () => ({}),
strategy: "absolute"
};
const popperContentPropsDefaults = {
...popperCoreConfigPropsDefaults,
...popperArrowPropsDefaults,
effect: "dark",
enterable: true,
stopPopperMouseEvent: true,
visible: false,
pure: false,
focusOnShow: false,
trapping: false,
virtualTriggering: false,
loop: false,
style: void 0,
popperStyle: void 0
};
const popperContentEmits = {
mouseenter: (evt) => evt instanceof MouseEvent,
mouseleave: (evt) => evt instanceof MouseEvent,
focus: () => true,
blur: () => true,
close: () => true
};
/** @deprecated use `popperCoreConfigProps` instead, and it will be deprecated in the next major version */
const usePopperCoreConfigProps = popperCoreConfigProps;
/** @deprecated use `popperContentProps` instead, and it will be deprecated in the next major version */
const usePopperContentProps = popperContentProps;
/** @deprecated use `popperContentEmits` instead, and it will be deprecated in the next major version */
const usePopperContentEmits = popperContentEmits;
//#endregion
//#region ../../packages/components/focus-trap/src/tokens.ts
const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped";
const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released";
const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented";
const FOCUS_AFTER_TRAPPED_OPTS = {
cancelable: true,
bubbles: false
};
const FOCUSOUT_PREVENTED_OPTS = {
cancelable: true,
bubbles: false
};
const ON_TRAP_FOCUS_EVT = "focusAfterTrapped";
const ON_RELEASE_FOCUS_EVT = "focusAfterReleased";
const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap");
//#endregion
//#region ../../packages/components/focus-trap/src/utils.ts
const focusReason = (0, vue.ref)();
const lastUserFocusTimestamp = (0, vue.ref)(0);
const lastAutomatedFocusTimestamp = (0, vue.ref)(0);
let focusReasonUserCount = 0;
const obtainAllFocusableElements = (element) => {
const nodes = [];
const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, { acceptNode: (node) => {
const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;
return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
} });
while (walker.nextNode()) nodes.push(walker.currentNode);
return nodes;
};
const getVisibleElement = (elements, container) => {
for (const element of elements) if (!isHidden(element, container)) return element;
};
const isHidden = (element, container) => {
if (getComputedStyle(element).visibility === "hidden") return true;
while (element) {
if (container && element === container) return false;
if (getComputedStyle(element).display === "none") return true;
element = element.parentElement;
}
return false;
};
const getEdges = (container) => {
const focusable = obtainAllFocusableElements(container);
return [getVisibleElement(focusable, container), getVisibleElement(focusable.reverse(), container)];
};
const isSelectable = (element) => {
return element instanceof HTMLInputElement && "select" in element;
};
const tryFocus = (element, shouldSelect) => {
if (element) {
const prevFocusedElement = document.activeElement;
focusElement(element, { preventScroll: true });
lastAutomatedFocusTimestamp.value = window.performance.now();
if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) element.select();
}
};
function removeFromStack(list, item) {
const copy = [...list];
const idx = list.indexOf(item);
if (idx !== -1) copy.splice(idx, 1);
return copy;
}
const createFocusableStack = () => {
let stack = [];
const push = (layer) => {
const currentLayer = stack[0];
if (currentLayer && layer !== currentLayer) currentLayer.pause();
stack = removeFromStack(stack, layer);
stack.unshift(layer);
};
const remove = (layer) => {
stack = removeFromStack(stack, layer);
stack[0]?.resume?.();
};
return {
push,
remove
};
};
const focusFirstDescendant = (elements, shouldSelect = false) => {
const prevFocusedElement = document.activeElement;
for (const element of elements) {
tryFocus(element, shouldSelect);
if (document.activeElement !== prevFocusedElement) return;
}
};
const focusableStack = createFocusableStack();
const isFocusCausedByUserEvent = () => {
return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value;
};
const notifyFocusReasonPointer = () => {
focusReason.value = "pointer";
lastUserFocusTimestamp.value = window.performance.now();
};
const notifyFocusReasonKeydown = () => {
focusReason.value = "keyboard";
lastUserFocusTimestamp.value = window.performance.now();
};
const useFocusReason = () => {
(0, vue.onMounted)(() => {
if (focusReasonUserCount === 0) {
document.addEventListener("mousedown", notifyFocusReasonPointer);
document.addEventListener("touchstart", notifyFocusReasonPointer);
document.addEventListener("keydown", notifyFocusReasonKeydown);
}
focusReasonUserCount++;
});
(0, vue.onBeforeUnmount)(() => {
focusReasonUserCount--;
if (focusReasonUserCount <= 0) {
document.removeEventListener("mousedown", notifyFocusReasonPointer);
document.removeEventListener("touchstart", notifyFocusReasonPointer);
document.removeEventListener("keydown", notifyFocusReasonKeydown);
}
});
return {
focusReason,
lastUserFocusTimestamp,
lastAutomatedFocusTimestamp
};
};
const createFocusOutPreventedEvent = (detail) => {
return new CustomEvent(FOCUSOUT_PREVENTED, {
...FOCUSOUT_PREVENTED_OPTS,
detail
});
};
//#endregion
//#region ../../packages/components/focus-trap/src/focus-trap.vue?vue&type=script&lang.ts
var focus_trap_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElFocusTrap",
inheritAttrs: false,
props: {
loop: Boolean,
trapped: Boolean,
focusTrapEl: Object,
focusStartEl: {
type: [Object, String],
default: "first"
}
},
emits: [
ON_TRAP_FOCUS_EVT,
ON_RELEASE_FOCUS_EVT,
"focusin",
"focusout",
"focusout-prevented",
"release-requested"
],
setup(props, { emit }) {
const forwardRef = (0, vue.ref)();
let lastFocusBeforeTrapped;
let lastFocusAfterTrapped;
const { focusReason } = useFocusReason();
useEscapeKeydown((event) => {
if (props.trapped && !focusLayer.paused) emit("release-requested", event);
});
const focusLayer = {
paused: false,
pause() {
this.paused = true;
},
resume() {
this.paused = false;
}
};
const onKeydown = (e) => {
if (!props.loop && !props.trapped) return;
if (focusLayer.paused) return;
const { altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;
const { loop } = props;
const isTabbing = getEventCode(e) === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;
const currentFocusingEl = document.activeElement;
if (isTabbing && currentFocusingEl) {
const container = currentTarget;
const [first, last] = getEdges(container);
if (!(first && last)) {
if (currentFocusingEl === container) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) e.preventDefault();
}
} else if (!shiftKey && currentFocusingEl === last) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
e.preventDefault();
if (loop) tryFocus(first, true);
}
} else if (shiftKey && [first, container].includes(currentFocusingEl)) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
e.preventDefault();
if (loop) tryFocus(last, true);
}
}
}
};
(0, vue.provide)(FOCUS_TRAP_INJECTION_KEY, {
focusTrapRef: forwardRef,
onKeydown
});
(0, vue.watch)(() => props.focusTrapEl, (focusTrapEl) => {
if (focusTrapEl) forwardRef.value = focusTrapEl;
}, { immediate: true });
(0, vue.watch)([forwardRef], ([forwardRef], [oldForwardRef]) => {
if (forwardRef) {
forwardRef.addEventListener("keydown", onKeydown);
forwardRef.addEventListener("focusin", onFocusIn);
forwardRef.addEventListener("focusout", onFocusOut);
}
if (oldForwardRef) {
oldForwardRef.removeEventListener("keydown", onKeydown);
oldForwardRef.removeEventListener("focusin", onFocusIn);
oldForwardRef.removeEventListener("focusout", onFocusOut);
}
});
const trapOnFocus = (e) => {
emit(ON_TRAP_FOCUS_EVT, e);
};
const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e);
const onFocusIn = (e) => {
const trapContainer = (0, vue.unref)(forwardRef);
if (!trapContainer) return;
const target = e.target;
const relatedTarget = e.relatedTarget;
const isFocusedInTrap = target && trapContainer.contains(target);
if (!props.trapped) {
if (!(relatedTarget && trapContainer.contains(relatedTarget))) lastFocusBeforeTrapped = relatedTarget;
}
if (isFocusedInTrap) emit("focusin", e);
if (focusLayer.paused) return;
if (props.trapped) if (isFocusedInTrap) lastFocusAfterTrapped = target;
else tryFocus(lastFocusAfterTrapped, true);
};
const onFocusOut = (e) => {
const trapContainer = (0, vue.unref)(forwardRef);
if (focusLayer.paused || !trapContainer) return;
if (props.trapped) {
const relatedTarget = e.relatedTarget;
if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) setTimeout(() => {
if (!focusLayer.paused && props.trapped) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) tryFocus(lastFocusAfterTrapped, true);
}
}, 0);
} else {
const target = e.target;
if (!(target && trapContainer.contains(target))) emit("focusout", e);
}
};
async function startTrap() {
await (0, vue.nextTick)();
const trapContainer = (0, vue.unref)(forwardRef);
if (trapContainer) {
focusableStack.push(focusLayer);
const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement;
lastFocusBeforeTrapped = prevFocusedElement;
if (!trapContainer.contains(prevFocusedElement)) {
const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS);
trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
trapContainer.dispatchEvent(focusEvent);
if (!focusEvent.defaultPrevented) (0, vue.nextTick)(() => {
let focusStartEl = props.focusStartEl;
if (!isString(focusStartEl)) {
tryFocus(focusStartEl);
if (document.activeElement !== focusStartEl) focusStartEl = "first";
}
if (focusStartEl === "first") focusFirstDescendant(obtainAllFocusableElements(trapContainer), true);
if (document.activeElement === prevFocusedElement || focusStartEl === "container") tryFocus(trapContainer);
});
}
}
}
function stopTrap() {
const trapContainer = (0, vue.unref)(forwardRef);
if (trapContainer) {
trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {
...FOCUS_AFTER_TRAPPED_OPTS,
detail: { focusReason: focusReason.value }
});
trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
trapContainer.dispatchEvent(releasedEvent);
if (!releasedEvent.defaultPrevented && (focusReason.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) tryFocus(lastFocusBeforeTrapped ?? document.body);
trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
focusableStack.remove(focusLayer);
lastFocusBeforeTrapped = null;
lastFocusAfterTrapped = null;
}
}
(0, vue.onMounted)(() => {
if (props.trapped) startTrap();
(0, vue.watch)(() => props.trapped, (trapped) => {
if (trapped) startTrap();
else stopTrap();
});
});
(0, vue.onBeforeUnmount)(() => {
if (props.trapped) stopTrap();
if (forwardRef.value) {
forwardRef.value.removeEventListener("keydown", onKeydown);
forwardRef.value.removeEventListener("focusin", onFocusIn);
forwardRef.value.removeEventListener("focusout", onFocusOut);
forwardRef.value = void 0;
}
lastFocusBeforeTrapped = null;
lastFocusAfterTrapped = null;
});
return { onKeydown };
}
});
//#endregion
//#region \0plugin-vue:export-helper
var _plugin_vue_export_helper_default = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) target[key] = val;
return target;
};
//#endregion
//#region ../../packages/components/focus-trap/src/focus-trap.vue
function _sfc_render$21(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.renderSlot)(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
}
var focus_trap_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(focus_trap_vue_vue_type_script_lang_default, [["render", _sfc_render$21]]);
//#endregion
//#region ../../packages/components/focus-trap/index.ts
var focus_trap_default = focus_trap_default$1;
//#endregion
//#region ../../packages/components/form/src/form.ts
/**
* @deprecated Removed after 3.0.0, Use `FormMetaProps` instead.
*/
const formMetaProps = buildProps({
size: {
type: String,
values: componentSizes
},
disabled: Boolean
});
/**
* @deprecated Removed after 3.0.0, Use `FormProps` instead.
*/
const formProps = buildProps({
...formMetaProps,
model: Object,
rules: { type: definePropType(Object) },
labelPosition: {
type: String,
values: [
"left",
"right",
"top"
],
default: "right"
},
requireAsteriskPosition: {
type: String,
values: ["left", "right"],
default: "left"
},
labelWidth: {
type: [String, Number],
default: ""
},
labelSuffix: {
type: String,
default: ""
},
inline: Boolean,
inlineMessage: Boolean,
statusIcon: Boolean,
showMessage: {
type: Boolean,
default: true
},
validateOnRuleChange: {
type: Boolean,
default: true
},
hideRequiredAsterisk: Boolean,
scrollToError: Boolean,
scrollIntoViewOptions: {
type: definePropType([Object, Boolean]),
default: true
}
});
const formEmits = { validate: (prop, isValid, message) => (isArray$1(prop) || isString(prop)) && isBoolean(isValid) && isString(message) };
//#endregion
//#region ../../packages/components/form/src/constants.ts
const formContextKey = Symbol("formContextKey");
const formItemContextKey = Symbol("formItemContextKey");
//#endregion
//#region ../../packages/components/form/src/hooks/use-form-common-props.ts
const useFormSize = (fallback, ignore = {}) => {
const emptyRef = (0, vue.ref)(void 0);
const size = ignore.prop ? emptyRef : useProp("size");
const globalConfig = ignore.global ? emptyRef : useGlobalSize();
const form = ignore.form ? { size: void 0 } : (0, vue.inject)(formContextKey, void 0);
const formItem = ignore.formItem ? { size: void 0 } : (0, vue.inject)(formItemContextKey, void 0);
return (0, vue.computed)(() => size.value || (0, vue.unref)(fallback) || formItem?.size || form?.size || globalConfig.value || "");
};
const useFormDisabled = (fallback) => {
const disabled = useProp("disabled");
const form = (0, vue.inject)(formContextKey, void 0);
return (0, vue.computed)(() => {
return disabled.value ?? (0, vue.unref)(fallback) ?? form?.disabled ?? false;
});
};
const useSize = useFormSize;
const useDisabled = useFormDisabled;
//#endregion
//#region ../../packages/components/form/src/hooks/use-form-item.ts
const useFormItem = () => {
return {
form: (0, vue.inject)(formContextKey, void 0),
formItem: (0, vue.inject)(formItemContextKey, void 0)
};
};
const useFormItemInputId = (props, { formItemContext, disableIdGeneration, disableIdManagement }) => {
if (!disableIdGeneration) disableIdGeneration = (0, vue.ref)(false);
if (!disableIdManagement) disableIdManagement = (0, vue.ref)(false);
const instance = (0, vue.getCurrentInstance)();
const inLabel = () => {
let parent = instance?.parent;
while (parent) {
if (parent.type.name === "ElFormItem") return false;
if (parent.type.name === "ElLabelWrap") return true;
parent = parent.parent;
}
return false;
};
const inputId = (0, vue.ref)();
let idUnwatch = void 0;
const isLabeledByFormItem = (0, vue.computed)(() => {
return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && formItemContext.inputIds?.length <= 1);
});
(0, vue.onMounted)(() => {
idUnwatch = (0, vue.watch)([(0, vue.toRef)(props, "id"), disableIdGeneration], ([id, disableIdGeneration]) => {
const newId = id ?? (!disableIdGeneration ? useId().value : void 0);
if (newId !== inputId.value) {
if (formItemContext?.removeInputId && !inLabel()) {
inputId.value && formItemContext.removeInputId(inputId.value);
if (!disableIdManagement?.value && !disableIdGeneration && newId) formItemContext.addInputId(newId);
}
inputId.value = newId;
}
}, { immediate: true });
});
(0, vue.onUnmounted)(() => {
idUnwatch && idUnwatch();
if (formItemContext?.removeInputId) inputId.value && formItemContext.removeInputId(inputId.value);
});
return {
isLabeledByFormItem,
inputId
};
};
//#endregion
//#region ../../packages/components/form/src/utils.ts
const SCOPE$7 = "ElForm";
function useFormLabelWidth() {
const potentialLabelWidthArr = (0, vue.ref)([]);
const autoLabelWidth = (0, vue.computed)(() => {
if (!potentialLabelWidthArr.value.length) return "0";
const max = Math.max(...potentialLabelWidthArr.value);
return max ? `${max}px` : "";
});
function getLabelWidthIndex(width) {
const index = potentialLabelWidthArr.value.indexOf(width);
if (index === -1 && autoLabelWidth.value === "0") /* @__PURE__ */ debugWarn(SCOPE$7, `unexpected width ${width}`);
return index;
}
function registerLabelWidth(val, oldVal) {
if (val && oldVal) {
const index = getLabelWidthIndex(oldVal);
potentialLabelWidthArr.value.splice(index, 1, val);
} else if (val) potentialLabelWidthArr.value.push(val);
}
function deregisterLabelWidth(val) {
const index = getLabelWidthIndex(val);
if (index > -1) potentialLabelWidthArr.value.splice(index, 1);
}
return {
autoLabelWidth,
registerLabelWidth,
deregisterLabelWidth
};
}
const filterFields = (fields, props) => {
const normalized = castArray$1(props).map((prop) => isArray$1(prop) ? prop.join(".") : prop);
return normalized.length > 0 ? fields.filter((field) => field.propString && normalized.includes(field.propString)) : fields;
};
//#endregion
//#region ../../packages/components/form/src/form.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$21 = "ElForm";
var form_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$21,
__name: "form",
props: formProps,
emits: formEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const formRef = (0, vue.ref)();
const fields = (0, vue.reactive)([]);
const initialValues = /* @__PURE__ */ new Map();
const formSize = useFormSize();
const ns = useNamespace("form");
const formClasses = (0, vue.computed)(() => {
const { labelPosition, inline } = props;
return [
ns.b(),
ns.m(formSize.value || "default"),
{
[ns.m(`label-${labelPosition}`)]: labelPosition,
[ns.m("inline")]: inline
}
];
});
const getField = (prop) => {
return filterFields(fields, [prop])[0];
};
const addField = (field) => {
if (!fields.includes(field)) fields.push(field);
if (field.propString) if (initialValues.has(field.propString)) field.setInitialValue(initialValues.get(field.propString));
else initialValues.set(field.propString, cloneDeep(field.fieldValue));
};
const removeField = (field, oldPropString) => {
if (oldPropString) {
initialValues.delete(oldPropString);
return;
}
const idx = fields.indexOf(field);
if (idx > -1) {
fields.splice(idx, 1);
if (field.propString) initialValues.set(field.propString, cloneDeep(field.getInitialValue()));
}
};
const setInitialValues = (initModel) => {
if (!props.model) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for setInitialValues to work.");
return;
}
if (!initModel) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "initModel is required for setInitialValues to work.");
return;
}
for (const key of initialValues.keys()) initialValues.set(key, cloneDeep(getProp(initModel, key).value));
fields.forEach((field) => {
if (field.prop) field.setInitialValue(getProp(initModel, field.prop).value);
});
};
const resetFields = (properties = []) => {
if (!props.model) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for resetFields to work.");
return;
}
filterFields(fields, properties).forEach((field) => field.resetField());
const activePropStrings = new Set(fields.map((f) => f.propString).filter(Boolean));
const propsToCheck = properties.length > 0 ? castArray$1(properties).map((p) => isArray$1(p) ? p.join(".") : p) : [...initialValues.keys()];
for (const propString of propsToCheck) if (!activePropStrings.has(propString) && initialValues.has(propString)) getProp(props.model, propString).value = cloneDeep(initialValues.get(propString));
};
const clearValidate = (props = []) => {
filterFields(fields, props).forEach((field) => field.clearValidate());
};
const isValidatable = (0, vue.computed)(() => {
const hasModel = !!props.model;
if (!hasModel) /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for validate to work.");
return hasModel;
});
const obtainValidateFields = (props) => {
if (fields.length === 0) return [];
const filteredFields = filterFields(fields, props);
if (!filteredFields.length) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "please pass correct props!");
return [];
}
return filteredFields;
};
const validate = async (callback) => validateField(void 0, callback);
const doValidateField = async (props = []) => {
if (!isValidatable.value) return false;
const fields = obtainValidateFields(props);
if (fields.length === 0) return true;
let validationErrors = {};
for (const field of fields) try {
await field.validate("");
if (field.validateState === "error" && !field.error) field.resetField();
} catch (fields) {
validationErrors = {
...validationErrors,
...fields
};
}
if (Object.keys(validationErrors).length === 0) return true;
return Promise.reject(validationErrors);
};
const validateField = async (modelProps = [], callback) => {
let result = false;
const shouldThrow = !isFunction$1(callback);
try {
result = await doValidateField(modelProps);
if (result === true) await callback?.(result);
return result;
} catch (e) {
if (e instanceof Error) throw e;
const invalidFields = e;
if (props.scrollToError) {
if (formRef.value) formRef.value.querySelector(`.${ns.b()}-item.is-error`)?.scrollIntoView(props.scrollIntoViewOptions);
}
!result && await callback?.(false, invalidFields);
return shouldThrow && Promise.reject(invalidFields);
}
};
const scrollToField = (prop) => {
const field = getField(prop);
if (field) field.$el?.scrollIntoView(props.scrollIntoViewOptions);
};
(0, vue.watch)(() => props.rules, () => {
if (props.validateOnRuleChange) validate().catch((err) => /* @__PURE__ */ debugWarn(err));
}, {
deep: true,
flush: "post"
});
(0, vue.provide)(formContextKey, (0, vue.reactive)({
...(0, vue.toRefs)(props),
emit,
resetFields,
clearValidate,
validateField,
getField,
addField,
removeField,
setInitialValues,
...useFormLabelWidth()
}));
__expose({
validate,
validateField,
resetFields,
clearValidate,
scrollToField,
getField,
fields,
setInitialValues
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("form", {
ref_key: "formRef",
ref: formRef,
class: (0, vue.normalizeClass)(formClasses.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/form/src/form.vue
var form_default = form_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/form/src/form-item.ts
const formItemValidateStates = [
"",
"error",
"validating",
"success"
];
/**
* @deprecated Removed after 3.0.0, Use `FormItemProps` instead.
*/
const formItemProps = buildProps({
label: String,
labelWidth: { type: [String, Number] },
labelPosition: {
type: String,
values: [
"left",
"right",
"top",
""
],
default: ""
},
prop: { type: definePropType([String, Array]) },
required: {
type: Boolean,
default: void 0
},
rules: { type: definePropType([Object, Array]) },
error: String,
validateStatus: {
type: String,
values: formItemValidateStates
},
for: String,
inlineMessage: {
type: Boolean,
default: void 0
},
showMessage: {
type: Boolean,
default: true
},
size: {
type: String,
values: componentSizes
}
});
//#endregion
//#region ../../node_modules/.pnpm/async-validator@4.2.5_patch_hash=cc6d77b35ed2a1683012935ca9ed998d418912785fcf78c6497d3268ac596d23/node_modules/async-validator/dist-web/index.js
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
return true;
} catch (e) {
return false;
}
}
function _construct(Parent, args, Class) {
if (_isNativeReflectConstruct()) _construct = Reflect.construct.bind();
else _construct = function _construct(Parent, args, Class) {
var a = [null];
a.push.apply(a, args);
var instance = new (Function.bind.apply(Parent, a))();
if (Class) _setPrototypeOf(instance, Class.prototype);
return instance;
};
return _construct.apply(null, arguments);
}
function _isNativeFunction(fn) {
return Function.toString.call(fn).indexOf("[native code]") !== -1;
}
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0;
_wrapNativeSuper = function _wrapNativeSuper(Class) {
if (Class === null || !_isNativeFunction(Class)) return Class;
if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function");
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
function Wrapper() {
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
}
Wrapper.prototype = Object.create(Class.prototype, { constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true
} });
return _setPrototypeOf(Wrapper, Class);
};
return _wrapNativeSuper(Class);
}
var formatRegExp = /%[sdj%]/g;
var warning = function warning() {};
if (typeof process !== "undefined" && process.env && false);
function convertFieldsError(errors) {
if (!errors || !errors.length) return null;
var fields = {};
errors.forEach(function(error) {
var field = error.field;
fields[field] = fields[field] || [];
fields[field].push(error);
});
return fields;
}
function format(template) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
var i = 0;
var len = args.length;
if (typeof template === "function") return template.apply(null, args);
if (typeof template === "string") return template.replace(formatRegExp, function(x) {
if (x === "%%") return "%";
if (i >= len) return x;
switch (x) {
case "%s": return String(args[i++]);
case "%d": return Number(args[i++]);
case "%j":
try {
return JSON.stringify(args[i++]);
} catch (_) {
return "[Circular]";
}
break;
default: return x;
}
});
return template;
}
function isNativeStringType(type) {
return type === "string" || type === "url" || type === "hex" || type === "email" || type === "date" || type === "pattern";
}
function isEmptyValue(value, type) {
if (value === void 0 || value === null) return true;
if (type === "array" && Array.isArray(value) && !value.length) return true;
if (isNativeStringType(type) && typeof value === "string" && !value) return true;
return false;
}
function asyncParallelArray(arr, func, callback) {
var results = [];
var total = 0;
var arrLength = arr.length;
function count(errors) {
results.push.apply(results, errors || []);
total++;
if (total === arrLength) callback(results);
}
arr.forEach(function(a) {
func(a, count);
});
}
function asyncSerialArray(arr, func, callback) {
var index = 0;
var arrLength = arr.length;
function next(errors) {
if (errors && errors.length) {
callback(errors);
return;
}
var original = index;
index = index + 1;
if (original < arrLength) func(arr[original], next);
else callback([]);
}
next([]);
}
function flattenObjArr(objArr) {
var ret = [];
Object.keys(objArr).forEach(function(k) {
ret.push.apply(ret, objArr[k] || []);
});
return ret;
}
var AsyncValidationError = /* @__PURE__ */ function(_Error) {
_inheritsLoose(AsyncValidationError, _Error);
function AsyncValidationError(errors, fields) {
var _this = _Error.call(this, "Async Validation Error") || this;
_this.errors = errors;
_this.fields = fields;
return _this;
}
return AsyncValidationError;
}(/* @__PURE__ */ _wrapNativeSuper(Error));
function asyncMap(objArr, option, func, callback, source) {
if (option.first) {
var _pending = new Promise(function(resolve, reject) {
asyncSerialArray(flattenObjArr(objArr), func, function next(errors) {
callback(errors);
return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);
});
});
_pending["catch"](function(e) {
return e;
});
return _pending;
}
var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];
var objArrKeys = Object.keys(objArr);
var objArrLength = objArrKeys.length;
var total = 0;
var results = [];
var pending = new Promise(function(resolve, reject) {
var next = function next(errors) {
results.push.apply(results, errors);
total++;
if (total === objArrLength) {
callback(results);
return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);
}
};
if (!objArrKeys.length) {
callback(results);
resolve(source);
}
objArrKeys.forEach(function(key) {
var arr = objArr[key];
if (firstFields.indexOf(key) !== -1) asyncSerialArray(arr, func, next);
else asyncParallelArray(arr, func, next);
});
});
pending["catch"](function(e) {
return e;
});
return pending;
}
function isErrorObj(obj) {
return !!(obj && obj.message !== void 0);
}
function getValue(value, path) {
var v = value;
for (var i = 0; i < path.length; i++) {
if (v == void 0) return v;
v = v[path[i]];
}
return v;
}
function complementError(rule, source) {
return function(oe) {
var fieldValue;
if (rule.fullFields) fieldValue = getValue(source, rule.fullFields);
else fieldValue = source[oe.field || rule.fullField];
if (isErrorObj(oe)) {
oe.field = oe.field || rule.fullField;
oe.fieldValue = fieldValue;
return oe;
}
return {
message: typeof oe === "function" ? oe() : oe,
fieldValue,
field: oe.field || rule.fullField
};
};
}
function deepMerge(target, source) {
if (source) {
for (var s in source) if (source.hasOwnProperty(s)) {
var value = source[s];
if (typeof value === "object" && typeof target[s] === "object") target[s] = _extends({}, target[s], value);
else target[s] = value;
}
}
return target;
}
var required$1 = function required(rule, value, source, errors, options, type) {
if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) errors.push(format(options.messages.required, rule.fullField));
};
/**
* Rule for validating whitespace.
*
* @param rule The validation rule.
* @param value The value of the field on the source object.
* @param source The source object being validated.
* @param errors An array of errors that this rule may add
* validation errors to.
* @param options The validation options.
* @param options.messages The validation messages.
*/
var whitespace = function whitespace(rule, value, source, errors, options) {
if (/^\s+$/.test(value) || value === "") errors.push(format(options.messages.whitespace, rule.fullField));
};
var urlReg;
var getUrlRegex = (function() {
if (urlReg) return urlReg;
var word = "[a-fA-F\\d:]";
var b = function b(options) {
return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : "";
};
var v4 = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}";
var v6seg = "[a-fA-F\\d]{1,4}";
var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm, "").replace(/\n/g, "").trim();
var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)");
var v4exact = new RegExp("^" + v4 + "$");
var v6exact = new RegExp("^" + v6 + "$");
var ip = function ip(options) {
return options && options.exact ? v46Exact : new RegExp("(?:" + b(options) + v4 + b(options) + ")|(?:" + b(options) + v6 + b(options) + ")", "g");
};
ip.v4 = function(options) {
return options && options.exact ? v4exact : new RegExp("" + b(options) + v4 + b(options), "g");
};
ip.v6 = function(options) {
return options && options.exact ? v6exact : new RegExp("" + b(options) + v6 + b(options), "g");
};
var protocol = "(?:(?:[a-z]+:)?//)";
var auth = "(?:\\S+(?::\\S*)?@)?";
var ipv4 = ip.v4().source;
var ipv6 = ip.v6().source;
var regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#][^\\s\"]*)?";
urlReg = new RegExp("(?:^" + regex + "$)", "i");
return urlReg;
});
var pattern$2 = {
email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,
hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
};
var types = {
integer: function integer(value) {
return types.number(value) && parseInt(value, 10) === value;
},
"float": function float(value) {
return types.number(value) && !types.integer(value);
},
array: function array(value) {
return Array.isArray(value);
},
regexp: function regexp(value) {
if (value instanceof RegExp) return true;
try {
return !!new RegExp(value);
} catch (e) {
return false;
}
},
date: function date(value) {
return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function" && !isNaN(value.getTime());
},
number: function number(value) {
if (isNaN(value)) return false;
return typeof value === "number";
},
object: function object(value) {
return typeof value === "object" && !types.array(value);
},
method: function method(value) {
return typeof value === "function";
},
email: function email(value) {
return typeof value === "string" && value.length <= 320 && !!value.match(pattern$2.email);
},
url: function url(value) {
return typeof value === "string" && value.length <= 2048 && !!value.match(getUrlRegex());
},
hex: function hex(value) {
return typeof value === "string" && !!value.match(pattern$2.hex);
}
};
var type$1 = function type(rule, value, source, errors, options) {
if (rule.required && value === void 0) {
required$1(rule, value, source, errors, options);
return;
}
var custom = [
"integer",
"float",
"array",
"regexp",
"object",
"method",
"email",
"number",
"date",
"url",
"hex"
];
var ruleType = rule.type;
if (custom.indexOf(ruleType) > -1) {
if (!types[ruleType](value)) errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
} else if (ruleType && typeof value !== rule.type) errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
};
var range = function range(rule, value, source, errors, options) {
var len = typeof rule.len === "number";
var min = typeof rule.min === "number";
var max = typeof rule.max === "number";
var val = value;
var key = null;
var num = typeof value === "number";
var str = typeof value === "string";
var arr = Array.isArray(value);
if (num) key = "number";
else if (str) key = "string";
else if (arr) key = "array";
if (!key) return false;
if (arr) val = value.length;
if (str) val = value.length;
if (len) {
if (val !== rule.len) errors.push(format(options.messages[key].len, rule.fullField, rule.len));
} else if (min && !max && val < rule.min) errors.push(format(options.messages[key].min, rule.fullField, rule.min));
else if (max && !min && val > rule.max) errors.push(format(options.messages[key].max, rule.fullField, rule.max));
else if (min && max && (val < rule.min || val > rule.max)) errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
};
var ENUM$1 = "enum";
var enumerable$1 = function enumerable(rule, value, source, errors, options) {
rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];
if (rule[ENUM$1].indexOf(value) === -1) errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(", ")));
};
var pattern$1 = function pattern(rule, value, source, errors, options) {
if (rule.pattern) {
if (rule.pattern instanceof RegExp) {
rule.pattern.lastIndex = 0;
if (!rule.pattern.test(value)) errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
} else if (typeof rule.pattern === "string") {
if (!new RegExp(rule.pattern).test(value)) errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
}
}
};
var rules = {
required: required$1,
whitespace,
type: type$1,
range,
"enum": enumerable$1,
pattern: pattern$1
};
var string = function string(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value, "string") && !rule.required) return callback();
rules.required(rule, value, source, errors, options, "string");
if (!isEmptyValue(value, "string")) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
rules.pattern(rule, value, source, errors, options);
if (rule.whitespace === true) rules.whitespace(rule, value, source, errors, options);
}
}
callback(errors);
};
var method = function method(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) rules.type(rule, value, source, errors, options);
}
callback(errors);
};
var number = function number(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (value === "") value = void 0;
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
};
var _boolean = function _boolean(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) rules.type(rule, value, source, errors, options);
}
callback(errors);
};
var regexp = function regexp(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value)) rules.type(rule, value, source, errors, options);
}
callback(errors);
};
var integer = function integer(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
};
var floatFn = function floatFn(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
};
var array = function array(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if ((value === void 0 || value === null) && !rule.required) return callback();
rules.required(rule, value, source, errors, options, "array");
if (value !== void 0 && value !== null) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
};
var object = function object(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) rules.type(rule, value, source, errors, options);
}
callback(errors);
};
var ENUM = "enum";
var enumerable = function enumerable(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (value !== void 0) rules[ENUM](rule, value, source, errors, options);
}
callback(errors);
};
var pattern = function pattern(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value, "string") && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value, "string")) rules.pattern(rule, value, source, errors, options);
}
callback(errors);
};
var date = function date(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value, "date") && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value, "date")) {
var dateObject;
if (value instanceof Date) dateObject = value;
else dateObject = new Date(value);
rules.type(rule, dateObject, source, errors, options);
if (dateObject) rules.range(rule, dateObject.getTime(), source, errors, options);
}
}
callback(errors);
};
var required = function required(rule, value, callback, source, options) {
var errors = [];
var type = Array.isArray(value) ? "array" : typeof value;
rules.required(rule, value, source, errors, options, type);
callback(errors);
};
var type = function type(rule, value, callback, source, options) {
var ruleType = rule.type;
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value, ruleType) && !rule.required) return callback();
rules.required(rule, value, source, errors, options, ruleType);
if (!isEmptyValue(value, ruleType)) rules.type(rule, value, source, errors, options);
}
callback(errors);
};
var any = function any(rule, value, callback, source, options) {
var errors = [];
if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
if (isEmptyValue(value) && !rule.required) return callback();
rules.required(rule, value, source, errors, options);
}
callback(errors);
};
var validators = {
string,
method,
number,
"boolean": _boolean,
regexp,
integer,
"float": floatFn,
array,
object,
"enum": enumerable,
pattern,
date,
url: type,
hex: type,
email: type,
required,
any
};
function newMessages() {
return {
"default": "Validation error on field %s",
required: "%s is required",
"enum": "%s must be one of %s",
whitespace: "%s cannot be empty",
date: {
format: "%s date %s is invalid for format %s",
parse: "%s date could not be parsed, %s is invalid ",
invalid: "%s date %s is invalid"
},
types: {
string: "%s is not a %s",
method: "%s is not a %s (function)",
array: "%s is not an %s",
object: "%s is not an %s",
number: "%s is not a %s",
date: "%s is not a %s",
"boolean": "%s is not a %s",
integer: "%s is not an %s",
"float": "%s is not a %s",
regexp: "%s is not a valid %s",
email: "%s is not a valid %s",
url: "%s is not a valid %s",
hex: "%s is not a valid %s"
},
string: {
len: "%s must be exactly %s characters",
min: "%s must be at least %s characters",
max: "%s cannot be longer than %s characters",
range: "%s must be between %s and %s characters"
},
number: {
len: "%s must equal %s",
min: "%s cannot be less than %s",
max: "%s cannot be greater than %s",
range: "%s must be between %s and %s"
},
array: {
len: "%s must be exactly %s in length",
min: "%s cannot be less than %s in length",
max: "%s cannot be greater than %s in length",
range: "%s must be between %s and %s in length"
},
pattern: { mismatch: "%s value %s does not match pattern %s" },
clone: function clone() {
var cloned = JSON.parse(JSON.stringify(this));
cloned.clone = this.clone;
return cloned;
}
};
}
var messages = newMessages();
/**
* Encapsulates a validation schema.
*
* @param descriptor An object declaring validation rules
* for this schema.
*/
var Schema = /* @__PURE__ */ function() {
function Schema(descriptor) {
this.rules = null;
this._messages = messages;
this.define(descriptor);
}
var _proto = Schema.prototype;
_proto.define = function define(rules) {
var _this = this;
if (!rules) throw new Error("Cannot configure a schema with no rules");
if (typeof rules !== "object" || Array.isArray(rules)) throw new Error("Rules must be an object");
this.rules = {};
Object.keys(rules).forEach(function(name) {
var item = rules[name];
_this.rules[name] = Array.isArray(item) ? item : [item];
});
};
_proto.messages = function messages(_messages) {
if (_messages) this._messages = deepMerge(newMessages(), _messages);
return this._messages;
};
_proto.validate = function validate(source_, o, oc) {
var _this2 = this;
if (o === void 0) o = {};
if (oc === void 0) oc = function oc() {};
var source = source_;
var options = o;
var callback = oc;
if (typeof options === "function") {
callback = options;
options = {};
}
if (!this.rules || Object.keys(this.rules).length === 0) {
if (callback) callback(null, source);
return Promise.resolve(source);
}
function complete(results) {
var errors = [];
var fields = {};
function add(e) {
if (Array.isArray(e)) {
var _errors;
errors = (_errors = errors).concat.apply(_errors, e);
} else errors.push(e);
}
for (var i = 0; i < results.length; i++) add(results[i]);
if (!errors.length) callback(null, source);
else {
fields = convertFieldsError(errors);
callback(errors, fields);
}
}
if (options.messages) {
var messages$1 = this.messages();
if (messages$1 === messages) messages$1 = newMessages();
deepMerge(messages$1, options.messages);
options.messages = messages$1;
} else options.messages = this.messages();
var series = {};
(options.keys || Object.keys(this.rules)).forEach(function(z) {
var arr = _this2.rules[z];
var value = source[z];
arr.forEach(function(r) {
var rule = r;
if (typeof rule.transform === "function") {
if (source === source_) source = _extends({}, source);
value = source[z] = rule.transform(value);
}
if (typeof rule === "function") rule = { validator: rule };
else rule = _extends({}, rule);
rule.validator = _this2.getValidationMethod(rule);
if (!rule.validator) return;
rule.field = z;
rule.fullField = rule.fullField || z;
rule.type = _this2.getType(rule);
series[z] = series[z] || [];
series[z].push({
rule,
value,
source,
field: z
});
});
});
var errorFields = {};
return asyncMap(series, options, function(data, doIt) {
var rule = data.rule;
var deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object");
deep = deep && (rule.required || !rule.required && data.value);
rule.field = data.field;
function addFullField(key, schema) {
return _extends({}, schema, {
fullField: rule.fullField + "." + key,
fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]
});
}
function cb(e) {
if (e === void 0) e = [];
var errorList = Array.isArray(e) ? e : [e];
if (!options.suppressWarning && errorList.length) Schema.warning("async-validator:", errorList);
if (errorList.length && rule.message !== void 0) errorList = [].concat(rule.message);
var filledErrors = errorList.map(complementError(rule, source));
if (options.first && filledErrors.length) {
errorFields[rule.field] = 1;
return doIt(filledErrors);
}
if (!deep) doIt(filledErrors);
else {
if (rule.required && !data.value) {
if (rule.message !== void 0) filledErrors = [].concat(rule.message).map(complementError(rule, source));
else if (options.error) filledErrors = [options.error(rule, format(options.messages.required, rule.field))];
return doIt(filledErrors);
}
var fieldsSchema = {};
if (rule.defaultField) Object.keys(data.value).map(function(key) {
fieldsSchema[key] = rule.defaultField;
});
fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);
var paredFieldsSchema = {};
Object.keys(fieldsSchema).forEach(function(field) {
var fieldSchema = fieldsSchema[field];
paredFieldsSchema[field] = (Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema]).map(addFullField.bind(null, field));
});
var schema = new Schema(paredFieldsSchema);
schema.messages(options.messages);
if (data.rule.options) {
data.rule.options.messages = options.messages;
data.rule.options.error = options.error;
}
schema.validate(data.value, data.rule.options || options, function(errs) {
var finalErrors = [];
if (filledErrors && filledErrors.length) finalErrors.push.apply(finalErrors, filledErrors);
if (errs && errs.length) finalErrors.push.apply(finalErrors, errs);
doIt(finalErrors.length ? finalErrors : null);
});
}
}
var res;
if (rule.asyncValidator) res = rule.asyncValidator(rule, data.value, cb, data.source, options);
else if (rule.validator) {
try {
res = rule.validator(rule, data.value, cb, data.source, options);
} catch (error) {
console.error == null || console.error(error);
if (!options.suppressValidatorError) setTimeout(function() {
throw error;
}, 0);
cb(error.message);
}
if (res === true) cb();
else if (res === false) cb(typeof rule.message === "function" ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails");
else if (res instanceof Array) cb(res);
else if (res instanceof Error) cb(res.message);
}
if (res && res.then) res.then(function() {
return cb();
}, function(e) {
return cb(e);
});
}, function(results) {
complete(results);
}, source);
};
_proto.getType = function getType(rule) {
if (rule.type === void 0 && rule.pattern instanceof RegExp) rule.type = "pattern";
if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) throw new Error(format("Unknown rule type %s", rule.type));
return rule.type || "string";
};
_proto.getValidationMethod = function getValidationMethod(rule) {
if (typeof rule.validator === "function") return rule.validator;
var keys = Object.keys(rule);
var messageIndex = keys.indexOf("message");
if (messageIndex !== -1) keys.splice(messageIndex, 1);
if (keys.length === 1 && keys[0] === "required") return validators.required;
return validators[this.getType(rule)] || void 0;
};
return Schema;
}();
Schema.register = function register(type, validator) {
if (typeof validator !== "function") throw new Error("Cannot register a validator by type, validator is not a function");
validators[type] = validator;
};
Schema.warning = warning;
Schema.messages = messages;
Schema.validators = validators;
//#endregion
//#region ../../packages/components/form/src/form-label-wrap.tsx
const COMPONENT_NAME$20 = "ElLabelWrap";
var form_label_wrap_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$20,
props: {
isAutoWidth: Boolean,
updateAll: Boolean
},
setup(props, { slots }) {
const formContext = (0, vue.inject)(formContextKey, void 0);
const formItemContext = (0, vue.inject)(formItemContextKey);
if (!formItemContext) throwError(COMPONENT_NAME$20, "usage: <el-form-item><label-wrap /></el-form-item>");
const ns = useNamespace("form");
const el = (0, vue.ref)();
const computedWidth = (0, vue.ref)(0);
const getLabelWidth = () => {
if (el.value?.firstElementChild) {
const width = window.getComputedStyle(el.value.firstElementChild).width;
return Math.ceil(Number.parseFloat(width));
} else return 0;
};
const updateLabelWidth = (action = "update") => {
(0, vue.nextTick)(() => {
if (slots.default && props.isAutoWidth) {
if (action === "update") computedWidth.value = getLabelWidth();
else if (action === "remove") formContext?.deregisterLabelWidth(computedWidth.value);
}
});
};
const updateLabelWidthFn = () => updateLabelWidth("update");
(0, vue.onMounted)(() => {
updateLabelWidthFn();
});
(0, vue.onBeforeUnmount)(() => {
updateLabelWidth("remove");
});
(0, vue.onUpdated)(() => updateLabelWidthFn());
(0, vue.watch)(computedWidth, (val, oldVal) => {
if (props.updateAll) formContext?.registerLabelWidth(val, oldVal);
});
useResizeObserver((0, vue.computed)(() => el.value?.firstElementChild ?? null), updateLabelWidthFn);
return () => {
if (!slots) return null;
const { isAutoWidth } = props;
if (isAutoWidth) {
const autoLabelWidth = formContext?.autoLabelWidth;
const hasLabel = formItemContext?.hasLabel;
const style = {};
if (hasLabel && autoLabelWidth && autoLabelWidth !== "auto") {
const marginWidth = Math.max(0, Number.parseInt(autoLabelWidth, 10) - computedWidth.value);
const marginPosition = (formItemContext.labelPosition || formContext.labelPosition) === "left" ? "marginRight" : "marginLeft";
if (marginWidth) style[marginPosition] = `${marginWidth}px`;
}
return (0, vue.createVNode)("div", {
"ref": el,
"class": [ns.be("item", "label-wrap")],
"style": style
}, [slots.default?.()]);
} else return (0, vue.createVNode)(vue.Fragment, { "ref": el }, [slots.default?.()]);
};
}
});
//#endregion
//#region ../../packages/components/form/src/form-item.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$78 = ["role", "aria-labelledby"];
var form_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElFormItem",
__name: "form-item",
props: formItemProps,
setup(__props, { expose: __expose }) {
const props = __props;
const slots = (0, vue.useSlots)();
const formContext = (0, vue.inject)(formContextKey, void 0);
const parentFormItemContext = (0, vue.inject)(formItemContextKey, void 0);
const _size = useFormSize(void 0, { formItem: false });
const ns = useNamespace("form-item");
const labelId = useId().value;
const inputIds = (0, vue.ref)([]);
const validateState = (0, vue.ref)("");
const validateStateDebounced = refDebounced(validateState, 100);
const validateMessage = (0, vue.ref)("");
const formItemRef = (0, vue.ref)();
let initialValue = void 0;
let isResettingField = false;
const labelPosition = (0, vue.computed)(() => props.labelPosition || formContext?.labelPosition);
const labelStyle = (0, vue.computed)(() => {
if (labelPosition.value === "top") return {};
return { width: addUnit(props.labelWidth ?? formContext?.labelWidth) };
});
const contentStyle = (0, vue.computed)(() => {
if (labelPosition.value === "top" || formContext?.inline) return {};
if (!props.label && !props.labelWidth && isNested) return {};
const labelWidth = addUnit(props.labelWidth ?? formContext?.labelWidth);
if (!props.label && !slots.label) return { marginLeft: labelWidth };
return {};
});
const formItemClasses = (0, vue.computed)(() => [
ns.b(),
ns.m(_size.value),
ns.is("error", validateState.value === "error"),
ns.is("validating", validateState.value === "validating"),
ns.is("success", validateState.value === "success"),
ns.is("required", isRequired.value || props.required),
ns.is("no-asterisk", formContext?.hideRequiredAsterisk),
formContext?.requireAsteriskPosition === "right" ? "asterisk-right" : "asterisk-left",
{
[ns.m("feedback")]: formContext?.statusIcon,
[ns.m(`label-${labelPosition.value}`)]: labelPosition.value
}
]);
const _inlineMessage = (0, vue.computed)(() => isBoolean(props.inlineMessage) ? props.inlineMessage : formContext?.inlineMessage || false);
const validateClasses = (0, vue.computed)(() => [ns.e("error"), { [ns.em("error", "inline")]: _inlineMessage.value }]);
const propString = (0, vue.computed)(() => {
if (!props.prop) return "";
return isArray$1(props.prop) ? props.prop.join(".") : props.prop;
});
const hasLabel = (0, vue.computed)(() => {
return !!(props.label || slots.label);
});
const labelFor = (0, vue.computed)(() => {
return props.for ?? (inputIds.value.length === 1 ? inputIds.value[0] : void 0);
});
const isGroup = (0, vue.computed)(() => {
return !labelFor.value && hasLabel.value;
});
const isNested = !!parentFormItemContext;
const fieldValue = (0, vue.computed)(() => {
const model = formContext?.model;
if (!model || !props.prop) return;
return getProp(model, props.prop).value;
});
const normalizedRules = (0, vue.computed)(() => {
const { required } = props;
const rules = [];
if (props.rules) rules.push(...castArray$1(props.rules));
const formRules = formContext?.rules;
if (formRules && props.prop) {
const _rules = getProp(formRules, props.prop).value;
if (_rules) rules.push(...castArray$1(_rules));
}
if (required !== void 0) {
const requiredRules = rules.map((rule, i) => [rule, i]).filter(([rule]) => "required" in rule);
if (requiredRules.length > 0) for (const [rule, i] of requiredRules) {
if (rule.required === required) continue;
rules[i] = {
...rule,
required
};
}
else rules.push({ required });
}
return rules;
});
const validateEnabled = (0, vue.computed)(() => normalizedRules.value.length > 0);
const getFilteredRule = (trigger) => {
return normalizedRules.value.filter((rule) => {
if (!rule.trigger || !trigger) return true;
if (isArray$1(rule.trigger)) return rule.trigger.includes(trigger);
else return rule.trigger === trigger;
}).map(({ trigger, ...rule }) => rule);
};
const isRequired = (0, vue.computed)(() => normalizedRules.value.some((rule) => rule.required));
const shouldShowError = (0, vue.computed)(() => validateStateDebounced.value === "error" && props.showMessage && (formContext?.showMessage ?? true));
const currentLabel = (0, vue.computed)(() => `${props.label || ""}${formContext?.labelSuffix || ""}`);
const setValidationState = (state) => {
validateState.value = state;
};
const onValidationFailed = (error) => {
const { errors, fields } = error;
if (!errors || !fields) console.error(error);
setValidationState("error");
validateMessage.value = errors ? errors?.[0]?.message ?? `${props.prop} is required` : "";
formContext?.emit("validate", props.prop, false, validateMessage.value);
};
const onValidationSucceeded = () => {
setValidationState("success");
formContext?.emit("validate", props.prop, true, "");
};
const doValidate = async (rules) => {
const modelName = propString.value;
return new Schema({ [modelName]: rules }).validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => {
onValidationSucceeded();
return true;
}).catch((err) => {
onValidationFailed(err);
return Promise.reject(err);
});
};
const validate = async (trigger, callback) => {
if (isResettingField || !props.prop) return false;
const hasCallback = isFunction$1(callback);
if (!validateEnabled.value) {
callback?.(false);
return false;
}
const rules = getFilteredRule(trigger);
if (rules.length === 0) {
callback?.(true);
return true;
}
setValidationState("validating");
return doValidate(rules).then(() => {
callback?.(true);
return true;
}).catch((err) => {
const { fields } = err;
callback?.(false, fields);
return hasCallback ? false : Promise.reject(fields);
});
};
const clearValidate = () => {
setValidationState("");
validateMessage.value = "";
isResettingField = false;
};
const resetField = async () => {
const model = formContext?.model;
if (!model || !props.prop) return;
const computedValue = getProp(model, props.prop);
isResettingField = true;
computedValue.value = cloneDeep(initialValue);
await (0, vue.nextTick)();
clearValidate();
isResettingField = false;
};
const addInputId = (id) => {
if (!inputIds.value.includes(id)) inputIds.value.push(id);
};
const removeInputId = (id) => {
inputIds.value = inputIds.value.filter((listId) => listId !== id);
};
const setInitialValue = (value) => {
initialValue = cloneDeep(value);
};
const getInitialValue = () => initialValue;
(0, vue.watch)(() => props.error, (val) => {
validateMessage.value = val || "";
setValidationState(val ? "error" : "");
}, { immediate: true });
(0, vue.watch)(() => props.validateStatus, (val) => setValidationState(val || ""));
const context = (0, vue.reactive)({
...(0, vue.toRefs)(props),
$el: formItemRef,
size: _size,
validateMessage,
validateState,
labelId,
inputIds,
isGroup,
hasLabel,
fieldValue,
addInputId,
removeInputId,
resetField,
clearValidate,
validate,
propString,
setInitialValue,
getInitialValue
});
(0, vue.provide)(formItemContextKey, context);
(0, vue.watch)(propString, (newPropString, oldPropString) => {
if (!formContext || !oldPropString) return;
formContext.removeField(context, oldPropString);
if (newPropString) {
setInitialValue(fieldValue.value);
formContext.addField(context);
}
});
(0, vue.onMounted)(() => {
if (props.prop) {
setInitialValue(fieldValue.value);
formContext?.addField(context);
}
});
(0, vue.onBeforeUnmount)(() => {
formContext?.removeField(context);
});
__expose({
size: _size,
validateMessage,
validateState,
validate,
clearValidate,
resetField,
setInitialValue
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "formItemRef",
ref: formItemRef,
class: (0, vue.normalizeClass)(formItemClasses.value),
role: isGroup.value ? "group" : void 0,
"aria-labelledby": isGroup.value ? (0, vue.unref)(labelId) : void 0
}, [(0, vue.createVNode)((0, vue.unref)(form_label_wrap_default), {
"is-auto-width": labelStyle.value.width === "auto",
"update-all": (0, vue.unref)(formContext)?.labelWidth === "auto"
}, {
default: (0, vue.withCtx)(() => [!!(__props.label || _ctx.$slots.label) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(labelFor.value ? "label" : "div"), {
key: 0,
id: (0, vue.unref)(labelId),
for: labelFor.value,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label")),
style: (0, vue.normalizeStyle)(labelStyle.value)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "label", { label: currentLabel.value }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(currentLabel.value), 1)])]),
_: 3
}, 8, [
"id",
"for",
"class",
"style"
])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, ["is-auto-width", "update-all"]), (0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
style: (0, vue.normalizeStyle)(contentStyle.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)(vue.TransitionGroup, { name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top` }, {
default: (0, vue.withCtx)(() => [shouldShowError.value ? (0, vue.renderSlot)(_ctx.$slots, "error", {
key: 0,
error: validateMessage.value
}, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(validateClasses.value) }, (0, vue.toDisplayString)(validateMessage.value), 3)]) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, ["name"])], 6)], 10, _hoisted_1$78);
};
}
});
//#endregion
//#region ../../packages/components/form/src/form-item.vue
var form_item_default = form_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/form/index.ts
const ElForm = withInstall(form_default, { FormItem: form_item_default });
const ElFormItem = withNoopInstall(form_item_default);
//#endregion
//#region ../../packages/components/popper/src/utils.ts
const buildPopperOptions = (props, modifiers = []) => {
const { placement, strategy, popperOptions } = props;
const options = {
placement,
strategy,
...popperOptions,
modifiers: [...genModifiers(props), ...modifiers]
};
deriveExtraModifiers(options, popperOptions?.modifiers);
return options;
};
const unwrapMeasurableEl = ($el) => {
if (!isClient) return;
return unrefElement($el);
};
function genModifiers(options) {
const { offset, gpuAcceleration, fallbackPlacements } = options;
return [
{
name: "offset",
options: { offset: [0, offset ?? 12] }
},
{
name: "preventOverflow",
options: { padding: {
top: 0,
bottom: 0,
left: 0,
right: 0
} }
},
{
name: "flip",
options: {
padding: 5,
fallbackPlacements
}
},
{
name: "computeStyles",
options: { gpuAcceleration }
}
];
}
function deriveExtraModifiers(options, modifiers) {
if (modifiers) options.modifiers = [...options.modifiers, ...modifiers ?? []];
}
//#endregion
//#region ../../packages/components/popper/src/composables/use-content.ts
const DEFAULT_ARROW_OFFSET = 0;
const usePopperContent = (props) => {
const { popperInstanceRef, contentRef, triggerRef, role } = (0, vue.inject)(POPPER_INJECTION_KEY, void 0);
const arrowRef = (0, vue.ref)();
const arrowOffset = (0, vue.computed)(() => props.arrowOffset);
const eventListenerModifier = (0, vue.computed)(() => {
return {
name: "eventListeners",
enabled: !!props.visible
};
});
const arrowModifier = (0, vue.computed)(() => {
const arrowEl = (0, vue.unref)(arrowRef);
const offset = (0, vue.unref)(arrowOffset) ?? DEFAULT_ARROW_OFFSET;
return {
name: "arrow",
enabled: !isUndefined$1(arrowEl),
options: {
element: arrowEl,
padding: offset
}
};
});
const options = (0, vue.computed)(() => {
return {
onFirstUpdate: () => {
update();
},
...buildPopperOptions(props, [(0, vue.unref)(arrowModifier), (0, vue.unref)(eventListenerModifier)])
};
});
const computedReference = (0, vue.computed)(() => unwrapMeasurableEl(props.referenceEl) || (0, vue.unref)(triggerRef));
const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options);
(0, vue.watch)(instanceRef, (instance) => popperInstanceRef.value = instance, { flush: "sync" });
(0, vue.onMounted)(() => {
(0, vue.watch)(() => (0, vue.unref)(computedReference)?.getBoundingClientRect?.(), () => {
update();
});
});
let stopResizeObserver;
(0, vue.watch)(() => props.visible, (visible) => {
stopResizeObserver?.();
stopResizeObserver = void 0;
if (visible) stopResizeObserver = useResizeObserver(contentRef, update).stop;
});
(0, vue.onBeforeUnmount)(() => {
popperInstanceRef.value = void 0;
stopResizeObserver?.();
stopResizeObserver = void 0;
});
return {
attributes,
arrowRef,
contentRef,
instanceRef,
state,
styles,
role,
forceUpdate,
update
};
};
//#endregion
//#region ../../packages/components/popper/src/composables/use-content-dom.ts
const usePopperContentDOM = (props, { attributes, styles, role }) => {
const { nextZIndex } = useZIndex();
const ns = useNamespace("popper");
const contentAttrs = (0, vue.computed)(() => (0, vue.unref)(attributes).popper);
const contentZIndex = (0, vue.ref)(isNumber(props.zIndex) ? props.zIndex : nextZIndex());
const contentClass = (0, vue.computed)(() => [
ns.b(),
ns.is("pure", props.pure),
ns.is(props.effect),
props.popperClass
]);
const contentStyle = (0, vue.computed)(() => {
return [
{ zIndex: (0, vue.unref)(contentZIndex) },
(0, vue.unref)(styles).popper,
props.popperStyle || {}
];
});
const ariaModal = (0, vue.computed)(() => role.value === "dialog" ? "false" : void 0);
const arrowStyle = (0, vue.computed)(() => (0, vue.unref)(styles).arrow || {});
const updateZIndex = () => {
contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex();
};
return {
ariaModal,
arrowStyle,
contentAttrs,
contentClass,
contentStyle,
contentZIndex,
updateZIndex
};
};
//#endregion
//#region ../../packages/components/popper/src/composables/use-focus-trap.ts
const usePopperContentFocusTrap = (props, emit) => {
const trapped = (0, vue.ref)(false);
const focusStartRef = (0, vue.ref)();
const onFocusAfterTrapped = () => {
emit("focus");
};
const onFocusAfterReleased = (event) => {
if (event.detail?.focusReason !== "pointer") {
focusStartRef.value = "first";
emit("blur");
}
};
const onFocusInTrap = (event) => {
if (props.visible && !trapped.value) {
if (event.target) focusStartRef.value = event.target;
trapped.value = true;
}
};
const onFocusoutPrevented = (event) => {
if (!props.trapping) {
if (event.detail.focusReason === "pointer") event.preventDefault();
trapped.value = false;
}
};
const onReleaseRequested = () => {
trapped.value = false;
emit("close");
};
(0, vue.onBeforeUnmount)(() => {
focusStartRef.value = void 0;
});
return {
focusStartRef,
trapped,
onFocusAfterReleased,
onFocusAfterTrapped,
onFocusInTrap,
onFocusoutPrevented,
onReleaseRequested
};
};
//#endregion
//#region ../../packages/components/popper/src/content.vue?vue&type=script&setup=true&lang.ts
var content_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopperContent",
__name: "content",
props: popperContentProps,
emits: popperContentEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const emit = __emit;
const props = __props;
const { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested } = usePopperContentFocusTrap(props, emit);
const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props);
const { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, updateZIndex } = usePopperContentDOM(props, {
styles,
attributes,
role
});
const formItemContext = (0, vue.inject)(formItemContextKey, void 0);
(0, vue.provide)(POPPER_CONTENT_INJECTION_KEY, {
arrowStyle,
arrowRef
});
if (formItemContext) (0, vue.provide)(formItemContextKey, {
...formItemContext,
addInputId: NOOP,
removeInputId: NOOP
});
let triggerTargetAriaStopWatch = void 0;
const updatePopper = (shouldUpdateZIndex = true) => {
update();
shouldUpdateZIndex && updateZIndex();
};
const togglePopperAlive = () => {
updatePopper(false);
if (props.visible && props.focusOnShow) trapped.value = true;
else if (props.visible === false) trapped.value = false;
};
(0, vue.onMounted)(() => {
(0, vue.watch)(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => {
triggerTargetAriaStopWatch?.();
triggerTargetAriaStopWatch = void 0;
const el = (0, vue.unref)(triggerTargetEl || contentRef.value);
const prevEl = (0, vue.unref)(prevTriggerTargetEl || contentRef.value);
if (isElement$1(el)) triggerTargetAriaStopWatch = (0, vue.watch)([
role,
() => props.ariaLabel,
ariaModal,
() => props.id
], (watches) => {
[
"role",
"aria-label",
"aria-modal",
"id"
].forEach((key, idx) => {
isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);
});
}, { immediate: true });
if (prevEl !== el && isElement$1(prevEl)) [
"role",
"aria-label",
"aria-modal",
"id"
].forEach((key) => {
prevEl.removeAttribute(key);
});
}, { immediate: true });
(0, vue.watch)(() => props.visible, togglePopperAlive, { immediate: true });
});
(0, vue.onBeforeUnmount)(() => {
triggerTargetAriaStopWatch?.();
triggerTargetAriaStopWatch = void 0;
contentRef.value = void 0;
});
__expose({
popperContentRef: contentRef,
popperInstanceRef: instanceRef,
updatePopper,
contentStyle
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
ref_key: "contentRef",
ref: contentRef
}, (0, vue.unref)(contentAttrs), {
style: (0, vue.unref)(contentStyle),
class: (0, vue.unref)(contentClass),
tabindex: "-1",
onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)),
onMouseleave: _cache[1] || (_cache[1] = (e) => _ctx.$emit("mouseleave", e))
}), [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
loop: __props.loop,
trapped: (0, vue.unref)(trapped),
"trap-on-focus-in": true,
"focus-trap-el": (0, vue.unref)(contentRef),
"focus-start-el": (0, vue.unref)(focusStartRef),
onFocusAfterTrapped: (0, vue.unref)(onFocusAfterTrapped),
onFocusAfterReleased: (0, vue.unref)(onFocusAfterReleased),
onFocusin: (0, vue.unref)(onFocusInTrap),
onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
onReleaseRequested: (0, vue.unref)(onReleaseRequested)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, [
"loop",
"trapped",
"focus-trap-el",
"focus-start-el",
"onFocusAfterTrapped",
"onFocusAfterReleased",
"onFocusin",
"onFocusoutPrevented",
"onReleaseRequested"
])], 16);
};
}
});
//#endregion
//#region ../../packages/components/popper/src/content.vue
var content_default = content_vue_vue_type_script_setup_true_lang_default$2;
//#endregion
//#region ../../packages/components/popper/index.ts
const ElPopper = withInstall(popper_default);
//#endregion
//#region ../../packages/components/tooltip/src/content.ts
const useTooltipContentPropsDefaults = {
...useDelayedTogglePropsDefaults,
...popperContentPropsDefaults,
content: "",
visible: null,
teleported: true
};
/**
* @deprecated Removed after 3.0.0, Use `ElTooltipContentProps` instead.
*/
const useTooltipContentProps = buildProps({
...useDelayedToggleProps,
...popperContentProps,
appendTo: { type: teleportProps.to.type },
content: {
type: String,
default: ""
},
rawContent: Boolean,
persistent: Boolean,
visible: {
type: definePropType(Boolean),
default: null
},
transition: String,
teleported: {
type: Boolean,
default: true
},
disabled: Boolean,
...useAriaProps(["ariaLabel"])
});
//#endregion
//#region ../../packages/components/tooltip/src/trigger.ts
const useTooltipTriggerPropsDefaults = {
trigger: "hover",
triggerKeys: () => [
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space
]
};
/**
* @deprecated Removed after 3.0.0, Use `UseTooltipTriggerProps` instead.
*/
const useTooltipTriggerProps = buildProps({
...popperTriggerProps,
disabled: Boolean,
trigger: {
type: definePropType([String, Array]),
default: "hover"
},
triggerKeys: {
type: definePropType(Array),
default: () => [
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space
]
},
focusOnTarget: Boolean
});
//#endregion
//#region ../../packages/components/tooltip/src/tooltip.ts
const { useModelToggleProps: useTooltipModelToggleProps, useModelToggleEmits: useTooltipModelToggleEmits, useModelToggle: useTooltipModelToggle } = createModelToggleComposable("visible");
/**
* @deprecated Removed after 3.0.0, Use `UseTooltipProps` instead.
*/
const useTooltipProps = buildProps({
...popperProps,
...useTooltipModelToggleProps,
...useTooltipContentProps,
...useTooltipTriggerProps,
...popperArrowProps,
showArrow: {
type: Boolean,
default: true
}
});
const tooltipEmits = [
...useTooltipModelToggleEmits,
"before-show",
"before-hide",
"show",
"hide",
"open",
"close"
];
//#endregion
//#region ../../packages/components/tooltip/src/constants.ts
const TOOLTIP_INJECTION_KEY = Symbol("elTooltip");
//#endregion
//#region ../../packages/components/tooltip/src/utils.ts
const isTriggerType = (trigger, type) => {
if (isArray$1(trigger)) return trigger.includes(type);
return trigger === type;
};
const whenTrigger = (trigger, type, handler) => {
return (e) => {
isTriggerType((0, vue.unref)(trigger), type) && handler(e);
};
};
//#endregion
//#region ../../packages/components/tooltip/src/trigger.vue?vue&type=script&setup=true&lang.ts
var trigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTooltipTrigger",
__name: "trigger",
props: useTooltipTriggerProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("tooltip");
const { controlled, id, open, onOpen, onClose, onToggle } = (0, vue.inject)(TOOLTIP_INJECTION_KEY, void 0);
const triggerRef = (0, vue.ref)(null);
const stopWhenControlledOrDisabled = () => {
if ((0, vue.unref)(controlled) || props.disabled) return true;
};
const trigger = (0, vue.toRef)(props, "trigger");
const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", (e) => {
onOpen(e);
if (props.focusOnTarget && e.target) (0, vue.nextTick)(() => {
focusElement(e.target, { preventScroll: true });
});
}));
const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose));
const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => {
if (e.button === 0) onToggle(e);
}));
const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen));
const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose));
const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => {
e.preventDefault();
onToggle(e);
}));
const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {
const code = getEventCode(e);
if (props.triggerKeys.includes(code)) {
e.preventDefault();
onToggle(e);
}
});
__expose({ triggerRef });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(trigger_default), {
id: (0, vue.unref)(id),
"virtual-ref": __props.virtualRef,
open: (0, vue.unref)(open),
"virtual-triggering": __props.virtualTriggering,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("trigger")),
onBlur: (0, vue.unref)(onBlur),
onClick: (0, vue.unref)(onClick),
onContextmenu: (0, vue.unref)(onContextMenu),
onFocus: (0, vue.unref)(onFocus),
onMouseenter: (0, vue.unref)(onMouseenter),
onMouseleave: (0, vue.unref)(onMouseleave),
onKeydown: (0, vue.unref)(onKeydown)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, [
"id",
"virtual-ref",
"open",
"virtual-triggering",
"class",
"onBlur",
"onClick",
"onContextmenu",
"onFocus",
"onMouseenter",
"onMouseleave",
"onKeydown"
]);
};
}
});
//#endregion
//#region ../../packages/components/tooltip/src/trigger.vue
var trigger_default$1 = trigger_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tooltip/src/content.vue?vue&type=script&setup=true&lang.ts
var content_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTooltipContent",
inheritAttrs: false,
__name: "content",
props: useTooltipContentProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { selector } = usePopperContainerId();
const ns = useNamespace("tooltip");
const contentRef = (0, vue.ref)();
const popperContentRef = computedEager(() => contentRef.value?.popperContentRef);
let stopHandle;
const { controlled, id, open, trigger, onClose, onOpen, onShow, onHide, onBeforeShow, onBeforeHide } = (0, vue.inject)(TOOLTIP_INJECTION_KEY, void 0);
const transitionClass = (0, vue.computed)(() => {
return props.transition || `${ns.namespace.value}-fade-in-linear`;
});
const persistentRef = (0, vue.computed)(() => {
return props.persistent;
});
(0, vue.onBeforeUnmount)(() => {
stopHandle?.();
});
const shouldRender = (0, vue.computed)(() => {
return (0, vue.unref)(persistentRef) ? true : (0, vue.unref)(open);
});
const shouldShow = (0, vue.computed)(() => {
return props.disabled ? false : (0, vue.unref)(open);
});
const appendTo = (0, vue.computed)(() => {
return props.appendTo || selector.value;
});
const contentStyle = (0, vue.computed)(() => props.style ?? {});
const ariaHidden = (0, vue.ref)(true);
const onTransitionLeave = () => {
onHide();
isFocusInsideContent() && focusElement(document.body, { preventScroll: true });
ariaHidden.value = true;
};
const stopWhenControlled = () => {
if ((0, vue.unref)(controlled)) return true;
};
const onContentEnter = composeEventHandlers(stopWhenControlled, () => {
if (props.enterable && isTriggerType((0, vue.unref)(trigger), "hover")) onOpen();
});
const onContentLeave = composeEventHandlers(stopWhenControlled, () => {
if (isTriggerType((0, vue.unref)(trigger), "hover")) onClose();
});
const onBeforeEnter = () => {
contentRef.value?.updatePopper?.();
onBeforeShow?.();
};
const onBeforeLeave = () => {
onBeforeHide?.();
};
const onAfterShow = () => {
onShow();
};
const onBlur = () => {
if (!props.virtualTriggering) onClose();
};
const isFocusInsideContent = (event) => {
const popperContent = contentRef.value?.popperContentRef;
const activeElement = event?.relatedTarget || document.activeElement;
return popperContent?.contains(activeElement);
};
(0, vue.watch)(() => (0, vue.unref)(open), (val) => {
if (!val) stopHandle?.();
else {
ariaHidden.value = false;
stopHandle = onClickOutside(popperContentRef, () => {
if ((0, vue.unref)(controlled)) return;
if (castArray((0, vue.unref)(trigger)).every((item) => {
return item !== "hover" && item !== "focus";
})) onClose();
}, { detectIframe: true });
}
}, { flush: "post" });
__expose({
contentRef,
isFocusInsideContent
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTeleport), {
disabled: !__props.teleported,
to: appendTo.value
}, {
default: (0, vue.withCtx)(() => [shouldRender.value || !ariaHidden.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
key: 0,
name: transitionClass.value,
appear: !persistentRef.value,
onAfterLeave: onTransitionLeave,
onBeforeEnter,
onAfterEnter: onAfterShow,
onBeforeLeave,
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(content_default), (0, vue.mergeProps)({
id: (0, vue.unref)(id),
ref_key: "contentRef",
ref: contentRef
}, _ctx.$attrs, {
"aria-label": __props.ariaLabel,
"aria-hidden": ariaHidden.value,
"boundaries-padding": __props.boundariesPadding,
"fallback-placements": __props.fallbackPlacements,
"gpu-acceleration": __props.gpuAcceleration,
offset: __props.offset,
placement: __props.placement,
"popper-options": __props.popperOptions,
"arrow-offset": __props.arrowOffset,
strategy: __props.strategy,
effect: __props.effect,
enterable: __props.enterable,
pure: __props.pure,
"popper-class": __props.popperClass,
"popper-style": [__props.popperStyle, contentStyle.value],
"reference-el": __props.referenceEl,
"trigger-target-el": __props.triggerTargetEl,
visible: shouldShow.value,
"z-index": __props.zIndex,
loop: __props.loop,
onMouseenter: (0, vue.unref)(onContentEnter),
onMouseleave: (0, vue.unref)(onContentLeave),
onBlur,
onClose: (0, vue.unref)(onClose)
}), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16, [
"id",
"aria-label",
"aria-hidden",
"boundaries-padding",
"fallback-placements",
"gpu-acceleration",
"offset",
"placement",
"popper-options",
"arrow-offset",
"strategy",
"effect",
"enterable",
"pure",
"popper-class",
"popper-style",
"reference-el",
"trigger-target-el",
"visible",
"z-index",
"loop",
"onMouseenter",
"onMouseleave",
"onClose"
]), [[vue.vShow, shouldShow.value]])]),
_: 3
}, 8, ["name", "appear"])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, ["disabled", "to"]);
};
}
});
//#endregion
//#region ../../packages/components/tooltip/src/content.vue
var content_default$2 = content_vue_vue_type_script_setup_true_lang_default$1;
//#endregion
//#region ../../packages/components/tooltip/src/tooltip.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$77 = ["innerHTML"];
const _hoisted_2$43 = { key: 1 };
var tooltip_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTooltip",
__name: "tooltip",
props: useTooltipProps,
emits: tooltipEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
usePopperContainer();
const ns = useNamespace("tooltip");
const id = useId();
const popperRef = (0, vue.ref)();
const contentRef = (0, vue.ref)();
const updatePopper = () => {
const popperComponent = (0, vue.unref)(popperRef);
if (popperComponent) popperComponent.popperInstanceRef?.update();
};
const open = (0, vue.ref)(false);
const toggleReason = (0, vue.ref)();
const { show, hide, hasUpdateHandler } = useTooltipModelToggle({
indicator: open,
toggleReason
});
const { onOpen, onClose } = useDelayedToggle({
showAfter: (0, vue.toRef)(props, "showAfter"),
hideAfter: (0, vue.toRef)(props, "hideAfter"),
autoClose: (0, vue.toRef)(props, "autoClose"),
open: show,
close: hide
});
const controlled = (0, vue.computed)(() => isBoolean(props.visible) && !hasUpdateHandler.value);
const kls = (0, vue.computed)(() => {
return [ns.b(), props.popperClass];
});
(0, vue.provide)(TOOLTIP_INJECTION_KEY, {
controlled,
id,
open: (0, vue.readonly)(open),
trigger: (0, vue.toRef)(props, "trigger"),
onOpen,
onClose,
onToggle: (event) => {
if ((0, vue.unref)(open)) onClose(event);
else onOpen(event);
},
onShow: () => {
emit("show", toggleReason.value);
},
onHide: () => {
emit("hide", toggleReason.value);
},
onBeforeShow: () => {
emit("before-show", toggleReason.value);
},
onBeforeHide: () => {
emit("before-hide", toggleReason.value);
},
updatePopper
});
(0, vue.watch)(() => props.disabled, (disabled) => {
if (disabled && open.value) open.value = false;
if (!disabled && isBoolean(props.visible)) open.value = props.visible;
});
const isFocusInsideContent = (event) => {
return contentRef.value?.isFocusInsideContent(event);
};
(0, vue.onDeactivated)(() => open.value && hide());
(0, vue.onBeforeUnmount)(() => {
toggleReason.value = void 0;
});
__expose({
popperRef,
contentRef,
isFocusInsideContent,
updatePopper,
onOpen,
onClose,
hide
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElPopper), {
ref_key: "popperRef",
ref: popperRef,
role: __props.role
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(trigger_default$1, {
disabled: __props.disabled,
trigger: __props.trigger,
"trigger-keys": __props.triggerKeys,
"virtual-ref": __props.virtualRef,
"virtual-triggering": __props.virtualTriggering,
"focus-on-target": __props.focusOnTarget
}, {
default: (0, vue.withCtx)(() => [_ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, [
"disabled",
"trigger",
"trigger-keys",
"virtual-ref",
"virtual-triggering",
"focus-on-target"
]), (0, vue.createVNode)(content_default$2, {
ref_key: "contentRef",
ref: contentRef,
"aria-label": __props.ariaLabel,
"boundaries-padding": __props.boundariesPadding,
content: __props.content,
disabled: __props.disabled,
effect: __props.effect,
enterable: __props.enterable,
"fallback-placements": __props.fallbackPlacements,
"hide-after": __props.hideAfter,
"gpu-acceleration": __props.gpuAcceleration,
offset: __props.offset,
persistent: __props.persistent,
"popper-class": kls.value,
"popper-style": __props.popperStyle,
placement: __props.placement,
"popper-options": __props.popperOptions,
"arrow-offset": __props.arrowOffset,
pure: __props.pure,
"raw-content": __props.rawContent,
"reference-el": __props.referenceEl,
"trigger-target-el": __props.triggerTargetEl,
"show-after": __props.showAfter,
strategy: __props.strategy,
teleported: __props.teleported,
transition: __props.transition,
"virtual-triggering": __props.virtualTriggering,
"z-index": __props.zIndex,
"append-to": __props.appendTo,
loop: __props.loop
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "content", {}, () => [__props.rawContent ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
innerHTML: __props.content
}, null, 8, _hoisted_1$77)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$43, (0, vue.toDisplayString)(__props.content), 1))]), __props.showArrow ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_default), { key: 0 })) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, [
"aria-label",
"boundaries-padding",
"content",
"disabled",
"effect",
"enterable",
"fallback-placements",
"hide-after",
"gpu-acceleration",
"offset",
"persistent",
"popper-class",
"popper-style",
"placement",
"popper-options",
"arrow-offset",
"pure",
"raw-content",
"reference-el",
"trigger-target-el",
"show-after",
"strategy",
"teleported",
"transition",
"virtual-triggering",
"z-index",
"append-to",
"loop"
])]),
_: 3
}, 8, ["role"]);
};
}
});
//#endregion
//#region ../../packages/components/tooltip/src/tooltip.vue
var tooltip_default = tooltip_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tooltip/index.ts
const ElTooltip = withInstall(tooltip_default);
//#endregion
//#region ../../packages/components/input/src/input.ts
/**
* @deprecated Removed after 3.0.0, Use `InputProps` instead.
*/
const inputProps = buildProps({
id: {
type: String,
default: void 0
},
size: useSizeProp,
disabled: {
type: Boolean,
default: void 0
},
modelValue: {
type: definePropType([
String,
Number,
Object
]),
default: ""
},
modelModifiers: {
type: definePropType(Object),
default: () => ({})
},
maxlength: { type: [String, Number] },
minlength: { type: [String, Number] },
type: {
type: definePropType(String),
default: "text"
},
resize: {
type: String,
values: [
"none",
"both",
"horizontal",
"vertical"
]
},
autosize: {
type: definePropType([Boolean, Object]),
default: false
},
autocomplete: {
type: definePropType(String),
default: "off"
},
formatter: { type: Function },
parser: { type: Function },
placeholder: { type: String },
form: { type: String },
readonly: Boolean,
clearable: Boolean,
clearIcon: {
type: iconPropType,
default: circle_close_default
},
showPassword: Boolean,
showWordLimit: Boolean,
wordLimitPosition: {
type: String,
values: ["inside", "outside"],
default: "inside"
},
suffixIcon: { type: iconPropType },
prefixIcon: { type: iconPropType },
containerRole: {
type: String,
default: void 0
},
tabindex: {
type: [String, Number],
default: 0
},
validateEvent: {
type: Boolean,
default: true
},
inputStyle: {
type: definePropType([
Object,
Array,
String
]),
default: () => mutable({})
},
countGraphemes: { type: definePropType(Function) },
autofocus: Boolean,
rows: {
type: Number,
default: 2
},
...useAriaProps(["ariaLabel"]),
inputmode: {
type: definePropType(String),
default: void 0
},
name: String
});
const inputEmits = {
[UPDATE_MODEL_EVENT]: (value) => isString(value),
input: (value) => isString(value),
change: (value, evt) => isString(value) && (evt instanceof Event || evt === void 0),
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: (evt) => evt === void 0 || evt instanceof MouseEvent,
mouseleave: (evt) => evt instanceof MouseEvent,
mouseenter: (evt) => evt instanceof MouseEvent,
keydown: (evt) => evt instanceof Event,
compositionstart: (evt) => evt instanceof CompositionEvent,
compositionupdate: (evt) => evt instanceof CompositionEvent,
compositionend: (evt) => evt instanceof CompositionEvent
};
/**
* @description default values for InputProps, used in components that extend InputProps like Autocomplete
*/
const inputPropsDefaults = {
disabled: void 0,
modelValue: "",
modelModifiers: () => ({}),
type: "text",
autocomplete: "off",
clearIcon: (0, vue.markRaw)(circle_close_default),
wordLimitPosition: "inside",
tabindex: 0,
validateEvent: true,
inputStyle: () => ({}),
rows: 2
};
//#endregion
//#region ../../packages/components/input/src/utils.ts
let hiddenTextarea = void 0;
const HIDDEN_STYLE = {
height: "0",
visibility: "hidden",
overflow: isFirefox() ? "" : "hidden",
position: "absolute",
"z-index": "-1000",
top: "0",
right: "0"
};
const CONTEXT_STYLE = [
"letter-spacing",
"line-height",
"padding-top",
"padding-bottom",
"font-family",
"font-weight",
"font-size",
"text-rendering",
"text-transform",
"width",
"text-indent",
"padding-left",
"padding-right",
"border-width",
"box-sizing",
"word-break"
];
const looseToNumber = (val) => {
const n = Number.parseFloat(val);
return Number.isNaN(n) ? val : n;
};
function calculateNodeStyling(targetElement) {
const style = window.getComputedStyle(targetElement);
const boxSizing = style.getPropertyValue("box-sizing");
const paddingSize = Number.parseFloat(style.getPropertyValue("padding-bottom")) + Number.parseFloat(style.getPropertyValue("padding-top"));
const borderSize = Number.parseFloat(style.getPropertyValue("border-bottom-width")) + Number.parseFloat(style.getPropertyValue("border-top-width"));
return {
contextStyle: CONTEXT_STYLE.map((name) => [name, style.getPropertyValue(name)]),
paddingSize,
borderSize,
boxSizing
};
}
function calcTextareaHeight(targetElement, minRows = 1, maxRows) {
if (!hiddenTextarea) {
hiddenTextarea = document.createElement("textarea");
let hostNode = document.body;
if (!isFirefox() && targetElement.parentNode) hostNode = targetElement.parentNode;
hostNode.appendChild(hiddenTextarea);
}
const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement);
contextStyle.forEach(([key, value]) => hiddenTextarea?.style.setProperty(key, value));
Object.entries(HIDDEN_STYLE).forEach(([key, value]) => hiddenTextarea?.style.setProperty(key, value, "important"));
hiddenTextarea.value = targetElement.value || targetElement.placeholder || "";
let height = hiddenTextarea.scrollHeight;
const result = {};
if (boxSizing === "border-box") height = height + borderSize;
else if (boxSizing === "content-box") height = height - paddingSize;
hiddenTextarea.value = "";
const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
if (isNumber(minRows)) {
let minHeight = singleRowHeight * minRows;
if (boxSizing === "border-box") minHeight = minHeight + paddingSize + borderSize;
height = Math.max(minHeight, height);
result.minHeight = `${minHeight}px`;
}
if (isNumber(maxRows)) {
let maxHeight = singleRowHeight * maxRows;
if (boxSizing === "border-box") maxHeight = maxHeight + paddingSize + borderSize;
height = Math.min(maxHeight, height);
}
result.height = `${height}px`;
hiddenTextarea.parentNode?.removeChild(hiddenTextarea);
hiddenTextarea = void 0;
return result;
}
//#endregion
//#region ../../packages/components/input/src/input.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$76 = [
"id",
"name",
"minlength",
"maxlength",
"type",
"disabled",
"readonly",
"autocomplete",
"tabindex",
"aria-label",
"placeholder",
"form",
"autofocus",
"role",
"inputmode"
];
const _hoisted_2$42 = [
"id",
"name",
"minlength",
"maxlength",
"tabindex",
"disabled",
"readonly",
"autocomplete",
"aria-label",
"placeholder",
"form",
"autofocus",
"rows",
"role",
"inputmode"
];
const COMPONENT_NAME$19 = "ElInput";
var input_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$19,
inheritAttrs: false,
__name: "input",
props: inputProps,
emits: inputEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const rawAttrs = (0, vue.useAttrs)();
const slots = (0, vue.useSlots)();
const containerKls = (0, vue.computed)(() => [
props.type === "textarea" ? nsTextarea.b() : nsInput.b(),
nsInput.m(inputSize.value),
nsInput.is("disabled", inputDisabled.value),
nsInput.is("exceed", inputExceed.value),
{
[nsInput.b("group")]: slots.prepend || slots.append,
[nsInput.m("prefix")]: slots.prefix || props.prefixIcon,
[nsInput.m("suffix")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword,
[nsInput.bm("suffix", "password-clear")]: showClear.value && showPwdVisible.value,
[nsInput.b("hidden")]: props.type === "hidden"
},
rawAttrs.class
]);
const wrapperKls = (0, vue.computed)(() => [nsInput.e("wrapper"), nsInput.is("focus", isFocused.value)]);
const attrs = useAttrs();
const maxlength = (0, vue.computed)(() => props.maxlength?.toString());
const { form: elForm, formItem: elFormItem } = useFormItem();
const { inputId } = useFormItemInputId(props, { formItemContext: elFormItem });
const inputSize = useFormSize();
const inputDisabled = useFormDisabled();
const nsInput = useNamespace("input");
const nsTextarea = useNamespace("textarea");
const input = (0, vue.shallowRef)();
const textarea = (0, vue.shallowRef)();
const hovering = (0, vue.ref)(false);
const passwordVisible = (0, vue.ref)(false);
const countStyle = (0, vue.ref)();
const textareaCalcStyle = (0, vue.shallowRef)(props.inputStyle);
const saveValue = (0, vue.ref)("");
const _ref = (0, vue.computed)(() => input.value || textarea.value);
const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, {
disabled: inputDisabled,
afterBlur() {
if (props.validateEvent) elFormItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const needStatusIcon = (0, vue.computed)(() => elForm?.statusIcon ?? false);
const validateState = (0, vue.computed)(() => elFormItem?.validateState || "");
const validateIcon = (0, vue.computed)(() => validateState.value && ValidateComponentsMap[validateState.value]);
const passwordIcon = (0, vue.computed)(() => passwordVisible.value ? view_default : hide_default);
const containerStyle = (0, vue.computed)(() => [rawAttrs.style]);
const textareaStyle = (0, vue.computed)(() => [
props.inputStyle,
textareaCalcStyle.value,
{ resize: props.resize }
]);
const nativeInputValue = (0, vue.computed)(() => isNil(props.modelValue) ? "" : String(props.modelValue));
const showClear = (0, vue.computed)(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value));
const showPwdVisible = (0, vue.computed)(() => props.showPassword && !inputDisabled.value && !!nativeInputValue.value);
const isWordLimitVisible = (0, vue.computed)(() => props.showWordLimit && !!maxlength.value && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword);
const textLength = (0, vue.computed)(() => {
if (props.countGraphemes && props.showWordLimit) return props.countGraphemes(nativeInputValue.value);
return nativeInputValue.value.length;
});
const inputExceed = (0, vue.computed)(() => !!isWordLimitVisible.value && textLength.value > Number(maxlength.value));
const suffixVisible = (0, vue.computed)(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value);
const hasModelModifiers = (0, vue.computed)(() => !!Object.keys(props.modelModifiers).length);
const [recordCursor, setCursor] = useCursor(input);
useResizeObserver(textarea, (entries) => {
onceInitSizeTextarea();
if (!isWordLimitVisible.value || props.resize !== "both" && props.resize !== "horizontal") return;
const { width } = entries[0].contentRect;
countStyle.value = { right: `calc(100% - ${width + 22 - 10}px)` };
});
const resizeTextarea = () => {
const { type, autosize } = props;
if (!isClient || type !== "textarea" || !textarea.value) return;
if (autosize) {
const minRows = isObject$1(autosize) ? autosize.minRows : void 0;
const maxRows = isObject$1(autosize) ? autosize.maxRows : void 0;
const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows);
textareaCalcStyle.value = {
overflowY: "hidden",
...textareaStyle
};
(0, vue.nextTick)(() => {
textarea.value.offsetHeight;
textareaCalcStyle.value = textareaStyle;
});
} else textareaCalcStyle.value = { minHeight: calcTextareaHeight(textarea.value).minHeight };
};
const createOnceInitResize = (resizeTextarea) => {
let isInit = false;
return () => {
if (isInit || !props.autosize) return;
if (!(textarea.value?.offsetParent === null)) {
setTimeout(resizeTextarea);
isInit = true;
}
};
};
const onceInitSizeTextarea = createOnceInitResize(resizeTextarea);
const setNativeInputValue = () => {
const input = _ref.value;
const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value;
if (!input || input.value === formatterValue || props.type === "file") return;
input.value = formatterValue;
};
const formatValue = (value) => {
const { trim, number } = props.modelModifiers;
if (trim) value = value.trim();
if (number) value = `${looseToNumber(value)}`;
if (props.formatter && props.parser) value = props.parser(value);
return value;
};
const handleInput = async (event) => {
if (isComposing.value) return;
const { lazy } = props.modelModifiers;
let { value } = event.target;
let shouldForceNativeUpdate = false;
if (lazy) {
emit(INPUT_EVENT, value);
return;
}
value = formatValue(value);
if (props.countGraphemes && maxlength.value != null) {
const limit = Number(maxlength.value);
const graphemes = props.countGraphemes(value);
const saveGraphemes = props.countGraphemes(saveValue.value);
if (graphemes > limit && graphemes > saveGraphemes) if (saveGraphemes > limit) {
value = saveValue.value;
shouldForceNativeUpdate = true;
} else {
const prevValue = saveValue.value;
const nextValue = value;
let prefixLen = 0;
while (prefixLen < prevValue.length && prefixLen < nextValue.length && prevValue[prefixLen] === nextValue[prefixLen]) prefixLen++;
let prevSuffixIndex = prevValue.length;
let nextSuffixIndex = nextValue.length;
while (prevSuffixIndex > prefixLen && nextSuffixIndex > prefixLen && prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]) {
prevSuffixIndex--;
nextSuffixIndex--;
}
const before = nextValue.slice(0, prefixLen);
const removed = prevValue.slice(prefixLen, prevSuffixIndex);
const inserted = nextValue.slice(prefixLen, nextSuffixIndex);
const after = nextValue.slice(nextSuffixIndex);
const baseCount = saveGraphemes - props.countGraphemes(removed);
const availableInserted = Math.max(0, limit - baseCount);
let acceptedInserted = "";
if (availableInserted > 0) if (typeof Intl !== "undefined" && "Segmenter" in Intl) {
const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
for (const { segment } of segmenter.segment(inserted)) {
const candidate = acceptedInserted + segment;
if (props.countGraphemes(candidate) > availableInserted) break;
acceptedInserted = candidate;
}
} else for (const char of Array.from(inserted)) {
const candidate = acceptedInserted + char;
if (props.countGraphemes(candidate) > availableInserted) break;
acceptedInserted = candidate;
}
value = before + acceptedInserted + after;
shouldForceNativeUpdate = true;
}
}
if (String(value) === nativeInputValue.value) {
if (props.formatter || shouldForceNativeUpdate) {
const target = event.target;
const blockedValue = target.value;
const selectionStart = target.selectionStart;
const selectionEnd = target.selectionEnd;
setNativeInputValue();
if (shouldForceNativeUpdate && _ref.value && selectionStart != null && selectionEnd != null) {
const restoredValue = _ref.value.value;
const afterTxt = blockedValue.slice(Math.max(0, selectionEnd));
let caretPos = Math.min(selectionStart, restoredValue.length);
if (afterTxt && restoredValue.endsWith(afterTxt)) caretPos = restoredValue.length - afterTxt.length;
_ref.value.setSelectionRange(caretPos, caretPos);
}
}
return;
}
saveValue.value = value;
recordCursor();
emit(UPDATE_MODEL_EVENT, value);
emit(INPUT_EVENT, value);
await (0, vue.nextTick)();
if (props.formatter && props.parser || !hasModelModifiers.value) setNativeInputValue();
setCursor();
};
const handleChange = async (event) => {
let { value } = event.target;
value = formatValue(value);
if (props.modelModifiers.lazy) emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value, event);
await (0, vue.nextTick)();
setNativeInputValue();
};
const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({
emit,
afterComposition: handleInput
});
const handlePasswordVisible = () => {
passwordVisible.value = !passwordVisible.value;
};
const focus = () => _ref.value?.focus();
const blur = () => _ref.value?.blur();
const handleMouseLeave = (evt) => {
hovering.value = false;
emit("mouseleave", evt);
};
const handleMouseEnter = (evt) => {
hovering.value = true;
emit("mouseenter", evt);
};
const handleKeydown = (evt) => {
emit("keydown", evt);
};
const select = () => {
_ref.value?.select();
};
const clear = (evt) => {
emit(UPDATE_MODEL_EVENT, "");
emit(CHANGE_EVENT, "");
emit("clear", evt);
emit(INPUT_EVENT, "");
};
(0, vue.watch)(() => props.modelValue, () => {
(0, vue.nextTick)(() => resizeTextarea());
if (props.validateEvent) elFormItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
(0, vue.watch)(() => nativeInputValue.value, (val) => {
saveValue.value = val;
}, { immediate: true });
(0, vue.watch)(nativeInputValue, (newValue) => {
if (!_ref.value) return;
const { trim, number } = props.modelModifiers;
const elValue = _ref.value.value;
const displayValue = (number || props.type === "number") && !/^0\d/.test(elValue) ? `${looseToNumber(elValue)}` : elValue;
if (displayValue === newValue) return;
if (document.activeElement === _ref.value && _ref.value.type !== "range") {
if (trim && displayValue.trim() === newValue) return;
}
setNativeInputValue();
});
(0, vue.watch)(() => props.type, async () => {
await (0, vue.nextTick)();
setNativeInputValue();
resizeTextarea();
});
(0, vue.onMounted)(() => {
if (!props.formatter && props.parser) /* @__PURE__ */ debugWarn(COMPONENT_NAME$19, "If you set the parser, you also need to set the formatter.");
setNativeInputValue();
(0, vue.nextTick)(resizeTextarea);
});
__expose({
input,
textarea,
ref: _ref,
textareaStyle,
autosize: (0, vue.toRef)(props, "autosize"),
isComposing,
passwordVisible,
focus,
blur,
select,
clear,
resizeTextarea
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([containerKls.value, {
[(0, vue.unref)(nsInput).bm("group", "append")]: _ctx.$slots.append,
[(0, vue.unref)(nsInput).bm("group", "prepend")]: _ctx.$slots.prepend
}]),
style: (0, vue.normalizeStyle)(containerStyle.value),
onMouseenter: handleMouseEnter,
onMouseleave: handleMouseLeave
}, [(0, vue.createCommentVNode)(" input "), __props.type !== "textarea" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [
(0, vue.createCommentVNode)(" prepend slot "),
_ctx.$slots.prepend ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).be("group", "prepend"))
}, [(0, vue.renderSlot)(_ctx.$slots, "prepend")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
ref_key: "wrapperRef",
ref: wrapperRef,
class: (0, vue.normalizeClass)(wrapperKls.value)
}, [
(0, vue.createCommentVNode)(" prefix slot "),
_ctx.$slots.prefix || __props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix"))
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix-inner")) }, [(0, vue.renderSlot)(_ctx.$slots, "prefix"), __props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.prefixIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("input", (0, vue.mergeProps)({
id: (0, vue.unref)(inputId),
ref_key: "input",
ref: input,
class: (0, vue.unref)(nsInput).e("inner")
}, (0, vue.unref)(attrs), {
name: __props.name,
minlength: __props.countGraphemes ? void 0 : __props.minlength,
maxlength: __props.countGraphemes ? void 0 : maxlength.value,
type: __props.showPassword ? passwordVisible.value ? "text" : "password" : __props.type,
disabled: (0, vue.unref)(inputDisabled),
readonly: __props.readonly,
autocomplete: __props.autocomplete,
tabindex: __props.tabindex,
"aria-label": __props.ariaLabel,
placeholder: __props.placeholder,
style: __props.inputStyle,
form: __props.form,
autofocus: __props.autofocus,
role: __props.containerRole,
inputmode: __props.inputmode,
onCompositionstart: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
onCompositionupdate: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
onCompositionend: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
onInput: handleInput,
onChange: handleChange,
onKeydown: handleKeydown
}), null, 16, _hoisted_1$76),
(0, vue.createCommentVNode)(" suffix slot "),
suffixVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("suffix"))
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("suffix-inner")) }, [
!showClear.value || !showPwdVisible.value || !isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.renderSlot)(_ctx.$slots, "suffix"), __props.suffixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.suffixIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 64)) : (0, vue.createCommentVNode)("v-if", true),
showClear.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsInput).e("clear")]),
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onClick: clear
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
_: 1
}, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true),
showPwdVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 2,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsInput).e("password")]),
onClick: handlePasswordVisible,
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onMouseup: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"])
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "password-icon", { visible: passwordVisible.value }, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(passwordIcon.value)))])]),
_: 3
}, 8, [
"class",
"onMousedown",
"onMouseup"
])) : (0, vue.createCommentVNode)("v-if", true),
isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 3,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("count"), (0, vue.unref)(nsInput).is("outside", __props.wordLimitPosition === "outside")])
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("count-inner")) }, (0, vue.toDisplayString)(textLength.value) + " / " + (0, vue.toDisplayString)(maxlength.value), 3)], 2)) : (0, vue.createCommentVNode)("v-if", true),
validateState.value && validateIcon.value && needStatusIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 4,
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsInput).e("icon"),
(0, vue.unref)(nsInput).e("validateIcon"),
(0, vue.unref)(nsInput).is("loading", validateState.value === "validating")
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(validateIcon.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2),
(0, vue.createCommentVNode)(" append slot "),
_ctx.$slots.append ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).be("group", "append"))
}, [(0, vue.renderSlot)(_ctx.$slots, "append")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [
(0, vue.createCommentVNode)(" textarea "),
(0, vue.createElementVNode)("textarea", (0, vue.mergeProps)({
id: (0, vue.unref)(inputId),
ref_key: "textarea",
ref: textarea,
class: [
(0, vue.unref)(nsTextarea).e("inner"),
(0, vue.unref)(nsInput).is("focus", (0, vue.unref)(isFocused)),
(0, vue.unref)(nsTextarea).is("clearable", __props.clearable)
]
}, (0, vue.unref)(attrs), {
name: __props.name,
minlength: __props.countGraphemes ? void 0 : __props.minlength,
maxlength: __props.countGraphemes ? void 0 : maxlength.value,
tabindex: __props.tabindex,
disabled: (0, vue.unref)(inputDisabled),
readonly: __props.readonly,
autocomplete: __props.autocomplete,
style: textareaStyle.value,
"aria-label": __props.ariaLabel,
placeholder: __props.placeholder,
form: __props.form,
autofocus: __props.autofocus,
rows: __props.rows,
role: __props.containerRole,
inputmode: __props.inputmode,
onCompositionstart: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
onCompositionupdate: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
onCompositionend: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
onInput: handleInput,
onFocus: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
onBlur: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleBlur) && (0, vue.unref)(handleBlur)(...args)),
onChange: handleChange,
onKeydown: handleKeydown
}), null, 16, _hoisted_2$42),
showClear.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsTextarea).e("icon"), (0, vue.unref)(nsTextarea).e("clear")]),
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onClick: clear
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
_: 1
}, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true),
isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
style: (0, vue.normalizeStyle)(countStyle.value),
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("count"), (0, vue.unref)(nsInput).is("outside", __props.wordLimitPosition === "outside")])
}, (0, vue.toDisplayString)(textLength.value) + " / " + (0, vue.toDisplayString)(maxlength.value), 7)) : (0, vue.createCommentVNode)("v-if", true)
], 64))], 38);
};
}
});
//#endregion
//#region ../../packages/components/input/src/input.vue
var input_default = input_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/input/index.ts
const ElInput = withInstall(input_default);
//#endregion
//#region ../../packages/components/autocomplete/src/autocomplete.ts
/**
* @deprecated Removed after 3.0.0, Use `AutocompleteProps` instead.
*/
const autocompleteProps = buildProps({
...inputProps,
valueKey: {
type: String,
default: "value"
},
modelValue: {
type: [String, Number],
default: ""
},
debounce: {
type: Number,
default: 300
},
placement: {
type: definePropType(String),
values: [
"top",
"top-start",
"top-end",
"bottom",
"bottom-start",
"bottom-end"
],
default: "bottom-start"
},
fetchSuggestions: {
type: definePropType([Function, Array]),
default: NOOP
},
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
triggerOnFocus: {
type: Boolean,
default: true
},
selectWhenUnmatched: Boolean,
hideLoading: Boolean,
teleported: useTooltipContentProps.teleported,
appendTo: useTooltipContentProps.appendTo,
highlightFirstItem: Boolean,
fitInputWidth: Boolean,
loopNavigation: {
type: Boolean,
default: true
}
});
const autocompleteEmits = {
[UPDATE_MODEL_EVENT]: (value) => isString(value) || isNumber(value),
[INPUT_EVENT]: (value) => isString(value) || isNumber(value),
[CHANGE_EVENT]: (value) => isString(value) || isNumber(value),
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true,
select: (item) => isObject$1(item)
};
//#endregion
//#region ../../packages/components/scrollbar/src/scrollbar.ts
/**
* @deprecated Removed after 3.0.0, Use `ScrollbarProps` instead.
*/
const scrollbarProps = buildProps({
distance: {
type: Number,
default: 0
},
height: {
type: [String, Number],
default: ""
},
maxHeight: {
type: [String, Number],
default: ""
},
native: Boolean,
wrapStyle: {
type: definePropType([
String,
Object,
Array
]),
default: ""
},
wrapClass: {
type: [String, Array],
default: ""
},
viewClass: {
type: [String, Array],
default: ""
},
viewStyle: {
type: [
String,
Array,
Object
],
default: ""
},
noresize: Boolean,
tag: {
type: String,
default: "div"
},
always: Boolean,
minSize: {
type: Number,
default: 20
},
tabindex: {
type: [String, Number],
default: void 0
},
id: String,
role: String,
...useAriaProps(["ariaLabel", "ariaOrientation"])
});
const scrollbarEmits = {
"end-reached": (direction) => [
"left",
"right",
"top",
"bottom"
].includes(direction),
scroll: ({ scrollTop, scrollLeft }) => [scrollTop, scrollLeft].every(isNumber)
};
//#endregion
//#region ../../packages/components/scrollbar/src/bar.ts
/**
* @deprecated Removed after 3.0.0, Use `BarProps` instead.
*/
const barProps = buildProps({
always: {
type: Boolean,
default: true
},
minSize: {
type: Number,
required: true
}
});
//#endregion
//#region ../../packages/components/scrollbar/src/util.ts
const GAP = 4;
const BAR_MAP = {
vertical: {
offset: "offsetHeight",
scroll: "scrollTop",
scrollSize: "scrollHeight",
size: "height",
key: "vertical",
axis: "Y",
client: "clientY",
direction: "top"
},
horizontal: {
offset: "offsetWidth",
scroll: "scrollLeft",
scrollSize: "scrollWidth",
size: "width",
key: "horizontal",
axis: "X",
client: "clientX",
direction: "left"
}
};
const renderThumbStyle = ({ move, size, bar }) => ({
[bar.size]: size,
transform: `translate${bar.axis}(${move}%)`
});
//#endregion
//#region ../../packages/components/scrollbar/src/thumb.ts
/**
* @deprecated Removed after 3.0.0, Use `ThumbProps` instead.
*/
const thumbProps = buildProps({
vertical: Boolean,
size: String,
move: Number,
ratio: {
type: Number,
required: true
},
always: Boolean
});
//#endregion
//#region ../../packages/components/scrollbar/src/constants.ts
const scrollbarContextKey = Symbol("scrollbarContextKey");
//#endregion
//#region ../../packages/components/scrollbar/src/thumb.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$18 = "Thumb";
var thumb_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "thumb",
props: thumbProps,
setup(__props) {
const props = __props;
const scrollbar = (0, vue.inject)(scrollbarContextKey);
const ns = useNamespace("scrollbar");
if (!scrollbar) throwError(COMPONENT_NAME$18, "can not inject scrollbar context");
const instance = (0, vue.ref)();
const thumb = (0, vue.ref)();
const thumbState = (0, vue.ref)({});
const visible = (0, vue.ref)(false);
let cursorDown = false;
let cursorLeave = false;
let baseScrollHeight = 0;
let baseScrollWidth = 0;
let originalOnSelectStart = isClient ? document.onselectstart : null;
const bar = (0, vue.computed)(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]);
const thumbStyle = (0, vue.computed)(() => renderThumbStyle({
size: props.size,
move: props.move,
bar: bar.value
}));
const offsetRatio = (0, vue.computed)(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]);
const clickThumbHandler = (e) => {
e.stopPropagation();
if (e.ctrlKey || [1, 2].includes(e.button)) return;
window.getSelection()?.removeAllRanges();
startDrag(e);
const el = e.currentTarget;
if (!el) return;
thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]);
};
const clickTrackHandler = (e) => {
if (!thumb.value || !instance.value || !scrollbar.wrapElement) return;
const thumbPositionPercentage = (Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) - thumb.value[bar.value.offset] / 2) * 100 * offsetRatio.value / instance.value[bar.value.offset];
scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100;
};
const startDrag = (e) => {
e.stopImmediatePropagation();
cursorDown = true;
baseScrollHeight = scrollbar.wrapElement.scrollHeight;
baseScrollWidth = scrollbar.wrapElement.scrollWidth;
document.addEventListener("mousemove", mouseMoveDocumentHandler);
document.addEventListener("mouseup", mouseUpDocumentHandler);
originalOnSelectStart = document.onselectstart;
document.onselectstart = () => false;
};
const mouseMoveDocumentHandler = (e) => {
if (!instance.value || !thumb.value) return;
if (cursorDown === false) return;
const prevPage = thumbState.value[bar.value.axis];
if (!prevPage) return;
const thumbPositionPercentage = ((instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1 - (thumb.value[bar.value.offset] - prevPage)) * 100 * offsetRatio.value / instance.value[bar.value.offset];
if (bar.value.scroll === "scrollLeft") scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollWidth / 100;
else scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollHeight / 100;
};
const mouseUpDocumentHandler = () => {
cursorDown = false;
thumbState.value[bar.value.axis] = 0;
document.removeEventListener("mousemove", mouseMoveDocumentHandler);
document.removeEventListener("mouseup", mouseUpDocumentHandler);
restoreOnselectstart();
if (cursorLeave) visible.value = false;
};
const mouseMoveScrollbarHandler = () => {
cursorLeave = false;
visible.value = !!props.size;
};
const mouseLeaveScrollbarHandler = () => {
cursorLeave = true;
visible.value = cursorDown;
};
(0, vue.onBeforeUnmount)(() => {
restoreOnselectstart();
document.removeEventListener("mouseup", mouseUpDocumentHandler);
});
const restoreOnselectstart = () => {
if (document.onselectstart !== originalOnSelectStart) document.onselectstart = originalOnSelectStart;
};
useEventListener((0, vue.toRef)(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler);
useEventListener((0, vue.toRef)(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
name: (0, vue.unref)(ns).b("fade"),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
ref_key: "instance",
ref: instance,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("bar"), (0, vue.unref)(ns).is(bar.value.key)]),
onMousedown: clickTrackHandler,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.createElementVNode)("div", {
ref_key: "thumb",
ref: thumb,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("thumb")),
style: (0, vue.normalizeStyle)(thumbStyle.value),
onMousedown: clickThumbHandler
}, null, 38)], 34), [[vue.vShow, __props.always || visible.value]])]),
_: 1
}, 8, ["name"]);
};
}
});
//#endregion
//#region ../../packages/components/scrollbar/src/thumb.vue
var thumb_default = thumb_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/scrollbar/src/bar.vue?vue&type=script&setup=true&lang.ts
var bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "bar",
props: barProps,
setup(__props, { expose: __expose }) {
const props = __props;
const scrollbar = (0, vue.inject)(scrollbarContextKey);
const moveX = (0, vue.ref)(0);
const moveY = (0, vue.ref)(0);
const sizeWidth = (0, vue.ref)("");
const sizeHeight = (0, vue.ref)("");
const ratioY = (0, vue.ref)(1);
const ratioX = (0, vue.ref)(1);
const handleScroll = (wrap) => {
if (wrap) {
const offsetHeight = wrap.offsetHeight - GAP;
const offsetWidth = wrap.offsetWidth - GAP;
moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value;
moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value;
}
};
const update = () => {
const wrap = scrollbar?.wrapElement;
if (!wrap) return;
const offsetHeight = wrap.offsetHeight - GAP;
const offsetWidth = wrap.offsetWidth - GAP;
const originalHeight = offsetHeight ** 2 / wrap.scrollHeight;
const originalWidth = offsetWidth ** 2 / wrap.scrollWidth;
const height = Math.max(originalHeight, props.minSize);
const width = Math.max(originalWidth, props.minSize);
ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height));
ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width));
sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : "";
sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : "";
};
__expose({
handleScroll,
update
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createVNode)(thumb_default, {
move: moveX.value,
ratio: ratioX.value,
size: sizeWidth.value,
always: __props.always
}, null, 8, [
"move",
"ratio",
"size",
"always"
]), (0, vue.createVNode)(thumb_default, {
move: moveY.value,
ratio: ratioY.value,
size: sizeHeight.value,
vertical: "",
always: __props.always
}, null, 8, [
"move",
"ratio",
"size",
"always"
])], 64);
};
}
});
//#endregion
//#region ../../packages/components/scrollbar/src/bar.vue
var bar_default = bar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/scrollbar/src/scrollbar.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$75 = ["tabindex"];
const COMPONENT_NAME$17 = "ElScrollbar";
var scrollbar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$17,
__name: "scrollbar",
props: scrollbarProps,
emits: scrollbarEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("scrollbar");
let stopResizeObserver = void 0;
let stopWrapResizeObserver = void 0;
let stopResizeListener = void 0;
let wrapScrollTop = 0;
let wrapScrollLeft = 0;
let direction = "";
const distanceScrollState = {
bottom: false,
top: false,
right: false,
left: false
};
const scrollbarRef = (0, vue.ref)();
const wrapRef = (0, vue.ref)();
const resizeRef = (0, vue.ref)();
const barRef = (0, vue.ref)();
const wrapStyle = (0, vue.computed)(() => {
const style = {};
const height = addUnit(props.height);
const maxHeight = addUnit(props.maxHeight);
if (height) style.height = height;
if (maxHeight) style.maxHeight = maxHeight;
return [props.wrapStyle, style];
});
const wrapKls = (0, vue.computed)(() => {
return [
props.wrapClass,
ns.e("wrap"),
{ [ns.em("wrap", "hidden-default")]: !props.native }
];
});
const resizeKls = (0, vue.computed)(() => {
return [ns.e("view"), props.viewClass];
});
const shouldSkipDirection = (direction) => {
return distanceScrollState[direction] ?? false;
};
const DIRECTION_PAIRS = {
top: "bottom",
bottom: "top",
left: "right",
right: "left"
};
const updateTriggerStatus = (arrivedStates) => {
const oppositeDirection = DIRECTION_PAIRS[direction];
if (!oppositeDirection) return;
const arrived = arrivedStates[direction];
const oppositeArrived = arrivedStates[oppositeDirection];
if (arrived && !distanceScrollState[direction]) distanceScrollState[direction] = true;
if (!oppositeArrived && distanceScrollState[oppositeDirection]) distanceScrollState[oppositeDirection] = false;
};
const handleScroll = () => {
if (wrapRef.value) {
barRef.value?.handleScroll(wrapRef.value);
const prevTop = wrapScrollTop;
const prevLeft = wrapScrollLeft;
wrapScrollTop = wrapRef.value.scrollTop;
wrapScrollLeft = wrapRef.value.scrollLeft;
const arrivedStates = {
bottom: !isGreaterThan(wrapRef.value.scrollHeight - props.distance, wrapRef.value.clientHeight + wrapScrollTop),
top: wrapScrollTop <= props.distance && prevTop !== 0,
right: !isGreaterThan(wrapRef.value.scrollWidth - props.distance, wrapRef.value.clientWidth + wrapScrollLeft) && prevLeft !== wrapScrollLeft,
left: wrapScrollLeft <= props.distance && prevLeft !== 0
};
emit("scroll", {
scrollTop: wrapScrollTop,
scrollLeft: wrapScrollLeft
});
if (prevTop !== wrapScrollTop) direction = wrapScrollTop > prevTop ? "bottom" : "top";
if (prevLeft !== wrapScrollLeft) direction = wrapScrollLeft > prevLeft ? "right" : "left";
if (props.distance > 0) {
if (shouldSkipDirection(direction)) return;
updateTriggerStatus(arrivedStates);
}
if (arrivedStates[direction]) emit("end-reached", direction);
}
};
function scrollTo(arg1, arg2) {
if (isObject$1(arg1)) wrapRef.value.scrollTo(arg1);
else if (isNumber(arg1) && isNumber(arg2)) wrapRef.value.scrollTo(arg1, arg2);
}
const setScrollTop = (value) => {
if (!isNumber(value)) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$17, "value must be a number");
return;
}
wrapRef.value.scrollTop = value;
};
const setScrollLeft = (value) => {
if (!isNumber(value)) {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$17, "value must be a number");
return;
}
wrapRef.value.scrollLeft = value;
};
const update = () => {
barRef.value?.update();
distanceScrollState[direction] = false;
if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value);
};
(0, vue.watch)(() => props.noresize, (noresize) => {
if (noresize) {
stopResizeObserver?.();
stopWrapResizeObserver?.();
stopResizeListener?.();
} else {
({stop: stopResizeObserver} = useResizeObserver(resizeRef, update));
({stop: stopWrapResizeObserver} = useResizeObserver(wrapRef, update));
stopResizeListener = useEventListener("resize", update);
}
}, { immediate: true });
(0, vue.watch)(() => [props.maxHeight, props.height], () => {
if (!props.native) (0, vue.nextTick)(() => {
update();
});
});
(0, vue.provide)(scrollbarContextKey, (0, vue.reactive)({
scrollbarElement: scrollbarRef,
wrapElement: wrapRef
}));
(0, vue.onActivated)(() => {
if (wrapRef.value) {
wrapRef.value.scrollTop = wrapScrollTop;
wrapRef.value.scrollLeft = wrapScrollLeft;
}
});
(0, vue.onMounted)(() => {
if (!props.native) (0, vue.nextTick)(() => {
update();
});
});
(0, vue.onUpdated)(() => update());
__expose({
wrapRef,
update,
scrollTo,
setScrollTop,
setScrollLeft,
handleScroll
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "scrollbarRef",
ref: scrollbarRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
}, [(0, vue.createElementVNode)("div", {
ref_key: "wrapRef",
ref: wrapRef,
class: (0, vue.normalizeClass)(wrapKls.value),
style: (0, vue.normalizeStyle)(wrapStyle.value),
tabindex: __props.tabindex,
onScroll: handleScroll
}, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
id: __props.id,
ref_key: "resizeRef",
ref: resizeRef,
class: (0, vue.normalizeClass)(resizeKls.value),
style: (0, vue.normalizeStyle)(__props.viewStyle),
role: __props.role,
"aria-label": __props.ariaLabel,
"aria-orientation": __props.ariaOrientation
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, [
"id",
"class",
"style",
"role",
"aria-label",
"aria-orientation"
]))], 46, _hoisted_1$75), !__props.native ? ((0, vue.openBlock)(), (0, vue.createBlock)(bar_default, {
key: 0,
ref_key: "barRef",
ref: barRef,
always: __props.always,
"min-size": __props.minSize
}, null, 8, ["always", "min-size"])) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/scrollbar/src/scrollbar.vue
var scrollbar_default = scrollbar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/scrollbar/index.ts
const ElScrollbar = withInstall(scrollbar_default);
//#endregion
//#region ../../packages/components/autocomplete/src/autocomplete.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$74 = ["aria-expanded", "aria-owns"];
const _hoisted_2$41 = { key: 0 };
const _hoisted_3$18 = [
"id",
"aria-selected",
"onClick"
];
const COMPONENT_NAME$16 = "ElAutocomplete";
var autocomplete_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$16,
inheritAttrs: false,
__name: "autocomplete",
props: autocompleteProps,
emits: autocompleteEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const passInputProps = (0, vue.computed)(() => {
const inputProps = ElInput.props ?? [];
return pick(props, isArray$1(inputProps) ? inputProps : Object.keys(inputProps));
});
const rawAttrs = (0, vue.useAttrs)();
const disabled = useFormDisabled();
const ns = useNamespace("autocomplete");
const inputRef = (0, vue.ref)();
const regionRef = (0, vue.ref)();
const popperRef = (0, vue.ref)();
const listboxRef = (0, vue.ref)();
let readonly = false;
let ignoreFocusEvent = false;
const suggestions = (0, vue.ref)([]);
const highlightedIndex = (0, vue.ref)(-1);
const dropdownWidth = (0, vue.ref)("");
const activated = (0, vue.ref)(false);
const suggestionDisabled = (0, vue.ref)(false);
const loading = (0, vue.ref)(false);
const listboxId = useId();
const styles = (0, vue.computed)(() => rawAttrs.style);
const suggestionVisible = (0, vue.computed)(() => {
return (suggestions.value.length > 0 || loading.value) && activated.value;
});
const suggestionLoading = (0, vue.computed)(() => !props.hideLoading && loading.value);
const refInput = (0, vue.computed)(() => {
if (inputRef.value) return Array.from(inputRef.value.$el.querySelectorAll("input"));
return [];
});
const onSuggestionShow = () => {
if (suggestionVisible.value) dropdownWidth.value = `${inputRef.value.$el.offsetWidth}px`;
};
const onHide = () => {
highlightedIndex.value = -1;
};
const getData = async (queryString) => {
if (suggestionDisabled.value) return;
const cb = (suggestionList) => {
loading.value = false;
if (suggestionDisabled.value) return;
if (isArray$1(suggestionList)) {
suggestions.value = suggestionList;
highlightedIndex.value = props.highlightFirstItem ? 0 : -1;
} else throwError(COMPONENT_NAME$16, "autocomplete suggestions must be an array");
};
loading.value = true;
if (isArray$1(props.fetchSuggestions)) cb(props.fetchSuggestions);
else {
const result = await props.fetchSuggestions(queryString, cb);
if (isArray$1(result)) cb(result);
}
};
const debouncedGetData = useDebounceFn(getData, (0, vue.computed)(() => props.debounce));
const handleInput = (value) => {
const valuePresented = !!value;
emit(INPUT_EVENT, value);
emit(UPDATE_MODEL_EVENT, value);
suggestionDisabled.value = false;
activated.value ||= valuePresented;
if (!props.triggerOnFocus && !value) {
suggestionDisabled.value = true;
suggestions.value = [];
return;
}
debouncedGetData(value);
};
const handleMouseDown = (event) => {
if (disabled.value) return;
if (event.target?.tagName !== "INPUT" || refInput.value.includes(document.activeElement)) activated.value = true;
};
const handleChange = (value) => {
emit(CHANGE_EVENT, value);
};
const handleFocus = (evt) => {
if (!ignoreFocusEvent) {
activated.value = true;
emit("focus", evt);
const queryString = props.modelValue ?? "";
if (props.triggerOnFocus && !readonly) debouncedGetData(String(queryString));
} else ignoreFocusEvent = false;
};
const handleBlur = (evt) => {
setTimeout(() => {
if (popperRef.value?.isFocusInsideContent()) {
ignoreFocusEvent = true;
return;
}
activated.value && close();
emit("blur", evt);
});
};
const handleClear = () => {
activated.value = false;
emit(UPDATE_MODEL_EVENT, "");
emit("clear");
};
const handleKeyEnter = async () => {
if (inputRef.value?.isComposing) return;
if (suggestionVisible.value && highlightedIndex.value >= 0 && highlightedIndex.value < suggestions.value.length) handleSelect(suggestions.value[highlightedIndex.value]);
else {
if (props.selectWhenUnmatched) {
emit("select", { value: props.modelValue });
suggestions.value = [];
highlightedIndex.value = -1;
}
activated.value = true;
debouncedGetData(String(props.modelValue));
}
};
const handleKeyEscape = (evt) => {
if (suggestionVisible.value) {
evt.preventDefault();
evt.stopPropagation();
close();
}
};
const close = () => {
activated.value = false;
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
inputRef.value?.blur();
};
const handleSelect = async (item) => {
emit(INPUT_EVENT, item[props.valueKey]);
emit(UPDATE_MODEL_EVENT, item[props.valueKey]);
emit("select", item);
suggestions.value = [];
highlightedIndex.value = -1;
};
const highlight = (index) => {
if (!suggestionVisible.value || loading.value) return;
if (index < 0) {
if (!props.loopNavigation) {
highlightedIndex.value = -1;
return;
}
index = suggestions.value.length - 1;
}
if (index >= suggestions.value.length) index = props.loopNavigation ? 0 : suggestions.value.length - 1;
const [suggestion, suggestionList] = getSuggestionContext();
const highlightItem = suggestionList[index];
const scrollTop = suggestion.scrollTop;
const { offsetTop, scrollHeight } = highlightItem;
if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) suggestion.scrollTop = offsetTop + scrollHeight - suggestion.clientHeight;
if (offsetTop < scrollTop) suggestion.scrollTop = offsetTop;
highlightedIndex.value = index;
inputRef.value?.ref?.setAttribute("aria-activedescendant", `${listboxId.value}-item-${highlightedIndex.value}`);
};
const getSuggestionContext = () => {
const suggestion = regionRef.value.querySelector(`.${ns.be("suggestion", "wrap")}`);
return [suggestion, suggestion.querySelectorAll(`.${ns.be("suggestion", "list")} li`)];
};
const stopHandle = onClickOutside(listboxRef, (event) => {
if (popperRef.value?.isFocusInsideContent()) return;
const hadIgnoredFocus = ignoreFocusEvent;
ignoreFocusEvent = false;
if (!suggestionVisible.value) return;
if (hadIgnoredFocus) handleBlur(new FocusEvent("blur", event));
else close();
});
const handleKeydown = (e) => {
switch (getEventCode(e)) {
case EVENT_CODE.up:
e.preventDefault();
highlight(highlightedIndex.value - 1);
break;
case EVENT_CODE.down:
e.preventDefault();
highlight(highlightedIndex.value + 1);
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
e.preventDefault();
handleKeyEnter();
break;
case EVENT_CODE.tab:
close();
break;
case EVENT_CODE.esc:
handleKeyEscape(e);
break;
case EVENT_CODE.home:
e.preventDefault();
highlight(0);
break;
case EVENT_CODE.end:
e.preventDefault();
highlight(suggestions.value.length - 1);
break;
case EVENT_CODE.pageUp:
e.preventDefault();
highlight(Math.max(0, highlightedIndex.value - 10));
break;
case EVENT_CODE.pageDown:
e.preventDefault();
highlight(Math.min(suggestions.value.length - 1, highlightedIndex.value + 10));
break;
}
};
(0, vue.onBeforeUnmount)(() => {
stopHandle?.();
});
(0, vue.onMounted)(() => {
const inputElement = inputRef.value?.ref;
if (!inputElement) return;
[
{
key: "role",
value: "textbox"
},
{
key: "aria-autocomplete",
value: "list"
},
{
key: "aria-controls",
value: listboxId.value
},
{
key: "aria-activedescendant",
value: `${listboxId.value}-item-${highlightedIndex.value}`
}
].forEach(({ key, value }) => inputElement.setAttribute(key, value));
readonly = inputElement.hasAttribute("readonly");
});
__expose({
highlightedIndex,
activated,
loading,
inputRef,
popperRef,
suggestions,
handleSelect,
handleKeyEnter,
focus,
blur,
close,
highlight,
getData
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
ref_key: "popperRef",
ref: popperRef,
visible: suggestionVisible.value,
placement: __props.placement,
"fallback-placements": ["bottom-start", "top-start"],
"popper-class": [(0, vue.unref)(ns).e("popper"), __props.popperClass],
"popper-style": __props.popperStyle,
teleported: __props.teleported,
"append-to": __props.appendTo,
"gpu-acceleration": false,
pure: "",
"manual-mode": "",
effect: "light",
trigger: "click",
transition: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top`,
persistent: "",
role: "listbox",
onBeforeShow: onSuggestionShow,
onHide
}, {
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref_key: "regionRef",
ref: regionRef,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("suggestion"), (0, vue.unref)(ns).is("loading", suggestionLoading.value)]),
style: (0, vue.normalizeStyle)({
[__props.fitInputWidth ? "width" : "minWidth"]: dropdownWidth.value,
outline: "none"
}),
role: "region"
}, [
_ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("suggestion", "header")),
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createVNode)((0, vue.unref)(ElScrollbar), {
id: (0, vue.unref)(listboxId),
tag: "ul",
"wrap-class": (0, vue.unref)(ns).be("suggestion", "wrap"),
"view-class": (0, vue.unref)(ns).be("suggestion", "list"),
role: "listbox"
}, {
default: (0, vue.withCtx)(() => [suggestionLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", _hoisted_2$41, [(0, vue.renderSlot)(_ctx.$slots, "loading", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
_: 1
}, 8, ["class"])])])) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(suggestions.value, (item, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
id: `${(0, vue.unref)(listboxId)}-item-${index}`,
key: index,
class: (0, vue.normalizeClass)({ highlighted: highlightedIndex.value === index }),
role: "option",
"aria-selected": highlightedIndex.value === index,
onClick: ($event) => handleSelect(item)
}, [(0, vue.renderSlot)(_ctx.$slots, "default", { item }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item[__props.valueKey]), 1)])], 10, _hoisted_3$18);
}), 128))]),
_: 3
}, 8, [
"id",
"wrap-class",
"view-class"
]),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("suggestion", "footer")),
onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 6)]),
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref_key: "listboxRef",
ref: listboxRef,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), _ctx.$attrs.class]),
style: (0, vue.normalizeStyle)(styles.value),
role: "combobox",
"aria-haspopup": "listbox",
"aria-expanded": suggestionVisible.value,
"aria-owns": (0, vue.unref)(listboxId)
}, [(0, vue.createVNode)((0, vue.unref)(ElInput), (0, vue.mergeProps)({
ref_key: "inputRef",
ref: inputRef
}, (0, vue.mergeProps)(passInputProps.value, _ctx.$attrs), {
"model-value": __props.modelValue,
disabled: (0, vue.unref)(disabled),
onInput: handleInput,
onChange: handleChange,
onFocus: handleFocus,
onBlur: handleBlur,
onClear: handleClear,
onKeydown: handleKeydown,
onMousedown: handleMouseDown
}), (0, vue.createSlots)({ _: 2 }, [
_ctx.$slots.prepend ? {
name: "prepend",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prepend")]),
key: "0"
} : void 0,
_ctx.$slots.append ? {
name: "append",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "append")]),
key: "1"
} : void 0,
_ctx.$slots.prefix ? {
name: "prefix",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
key: "2"
} : void 0,
_ctx.$slots.suffix ? {
name: "suffix",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "suffix")]),
key: "3"
} : void 0
]), 1040, ["model-value", "disabled"])], 14, _hoisted_1$74)]),
_: 3
}, 8, [
"visible",
"placement",
"popper-class",
"popper-style",
"teleported",
"append-to",
"transition"
]);
};
}
});
//#endregion
//#region ../../packages/components/autocomplete/src/autocomplete.vue
var autocomplete_default = autocomplete_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/autocomplete/index.ts
const ElAutocomplete = withInstall(autocomplete_default);
//#endregion
//#region ../../packages/components/avatar/src/avatar.ts
/**
* @deprecated Removed after 3.0.0, Use `AvatarProps` instead.
*/
const avatarProps = buildProps({
size: {
type: [Number, String],
values: componentSizes,
validator: (val) => isNumber(val)
},
shape: {
type: String,
values: ["circle", "square"]
},
icon: { type: iconPropType },
src: {
type: String,
default: ""
},
alt: String,
srcSet: String,
fit: {
type: definePropType(String),
default: "cover"
}
});
const avatarEmits = { error: (evt) => evt instanceof Event };
//#endregion
//#region ../../packages/components/avatar/src/constants.ts
const avatarGroupContextKey = Symbol("avatarGroupContextKey");
//#endregion
//#region ../../packages/components/avatar/src/avatar.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$73 = [
"src",
"alt",
"srcset"
];
var avatar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAvatar",
__name: "avatar",
props: avatarProps,
emits: avatarEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const avatarGroupContext = (0, vue.inject)(avatarGroupContextKey, void 0);
const ns = useNamespace("avatar");
const hasLoadError = (0, vue.ref)(false);
const size = (0, vue.computed)(() => props.size ?? avatarGroupContext?.size);
const shape = (0, vue.computed)(() => props.shape ?? avatarGroupContext?.shape ?? "circle");
const avatarClass = (0, vue.computed)(() => {
const { icon } = props;
const classList = [ns.b()];
if (isString(size.value)) classList.push(ns.m(size.value));
if (icon) classList.push(ns.m("icon"));
if (shape.value) classList.push(ns.m(shape.value));
return classList;
});
const sizeStyle = (0, vue.computed)(() => {
return isNumber(size.value) ? ns.cssVarBlock({ size: addUnit(size.value) }) : void 0;
});
const fitStyle = (0, vue.computed)(() => ({ objectFit: props.fit }));
(0, vue.watch)(() => [props.src, props.srcSet], () => hasLoadError.value = false);
function handleError(e) {
hasLoadError.value = true;
emit("error", e);
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
class: (0, vue.normalizeClass)(avatarClass.value),
style: (0, vue.normalizeStyle)(sizeStyle.value)
}, [(__props.src || __props.srcSet) && !hasLoadError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
key: 0,
src: __props.src,
alt: __props.alt,
srcset: __props.srcSet,
style: (0, vue.normalizeStyle)(fitStyle.value),
onError: handleError
}, null, 44, _hoisted_1$73)) : __props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
})) : (0, vue.renderSlot)(_ctx.$slots, "default", { key: 2 })], 6);
};
}
});
//#endregion
//#region ../../packages/components/avatar/src/avatar.vue
var avatar_default = avatar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/avatar/src/avatar-group-props.ts
const avatarGroupProps = {
size: {
type: definePropType([Number, String]),
values: componentSizes,
validator: (val) => isNumber(val)
},
shape: {
type: definePropType(String),
values: ["circle", "square"]
},
collapseAvatars: Boolean,
collapseAvatarsTooltip: Boolean,
maxCollapseAvatars: {
type: Number,
default: 1
},
effect: {
type: definePropType(String),
default: "light"
},
placement: {
type: definePropType(String),
values: Ee,
default: "top"
},
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
collapseClass: String,
collapseStyle: { type: definePropType([
String,
Array,
Object
]) }
};
//#endregion
//#region ../../packages/components/avatar/src/avatar-group.tsx
var avatar_group_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAvatarGroup",
props: avatarGroupProps,
setup(props, { slots }) {
const ns = useNamespace("avatar-group");
(0, vue.provide)(avatarGroupContextKey, (0, vue.reactive)({
size: (0, vue.toRef)(props, "size"),
shape: (0, vue.toRef)(props, "shape")
}));
return () => {
const avatars = flattedChildren(slots.default?.() ?? []);
let visibleAvatars = avatars;
if (props.collapseAvatars && avatars.length > props.maxCollapseAvatars) {
visibleAvatars = avatars.slice(0, props.maxCollapseAvatars);
const hiddenAvatars = avatars.slice(props.maxCollapseAvatars);
visibleAvatars.push((0, vue.createVNode)(ElTooltip, {
"popperClass": props.popperClass,
"popperStyle": props.popperStyle,
"placement": props.placement,
"effect": props.effect,
"disabled": !props.collapseAvatarsTooltip
}, {
default: () => (0, vue.createVNode)(avatar_default, {
"size": props.size,
"shape": props.shape,
"class": props.collapseClass,
"style": props.collapseStyle
}, { default: () => [(0, vue.createTextVNode)("+ "), hiddenAvatars.length] }),
content: () => (0, vue.createVNode)("div", { "class": ns.e("collapse-avatars") }, [hiddenAvatars.map((node, idx) => (0, vue.isVNode)(node) ? (0, vue.cloneVNode)(node, { key: node.key ?? idx }) : node)])
}));
}
return (0, vue.createVNode)("div", { "class": ns.b() }, [visibleAvatars]);
};
}
});
//#endregion
//#region ../../packages/components/avatar/index.ts
const ElAvatar = withInstall(avatar_default, { AvatarGroup: avatar_group_default });
const ElAvatarGroup = withNoopInstall(avatar_group_default);
//#endregion
//#region ../../packages/components/backtop/src/backtop.ts
/**
* @deprecated Removed after 3.0.0, Use `BacktopProps` instead.
*/
const backtopProps = {
visibilityHeight: {
type: Number,
default: 200
},
target: {
type: String,
default: ""
},
right: {
type: Number,
default: 40
},
bottom: {
type: Number,
default: 40
}
};
const backtopEmits = { click: (evt) => evt instanceof MouseEvent };
//#endregion
//#region ../../packages/components/backtop/src/use-backtop.ts
const useBackTop = (props, emit, componentName) => {
const el = (0, vue.shallowRef)();
const container = (0, vue.shallowRef)();
const visible = (0, vue.ref)(false);
const handleScroll = () => {
if (el.value) visible.value = el.value.scrollTop >= props.visibilityHeight;
};
const handleClick = (event) => {
el.value?.scrollTo({
top: 0,
behavior: "smooth"
});
emit("click", event);
};
useEventListener(container, "scroll", useThrottleFn(handleScroll, 300, true));
(0, vue.onMounted)(() => {
container.value = document;
el.value = document.documentElement;
if (props.target) {
el.value = document.querySelector(props.target) ?? void 0;
if (!el.value) throwError(componentName, `target does not exist: ${props.target}`);
container.value = el.value;
}
handleScroll();
});
return {
visible,
handleClick
};
};
//#endregion
//#region ../../packages/components/backtop/src/backtop.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$15 = "ElBacktop";
var backtop_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$15,
__name: "backtop",
props: backtopProps,
emits: backtopEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("backtop");
const { handleClick, visible } = useBackTop(props, emit, COMPONENT_NAME$15);
const backTopStyle = (0, vue.computed)(() => ({
right: `${props.right}px`,
bottom: `${props.bottom}px`
}));
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, { name: `${(0, vue.unref)(ns).namespace.value}-fade-in` }, {
default: (0, vue.withCtx)(() => [(0, vue.unref)(visible) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
style: (0, vue.normalizeStyle)(backTopStyle.value),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args), ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(caret_top_default))]),
_: 1
}, 8, ["class"])])], 6)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, ["name"]);
};
}
});
//#endregion
//#region ../../packages/components/backtop/src/backtop.vue
var backtop_default = backtop_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/backtop/index.ts
const ElBacktop = withInstall(backtop_default);
//#endregion
//#region ../../packages/components/badge/src/badge.ts
/**
* @deprecated Removed after 3.0.0, Use `BadgeProps` instead.
*/
const badgeProps = buildProps({
value: {
type: [String, Number],
default: ""
},
max: {
type: Number,
default: 99
},
isDot: Boolean,
hidden: Boolean,
type: {
type: String,
values: [
"primary",
"success",
"warning",
"info",
"danger"
],
default: "danger"
},
showZero: {
type: Boolean,
default: true
},
color: String,
badgeStyle: { type: definePropType([
String,
Object,
Array
]) },
offset: {
type: definePropType(Array),
default: () => [0, 0]
},
badgeClass: { type: String }
});
//#endregion
//#region ../../packages/components/badge/src/badge.vue?vue&type=script&setup=true&lang.ts
var badge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElBadge",
__name: "badge",
props: badgeProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("badge");
const content = (0, vue.computed)(() => {
if (props.isDot) return "";
if (isNumber(props.value) && isNumber(props.max)) return props.max < props.value ? `${props.max}+` : `${props.value}`;
return `${props.value}`;
});
const style = (0, vue.computed)(() => {
return [{
backgroundColor: props.color,
marginRight: addUnit(-props.offset[0]),
marginTop: addUnit(props.offset[1])
}, props.badgeStyle ?? {}];
});
__expose({ content });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)(vue.Transition, { name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-center` }, {
default: (0, vue.withCtx)(() => [!__props.hidden && (content.value || __props.isDot || _ctx.$slots.content) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("sup", {
key: 0,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("content"),
(0, vue.unref)(ns).em("content", __props.type),
(0, vue.unref)(ns).is("fixed", !!_ctx.$slots.default),
(0, vue.unref)(ns).is("dot", __props.isDot),
(0, vue.unref)(ns).is("hide-zero", !__props.showZero && __props.value === 0),
__props.badgeClass
]),
style: (0, vue.normalizeStyle)(style.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "content", { value: content.value }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(content.value), 1)])], 6)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, ["name"])], 2);
};
}
});
//#endregion
//#region ../../packages/components/badge/src/badge.vue
var badge_default = badge_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/badge/index.ts
const ElBadge = withInstall(badge_default);
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb.ts
/**
* @deprecated Removed after 3.0.0, Use `BreadcrumbProps` instead.
*/
const breadcrumbProps = buildProps({
separator: {
type: String,
default: "/"
},
separatorIcon: { type: iconPropType }
});
//#endregion
//#region ../../packages/components/breadcrumb/src/constants.ts
const breadcrumbKey = Symbol("breadcrumbKey");
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$72 = ["aria-label"];
var breadcrumb_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElBreadcrumb",
__name: "breadcrumb",
props: breadcrumbProps,
setup(__props) {
const { t } = useLocale();
const props = __props;
const ns = useNamespace("breadcrumb");
const breadcrumb = (0, vue.ref)();
(0, vue.provide)(breadcrumbKey, props);
(0, vue.onMounted)(() => {
const items = breadcrumb.value.querySelectorAll(`.${ns.e("item")}`);
if (items.length) items[items.length - 1].setAttribute("aria-current", "page");
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "breadcrumb",
ref: breadcrumb,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
"aria-label": (0, vue.unref)(t)("el.breadcrumb.label"),
role: "navigation"
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_1$72);
};
}
});
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb.vue
var breadcrumb_default = breadcrumb_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb-item.ts
/**
* @deprecated Removed after 3.0.0, Use `BreadcrumbItemProps` instead.
*/
const breadcrumbItemProps = buildProps({
to: {
type: definePropType([String, Object]),
default: ""
},
replace: Boolean
});
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb-item.vue?vue&type=script&setup=true&lang.ts
var breadcrumb_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElBreadcrumbItem",
__name: "breadcrumb-item",
props: breadcrumbItemProps,
setup(__props) {
const props = __props;
const instance = (0, vue.getCurrentInstance)();
const breadcrumbContext = (0, vue.inject)(breadcrumbKey, void 0);
const ns = useNamespace("breadcrumb");
const router = instance.appContext.config.globalProperties.$router;
const onClick = () => {
if (!props.to || !router) return;
props.replace ? router.replace(props.to) : router.push(props.to);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")) }, [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("inner"), (0, vue.unref)(ns).is("link", !!__props.to)]),
role: "link",
onClick
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), (0, vue.unref)(breadcrumbContext)?.separatorIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("separator"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(breadcrumbContext).separatorIcon)))]),
_: 1
}, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("separator")),
role: "presentation"
}, (0, vue.toDisplayString)((0, vue.unref)(breadcrumbContext)?.separator), 3))], 2);
};
}
});
//#endregion
//#region ../../packages/components/breadcrumb/src/breadcrumb-item.vue
var breadcrumb_item_default = breadcrumb_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/breadcrumb/index.ts
const ElBreadcrumb = withInstall(breadcrumb_default, { BreadcrumbItem: breadcrumb_item_default });
const ElBreadcrumbItem = withNoopInstall(breadcrumb_item_default);
//#endregion
//#region ../../packages/components/button/src/button.ts
const buttonTypes = [
"default",
"primary",
"success",
"warning",
"info",
"danger",
"text",
""
];
const buttonNativeTypes = [
"button",
"submit",
"reset"
];
/**
* @deprecated Removed after 3.0.0, Use `ButtonProps` instead.
*/
const buttonProps = buildProps({
size: useSizeProp,
disabled: {
type: Boolean,
default: void 0
},
type: {
type: String,
values: buttonTypes,
default: ""
},
icon: { type: iconPropType },
nativeType: {
type: String,
values: buttonNativeTypes,
default: "button"
},
loading: Boolean,
loadingIcon: {
type: iconPropType,
default: () => loading_default
},
plain: {
type: Boolean,
default: void 0
},
text: {
type: Boolean,
default: void 0
},
link: Boolean,
bg: Boolean,
autofocus: Boolean,
round: {
type: Boolean,
default: void 0
},
circle: Boolean,
dashed: {
type: Boolean,
default: void 0
},
color: String,
dark: Boolean,
autoInsertSpace: {
type: Boolean,
default: void 0
},
tag: {
type: definePropType([String, Object]),
default: "button"
}
});
const buttonEmits = { click: (evt) => evt instanceof MouseEvent };
//#endregion
//#region ../../packages/components/button/src/constants.ts
const buttonGroupContextKey = Symbol("buttonGroupContextKey");
//#endregion
//#region ../../packages/components/button/src/use-button.ts
const useButton = (props, emit) => {
useDeprecated({
from: "type.text",
replacement: "link",
version: "3.0.0",
scope: "props",
ref: "https://element-plus.org/en-US/component/button.html#button-attributes"
}, (0, vue.computed)(() => props.type === "text"));
const buttonGroupContext = (0, vue.inject)(buttonGroupContextKey, void 0);
const globalConfig = useGlobalConfig("button");
const { form } = useFormItem();
const _size = useFormSize((0, vue.computed)(() => buttonGroupContext?.size));
const _disabled = useFormDisabled();
const _ref = (0, vue.ref)();
const slots = (0, vue.useSlots)();
const _type = (0, vue.computed)(() => props.type || buttonGroupContext?.type || globalConfig.value?.type || "");
const autoInsertSpace = (0, vue.computed)(() => props.autoInsertSpace ?? globalConfig.value?.autoInsertSpace ?? false);
const _plain = (0, vue.computed)(() => props.plain ?? globalConfig.value?.plain ?? false);
const _round = (0, vue.computed)(() => props.round ?? globalConfig.value?.round ?? false);
const _text = (0, vue.computed)(() => props.text ?? globalConfig.value?.text ?? false);
const _dashed = (0, vue.computed)(() => props.dashed ?? globalConfig.value?.dashed ?? false);
const _props = (0, vue.computed)(() => {
if (props.tag === "button") return {
ariaDisabled: _disabled.value || props.loading,
disabled: _disabled.value || props.loading,
autofocus: props.autofocus,
type: props.nativeType
};
return {};
});
const shouldAddSpace = (0, vue.computed)(() => {
const defaultSlot = slots.default?.();
if (autoInsertSpace.value && defaultSlot?.length === 1) {
const slot = defaultSlot[0];
if (slot?.type === vue.Text) {
const text = slot.children;
return /^\p{Unified_Ideograph}{2}$/u.test(text.trim());
}
}
return false;
});
const handleClick = (evt) => {
if (_disabled.value || props.loading) {
evt.stopPropagation();
return;
}
if (props.nativeType === "reset") form?.resetFields();
emit("click", evt);
};
return {
_disabled,
_size,
_type,
_ref,
_props,
_plain,
_round,
_text,
_dashed,
shouldAddSpace,
handleClick
};
};
//#endregion
//#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/util.js
/**
* Take input from [0, n] and return it as [0, 1]
* @hidden
*/
function bound01(n, max) {
if (isOnePointZero(n)) n = "100%";
const isPercent = isPercentage(n);
n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));
if (isPercent) n = parseInt(String(n * max), 10) / 100;
if (Math.abs(n - max) < 1e-6) return 1;
if (max === 360) n = (n < 0 ? n % max + max : n % max) / parseFloat(String(max));
else n = n % max / parseFloat(String(max));
return n;
}
/**
* Force a number between 0 and 1
* @hidden
*/
function clamp01(val) {
return Math.min(1, Math.max(0, val));
}
/**
* Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
* <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
* @hidden
*/
function isOnePointZero(n) {
return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1;
}
/**
* Check to see if string passed in is a percentage
* @hidden
*/
function isPercentage(n) {
return typeof n === "string" && n.indexOf("%") !== -1;
}
/**
* Return a valid alpha value [0,1] with all invalid values being set to 1
* @hidden
*/
function boundAlpha(a) {
a = parseFloat(a);
if (isNaN(a) || a < 0 || a > 1) a = 1;
return a;
}
/**
* Replace a decimal with it's percentage value
* @hidden
*/
function convertToPercentage(n) {
if (Number(n) <= 1) return `${Number(n) * 100}%`;
return n;
}
/**
* Force a hex value to have 2 characters
* @hidden
*/
function pad2(c) {
return c.length === 1 ? "0" + c : String(c);
}
//#endregion
//#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/conversion.js
/**
* Handle bounds / percentage checking to conform to CSS color spec
* <http://www.w3.org/TR/css3-color/>
* *Assumes:* r, g, b in [0, 255] or [0, 1]
* *Returns:* { r, g, b } in [0, 255]
*/
function rgbToRgb(r, g, b) {
return {
r: bound01(r, 255) * 255,
g: bound01(g, 255) * 255,
b: bound01(b, 255) * 255
};
}
/**
* Converts an RGB color value to HSL.
* *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
* *Returns:* { h, s, l } in [0,1]
*/
function rgbToHsl(r, g, b) {
r = bound01(r, 255);
g = bound01(g, 255);
b = bound01(b, 255);
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h = 0;
let s = 0;
const l = (max + min) / 2;
if (max === min) {
s = 0;
h = 0;
} else {
const d = max - min;
s = l > .5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
default: break;
}
h /= 6;
}
return {
h,
s,
l
};
}
function hue2rgb(p, q, t) {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * (6 * t);
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
}
/**
* Converts an HSL color value to RGB.
*
* *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
* *Returns:* { r, g, b } in the set [0, 255]
*/
function hslToRgb(h, s, l) {
let r;
let g;
let b;
h = bound01(h, 360);
s = bound01(s, 100);
l = bound01(l, 100);
if (s === 0) {
g = l;
b = l;
r = l;
} else {
const q = l < .5 ? l * (1 + s) : l + s - l * s;
const p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return {
r: r * 255,
g: g * 255,
b: b * 255
};
}
/**
* Converts an RGB color value to HSV
*
* *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
* *Returns:* { h, s, v } in [0,1]
*/
function rgbToHsv(r, g, b) {
r = bound01(r, 255);
g = bound01(g, 255);
b = bound01(b, 255);
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h = 0;
const v = max;
const d = max - min;
const s = max === 0 ? 0 : d / max;
if (max === min) h = 0;
else {
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
default: break;
}
h /= 6;
}
return {
h,
s,
v
};
}
/**
* Converts an HSV color value to RGB.
*
* *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
* *Returns:* { r, g, b } in the set [0, 255]
*/
function hsvToRgb(h, s, v) {
h = bound01(h, 360) * 6;
s = bound01(s, 100);
v = bound01(v, 100);
const i = Math.floor(h);
const f = h - i;
const p = v * (1 - s);
const q = v * (1 - f * s);
const t = v * (1 - (1 - f) * s);
const mod = i % 6;
const r = [
v,
q,
p,
p,
t,
v
][mod];
const g = [
t,
v,
v,
q,
p,
p
][mod];
const b = [
p,
p,
t,
v,
v,
q
][mod];
return {
r: r * 255,
g: g * 255,
b: b * 255
};
}
/**
* Converts an RGB color to hex
*
* *Assumes:* r, g, and b are contained in the set [0, 255]
* *Returns:* a 3 or 6 character hex
*/
function rgbToHex(r, g, b, allow3Char) {
const hex = [
pad2(Math.round(r).toString(16)),
pad2(Math.round(g).toString(16)),
pad2(Math.round(b).toString(16))
];
if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
return hex.join("");
}
/**
* Converts an RGBA color plus alpha transparency to hex
*
* *Assumes:* r, g, b are contained in the set [0, 255] and a in [0, 1]
* *Returns:* a 4 or 8 character rgba hex
*/
function rgbaToHex(r, g, b, a, allow4Char) {
const hex = [
pad2(Math.round(r).toString(16)),
pad2(Math.round(g).toString(16)),
pad2(Math.round(b).toString(16)),
pad2(convertDecimalToHex(a))
];
if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
return hex.join("");
}
/**
* Converts CMYK to RBG
* Assumes c, m, y, k are in the set [0, 100]
*/
function cmykToRgb(c, m, y, k) {
const cConv = c / 100;
const mConv = m / 100;
const yConv = y / 100;
const kConv = k / 100;
return {
r: 255 * (1 - cConv) * (1 - kConv),
g: 255 * (1 - mConv) * (1 - kConv),
b: 255 * (1 - yConv) * (1 - kConv)
};
}
function rgbToCmyk(r, g, b) {
let c = 1 - r / 255;
let m = 1 - g / 255;
let y = 1 - b / 255;
let k = Math.min(c, m, y);
if (k === 1) {
c = 0;
m = 0;
y = 0;
} else {
c = (c - k) / (1 - k) * 100;
m = (m - k) / (1 - k) * 100;
y = (y - k) / (1 - k) * 100;
}
k *= 100;
return {
c: Math.round(c),
m: Math.round(m),
y: Math.round(y),
k: Math.round(k)
};
}
/** Converts a decimal to a hex value */
function convertDecimalToHex(d) {
return Math.round(parseFloat(d) * 255).toString(16);
}
/** Converts a hex value to a decimal */
function convertHexToDecimal(h) {
return parseIntFromHex(h) / 255;
}
/** Parse a base-16 hex value into a base-10 integer */
function parseIntFromHex(val) {
return parseInt(val, 16);
}
function numberInputToObject(color) {
return {
r: color >> 16,
g: (color & 65280) >> 8,
b: color & 255
};
}
//#endregion
//#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/css-color-names.js
/**
* @hidden
*/
const names = {
aliceblue: "#f0f8ff",
antiquewhite: "#faebd7",
aqua: "#00ffff",
aquamarine: "#7fffd4",
azure: "#f0ffff",
beige: "#f5f5dc",
bisque: "#ffe4c4",
black: "#000000",
blanchedalmond: "#ffebcd",
blue: "#0000ff",
blueviolet: "#8a2be2",
brown: "#a52a2a",
burlywood: "#deb887",
cadetblue: "#5f9ea0",
chartreuse: "#7fff00",
chocolate: "#d2691e",
coral: "#ff7f50",
cornflowerblue: "#6495ed",
cornsilk: "#fff8dc",
crimson: "#dc143c",
cyan: "#00ffff",
darkblue: "#00008b",
darkcyan: "#008b8b",
darkgoldenrod: "#b8860b",
darkgray: "#a9a9a9",
darkgreen: "#006400",
darkgrey: "#a9a9a9",
darkkhaki: "#bdb76b",
darkmagenta: "#8b008b",
darkolivegreen: "#556b2f",
darkorange: "#ff8c00",
darkorchid: "#9932cc",
darkred: "#8b0000",
darksalmon: "#e9967a",
darkseagreen: "#8fbc8f",
darkslateblue: "#483d8b",
darkslategray: "#2f4f4f",
darkslategrey: "#2f4f4f",
darkturquoise: "#00ced1",
darkviolet: "#9400d3",
deeppink: "#ff1493",
deepskyblue: "#00bfff",
dimgray: "#696969",
dimgrey: "#696969",
dodgerblue: "#1e90ff",
firebrick: "#b22222",
floralwhite: "#fffaf0",
forestgreen: "#228b22",
fuchsia: "#ff00ff",
gainsboro: "#dcdcdc",
ghostwhite: "#f8f8ff",
goldenrod: "#daa520",
gold: "#ffd700",
gray: "#808080",
green: "#008000",
greenyellow: "#adff2f",
grey: "#808080",
honeydew: "#f0fff0",
hotpink: "#ff69b4",
indianred: "#cd5c5c",
indigo: "#4b0082",
ivory: "#fffff0",
khaki: "#f0e68c",
lavenderblush: "#fff0f5",
lavender: "#e6e6fa",
lawngreen: "#7cfc00",
lemonchiffon: "#fffacd",
lightblue: "#add8e6",
lightcoral: "#f08080",
lightcyan: "#e0ffff",
lightgoldenrodyellow: "#fafad2",
lightgray: "#d3d3d3",
lightgreen: "#90ee90",
lightgrey: "#d3d3d3",
lightpink: "#ffb6c1",
lightsalmon: "#ffa07a",
lightseagreen: "#20b2aa",
lightskyblue: "#87cefa",
lightslategray: "#778899",
lightslategrey: "#778899",
lightsteelblue: "#b0c4de",
lightyellow: "#ffffe0",
lime: "#00ff00",
limegreen: "#32cd32",
linen: "#faf0e6",
magenta: "#ff00ff",
maroon: "#800000",
mediumaquamarine: "#66cdaa",
mediumblue: "#0000cd",
mediumorchid: "#ba55d3",
mediumpurple: "#9370db",
mediumseagreen: "#3cb371",
mediumslateblue: "#7b68ee",
mediumspringgreen: "#00fa9a",
mediumturquoise: "#48d1cc",
mediumvioletred: "#c71585",
midnightblue: "#191970",
mintcream: "#f5fffa",
mistyrose: "#ffe4e1",
moccasin: "#ffe4b5",
navajowhite: "#ffdead",
navy: "#000080",
oldlace: "#fdf5e6",
olive: "#808000",
olivedrab: "#6b8e23",
orange: "#ffa500",
orangered: "#ff4500",
orchid: "#da70d6",
palegoldenrod: "#eee8aa",
palegreen: "#98fb98",
paleturquoise: "#afeeee",
palevioletred: "#db7093",
papayawhip: "#ffefd5",
peachpuff: "#ffdab9",
peru: "#cd853f",
pink: "#ffc0cb",
plum: "#dda0dd",
powderblue: "#b0e0e6",
purple: "#800080",
rebeccapurple: "#663399",
red: "#ff0000",
rosybrown: "#bc8f8f",
royalblue: "#4169e1",
saddlebrown: "#8b4513",
salmon: "#fa8072",
sandybrown: "#f4a460",
seagreen: "#2e8b57",
seashell: "#fff5ee",
sienna: "#a0522d",
silver: "#c0c0c0",
skyblue: "#87ceeb",
slateblue: "#6a5acd",
slategray: "#708090",
slategrey: "#708090",
snow: "#fffafa",
springgreen: "#00ff7f",
steelblue: "#4682b4",
tan: "#d2b48c",
teal: "#008080",
thistle: "#d8bfd8",
tomato: "#ff6347",
turquoise: "#40e0d0",
violet: "#ee82ee",
wheat: "#f5deb3",
white: "#ffffff",
whitesmoke: "#f5f5f5",
yellow: "#ffff00",
yellowgreen: "#9acd32"
};
//#endregion
//#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/format-input.js
/**
* Given a string or object, convert that input to RGB
*
* Possible string inputs:
* ```
* "red"
* "#f00" or "f00"
* "#ff0000" or "ff0000"
* "#ff000000" or "ff000000"
* "rgb 255 0 0" or "rgb (255, 0, 0)"
* "rgb 1.0 0 0" or "rgb (1, 0, 0)"
* "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
* "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
* "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
* "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
* "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
* "cmyk(0, 20, 0, 0)" or "cmyk 0 20 0 0"
* ```
*/
function inputToRGB(color) {
let rgb = {
r: 0,
g: 0,
b: 0
};
let a = 1;
let s = null;
let v = null;
let l = null;
let ok = false;
let format = false;
if (typeof color === "string") color = stringInputToObject(color);
if (typeof color === "object") {
if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
rgb = rgbToRgb(color.r, color.g, color.b);
ok = true;
format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
} else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
s = convertToPercentage(color.s);
v = convertToPercentage(color.v);
rgb = hsvToRgb(color.h, s, v);
ok = true;
format = "hsv";
} else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
s = convertToPercentage(color.s);
l = convertToPercentage(color.l);
rgb = hslToRgb(color.h, s, l);
ok = true;
format = "hsl";
} else if (isValidCSSUnit(color.c) && isValidCSSUnit(color.m) && isValidCSSUnit(color.y) && isValidCSSUnit(color.k)) {
rgb = cmykToRgb(color.c, color.m, color.y, color.k);
ok = true;
format = "cmyk";
}
if (Object.prototype.hasOwnProperty.call(color, "a")) a = color.a;
}
a = boundAlpha(a);
return {
ok,
format: color.format || format,
r: Math.min(255, Math.max(rgb.r, 0)),
g: Math.min(255, Math.max(rgb.g, 0)),
b: Math.min(255, Math.max(rgb.b, 0)),
a
};
}
const CSS_UNIT = "(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)";
const PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))\\s*\\)?";
const PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))\\s*\\)?";
const matchers = {
CSS_UNIT: new RegExp(CSS_UNIT),
rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
cmyk: new RegExp("cmyk" + PERMISSIVE_MATCH4),
hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
};
/**
* Permissive string parsing. Take in a number of formats, and output an object
* based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` or `{c, m, y, k}` or `{c, m, y, k, a}`
*/
function stringInputToObject(color) {
color = color.trim().toLowerCase();
if (color.length === 0) return false;
let named = false;
if (names[color]) {
color = names[color];
named = true;
} else if (color === "transparent") return {
r: 0,
g: 0,
b: 0,
a: 0,
format: "name"
};
let match = matchers.rgb.exec(color);
if (match) return {
r: match[1],
g: match[2],
b: match[3]
};
match = matchers.rgba.exec(color);
if (match) return {
r: match[1],
g: match[2],
b: match[3],
a: match[4]
};
match = matchers.hsl.exec(color);
if (match) return {
h: match[1],
s: match[2],
l: match[3]
};
match = matchers.hsla.exec(color);
if (match) return {
h: match[1],
s: match[2],
l: match[3],
a: match[4]
};
match = matchers.hsv.exec(color);
if (match) return {
h: match[1],
s: match[2],
v: match[3]
};
match = matchers.hsva.exec(color);
if (match) return {
h: match[1],
s: match[2],
v: match[3],
a: match[4]
};
match = matchers.cmyk.exec(color);
if (match) return {
c: match[1],
m: match[2],
y: match[3],
k: match[4]
};
match = matchers.hex8.exec(color);
if (match) return {
r: parseIntFromHex(match[1]),
g: parseIntFromHex(match[2]),
b: parseIntFromHex(match[3]),
a: convertHexToDecimal(match[4]),
format: named ? "name" : "hex8"
};
match = matchers.hex6.exec(color);
if (match) return {
r: parseIntFromHex(match[1]),
g: parseIntFromHex(match[2]),
b: parseIntFromHex(match[3]),
format: named ? "name" : "hex"
};
match = matchers.hex4.exec(color);
if (match) return {
r: parseIntFromHex(match[1] + match[1]),
g: parseIntFromHex(match[2] + match[2]),
b: parseIntFromHex(match[3] + match[3]),
a: convertHexToDecimal(match[4] + match[4]),
format: named ? "name" : "hex8"
};
match = matchers.hex3.exec(color);
if (match) return {
r: parseIntFromHex(match[1] + match[1]),
g: parseIntFromHex(match[2] + match[2]),
b: parseIntFromHex(match[3] + match[3]),
format: named ? "name" : "hex"
};
return false;
}
/**
* Check to see if it looks like a CSS unit
* (see `matchers` above for definition).
*/
function isValidCSSUnit(color) {
if (typeof color === "number") return !Number.isNaN(color);
return matchers.CSS_UNIT.test(color);
}
//#endregion
//#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/index.js
var TinyColor = class TinyColor {
constructor(color = "", opts = {}) {
if (color instanceof TinyColor) return color;
if (typeof color === "number") color = numberInputToObject(color);
this.originalInput = color;
const rgb = inputToRGB(color);
this.originalInput = color;
this.r = rgb.r;
this.g = rgb.g;
this.b = rgb.b;
this.a = rgb.a;
this.roundA = Math.round(100 * this.a) / 100;
this.format = opts.format ?? rgb.format;
this.gradientType = opts.gradientType;
if (this.r < 1) this.r = Math.round(this.r);
if (this.g < 1) this.g = Math.round(this.g);
if (this.b < 1) this.b = Math.round(this.b);
this.isValid = rgb.ok;
}
isDark() {
return this.getBrightness() < 128;
}
isLight() {
return !this.isDark();
}
/**
* Returns the perceived brightness of the color, from 0-255.
*/
getBrightness() {
const rgb = this.toRgb();
return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3;
}
/**
* Returns the perceived luminance of a color, from 0-1.
*/
getLuminance() {
const rgb = this.toRgb();
let R;
let G;
let B;
const RsRGB = rgb.r / 255;
const GsRGB = rgb.g / 255;
const BsRGB = rgb.b / 255;
if (RsRGB <= .03928) R = RsRGB / 12.92;
else R = Math.pow((RsRGB + .055) / 1.055, 2.4);
if (GsRGB <= .03928) G = GsRGB / 12.92;
else G = Math.pow((GsRGB + .055) / 1.055, 2.4);
if (BsRGB <= .03928) B = BsRGB / 12.92;
else B = Math.pow((BsRGB + .055) / 1.055, 2.4);
return .2126 * R + .7152 * G + .0722 * B;
}
/**
* Returns the alpha value of a color, from 0-1.
*/
getAlpha() {
return this.a;
}
/**
* Sets the alpha value on the current color.
*
* @param alpha - The new alpha value. The accepted range is 0-1.
*/
setAlpha(alpha) {
this.a = boundAlpha(alpha);
this.roundA = Math.round(100 * this.a) / 100;
return this;
}
/**
* Returns whether the color is monochrome.
*/
isMonochrome() {
const { s } = this.toHsl();
return s === 0;
}
/**
* Returns the object as a HSVA object.
*/
toHsv() {
const hsv = rgbToHsv(this.r, this.g, this.b);
return {
h: hsv.h * 360,
s: hsv.s,
v: hsv.v,
a: this.a
};
}
/**
* Returns the hsva values interpolated into a string with the following format:
* "hsva(xxx, xxx, xxx, xx)".
*/
toHsvString() {
const hsv = rgbToHsv(this.r, this.g, this.b);
const h = Math.round(hsv.h * 360);
const s = Math.round(hsv.s * 100);
const v = Math.round(hsv.v * 100);
return this.a === 1 ? `hsv(${h}, ${s}%, ${v}%)` : `hsva(${h}, ${s}%, ${v}%, ${this.roundA})`;
}
/**
* Returns the object as a HSLA object.
*/
toHsl() {
const hsl = rgbToHsl(this.r, this.g, this.b);
return {
h: hsl.h * 360,
s: hsl.s,
l: hsl.l,
a: this.a
};
}
/**
* Returns the hsla values interpolated into a string with the following format:
* "hsla(xxx, xxx, xxx, xx)".
*/
toHslString() {
const hsl = rgbToHsl(this.r, this.g, this.b);
const h = Math.round(hsl.h * 360);
const s = Math.round(hsl.s * 100);
const l = Math.round(hsl.l * 100);
return this.a === 1 ? `hsl(${h}, ${s}%, ${l}%)` : `hsla(${h}, ${s}%, ${l}%, ${this.roundA})`;
}
/**
* Returns the hex value of the color.
* @param allow3Char will shorten hex value to 3 char if possible
*/
toHex(allow3Char = false) {
return rgbToHex(this.r, this.g, this.b, allow3Char);
}
/**
* Returns the hex value of the color -with a # prefixed.
* @param allow3Char will shorten hex value to 3 char if possible
*/
toHexString(allow3Char = false) {
return "#" + this.toHex(allow3Char);
}
/**
* Returns the hex 8 value of the color.
* @param allow4Char will shorten hex value to 4 char if possible
*/
toHex8(allow4Char = false) {
return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);
}
/**
* Returns the hex 8 value of the color -with a # prefixed.
* @param allow4Char will shorten hex value to 4 char if possible
*/
toHex8String(allow4Char = false) {
return "#" + this.toHex8(allow4Char);
}
/**
* Returns the shorter hex value of the color depends on its alpha -with a # prefixed.
* @param allowShortChar will shorten hex value to 3 or 4 char if possible
*/
toHexShortString(allowShortChar = false) {
return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);
}
/**
* Returns the object as a RGBA object.
*/
toRgb() {
return {
r: Math.round(this.r),
g: Math.round(this.g),
b: Math.round(this.b),
a: this.a
};
}
/**
* Returns the RGBA values interpolated into a string with the following format:
* "RGBA(xxx, xxx, xxx, xx)".
*/
toRgbString() {
const r = Math.round(this.r);
const g = Math.round(this.g);
const b = Math.round(this.b);
return this.a === 1 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${this.roundA})`;
}
/**
* Returns the object as a RGBA object.
*/
toPercentageRgb() {
const fmt = (x) => `${Math.round(bound01(x, 255) * 100)}%`;
return {
r: fmt(this.r),
g: fmt(this.g),
b: fmt(this.b),
a: this.a
};
}
/**
* Returns the RGBA relative values interpolated into a string
*/
toPercentageRgbString() {
const rnd = (x) => Math.round(bound01(x, 255) * 100);
return this.a === 1 ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)` : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;
}
toCmyk() {
return { ...rgbToCmyk(this.r, this.g, this.b) };
}
toCmykString() {
const { c, m, y, k } = rgbToCmyk(this.r, this.g, this.b);
return `cmyk(${c}, ${m}, ${y}, ${k})`;
}
/**
* The 'real' name of the color -if there is one.
*/
toName() {
if (this.a === 0) return "transparent";
if (this.a < 1) return false;
const hex = "#" + rgbToHex(this.r, this.g, this.b, false);
for (const [key, value] of Object.entries(names)) if (hex === value) return key;
return false;
}
toString(format) {
const formatSet = Boolean(format);
format = format ?? this.format;
let formattedString = false;
const hasAlpha = this.a < 1 && this.a >= 0;
if (!formatSet && hasAlpha && (format.startsWith("hex") || format === "name")) {
if (format === "name" && this.a === 0) return this.toName();
return this.toRgbString();
}
if (format === "rgb") formattedString = this.toRgbString();
if (format === "prgb") formattedString = this.toPercentageRgbString();
if (format === "hex" || format === "hex6") formattedString = this.toHexString();
if (format === "hex3") formattedString = this.toHexString(true);
if (format === "hex4") formattedString = this.toHex8String(true);
if (format === "hex8") formattedString = this.toHex8String();
if (format === "name") formattedString = this.toName();
if (format === "hsl") formattedString = this.toHslString();
if (format === "hsv") formattedString = this.toHsvString();
if (format === "cmyk") formattedString = this.toCmykString();
return formattedString || this.toHexString();
}
toNumber() {
return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);
}
clone() {
return new TinyColor(this.toString());
}
/**
* Lighten the color a given amount. Providing 100 will always return white.
* @param amount - valid between 1-100
*/
lighten(amount = 10) {
const hsl = this.toHsl();
hsl.l += amount / 100;
hsl.l = clamp01(hsl.l);
return new TinyColor(hsl);
}
/**
* Brighten the color a given amount, from 0 to 100.
* @param amount - valid between 1-100
*/
brighten(amount = 10) {
const rgb = this.toRgb();
rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));
rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));
rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));
return new TinyColor(rgb);
}
/**
* Darken the color a given amount, from 0 to 100.
* Providing 100 will always return black.
* @param amount - valid between 1-100
*/
darken(amount = 10) {
const hsl = this.toHsl();
hsl.l -= amount / 100;
hsl.l = clamp01(hsl.l);
return new TinyColor(hsl);
}
/**
* Mix the color with pure white, from 0 to 100.
* Providing 0 will do nothing, providing 100 will always return white.
* @param amount - valid between 1-100
*/
tint(amount = 10) {
return this.mix("white", amount);
}
/**
* Mix the color with pure black, from 0 to 100.
* Providing 0 will do nothing, providing 100 will always return black.
* @param amount - valid between 1-100
*/
shade(amount = 10) {
return this.mix("black", amount);
}
/**
* Desaturate the color a given amount, from 0 to 100.
* Providing 100 will is the same as calling greyscale
* @param amount - valid between 1-100
*/
desaturate(amount = 10) {
const hsl = this.toHsl();
hsl.s -= amount / 100;
hsl.s = clamp01(hsl.s);
return new TinyColor(hsl);
}
/**
* Saturate the color a given amount, from 0 to 100.
* @param amount - valid between 1-100
*/
saturate(amount = 10) {
const hsl = this.toHsl();
hsl.s += amount / 100;
hsl.s = clamp01(hsl.s);
return new TinyColor(hsl);
}
/**
* Completely desaturates a color into greyscale.
* Same as calling `desaturate(100)`
*/
greyscale() {
return this.desaturate(100);
}
/**
* Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
* Values outside of this range will be wrapped into this range.
*/
spin(amount) {
const hsl = this.toHsl();
const hue = (hsl.h + amount) % 360;
hsl.h = hue < 0 ? 360 + hue : hue;
return new TinyColor(hsl);
}
/**
* Mix the current color a given amount with another color, from 0 to 100.
* 0 means no mixing (return current color).
*/
mix(color, amount = 50) {
const rgb1 = this.toRgb();
const rgb2 = new TinyColor(color).toRgb();
const p = amount / 100;
return new TinyColor({
r: (rgb2.r - rgb1.r) * p + rgb1.r,
g: (rgb2.g - rgb1.g) * p + rgb1.g,
b: (rgb2.b - rgb1.b) * p + rgb1.b,
a: (rgb2.a - rgb1.a) * p + rgb1.a
});
}
analogous(results = 6, slices = 30) {
const hsl = this.toHsl();
const part = 360 / slices;
const ret = [this];
for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {
hsl.h = (hsl.h + part) % 360;
ret.push(new TinyColor(hsl));
}
return ret;
}
/**
* taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js
*/
complement() {
const hsl = this.toHsl();
hsl.h = (hsl.h + 180) % 360;
return new TinyColor(hsl);
}
monochromatic(results = 6) {
const hsv = this.toHsv();
const { h } = hsv;
const { s } = hsv;
let { v } = hsv;
const res = [];
const modification = 1 / results;
while (results--) {
res.push(new TinyColor({
h,
s,
v
}));
v = (v + modification) % 1;
}
return res;
}
splitcomplement() {
const hsl = this.toHsl();
const { h } = hsl;
return [
this,
new TinyColor({
h: (h + 72) % 360,
s: hsl.s,
l: hsl.l
}),
new TinyColor({
h: (h + 216) % 360,
s: hsl.s,
l: hsl.l
})
];
}
/**
* Compute how the color would appear on a background
*/
onBackground(background) {
const fg = this.toRgb();
const bg = new TinyColor(background).toRgb();
const alpha = fg.a + bg.a * (1 - fg.a);
return new TinyColor({
r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,
g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,
b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,
a: alpha
});
}
/**
* Alias for `polyad(3)`
*/
triad() {
return this.polyad(3);
}
/**
* Alias for `polyad(4)`
*/
tetrad() {
return this.polyad(4);
}
/**
* Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)
* monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...
*/
polyad(n) {
const hsl = this.toHsl();
const { h } = hsl;
const result = [this];
const increment = 360 / n;
for (let i = 1; i < n; i++) result.push(new TinyColor({
h: (h + i * increment) % 360,
s: hsl.s,
l: hsl.l
}));
return result;
}
/**
* compare color vs current color
*/
equals(color) {
const comparedColor = new TinyColor(color);
/**
* RGB and CMYK do not have the same color gamut, so a CMYK conversion will never be 100%.
* This means we need to compare CMYK to CMYK to ensure accuracy of the equals function.
*/
if (this.format === "cmyk" || comparedColor.format === "cmyk") return this.toCmykString() === comparedColor.toCmykString();
return this.toRgbString() === comparedColor.toRgbString();
}
};
//#endregion
//#region ../../packages/components/button/src/button-custom.ts
function darken(color, amount = 20) {
return color.mix("#141414", amount).toString();
}
function useButtonCustomStyle(props) {
const _disabled = useFormDisabled();
const ns = useNamespace("button");
return (0, vue.computed)(() => {
let styles = {};
let buttonColor = props.color;
if (buttonColor) {
const match = buttonColor.match(/var\((.*?)\)/);
if (match) buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]);
const color = new TinyColor(buttonColor);
const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20);
if (props.plain) {
styles = ns.cssVarBlock({
"bg-color": props.dark ? darken(color, 90) : color.tint(90).toString(),
"text-color": buttonColor,
"border-color": props.dark ? darken(color, 50) : color.tint(50).toString(),
"hover-text-color": `var(${ns.cssVarName("color-white")})`,
"hover-bg-color": buttonColor,
"hover-border-color": buttonColor,
"active-bg-color": activeBgColor,
"active-text-color": `var(${ns.cssVarName("color-white")})`,
"active-border-color": activeBgColor
});
if (_disabled.value) {
styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color, 90) : color.tint(90).toString();
styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color, 50) : color.tint(50).toString();
styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color, 80) : color.tint(80).toString();
}
} else if (props.link || props.text) {
const hoverColor = props.dark ? darken(color, 30) : color.tint(30).toString();
styles = ns.cssVarBlock({
"text-color": buttonColor,
"hover-text-color": hoverColor,
"active-text-color": activeBgColor
});
if (props.link) {
styles[ns.cssVarBlockName("hover-link-text-color")] = hoverColor;
styles[ns.cssVarBlockName("active-color")] = activeBgColor;
}
if (_disabled.value) {
const disabledColor = props.dark ? darken(color, 50) : color.tint(50).toString();
styles[ns.cssVarBlockName("disabled-bg-color")] = "transparent";
styles[ns.cssVarBlockName("disabled-text-color")] = disabledColor;
styles[ns.cssVarBlockName("disabled-border-color")] = "transparent";
}
} else {
const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString();
const textColor = color.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`;
styles = ns.cssVarBlock({
"bg-color": buttonColor,
"text-color": textColor,
"border-color": buttonColor,
"hover-bg-color": hoverBgColor,
"hover-text-color": textColor,
"hover-border-color": hoverBgColor,
"active-bg-color": activeBgColor,
"active-border-color": activeBgColor
});
if (_disabled.value) {
const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString();
styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor;
styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`;
styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor;
}
}
}
return styles;
});
}
//#endregion
//#region ../../packages/components/button/src/button.vue?vue&type=script&setup=true&lang.ts
var button_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElButton",
__name: "button",
props: buttonProps,
emits: buttonEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const buttonStyle = useButtonCustomStyle(props);
const ns = useNamespace("button");
const { _ref, _size, _type, _disabled, _props, _plain, _round, _text, _dashed, shouldAddSpace, handleClick } = useButton(props, emit);
const buttonKls = (0, vue.computed)(() => [
ns.b(),
ns.m(_type.value),
ns.m(_size.value),
ns.is("disabled", _disabled.value),
ns.is("loading", props.loading),
ns.is("plain", _plain.value),
ns.is("round", _round.value),
ns.is("circle", props.circle),
ns.is("text", _text.value),
ns.is("dashed", _dashed.value),
ns.is("link", props.link),
ns.is("has-bg", props.bg)
]);
__expose({
ref: _ref,
size: _size,
type: _type,
disabled: _disabled,
shouldAddSpace
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), (0, vue.mergeProps)({
ref_key: "_ref",
ref: _ref
}, (0, vue.unref)(_props), {
class: buttonKls.value,
style: (0, vue.unref)(buttonStyle),
onClick: (0, vue.unref)(handleClick)
}), {
default: (0, vue.withCtx)(() => [__props.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [_ctx.$slots.loading ? (0, vue.renderSlot)(_ctx.$slots, "loading", { key: 0 }) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.loadingIcon)))]),
_: 1
}, 8, ["class"]))], 64)) : __props.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
default: (0, vue.withCtx)(() => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon), { key: 0 })) : (0, vue.renderSlot)(_ctx.$slots, "icon", { key: 1 })]),
_: 3
})) : (0, vue.createCommentVNode)("v-if", true), _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 2,
class: (0, vue.normalizeClass)({ [(0, vue.unref)(ns).em("text", "expand")]: (0, vue.unref)(shouldAddSpace) })
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16, [
"class",
"style",
"onClick"
]);
};
}
});
//#endregion
//#region ../../packages/components/button/src/button.vue
var button_default$1 = button_vue_vue_type_script_setup_true_lang_default$1;
//#endregion
//#region ../../packages/components/button/src/button-group.ts
/**
* @deprecated Removed after 3.0.0, Use `ButtonGroupProps` instead.
*/
const buttonGroupProps = {
size: buttonProps.size,
type: buttonProps.type,
direction: {
type: definePropType(String),
values: ["horizontal", "vertical"],
default: "horizontal"
}
};
//#endregion
//#region ../../packages/components/button/src/button-group.vue?vue&type=script&setup=true&lang.ts
var button_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElButtonGroup",
__name: "button-group",
props: buttonGroupProps,
setup(__props) {
const props = __props;
(0, vue.provide)(buttonGroupContextKey, (0, vue.reactive)({
size: (0, vue.toRef)(props, "size"),
type: (0, vue.toRef)(props, "type")
}));
const ns = useNamespace("button");
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("group"), (0, vue.unref)(ns).bm("group", props.direction)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/button/src/button-group.vue
var button_group_default = button_group_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/button/index.ts
const ElButton = withInstall(button_default$1, { ButtonGroup: button_group_default });
const ElButtonGroup = withNoopInstall(button_group_default);
//#endregion
//#region ../../packages/components/calendar/src/calendar.ts
const isValidRange$1 = (range) => isArray$1(range) && range.length === 2 && range.every((item) => isDate(item));
/**
* @deprecated Removed after 3.0.0, Use `CalendarProps` instead.
*/
const calendarProps = buildProps({
modelValue: { type: Date },
range: {
type: definePropType(Array),
validator: isValidRange$1
},
controllerType: {
type: String,
values: ["button", "select"],
default: "button"
},
formatter: { type: definePropType(Function) }
});
const calendarEmits = {
[UPDATE_MODEL_EVENT]: (value) => isDate(value),
[INPUT_EVENT]: (value) => isDate(value)
};
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/dayjs.min.js
var require_dayjs_min = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(t, e) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
})(exports, (function() {
"use strict";
var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = {
name: "en",
weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
ordinal: function(t) {
var e = [
"th",
"st",
"nd",
"rd"
], n = t % 100;
return "[" + t + (e[(n - 20) % 10] || e[n] || e[0]) + "]";
}
}, m = function(t, e, n) {
var r = String(t);
return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t;
}, v = {
s: m,
z: function(t) {
var e = -t.utcOffset(), n = Math.abs(e), r = Math.floor(n / 60), i = n % 60;
return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0");
},
m: function t(e, n) {
if (e.date() < n.date()) return -t(n, e);
var r = 12 * (n.year() - e.year()) + (n.month() - e.month()), i = e.clone().add(r, c), s = n - i < 0, u = e.clone().add(r + (s ? -1 : 1), c);
return +(-(r + (n - i) / (s ? i - u : u - i)) || 0);
},
a: function(t) {
return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
},
p: function(t) {
return {
M: c,
y: h,
w: o,
d: a,
D: d,
h: u,
m: s,
s: i,
ms: r,
Q: f
}[t] || String(t || "").toLowerCase().replace(/s$/, "");
},
u: function(t) {
return void 0 === t;
}
}, g = "en", D = {};
D[g] = M;
var p = "$isDayjsObject", S = function(t) {
return t instanceof _ || !(!t || !t[p]);
}, w = function t(e, n, r) {
var i;
if (!e) return g;
if ("string" == typeof e) {
var s = e.toLowerCase();
D[s] && (i = s), n && (D[s] = n, i = s);
var u = e.split("-");
if (!i && u.length > 1) return t(u[0]);
} else {
var a = e.name;
D[a] = e, i = a;
}
return !r && i && (g = i), i || !r && g;
}, O = function(t, e) {
if (S(t)) return t.clone();
var n = "object" == typeof e ? e : {};
return n.date = t, n.args = arguments, new _(n);
}, b = v;
b.l = w, b.i = S, b.w = function(t, e) {
return O(t, {
locale: e.$L,
utc: e.$u,
x: e.$x,
$offset: e.$offset
});
};
var _ = function() {
function M(t) {
this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0;
}
var m = M.prototype;
return m.parse = function(t) {
this.$d = function(t) {
var e = t.date, n = t.utc;
if (null === e) return /* @__PURE__ */ new Date(NaN);
if (b.u(e)) return /* @__PURE__ */ new Date();
if (e instanceof Date) return new Date(e);
if ("string" == typeof e && !/Z$/i.test(e)) {
var r = e.match($);
if (r) {
var i = r[2] - 1 || 0, s = (r[7] || "0").substring(0, 3);
return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);
}
}
return new Date(e);
}(t), this.init();
}, m.init = function() {
var t = this.$d;
this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();
}, m.$utils = function() {
return b;
}, m.isValid = function() {
return !(this.$d.toString() === l);
}, m.isSame = function(t, e) {
var n = O(t);
return this.startOf(e) <= n && n <= this.endOf(e);
}, m.isAfter = function(t, e) {
return O(t) < this.startOf(e);
}, m.isBefore = function(t, e) {
return this.endOf(e) < O(t);
}, m.$g = function(t, e, n) {
return b.u(t) ? this[e] : this.set(n, t);
}, m.unix = function() {
return Math.floor(this.valueOf() / 1e3);
}, m.valueOf = function() {
return this.$d.getTime();
}, m.startOf = function(t, e) {
var n = this, r = !!b.u(e) || e, f = b.p(t), l = function(t, e) {
var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n);
return r ? i : i.endOf(a);
}, $ = function(t, e) {
return b.w(n.toDate()[t].apply(n.toDate("s"), (r ? [
0,
0,
0,
0
] : [
23,
59,
59,
999
]).slice(e)), n);
}, y = this.$W, M = this.$M, m = this.$D, v = "set" + (this.$u ? "UTC" : "");
switch (f) {
case h: return r ? l(1, 0) : l(31, 11);
case c: return r ? l(1, M) : l(0, M + 1);
case o:
var g = this.$locale().weekStart || 0, D = (y < g ? y + 7 : y) - g;
return l(r ? m - D : m + (6 - D), M);
case a:
case d: return $(v + "Hours", 0);
case u: return $(v + "Minutes", 1);
case s: return $(v + "Seconds", 2);
case i: return $(v + "Milliseconds", 3);
default: return this.clone();
}
}, m.endOf = function(t) {
return this.startOf(t, !1);
}, m.$set = function(t, e) {
var n, o = b.p(t), f = "set" + (this.$u ? "UTC" : ""), l = (n = {}, n[a] = f + "Date", n[d] = f + "Date", n[c] = f + "Month", n[h] = f + "FullYear", n[u] = f + "Hours", n[s] = f + "Minutes", n[i] = f + "Seconds", n[r] = f + "Milliseconds", n)[o], $ = o === a ? this.$D + (e - this.$W) : e;
if (o === c || o === h) {
var y = this.clone().set(d, 1);
y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d;
} else l && this.$d[l]($);
return this.init(), this;
}, m.set = function(t, e) {
return this.clone().$set(t, e);
}, m.get = function(t) {
return this[b.p(t)]();
}, m.add = function(r, f) {
var d, l = this;
r = Number(r);
var $ = b.p(f), y = function(t) {
var e = O(l);
return b.w(e.date(e.date() + Math.round(t * r)), l);
};
if ($ === c) return this.set(c, this.$M + r);
if ($ === h) return this.set(h, this.$y + r);
if ($ === a) return y(1);
if ($ === o) return y(7);
var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1, m = this.$d.getTime() + r * M;
return b.w(m, this);
}, m.subtract = function(t, e) {
return this.add(-1 * t, e);
}, m.format = function(t) {
var e = this, n = this.$locale();
if (!this.isValid()) return n.invalidDate || l;
var r = t || "YYYY-MM-DDTHH:mm:ssZ", i = b.z(this), s = this.$H, u = this.$m, a = this.$M, o = n.weekdays, c = n.months, f = n.meridiem, h = function(t, n, i, s) {
return t && (t[n] || t(e, r)) || i[n].slice(0, s);
}, d = function(t) {
return b.s(s % 12 || 12, t, "0");
}, $ = f || function(t, e, n) {
var r = t < 12 ? "AM" : "PM";
return n ? r.toLowerCase() : r;
};
return r.replace(y, (function(t, r) {
return r || function(t) {
switch (t) {
case "YY": return String(e.$y).slice(-2);
case "YYYY": return b.s(e.$y, 4, "0");
case "M": return a + 1;
case "MM": return b.s(a + 1, 2, "0");
case "MMM": return h(n.monthsShort, a, c, 3);
case "MMMM": return h(c, a);
case "D": return e.$D;
case "DD": return b.s(e.$D, 2, "0");
case "d": return String(e.$W);
case "dd": return h(n.weekdaysMin, e.$W, o, 2);
case "ddd": return h(n.weekdaysShort, e.$W, o, 3);
case "dddd": return o[e.$W];
case "H": return String(s);
case "HH": return b.s(s, 2, "0");
case "h": return d(1);
case "hh": return d(2);
case "a": return $(s, u, !0);
case "A": return $(s, u, !1);
case "m": return String(u);
case "mm": return b.s(u, 2, "0");
case "s": return String(e.$s);
case "ss": return b.s(e.$s, 2, "0");
case "SSS": return b.s(e.$ms, 3, "0");
case "Z": return i;
}
return null;
}(t) || i.replace(":", "");
}));
}, m.utcOffset = function() {
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
}, m.diff = function(r, d, l) {
var $, y = this, M = b.p(d), m = O(r), v = (m.utcOffset() - this.utcOffset()) * e, g = this - m, D = function() {
return b.m(y, m);
};
switch (M) {
case h:
$ = D() / 12;
break;
case c:
$ = D();
break;
case f:
$ = D() / 3;
break;
case o:
$ = (g - v) / 6048e5;
break;
case a:
$ = (g - v) / 864e5;
break;
case u:
$ = g / n;
break;
case s:
$ = g / e;
break;
case i:
$ = g / t;
break;
default: $ = g;
}
return l ? $ : b.a($);
}, m.daysInMonth = function() {
return this.endOf(c).$D;
}, m.$locale = function() {
return D[this.$L];
}, m.locale = function(t, e) {
if (!t) return this.$L;
var n = this.clone(), r = w(t, e, !0);
return r && (n.$L = r), n;
}, m.clone = function() {
return b.w(this.$d, this);
}, m.toDate = function() {
return new Date(this.valueOf());
}, m.toJSON = function() {
return this.isValid() ? this.toISOString() : null;
}, m.toISOString = function() {
return this.$d.toISOString();
}, m.toString = function() {
return this.$d.toUTCString();
}, M;
}(), k = _.prototype;
return O.prototype = k, [
["$ms", r],
["$s", i],
["$m", s],
["$H", u],
["$W", a],
["$M", c],
["$y", h],
["$D", d]
].forEach((function(t) {
k[t[1]] = function(e) {
return this.$g(e, t[0], t[1]);
};
})), O.extend = function(t, e) {
return t.$i || (t(e, _, O), t.$i = !0), O;
}, O.locale = w, O.isDayjs = S, O.unix = function(t) {
return O(1e3 * t);
}, O.en = D[g], O.Ls = D, O.p = {}, O;
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/customParseFormat.js
var require_customParseFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_customParseFormat = t();
})(exports, (function() {
"use strict";
var e = {
LTS: "h:mm:ss A",
LT: "h:mm A",
L: "MM/DD/YYYY",
LL: "MMMM D, YYYY",
LLL: "MMMM D, YYYY h:mm A",
LLLL: "dddd, MMMM D, YYYY h:mm A"
}, t = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, n = /\d/, r = /\d\d/, i = /\d\d?/, o = /\d*[^-_:/,()\s\d]+/, s = {}, a = function(e) {
return (e = +e) + (e > 68 ? 1900 : 2e3);
};
var f = function(e) {
return function(t) {
this[e] = +t;
};
}, h = [/[+-]\d\d:?(\d\d)?|Z/, function(e) {
(this.zone || (this.zone = {})).offset = function(e) {
if (!e) return 0;
if ("Z" === e) return 0;
var t = e.match(/([+-]|\d\d)/g), n = 60 * t[1] + (+t[2] || 0);
return 0 === n ? 0 : "+" === t[0] ? -n : n;
}(e);
}], u = function(e) {
var t = s[e];
return t && (t.indexOf ? t : t.s.concat(t.f));
}, d = function(e, t) {
var n, r = s.meridiem;
if (r) {
for (var i = 1; i <= 24; i += 1) if (e.indexOf(r(i, 0, t)) > -1) {
n = i > 12;
break;
}
} else n = e === (t ? "pm" : "PM");
return n;
}, c = {
A: [o, function(e) {
this.afternoon = d(e, !1);
}],
a: [o, function(e) {
this.afternoon = d(e, !0);
}],
Q: [n, function(e) {
this.month = 3 * (e - 1) + 1;
}],
S: [n, function(e) {
this.milliseconds = 100 * +e;
}],
SS: [r, function(e) {
this.milliseconds = 10 * +e;
}],
SSS: [/\d{3}/, function(e) {
this.milliseconds = +e;
}],
s: [i, f("seconds")],
ss: [i, f("seconds")],
m: [i, f("minutes")],
mm: [i, f("minutes")],
H: [i, f("hours")],
h: [i, f("hours")],
HH: [i, f("hours")],
hh: [i, f("hours")],
D: [i, f("day")],
DD: [r, f("day")],
Do: [o, function(e) {
var t = s.ordinal;
if (this.day = e.match(/\d+/)[0], t) for (var r = 1; r <= 31; r += 1) t(r).replace(/\[|\]/g, "") === e && (this.day = r);
}],
w: [i, f("week")],
ww: [r, f("week")],
M: [i, f("month")],
MM: [r, f("month")],
MMM: [o, function(e) {
var t = u("months"), n = (u("monthsShort") || t.map((function(e) {
return e.slice(0, 3);
}))).indexOf(e) + 1;
if (n < 1) throw new Error();
this.month = n % 12 || n;
}],
MMMM: [o, function(e) {
var t = u("months").indexOf(e) + 1;
if (t < 1) throw new Error();
this.month = t % 12 || t;
}],
Y: [/[+-]?\d+/, f("year")],
YY: [r, function(e) {
this.year = a(e);
}],
YYYY: [/\d{4}/, f("year")],
Z: h,
ZZ: h
};
function l(n) {
var r = n, i = s && s.formats;
for (var o = (n = r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t, n, r) {
var o = r && r.toUpperCase();
return n || i[r] || e[r] || i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e, t, n) {
return t || n.slice(1);
}));
}))).match(t), a = o.length, f = 0; f < a; f += 1) {
var h = o[f], u = c[h], d = u && u[0], l = u && u[1];
o[f] = l ? {
regex: d,
parser: l
} : h.replace(/^\[|\]$/g, "");
}
return function(e) {
for (var t = {}, n = 0, r = 0; n < a; n += 1) {
var i = o[n];
if ("string" == typeof i) r += i.length;
else {
var s = i.regex, f = i.parser, h = e.slice(r), u = s.exec(h)[0];
f.call(t, u), e = e.replace(u, "");
}
}
return function(e) {
var t = e.afternoon;
if (void 0 !== t) {
var n = e.hours;
t ? n < 12 && (e.hours += 12) : 12 === n && (e.hours = 0), delete e.afternoon;
}
}(t), t;
};
}
return function(e, t, n) {
n.p.customParseFormat = !0, e && e.parseTwoDigitYear && (a = e.parseTwoDigitYear);
var r = t.prototype, i = r.parse;
r.parse = function(e) {
var t = e.date, r = e.utc, o = e.args;
this.$u = r;
var a = o[1];
if ("string" == typeof a) {
var f = !0 === o[2], h = !0 === o[3], u = f || h, d = o[2];
h && (d = o[2]), s = this.$locale(), !f && d && (s = n.Ls[d]), this.$d = function(e, t, n, r) {
try {
if (["x", "X"].indexOf(t) > -1) return /* @__PURE__ */ new Date(("X" === t ? 1e3 : 1) * e);
var i = l(t)(e), o = i.year, s = i.month, a = i.day, f = i.hours, h = i.minutes, u = i.seconds, d = i.milliseconds, c = i.zone, m = i.week, M = /* @__PURE__ */ new Date(), Y = a || (o || s ? 1 : M.getDate()), p = o || M.getFullYear(), v = 0;
o && !s || (v = s > 0 ? s - 1 : M.getMonth());
var D, w = f || 0, g = h || 0, y = u || 0, L = d || 0;
return c ? new Date(Date.UTC(p, v, Y, w, g, y, L + 60 * c.offset * 1e3)) : n ? new Date(Date.UTC(p, v, Y, w, g, y, L)) : (D = new Date(p, v, Y, w, g, y, L), m && (D = r(D).week(m).toDate()), D);
} catch (e) {
return /* @__PURE__ */ new Date("");
}
}(t, a, r, n), this.init(), d && !0 !== d && (this.$L = this.locale(d).$L), u && t != this.format(a) && (this.$d = /* @__PURE__ */ new Date("")), s = {};
} else if (a instanceof Array) for (var c = a.length, m = 1; m <= c; m += 1) {
o[1] = a[m - 1];
var M = n.apply(this, o);
if (M.isValid()) {
this.$d = M.$d, this.$L = M.$L, this.init();
break;
}
m === c && (this.$d = /* @__PURE__ */ new Date(""));
}
else i.call(this, e);
};
};
}));
}));
//#endregion
//#region ../../packages/components/time-picker/src/constants.ts
var import_customParseFormat = /* @__PURE__ */ __toESM(require_customParseFormat());
var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
const timeUnits = [
"hours",
"minutes",
"seconds"
];
const PICKER_BASE_INJECTION_KEY = "EP_PICKER_BASE";
const PICKER_POPPER_OPTIONS_INJECTION_KEY = "ElPopperOptions";
const ROOT_COMMON_PICKER_INJECTION_KEY = Symbol("commonPickerContextKey");
const DEFAULT_FORMATS_TIME = "HH:mm:ss";
const DEFAULT_FORMATS_DATE = "YYYY-MM-DD";
const DEFAULT_FORMATS_DATEPICKER = {
date: DEFAULT_FORMATS_DATE,
dates: DEFAULT_FORMATS_DATE,
week: "gggg[w]ww",
year: "YYYY",
years: "YYYY",
month: "YYYY-MM",
months: "YYYY-MM",
datetime: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}`,
monthrange: "YYYY-MM",
yearrange: "YYYY",
daterange: DEFAULT_FORMATS_DATE,
datetimerange: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}`
};
//#endregion
//#region ../../packages/components/time-picker/src/utils.ts
const buildTimeList = (value, bound) => {
return [
value > 0 ? value - 1 : void 0,
value,
value < bound ? value + 1 : void 0
];
};
const rangeArr = (n) => Array.from(Array.from({ length: n }).keys());
const extractDateFormat = (format) => {
return format.replace(/\W?m{1,2}|\W?ZZ/g, "").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, "").trim();
};
const extractTimeFormat = (format) => {
return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g, "").trim();
};
const dateEquals = function(a, b) {
const aIsDate = isDate(a);
const bIsDate = isDate(b);
if (aIsDate && bIsDate) return a.getTime() === b.getTime();
if (!aIsDate && !bIsDate) return a === b;
return false;
};
const valueEquals = function(a, b) {
const aIsArray = isArray$1(a);
const bIsArray = isArray$1(b);
if (aIsArray && bIsArray) {
if (a.length !== b.length) return false;
return a.every((item, index) => dateEquals(item, b[index]));
}
if (!aIsArray && !bIsArray) return dateEquals(a, b);
return false;
};
const parseDate = function(date, format, lang) {
const day = isEmpty(format) || format === "x" ? (0, import_dayjs_min.default)(date).locale(lang) : (0, import_dayjs_min.default)(date, format).locale(lang);
return day.isValid() ? day : void 0;
};
const formatter = function(date, format, lang) {
if (isEmpty(format)) return date;
if (format === "x") return +date;
return (0, import_dayjs_min.default)(date).locale(lang).format(format);
};
const makeList = (total, method) => {
const arr = [];
const disabledArr = method?.();
for (let i = 0; i < total; i++) arr.push(disabledArr?.includes(i) ?? false);
return arr;
};
const dayOrDaysToDate = (dayOrDays) => {
return isArray$1(dayOrDays) ? dayOrDays.map((d) => d.toDate()) : dayOrDays.toDate();
};
//#endregion
//#region ../../packages/components/time-picker/src/composables/use-common-picker.ts
const useCommonPicker = (props, emit) => {
const { lang } = useLocale();
const pickerVisible = (0, vue.ref)(false);
const pickerActualVisible = (0, vue.ref)(false);
const userInput = (0, vue.ref)(null);
const valueIsEmpty = (0, vue.computed)(() => {
const { modelValue } = props;
return !modelValue || isArray$1(modelValue) && !modelValue.filter(Boolean).length;
});
const emitInput = (input) => {
if (!valueEquals(props.modelValue, input)) {
let formatted;
if (isArray$1(input)) formatted = input.map((item) => formatter(item, props.valueFormat, lang.value));
else if (input) formatted = formatter(input, props.valueFormat, lang.value);
emit(UPDATE_MODEL_EVENT, input ? formatted : input, lang.value);
}
};
const parsedValue = (0, vue.computed)(() => {
let dayOrDays;
if (valueIsEmpty.value) {
if (pickerOptions.value.getDefaultValue) dayOrDays = pickerOptions.value.getDefaultValue();
} else if (isArray$1(props.modelValue)) dayOrDays = props.modelValue.map((d) => parseDate(d, props.valueFormat, lang.value));
else dayOrDays = parseDate(props.modelValue ?? "", props.valueFormat, lang.value);
if (pickerOptions.value.getRangeAvailableTime) {
const availableResult = pickerOptions.value.getRangeAvailableTime(dayOrDays);
if (!isEqual$1(availableResult, dayOrDays)) {
dayOrDays = availableResult;
if (!valueIsEmpty.value) emitInput(dayOrDaysToDate(dayOrDays));
}
}
if (isArray$1(dayOrDays) && dayOrDays.some((day) => !day)) dayOrDays = [];
return dayOrDays;
});
const pickerOptions = (0, vue.ref)({});
const onSetPickerOption = (e) => {
pickerOptions.value[e[0]] = e[1];
pickerOptions.value.panelReady = true;
};
const onCalendarChange = (e) => {
emit("calendar-change", e);
};
const onPanelChange = (value, mode, view) => {
emit("panel-change", value, mode, view);
};
const onPick = (date = "", visible = false) => {
pickerVisible.value = visible;
let result;
if (isArray$1(date)) result = date.map((_) => _.toDate());
else result = date ? date.toDate() : date;
userInput.value = null;
emitInput(result);
};
return {
parsedValue,
pickerActualVisible,
pickerOptions,
pickerVisible,
userInput,
valueIsEmpty,
emitInput,
onCalendarChange,
onPanelChange,
onPick,
onSetPickerOption
};
};
//#endregion
//#region ../../packages/components/time-picker/src/props/shared.ts
const disabledTimeListsProps = buildProps({
disabledHours: { type: definePropType(Function) },
disabledMinutes: { type: definePropType(Function) },
disabledSeconds: { type: definePropType(Function) }
});
const timePanelSharedProps = buildProps({
visible: Boolean,
actualVisible: {
type: Boolean,
default: void 0
},
format: {
type: String,
default: ""
}
});
//#endregion
//#region ../../packages/components/time-picker/src/common/props.ts
const timePickerDefaultProps = buildProps({
automaticDropdown: {
type: Boolean,
default: true
},
id: { type: definePropType([Array, String]) },
name: { type: definePropType([Array, String]) },
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
format: String,
valueFormat: String,
dateFormat: String,
timeFormat: String,
type: {
type: String,
default: ""
},
clearable: {
type: Boolean,
default: true
},
clearIcon: {
type: definePropType([String, Object]),
default: circle_close_default
},
editable: {
type: Boolean,
default: true
},
saveOnBlur: {
type: Boolean,
default: true
},
prefixIcon: {
type: definePropType([String, Object]),
default: ""
},
size: useSizeProp,
readonly: Boolean,
disabled: {
type: Boolean,
default: void 0
},
placeholder: {
type: String,
default: ""
},
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
modelValue: {
type: definePropType([
Date,
Array,
String,
Number
]),
default: ""
},
rangeSeparator: {
type: String,
default: "-"
},
startPlaceholder: String,
endPlaceholder: String,
defaultValue: { type: definePropType([Date, Array]) },
defaultTime: { type: definePropType([Date, Array]) },
isRange: Boolean,
...disabledTimeListsProps,
disabledDate: { type: Function },
cellClassName: { type: Function },
shortcuts: {
type: Array,
default: () => []
},
arrowControl: Boolean,
tabindex: {
type: definePropType([String, Number]),
default: 0
},
validateEvent: {
type: Boolean,
default: true
},
unlinkPanels: Boolean,
placement: {
type: definePropType(String),
values: Ee,
default: "bottom"
},
fallbackPlacements: {
type: definePropType(Array),
default: [
"bottom",
"top",
"right",
"left"
]
},
...useEmptyValuesProps,
...useAriaProps(["ariaLabel"]),
showNow: {
type: Boolean,
default: true
},
showConfirm: {
type: Boolean,
default: true
},
showFooter: {
type: Boolean,
default: true
},
showWeekNumber: Boolean
});
const timePickerRangeTriggerProps = buildProps({
id: { type: definePropType(Array) },
name: { type: definePropType(Array) },
modelValue: { type: definePropType([Array, String]) },
startPlaceholder: String,
endPlaceholder: String,
disabled: Boolean
});
/**
* @deprecated Use `timePickerRangeTriggerProps` instead. This will be removed in future versions.
*/
const timePickerRngeTriggerProps = timePickerRangeTriggerProps;
//#endregion
//#region ../../packages/components/time-picker/src/common/picker-range-trigger.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$71 = [
"id",
"name",
"placeholder",
"value",
"disabled"
];
const _hoisted_2$40 = [
"id",
"name",
"placeholder",
"value",
"disabled"
];
var picker_range_trigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "PickerRangeTrigger",
inheritAttrs: false,
__name: "picker-range-trigger",
props: timePickerRangeTriggerProps,
emits: [
"mouseenter",
"mouseleave",
"click",
"touchstart",
"focus",
"blur",
"startInput",
"endInput",
"startChange",
"endChange"
],
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { formItem } = useFormItem();
const { inputId } = useFormItemInputId((0, vue.reactive)({ id: (0, vue.computed)(() => props.id?.[0]) }), { formItemContext: formItem });
const attrs = useAttrs();
const nsDate = useNamespace("date");
const nsRange = useNamespace("range");
const inputRef = (0, vue.ref)();
const endInputRef = (0, vue.ref)();
const { wrapperRef, isFocused } = useFocusController(inputRef, { disabled: (0, vue.computed)(() => props.disabled) });
const handleClick = (evt) => {
emit("click", evt);
};
const handleMouseEnter = (evt) => {
emit("mouseenter", evt);
};
const handleMouseLeave = (evt) => {
emit("mouseleave", evt);
};
const handleTouchStart = (evt) => {
emit("touchstart", evt);
};
const handleStartInput = (evt) => {
emit("startInput", evt);
};
const handleEndInput = (evt) => {
emit("endInput", evt);
};
const handleStartChange = (evt) => {
emit("startChange", evt);
};
const handleEndChange = (evt) => {
emit("endChange", evt);
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
inputRef.value?.blur();
endInputRef.value?.blur();
};
__expose({
focus,
blur
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "wrapperRef",
ref: wrapperRef,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsDate).is("active", (0, vue.unref)(isFocused)), _ctx.$attrs.class]),
style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
onClick: handleClick,
onMouseenter: handleMouseEnter,
onMouseleave: handleMouseLeave,
onTouchstartPassive: handleTouchStart
}, [
(0, vue.renderSlot)(_ctx.$slots, "prefix"),
(0, vue.createElementVNode)("input", (0, vue.mergeProps)((0, vue.unref)(attrs), {
id: (0, vue.unref)(inputId),
ref_key: "inputRef",
ref: inputRef,
name: _ctx.name && _ctx.name[0],
placeholder: _ctx.startPlaceholder,
value: _ctx.modelValue && _ctx.modelValue[0],
class: (0, vue.unref)(nsRange).b("input"),
disabled: _ctx.disabled,
onInput: handleStartInput,
onChange: handleStartChange
}), null, 16, _hoisted_1$71),
(0, vue.renderSlot)(_ctx.$slots, "range-separator"),
(0, vue.createElementVNode)("input", (0, vue.mergeProps)((0, vue.unref)(attrs), {
id: _ctx.id && _ctx.id[1],
ref_key: "endInputRef",
ref: endInputRef,
name: _ctx.name && _ctx.name[1],
placeholder: _ctx.endPlaceholder,
value: _ctx.modelValue && _ctx.modelValue[1],
class: (0, vue.unref)(nsRange).b("input"),
disabled: _ctx.disabled,
onInput: handleEndInput,
onChange: handleEndChange
}), null, 16, _hoisted_2$40),
(0, vue.renderSlot)(_ctx.$slots, "suffix")
], 38);
};
}
});
//#endregion
//#region ../../packages/components/time-picker/src/common/picker-range-trigger.vue
var picker_range_trigger_default = picker_range_trigger_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-picker/src/common/picker.vue?vue&type=script&setup=true&lang.ts
var picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "Picker",
__name: "picker",
props: timePickerDefaultProps,
emits: [
UPDATE_MODEL_EVENT,
CHANGE_EVENT,
"focus",
"blur",
"clear",
"calendar-change",
"panel-change",
"visible-change",
"keydown"
],
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const attrs = (0, vue.useAttrs)();
const nsDate = useNamespace("date");
const nsInput = useNamespace("input");
const nsRange = useNamespace("range");
const { formItem } = useFormItem();
const elPopperOptions = (0, vue.inject)(PICKER_POPPER_OPTIONS_INJECTION_KEY, {});
const emptyValues = useEmptyValues(props, null);
const refPopper = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const valueOnOpen = (0, vue.ref)(null);
let hasJustTabExitedInput = false;
const pickerDisabled = useFormDisabled();
const commonPicker = useCommonPicker(props, emit);
const { parsedValue, pickerActualVisible, userInput, pickerVisible, pickerOptions, valueIsEmpty, emitInput, onPick, onSetPickerOption, onCalendarChange, onPanelChange } = commonPicker;
const { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {
disabled: pickerDisabled,
beforeFocus() {
return props.readonly;
},
afterFocus() {
if (!props.automaticDropdown) return;
pickerVisible.value = true;
},
beforeBlur(event) {
return !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event);
},
afterBlur() {
if (isTimePicker.value && !props.saveOnBlur) {
if (!valueIsEmpty.value) pickerOptions.value.handleCancel?.();
} else handleChange();
pickerVisible.value = false;
hasJustTabExitedInput = false;
props.validateEvent && formItem?.validate("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const hovering = (0, vue.ref)(false);
const rangeInputKls = (0, vue.computed)(() => [
nsDate.b("editor"),
nsDate.bm("editor", props.type),
nsInput.e("wrapper"),
nsDate.is("disabled", pickerDisabled.value),
nsDate.is("active", pickerVisible.value),
nsRange.b("editor"),
pickerSize ? nsRange.bm("editor", pickerSize.value) : "",
attrs.class
]);
const clearIconKls = (0, vue.computed)(() => [
nsInput.e("icon"),
nsRange.e("close-icon"),
!showClearBtn.value ? nsRange.em("close-icon", "hidden") : ""
]);
(0, vue.watch)(pickerVisible, (val) => {
if (!val) {
userInput.value = null;
(0, vue.nextTick)(() => {
emitChange(props.modelValue);
});
} else (0, vue.nextTick)(() => {
if (val) valueOnOpen.value = props.modelValue;
});
});
const emitChange = (val, isClear) => {
if (isClear || !valueEquals(val, valueOnOpen.value)) {
emit(CHANGE_EVENT, val);
isClear && (valueOnOpen.value = val);
props.validateEvent && formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
}
};
const emitKeydown = (e) => {
emit("keydown", e);
};
const refInput = (0, vue.computed)(() => {
if (inputRef.value) return Array.from(inputRef.value.$el.querySelectorAll("input"));
return [];
});
const setSelectionRange = (start, end, pos) => {
const _inputs = refInput.value;
if (!_inputs.length) return;
if (!pos || pos === "min") {
_inputs[0].setSelectionRange(start, end);
_inputs[0].focus();
} else if (pos === "max") {
_inputs[1].setSelectionRange(start, end);
_inputs[1].focus();
}
};
const onBeforeShow = () => {
pickerActualVisible.value = true;
};
const onShow = () => {
emit("visible-change", true);
};
const onHide = () => {
pickerActualVisible.value = false;
pickerVisible.value = false;
emit("visible-change", false);
};
const handleOpen = () => {
pickerVisible.value = true;
};
const handleClose = () => {
pickerVisible.value = false;
};
const displayValue = (0, vue.computed)(() => {
const formattedValue = formatToString(parsedValue.value);
if (isArray$1(userInput.value)) return [userInput.value[0] ?? (formattedValue && formattedValue[0]) ?? "", userInput.value[1] ?? (formattedValue && formattedValue[1]) ?? ""];
else if (userInput.value !== null) return userInput.value;
if (isTimePicker.value && valueIsEmpty.value && !props.saveOnBlur) return "";
if (!isTimePicker.value && valueIsEmpty.value) return "";
if (!pickerVisible.value && valueIsEmpty.value) return "";
if (formattedValue) return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value ? formattedValue.join(", ") : formattedValue;
return "";
});
const isTimeLikePicker = (0, vue.computed)(() => props.type.includes("time"));
const isTimePicker = (0, vue.computed)(() => props.type.startsWith("time"));
const isDatesPicker = (0, vue.computed)(() => props.type === "dates");
const isMonthsPicker = (0, vue.computed)(() => props.type === "months");
const isYearsPicker = (0, vue.computed)(() => props.type === "years");
const triggerIcon = (0, vue.computed)(() => props.prefixIcon || (isTimeLikePicker.value ? clock_default : calendar_default$1));
const showClearBtn = (0, vue.computed)(() => props.clearable && !pickerDisabled.value && !props.readonly && !valueIsEmpty.value && (hovering.value || isFocused.value));
const onClear = (event) => {
if (props.readonly || pickerDisabled.value) return;
if (showClearBtn.value) {
event?.stopPropagation();
if (pickerOptions.value.handleClear) pickerOptions.value.handleClear();
else emitInput(emptyValues.valueOnClear.value);
emitChange(emptyValues.valueOnClear.value, true);
onHide();
}
emit("clear");
};
const onMouseDownInput = async (event) => {
if (props.readonly || pickerDisabled.value) return;
if (event.target?.tagName !== "INPUT" || isFocused.value || !props.automaticDropdown) pickerVisible.value = true;
};
const onMouseEnter = () => {
if (props.readonly || pickerDisabled.value) return;
if (!valueIsEmpty.value && props.clearable) hovering.value = true;
};
const onMouseLeave = () => {
hovering.value = false;
};
const onTouchStartInput = (event) => {
if (props.readonly || pickerDisabled.value) return;
if (event.touches[0].target?.tagName !== "INPUT" || isFocused.value || !props.automaticDropdown) pickerVisible.value = true;
};
const isRangeInput = (0, vue.computed)(() => {
return props.type.includes("range");
});
const pickerSize = useFormSize();
const popperEl = (0, vue.computed)(() => (0, vue.unref)(refPopper)?.popperRef?.contentRef);
const stophandle = onClickOutside(inputRef, (e) => {
const unrefedPopperEl = (0, vue.unref)(popperEl);
const inputEl = unrefElement(inputRef);
if (unrefedPopperEl && (e.target === unrefedPopperEl || e.composedPath().includes(unrefedPopperEl)) || e.target === inputEl || inputEl && e.composedPath().includes(inputEl)) return;
pickerVisible.value = false;
});
(0, vue.onBeforeUnmount)(() => {
stophandle?.();
});
const handleChange = () => {
if (isTimePicker.value && !props.saveOnBlur) return;
const isRangeEmpty = isArray$1(userInput.value) && userInput.value.every((v) => v === "");
if (userInput.value && !isRangeEmpty) {
const value = parseUserInputToDayjs(displayValue.value);
if (value) {
if (isValidValue(value)) emitInput(dayOrDaysToDate(value));
userInput.value = null;
}
}
if (userInput.value === "" || isRangeEmpty) {
emitInput(emptyValues.valueOnClear.value);
emitChange(emptyValues.valueOnClear.value, true);
userInput.value = null;
}
};
const parseUserInputToDayjs = (value) => {
if (!value) return null;
return pickerOptions.value.parseUserInput(value);
};
const formatToString = (value) => {
if (!value) return null;
return isArray$1(value) ? value.map((_) => _.format(props.format)) : value.format(props.format);
};
const isValidValue = (value) => {
return pickerOptions.value.isValidValue(value);
};
const handleKeydownInput = async (event) => {
if (props.readonly || pickerDisabled.value) return;
const code = getEventCode(event);
emitKeydown(event);
if (code === EVENT_CODE.esc) {
if (pickerVisible.value === true) {
pickerVisible.value = false;
event.preventDefault();
event.stopPropagation();
}
return;
}
if (code === EVENT_CODE.down) {
if (pickerOptions.value.handleFocusPicker) {
event.preventDefault();
event.stopPropagation();
}
if (pickerVisible.value === false) {
pickerVisible.value = true;
await (0, vue.nextTick)();
}
if (pickerOptions.value.handleFocusPicker) {
pickerOptions.value.handleFocusPicker();
return;
}
}
if (code === EVENT_CODE.tab) {
hasJustTabExitedInput = true;
return;
}
if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {
if (!pickerVisible.value) pickerVisible.value = true;
else if (userInput.value === null || userInput.value === "" || isValidValue(parseUserInputToDayjs(displayValue.value))) {
handleChange();
pickerVisible.value = false;
}
event.preventDefault();
event.stopPropagation();
return;
}
if (userInput.value) {
event.stopPropagation();
return;
}
if (pickerOptions.value.handleKeydownInput) pickerOptions.value.handleKeydownInput(event);
};
const onUserInput = (e) => {
userInput.value = e;
if (!pickerVisible.value) pickerVisible.value = true;
};
const handleStartInput = (event) => {
const target = event.target;
if (userInput.value) userInput.value = [target.value, userInput.value[1]];
else userInput.value = [target.value, null];
};
const handleEndInput = (event) => {
const target = event.target;
if (userInput.value) userInput.value = [userInput.value[0], target.value];
else userInput.value = [null, target.value];
};
const handleStartChange = () => {
const values = userInput.value;
const value = parseUserInputToDayjs(values && values[0]);
const parsedVal = (0, vue.unref)(parsedValue);
if (value && value.isValid()) {
userInput.value = [formatToString(value), displayValue.value?.[1] || null];
const newValue = [value, parsedVal && (parsedVal[1] || null)];
if (isValidValue(newValue)) {
emitInput(dayOrDaysToDate(newValue));
userInput.value = null;
}
}
};
const handleEndChange = () => {
const values = (0, vue.unref)(userInput);
const value = parseUserInputToDayjs(values && values[1]);
const parsedVal = (0, vue.unref)(parsedValue);
if (value && value.isValid()) {
userInput.value = [(0, vue.unref)(displayValue)?.[0] || null, formatToString(value)];
const newValue = [parsedVal && parsedVal[0], value];
if (isValidValue(newValue)) {
emitInput(dayOrDaysToDate(newValue));
userInput.value = null;
}
}
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
inputRef.value?.blur();
};
(0, vue.provide)(PICKER_BASE_INJECTION_KEY, {
props,
emptyValues
});
(0, vue.provide)(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker);
__expose({
focus,
blur,
handleOpen,
handleClose,
onPick
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
ref_key: "refPopper",
ref: refPopper,
visible: (0, vue.unref)(pickerVisible),
effect: "light",
pure: "",
trigger: "click"
}, _ctx.$attrs, {
role: "dialog",
teleported: "",
transition: `${(0, vue.unref)(nsDate).namespace.value}-zoom-in-top`,
"popper-class": [`${(0, vue.unref)(nsDate).namespace.value}-picker__popper`, _ctx.popperClass],
"popper-style": _ctx.popperStyle,
"popper-options": (0, vue.unref)(elPopperOptions),
"fallback-placements": _ctx.fallbackPlacements,
"gpu-acceleration": false,
placement: _ctx.placement,
"stop-popper-mouse-event": false,
"hide-after": 0,
persistent: "",
onBeforeShow,
onShow,
onHide
}), {
default: (0, vue.withCtx)(() => [!isRangeInput.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInput), {
key: 0,
id: _ctx.id,
ref_key: "inputRef",
ref: inputRef,
"container-role": "combobox",
"model-value": displayValue.value,
name: _ctx.name,
size: (0, vue.unref)(pickerSize),
disabled: (0, vue.unref)(pickerDisabled),
placeholder: _ctx.placeholder,
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsDate).b("editor"),
(0, vue.unref)(nsDate).bm("editor", _ctx.type),
(0, vue.unref)(nsDate).is("focus", (0, vue.unref)(pickerVisible)),
_ctx.$attrs.class
]),
style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
readonly: !_ctx.editable || _ctx.readonly || isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value || _ctx.type === "week",
"aria-label": _ctx.ariaLabel,
tabindex: _ctx.tabindex,
"validate-event": false,
onInput: onUserInput,
onFocus: (0, vue.unref)(handleFocus),
onBlur: (0, vue.unref)(handleBlur),
onKeydown: handleKeydownInput,
onChange: handleChange,
onMousedown: onMouseDownInput,
onMouseenter: onMouseEnter,
onMouseleave: onMouseLeave,
onTouchstartPassive: onTouchStartInput,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, {
prefix: (0, vue.withCtx)(() => [triggerIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon")),
onMousedown: (0, vue.withModifiers)(onMouseDownInput, ["prevent"]),
onTouchstartPassive: onTouchStartInput
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(triggerIcon.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
suffix: (0, vue.withCtx)(() => [showClearBtn.value && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)(`${(0, vue.unref)(nsInput).e("icon")} clear-icon`),
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onClick: onClear
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
_: 1
}, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 1
}, 8, [
"id",
"model-value",
"name",
"size",
"disabled",
"placeholder",
"class",
"style",
"readonly",
"aria-label",
"tabindex",
"onFocus",
"onBlur"
])) : ((0, vue.openBlock)(), (0, vue.createBlock)(picker_range_trigger_default, {
key: 1,
id: _ctx.id,
ref_key: "inputRef",
ref: inputRef,
"model-value": displayValue.value,
name: _ctx.name,
disabled: (0, vue.unref)(pickerDisabled),
readonly: !_ctx.editable || _ctx.readonly,
"start-placeholder": _ctx.startPlaceholder,
"end-placeholder": _ctx.endPlaceholder,
class: (0, vue.normalizeClass)(rangeInputKls.value),
style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
"aria-label": _ctx.ariaLabel,
tabindex: _ctx.tabindex,
autocomplete: "off",
role: "combobox",
onClick: onMouseDownInput,
onFocus: (0, vue.unref)(handleFocus),
onBlur: (0, vue.unref)(handleBlur),
onStartInput: handleStartInput,
onStartChange: handleStartChange,
onEndInput: handleEndInput,
onEndChange: handleEndChange,
onMousedown: onMouseDownInput,
onMouseenter: onMouseEnter,
onMouseleave: onMouseLeave,
onTouchstartPassive: onTouchStartInput,
onKeydown: handleKeydownInput
}, {
prefix: (0, vue.withCtx)(() => [triggerIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsRange).e("icon")])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(triggerIcon.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
"range-separator": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "range-separator", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsRange).b("separator")) }, (0, vue.toDisplayString)(_ctx.rangeSeparator), 3)])]),
suffix: (0, vue.withCtx)(() => [_ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)(clearIconKls.value),
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onClick: onClear
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
_: 1
}, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, [
"id",
"model-value",
"name",
"disabled",
"readonly",
"start-placeholder",
"end-placeholder",
"class",
"style",
"aria-label",
"tabindex",
"onFocus",
"onBlur"
]))]),
content: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {
visible: (0, vue.unref)(pickerVisible),
actualVisible: (0, vue.unref)(pickerActualVisible),
parsedValue: (0, vue.unref)(parsedValue),
format: _ctx.format,
dateFormat: _ctx.dateFormat,
timeFormat: _ctx.timeFormat,
unlinkPanels: _ctx.unlinkPanels,
type: _ctx.type,
defaultValue: _ctx.defaultValue,
showNow: _ctx.showNow,
showConfirm: _ctx.showConfirm,
showFooter: _ctx.showFooter,
showWeekNumber: _ctx.showWeekNumber,
onPick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(onPick) && (0, vue.unref)(onPick)(...args)),
onSelectRange: setSelectionRange,
onSetPickerOption: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(onSetPickerOption) && (0, vue.unref)(onSetPickerOption)(...args)),
onCalendarChange: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(onCalendarChange) && (0, vue.unref)(onCalendarChange)(...args)),
onClear,
onPanelChange: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(onPanelChange) && (0, vue.unref)(onPanelChange)(...args)),
onMousedown: _cache[5] || (_cache[5] = (0, vue.withModifiers)(() => {}, ["stop"]))
})]),
_: 3
}, 16, [
"visible",
"transition",
"popper-class",
"popper-style",
"popper-options",
"fallback-placements",
"placement"
]);
};
}
});
//#endregion
//#region ../../packages/components/time-picker/src/common/picker.vue
var picker_default = picker_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-picker/src/props/panel-time-picker.ts
const panelTimePickerProps = buildProps({
...timePanelSharedProps,
datetimeRole: String,
parsedValue: { type: definePropType(Object) }
});
//#endregion
//#region ../../packages/components/time-picker/src/composables/use-time-panel.ts
const useTimePanel = ({ getAvailableHours, getAvailableMinutes, getAvailableSeconds }) => {
const getAvailableTime = (date, role, first, compareDate) => {
const availableTimeGetters = {
hour: getAvailableHours,
minute: getAvailableMinutes,
second: getAvailableSeconds
};
let result = date;
[
"hour",
"minute",
"second"
].forEach((type) => {
if (availableTimeGetters[type]) {
let availableTimeSlots;
const method = availableTimeGetters[type];
switch (type) {
case "minute":
availableTimeSlots = method(result.hour(), role, compareDate);
break;
case "second":
availableTimeSlots = method(result.hour(), result.minute(), role, compareDate);
break;
default:
availableTimeSlots = method(role, compareDate);
break;
}
if (availableTimeSlots?.length && !availableTimeSlots.includes(result[type]())) {
const pos = first ? 0 : availableTimeSlots.length - 1;
result = result[type](availableTimeSlots[pos]);
}
}
});
return result;
};
const timePickerOptions = {};
const onSetOption = ([key, val]) => {
timePickerOptions[key] = val;
};
return {
timePickerOptions,
getAvailableTime,
onSetOption
};
};
//#endregion
//#region ../../packages/components/time-picker/src/composables/use-time-picker.ts
const makeAvailableArr = (disabledList) => {
const trueOrNumber = (isDisabled, index) => isDisabled || index;
const getNumber = (predicate) => predicate !== true;
return disabledList.map(trueOrNumber).filter(getNumber);
};
const getTimeLists = (disabledHours, disabledMinutes, disabledSeconds) => {
const getHoursList = (role, compare) => {
return makeList(24, disabledHours && (() => disabledHours?.(role, compare)));
};
const getMinutesList = (hour, role, compare) => {
return makeList(60, disabledMinutes && (() => disabledMinutes?.(hour, role, compare)));
};
const getSecondsList = (hour, minute, role, compare) => {
return makeList(60, disabledSeconds && (() => disabledSeconds?.(hour, minute, role, compare)));
};
return {
getHoursList,
getMinutesList,
getSecondsList
};
};
const buildAvailableTimeSlotGetter = (disabledHours, disabledMinutes, disabledSeconds) => {
const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(disabledHours, disabledMinutes, disabledSeconds);
const getAvailableHours = (role, compare) => {
return makeAvailableArr(getHoursList(role, compare));
};
const getAvailableMinutes = (hour, role, compare) => {
return makeAvailableArr(getMinutesList(hour, role, compare));
};
const getAvailableSeconds = (hour, minute, role, compare) => {
return makeAvailableArr(getSecondsList(hour, minute, role, compare));
};
return {
getAvailableHours,
getAvailableMinutes,
getAvailableSeconds
};
};
const useOldValue = (props, options) => {
const oldValue = (0, vue.ref)(props.parsedValue);
(0, vue.watch)(() => props.visible, (val) => {
const modelValue = (0, vue.toValue)(options.modelValue);
const valueOnClear = (0, vue.toValue)(options.valueOnClear);
if (val && modelValue === valueOnClear) {
oldValue.value = valueOnClear;
return;
}
if (!val) oldValue.value = props.parsedValue;
});
return oldValue;
};
//#endregion
//#region ../../packages/directives/click-outside/index.ts
const nodeList = /* @__PURE__ */ new Map();
if (isClient) {
let startClick;
document.addEventListener("mousedown", (e) => startClick = e);
document.addEventListener("mouseup", (e) => {
if (startClick) {
for (const handlers of nodeList.values()) for (const { documentHandler } of handlers) documentHandler(e, startClick);
startClick = void 0;
}
});
}
function createDocumentHandler(el, binding) {
let excludes = [];
if (isArray$1(binding.arg)) excludes = binding.arg;
else if (isElement$1(binding.arg)) excludes.push(binding.arg);
return function(mouseup, mousedown) {
const popperRef = binding.instance.popperRef;
const mouseUpTarget = mouseup.target;
const mouseDownTarget = mousedown?.target;
const isBound = !binding || !binding.instance;
const isTargetExists = !mouseUpTarget || !mouseDownTarget;
const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
const isSelf = el === mouseUpTarget;
const isTargetExcluded = excludes.length && excludes.some((item) => item?.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);
const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));
if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) return;
binding.value(mouseup, mousedown);
};
}
const ClickOutside = {
beforeMount(el, binding) {
if (!nodeList.has(el)) nodeList.set(el, []);
nodeList.get(el).push({
documentHandler: createDocumentHandler(el, binding),
bindingFn: binding.value
});
},
updated(el, binding) {
if (!nodeList.has(el)) nodeList.set(el, []);
const handlers = nodeList.get(el);
const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue);
const newHandler = {
documentHandler: createDocumentHandler(el, binding),
bindingFn: binding.value
};
if (oldHandlerIndex >= 0) handlers.splice(oldHandlerIndex, 1, newHandler);
else handlers.push(newHandler);
},
unmounted(el) {
nodeList.delete(el);
}
};
//#endregion
//#region ../../packages/directives/repeat-click/index.ts
const REPEAT_INTERVAL = 100;
const REPEAT_DELAY = 600;
const SCOPE$6 = "_RepeatClick";
const vRepeatClick = {
beforeMount(el, binding) {
const value = binding.value;
const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction$1(value) ? {} : value;
let intervalId;
let delayId;
const handler = () => isFunction$1(value) ? value() : value.handler();
const clear = () => {
if (delayId) {
clearTimeout(delayId);
delayId = void 0;
}
if (intervalId) {
clearInterval(intervalId);
intervalId = void 0;
}
};
const start = (evt) => {
if (evt.button !== 0) return;
clear();
handler();
document.addEventListener("mouseup", clear, { once: true });
delayId = setTimeout(() => {
intervalId = setInterval(() => {
handler();
}, interval);
}, delay);
};
el[SCOPE$6] = {
start,
clear
};
el.addEventListener("mousedown", start);
},
unmounted(el) {
if (!el[SCOPE$6]) return;
const { start, clear } = el[SCOPE$6];
if (start) el.removeEventListener("mousedown", start);
if (clear) {
clear();
document.removeEventListener("mouseup", clear);
}
el[SCOPE$6] = null;
}
};
//#endregion
//#region ../../packages/directives/trap-focus/index.ts
const FOCUSABLE_CHILDREN = "_trap-focus-children";
const FOCUS_STACK = [];
const FOCUS_HANDLER = (e) => {
if (FOCUS_STACK.length === 0) return;
const code = getEventCode(e);
const focusableElement = FOCUS_STACK[FOCUS_STACK.length - 1][FOCUSABLE_CHILDREN];
if (focusableElement.length > 0 && code === EVENT_CODE.tab) {
if (focusableElement.length === 1) {
e.preventDefault();
if (document.activeElement !== focusableElement[0]) focusableElement[0].focus();
return;
}
const goingBackward = e.shiftKey;
const isFirst = e.target === focusableElement[0];
const isLast = e.target === focusableElement[focusableElement.length - 1];
if (isFirst && goingBackward) {
e.preventDefault();
focusableElement[focusableElement.length - 1].focus();
}
if (isLast && !goingBackward) {
e.preventDefault();
focusableElement[0].focus();
}
}
};
const TrapFocus = {
beforeMount(el) {
el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el);
FOCUS_STACK.push(el);
if (FOCUS_STACK.length <= 1) document.addEventListener("keydown", FOCUS_HANDLER);
},
updated(el) {
(0, vue.nextTick)(() => {
el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el);
});
},
unmounted() {
FOCUS_STACK.shift();
if (FOCUS_STACK.length === 0) document.removeEventListener("keydown", FOCUS_HANDLER);
}
};
//#endregion
//#region ../../node_modules/.pnpm/normalize-wheel-es@1.2.0/node_modules/normalize-wheel-es/dist/index.mjs
var v = !1, o, f, s, u, d, N, l, p, m, w, D, x, E, M, F;
function a() {
if (!v) {
v = !0;
var e = navigator.userAgent, n = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e), i = /(Mac OS X)|(Windows)|(Linux)/.exec(e);
if (x = /\b(iPhone|iP[ao]d)/.exec(e), E = /\b(iP[ao]d)/.exec(e), w = /Android/i.exec(e), M = /FBAN\/\w+;/i.exec(e), F = /Mobile/i.exec(e), D = !!/Win64/.exec(e), n) {
o = n[1] ? parseFloat(n[1]) : n[5] ? parseFloat(n[5]) : NaN, o && document && document.documentMode && (o = document.documentMode);
var r = /(?:Trident\/(\d+.\d+))/.exec(e);
N = r ? parseFloat(r[1]) + 4 : o, f = n[2] ? parseFloat(n[2]) : NaN, s = n[3] ? parseFloat(n[3]) : NaN, u = n[4] ? parseFloat(n[4]) : NaN, u ? (n = /(?:Chrome\/(\d+\.\d+))/.exec(e), d = n && n[1] ? parseFloat(n[1]) : NaN) : d = NaN;
} else o = f = s = d = u = NaN;
if (i) {
if (i[1]) {
var t = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);
l = t ? parseFloat(t[1].replace("_", ".")) : !0;
} else l = !1;
p = !!i[2], m = !!i[3];
} else l = p = m = !1;
}
}
var _ = {
ie: function() {
return a() || o;
},
ieCompatibilityMode: function() {
return a() || N > o;
},
ie64: function() {
return _.ie() && D;
},
firefox: function() {
return a() || f;
},
opera: function() {
return a() || s;
},
webkit: function() {
return a() || u;
},
safari: function() {
return _.webkit();
},
chrome: function() {
return a() || d;
},
windows: function() {
return a() || p;
},
osx: function() {
return a() || l;
},
linux: function() {
return a() || m;
},
iphone: function() {
return a() || x;
},
mobile: function() {
return a() || x || E || w || F;
},
nativeApp: function() {
return a() || M;
},
android: function() {
return a() || w;
},
ipad: function() {
return a() || E;
}
}, A = _;
var c = !!(typeof window < "u" && window.document && window.document.createElement), h$26 = {
canUseDOM: c,
canUseWorkers: typeof Worker < "u",
canUseEventListeners: c && !!(window.addEventListener || window.attachEvent),
canUseViewport: c && !!window.screen,
isInWorker: !c
};
var X;
h$26.canUseDOM && (X = document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("", "") !== !0);
function S(e, n) {
if (!h$26.canUseDOM || n && !("addEventListener" in document)) return !1;
var i = "on" + e, r = i in document;
if (!r) {
var t = document.createElement("div");
t.setAttribute(i, "return;"), r = typeof t[i] == "function";
}
return !r && X && e === "wheel" && (r = document.implementation.hasFeature("Events.wheel", "3.0")), r;
}
var b = S;
var O = 10, I = 40, P = 800;
function T(e) {
var n = 0, i = 0, r = 0, t = 0;
return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (n = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (n = i, i = 0), r = n * O, t = i * O, "deltaY" in e && (t = e.deltaY), "deltaX" in e && (r = e.deltaX), (r || t) && e.deltaMode && (e.deltaMode == 1 ? (r *= I, t *= I) : (r *= P, t *= P)), r && !n && (n = r < 1 ? -1 : 1), t && !i && (i = t < 1 ? -1 : 1), {
spinX: n,
spinY: i,
pixelX: r,
pixelY: t
};
}
T.getEventType = function() {
return A.firefox() ? "DOMMouseScroll" : b("wheel") ? "wheel" : "mousewheel";
};
var Y = T;
/**
* Checks if an event is supported in the current execution environment.
*
* NOTE: This will not work correctly for non-generic events such as `change`,
* `reset`, `load`, `error`, and `select`.
*
* Borrows from Modernizr.
*
* @param {string} eventNameSuffix Event name, e.g. "click".
* @param {?boolean} capture Check if the capture phase is supported.
* @return {boolean} True if the event is supported.
* @internal
* @license Modernizr 3.0.0pre (Custom Build) | MIT
*/
//#endregion
//#region ../../packages/directives/mousewheel/index.ts
const SCOPE$5 = "_Mousewheel";
const mousewheel = function(element, callback) {
if (element && element.addEventListener) {
removeWheelHandler(element);
const fn = function(event) {
const normalized = Y(event);
callback && Reflect.apply(callback, this, [event, normalized]);
};
element[SCOPE$5] = { wheelHandler: fn };
element.addEventListener("wheel", fn, { passive: true });
}
};
const removeWheelHandler = (element) => {
if (element[SCOPE$5]?.wheelHandler) {
element.removeEventListener("wheel", element[SCOPE$5].wheelHandler);
element[SCOPE$5] = null;
}
};
const Mousewheel = {
beforeMount(el, binding) {
mousewheel(el, binding.value);
},
unmounted(el) {
removeWheelHandler(el);
},
updated(el, binding) {
if (binding.value !== binding.oldValue) mousewheel(el, binding.value);
}
};
//#endregion
//#region ../../packages/components/time-picker/src/props/basic-time-spinner.ts
const basicTimeSpinnerProps = buildProps({
role: {
type: String,
required: true
},
spinnerDate: {
type: definePropType(Object),
required: true
},
showSeconds: {
type: Boolean,
default: true
},
arrowControl: Boolean,
amPmMode: {
type: definePropType(String),
default: ""
},
...disabledTimeListsProps
});
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$70 = ["onClick"];
const _hoisted_2$39 = ["onMouseenter"];
var basic_time_spinner_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "basic-time-spinner",
props: basicTimeSpinnerProps,
emits: [
CHANGE_EVENT,
"select-range",
"set-option"
],
setup(__props, { emit: __emit }) {
const props = __props;
const { isRange, format, saveOnBlur } = (0, vue.inject)(PICKER_BASE_INJECTION_KEY).props;
const emit = __emit;
const ns = useNamespace("time");
const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(props.disabledHours, props.disabledMinutes, props.disabledSeconds);
let isScrolling = false;
const ignoreScroll = {
hours: false,
minutes: false,
seconds: false
};
const currentScrollbar = (0, vue.ref)();
const listRefsMap = {
hours: (0, vue.ref)(),
minutes: (0, vue.ref)(),
seconds: (0, vue.ref)()
};
const spinnerItems = (0, vue.computed)(() => {
return props.showSeconds ? timeUnits : timeUnits.slice(0, 2);
});
const timePartials = (0, vue.computed)(() => {
const { spinnerDate } = props;
return {
hours: spinnerDate.hour(),
minutes: spinnerDate.minute(),
seconds: spinnerDate.second()
};
});
const timeList = (0, vue.computed)(() => {
const { hours, minutes } = (0, vue.unref)(timePartials);
const { role, spinnerDate } = props;
const compare = !isRange ? spinnerDate : void 0;
return {
hours: getHoursList(role, compare),
minutes: getMinutesList(hours, role, compare),
seconds: getSecondsList(hours, minutes, role, compare)
};
});
const arrowControlTimeList = (0, vue.computed)(() => {
const { hours, minutes, seconds } = (0, vue.unref)(timePartials);
return {
hours: buildTimeList(hours, 23),
minutes: buildTimeList(minutes, 59),
seconds: buildTimeList(seconds, 59)
};
});
const debouncedResetScroll = debounce((type) => {
isScrolling = false;
adjustCurrentSpinner(type);
}, 200);
const getAmPmFlag = (hour) => {
if (!!!props.amPmMode) return "";
const isCapital = props.amPmMode === "A";
let content = hour < 12 ? " am" : " pm";
if (isCapital) content = content.toUpperCase();
return content;
};
const emitSelectRange = (type) => {
let range = [0, 0];
const actualFormat = format || DEFAULT_FORMATS_TIME;
const hourIndex = actualFormat.indexOf("HH");
const minuteIndex = actualFormat.indexOf("mm");
const secondIndex = actualFormat.indexOf("ss");
switch (type) {
case "hours":
if (hourIndex !== -1) range = [hourIndex, hourIndex + 2];
break;
case "minutes":
if (minuteIndex !== -1) range = [minuteIndex, minuteIndex + 2];
break;
case "seconds":
if (secondIndex !== -1) range = [secondIndex, secondIndex + 2];
break;
}
const [left, right] = range;
emit("select-range", left, right);
currentScrollbar.value = type;
};
const adjustCurrentSpinner = (type) => {
adjustSpinner(type, (0, vue.unref)(timePartials)[type]);
};
const adjustSpinners = () => {
adjustCurrentSpinner("hours");
adjustCurrentSpinner("minutes");
adjustCurrentSpinner("seconds");
};
const getScrollbarElement = (el) => el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`);
const adjustSpinner = (type, value) => {
if (props.arrowControl) return;
const scrollbar = (0, vue.unref)(listRefsMap[type]);
if (scrollbar && scrollbar.$el) {
if (!saveOnBlur) {
ignoreScroll[type] = true;
rAF(() => {
ignoreScroll[type] = false;
});
}
getScrollbarElement(scrollbar.$el).scrollTop = Math.max(0, value * typeItemHeight(type));
}
};
const typeItemHeight = (type) => {
const listItem = (0, vue.unref)(listRefsMap[type])?.$el.querySelector("li");
if (listItem) return Number.parseFloat(getStyle(listItem, "height")) || 0;
return 0;
};
const onIncrement = () => {
scrollDown(1);
};
const onDecrement = () => {
scrollDown(-1);
};
const scrollDown = (step) => {
if (!currentScrollbar.value) emitSelectRange("hours");
const label = currentScrollbar.value;
const now = (0, vue.unref)(timePartials)[label];
const next = findNextUnDisabled(label, now, step, currentScrollbar.value === "hours" ? 24 : 60);
modifyDateField(label, next);
adjustSpinner(label, next);
(0, vue.nextTick)(() => emitSelectRange(label));
};
const findNextUnDisabled = (type, now, step, total) => {
let next = (now + step + total) % total;
const list = (0, vue.unref)(timeList)[type];
while (list[next] && next !== now) next = (next + step + total) % total;
return next;
};
const modifyDateField = (type, value) => {
if ((0, vue.unref)(timeList)[type][value]) return;
const { hours, minutes, seconds } = (0, vue.unref)(timePartials);
let changeTo;
switch (type) {
case "hours":
changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds);
break;
case "minutes":
changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds);
break;
case "seconds":
changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value);
break;
}
emit(CHANGE_EVENT, changeTo);
};
const handleClick = (type, { value, disabled }) => {
if (!disabled) {
modifyDateField(type, value);
emitSelectRange(type);
adjustSpinner(type, value);
}
};
const handleScroll = (type) => {
if (!saveOnBlur && ignoreScroll[type]) return;
const scrollbar = (0, vue.unref)(listRefsMap[type]);
if (!scrollbar) return;
isScrolling = true;
debouncedResetScroll(type);
modifyDateField(type, Math.min(Math.round((getScrollbarElement(scrollbar.$el).scrollTop - (scrollBarHeight(type) * .5 - 10) / typeItemHeight(type) + 3) / typeItemHeight(type)), type === "hours" ? 23 : 59));
};
const scrollBarHeight = (type) => {
return (0, vue.unref)(listRefsMap[type]).$el.offsetHeight;
};
const bindScrollEvent = () => {
const bindFunction = (type) => {
const scrollbar = (0, vue.unref)(listRefsMap[type]);
if (scrollbar && scrollbar.$el) getScrollbarElement(scrollbar.$el).onscroll = () => {
handleScroll(type);
};
};
bindFunction("hours");
bindFunction("minutes");
bindFunction("seconds");
};
(0, vue.onMounted)(() => {
(0, vue.nextTick)(() => {
!props.arrowControl && bindScrollEvent();
adjustSpinners();
if (props.role === "start") emitSelectRange("hours");
});
});
const setRef = (scrollbar, type) => {
listRefsMap[type].value = scrollbar ?? void 0;
};
emit("set-option", [`${props.role}_scrollDown`, scrollDown]);
emit("set-option", [`${props.role}_emitSelectRange`, emitSelectRange]);
(0, vue.watch)(() => props.spinnerDate, () => {
if (isScrolling) return;
adjustSpinners();
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("spinner"), { "has-seconds": _ctx.showSeconds }]) }, [!_ctx.arrowControl ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, (0, vue.renderList)(spinnerItems.value, (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
key: item,
ref_for: true,
ref: (scrollbar) => setRef(scrollbar, item),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("spinner", "wrapper")),
"wrap-style": "max-height: inherit;",
"view-class": (0, vue.unref)(ns).be("spinner", "list"),
noresize: "",
tag: "ul",
onMouseenter: ($event) => emitSelectRange(item),
onMousemove: ($event) => adjustCurrentSpinner(item)
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(timeList.value[item], (disabled, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).be("spinner", "item"),
(0, vue.unref)(ns).is("active", key === timePartials.value[item]),
(0, vue.unref)(ns).is("disabled", disabled)
]),
onClick: ($event) => handleClick(item, {
value: key,
disabled
})
}, [item === "hours" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + (_ctx.amPmMode ? key % 12 || 12 : key)).slice(-2)) + (0, vue.toDisplayString)(getAmPmFlag(key)), 1)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + key).slice(-2)), 1)], 64))], 10, _hoisted_1$70);
}), 128))]),
_: 2
}, 1032, [
"class",
"view-class",
"onMouseenter",
"onMousemove"
]);
}), 128)) : (0, vue.createCommentVNode)("v-if", true), _ctx.arrowControl ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(spinnerItems.value, (item) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: item,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("spinner", "wrapper"), (0, vue.unref)(ns).is("arrow")]),
onMouseenter: ($event) => emitSelectRange(item)
}, [
(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)(["arrow-up", (0, vue.unref)(ns).be("spinner", "arrow")]) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_up_default))]),
_: 1
}, 8, ["class"])), [[(0, vue.unref)(vRepeatClick), onDecrement]]),
(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)(["arrow-down", (0, vue.unref)(ns).be("spinner", "arrow")]) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
_: 1
}, 8, ["class"])), [[(0, vue.unref)(vRepeatClick), onIncrement]]),
(0, vue.createElementVNode)("ul", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("spinner", "list")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(arrowControlTimeList.value[item], (time, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).be("spinner", "item"),
(0, vue.unref)(ns).is("active", time === timePartials.value[item]),
(0, vue.unref)(ns).is("disabled", timeList.value[item][time])
])
}, [(0, vue.unref)(isNumber)(time) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [item === "hours" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + (_ctx.amPmMode ? time % 12 || 12 : time)).slice(-2)) + (0, vue.toDisplayString)(getAmPmFlag(time)), 1)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + time).slice(-2)), 1)], 64))], 64)) : (0, vue.createCommentVNode)("v-if", true)], 2);
}), 128))], 2)
], 42, _hoisted_2$39);
}), 128)) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue
var basic_time_spinner_default = basic_time_spinner_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue?vue&type=script&setup=true&lang.ts
var panel_time_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "panel-time-pick",
props: panelTimePickerProps,
emits: [
"pick",
"select-range",
"set-picker-option"
],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const { arrowControl, disabledHours, disabledMinutes, disabledSeconds, defaultValue } = pickerBase.props;
const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds);
const ns = useNamespace("time");
const { t, lang } = useLocale();
const selectionRange = (0, vue.ref)([0, 2]);
const oldValue = useOldValue(props, {
modelValue: (0, vue.computed)(() => pickerBase.props.modelValue),
valueOnClear: (0, vue.computed)(() => pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null)
});
const transitionName = (0, vue.computed)(() => {
return isUndefined(props.actualVisible) ? `${ns.namespace.value}-zoom-in-top` : "";
});
const showSeconds = (0, vue.computed)(() => {
return props.format.includes("ss");
});
const amPmMode = (0, vue.computed)(() => {
if (props.format.includes("A")) return "A";
if (props.format.includes("a")) return "a";
return "";
});
const isValidValue = (_date) => {
const parsedDate = (0, import_dayjs_min.default)(_date).locale(lang.value);
const result = getRangeAvailableTime(parsedDate);
return parsedDate.isSame(result);
};
const handleCancel = () => {
const old = oldValue.value;
emit("pick", old, false);
(0, vue.nextTick)(() => {
oldValue.value = old;
});
};
const handleConfirm = (visible = false, first = false) => {
if (first) return;
emit("pick", props.parsedValue, visible);
};
const handleChange = (_date) => {
if (!props.visible) return;
emit("pick", getRangeAvailableTime(_date).millisecond(0), true);
};
const setSelectionRange = (start, end) => {
emit("select-range", start, end);
selectionRange.value = [start, end];
};
const changeSelectionRange = (step) => {
const actualFormat = props.format;
const hourIndex = actualFormat.indexOf("HH");
const minuteIndex = actualFormat.indexOf("mm");
const secondIndex = actualFormat.indexOf("ss");
const list = [];
const mapping = [];
if (hourIndex !== -1) {
list.push(hourIndex);
mapping.push("hours");
}
if (minuteIndex !== -1) {
list.push(minuteIndex);
mapping.push("minutes");
}
if (secondIndex !== -1 && showSeconds.value) {
list.push(secondIndex);
mapping.push("seconds");
}
const next = (list.indexOf(selectionRange.value[0]) + step + list.length) % list.length;
timePickerOptions["start_emitSelectRange"](mapping[next]);
};
const handleKeydown = (event) => {
const code = getEventCode(event);
const { left, right, up, down } = EVENT_CODE;
if ([left, right].includes(code)) {
changeSelectionRange(code === left ? -1 : 1);
event.preventDefault();
return;
}
if ([up, down].includes(code)) {
const step = code === up ? -1 : 1;
timePickerOptions["start_scrollDown"](step);
event.preventDefault();
return;
}
};
const { timePickerOptions, onSetOption, getAvailableTime } = useTimePanel({
getAvailableHours,
getAvailableMinutes,
getAvailableSeconds
});
const getRangeAvailableTime = (date) => {
return getAvailableTime(date, props.datetimeRole || "", true);
};
const parseUserInput = (value) => {
if (!value) return null;
return (0, import_dayjs_min.default)(value, props.format).locale(lang.value);
};
const getDefaultValue = () => {
return (0, import_dayjs_min.default)(defaultValue).locale(lang.value);
};
emit("set-picker-option", ["isValidValue", isValidValue]);
emit("set-picker-option", ["parseUserInput", parseUserInput]);
emit("set-picker-option", ["handleKeydownInput", handleKeydown]);
emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]);
emit("set-picker-option", ["getDefaultValue", getDefaultValue]);
emit("set-picker-option", ["handleCancel", handleCancel]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, { name: transitionName.value }, {
default: (0, vue.withCtx)(() => [_ctx.actualVisible || _ctx.visible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("panel"))
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "content"), { "has-seconds": showSeconds.value }]) }, [(0, vue.createVNode)(basic_time_spinner_default, {
ref: "spinner",
role: _ctx.datetimeRole || "start",
"arrow-control": (0, vue.unref)(arrowControl),
"show-seconds": showSeconds.value,
"am-pm-mode": amPmMode.value,
"spinner-date": _ctx.parsedValue,
"disabled-hours": (0, vue.unref)(disabledHours),
"disabled-minutes": (0, vue.unref)(disabledMinutes),
"disabled-seconds": (0, vue.unref)(disabledSeconds),
onChange: handleChange,
onSetOption: (0, vue.unref)(onSetOption),
onSelectRange: setSelectionRange
}, null, 8, [
"role",
"arrow-control",
"show-seconds",
"am-pm-mode",
"spinner-date",
"disabled-hours",
"disabled-minutes",
"disabled-seconds",
"onSetOption"
])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "footer")) }, [(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "btn"), "cancel"]),
onClick: handleCancel
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.cancel")), 3), (0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "btn"), "confirm"]),
onClick: _cache[0] || (_cache[0] = ($event) => handleConfirm())
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 3)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 1
}, 8, ["name"]);
};
}
});
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue
var panel_time_pick_default = panel_time_pick_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-picker/src/props/panel-time-range.ts
const panelTimeRangeProps = buildProps({
...timePanelSharedProps,
parsedValue: { type: definePropType(Array) }
});
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/panel-time-range.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$69 = ["disabled"];
var panel_time_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "panel-time-range",
props: panelTimeRangeProps,
emits: [
"pick",
"select-range",
"set-picker-option"
],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const makeSelectRange = (start, end) => {
const result = [];
for (let i = start; i <= end; i++) result.push(i);
return result;
};
const { t, lang } = useLocale();
const nsTime = useNamespace("time");
const nsPicker = useNamespace("picker");
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const { arrowControl, disabledHours, disabledMinutes, disabledSeconds, defaultValue } = pickerBase.props;
const startContainerKls = (0, vue.computed)(() => [
nsTime.be("range-picker", "body"),
nsTime.be("panel", "content"),
nsTime.is("arrow", arrowControl),
showSeconds.value ? "has-seconds" : ""
]);
const endContainerKls = (0, vue.computed)(() => [
nsTime.be("range-picker", "body"),
nsTime.be("panel", "content"),
nsTime.is("arrow", arrowControl),
showSeconds.value ? "has-seconds" : ""
]);
const startTime = (0, vue.computed)(() => props.parsedValue[0]);
const endTime = (0, vue.computed)(() => props.parsedValue[1]);
const oldValue = useOldValue(props, {
modelValue: (0, vue.computed)(() => pickerBase.props.modelValue),
valueOnClear: (0, vue.computed)(() => pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null)
});
const handleCancel = () => {
const old = oldValue.value;
emit("pick", old, false);
(0, vue.nextTick)(() => {
oldValue.value = old;
});
};
const showSeconds = (0, vue.computed)(() => {
return props.format.includes("ss");
});
const amPmMode = (0, vue.computed)(() => {
if (props.format.includes("A")) return "A";
if (props.format.includes("a")) return "a";
return "";
});
const handleConfirm = (visible = false) => {
emit("pick", [startTime.value, endTime.value], visible);
};
const handleMinChange = (date) => {
handleChange(date.millisecond(0), endTime.value);
};
const handleMaxChange = (date) => {
handleChange(startTime.value, date.millisecond(0));
};
const isValidValue = (_date) => {
const parsedDate = _date.map((_) => (0, import_dayjs_min.default)(_).locale(lang.value));
const result = getRangeAvailableTime(parsedDate);
return parsedDate[0].isSame(result[0]) && parsedDate[1].isSame(result[1]);
};
const handleChange = (start, end) => {
if (!props.visible) return;
emit("pick", [start, end], true);
};
const btnConfirmDisabled = (0, vue.computed)(() => {
return startTime.value > endTime.value;
});
const selectionRange = (0, vue.ref)([0, 2]);
const setMinSelectionRange = (start, end) => {
emit("select-range", start, end, "min");
selectionRange.value = [start, end];
};
const offset = (0, vue.computed)(() => showSeconds.value ? 11 : 8);
const setMaxSelectionRange = (start, end) => {
emit("select-range", start, end, "max");
const _offset = (0, vue.unref)(offset);
selectionRange.value = [start + _offset, end + _offset];
};
const changeSelectionRange = (step) => {
const list = showSeconds.value ? [
0,
3,
6,
11,
14,
17
] : [
0,
3,
8,
11
];
const mapping = ["hours", "minutes"].concat(showSeconds.value ? ["seconds"] : []);
const next = (list.indexOf(selectionRange.value[0]) + step + list.length) % list.length;
const half = list.length / 2;
if (next < half) timePickerOptions["start_emitSelectRange"](mapping[next]);
else timePickerOptions["end_emitSelectRange"](mapping[next - half]);
};
const handleKeydown = (event) => {
const code = getEventCode(event);
const { left, right, up, down } = EVENT_CODE;
if ([left, right].includes(code)) {
changeSelectionRange(code === left ? -1 : 1);
event.preventDefault();
return;
}
if ([up, down].includes(code)) {
const step = code === up ? -1 : 1;
timePickerOptions[`${selectionRange.value[0] < offset.value ? "start" : "end"}_scrollDown`](step);
event.preventDefault();
return;
}
};
const disabledHours_ = (role, compare) => {
const defaultDisable = disabledHours ? disabledHours(role) : [];
const isStart = role === "start";
const compareHour = (compare || (isStart ? endTime.value : startTime.value)).hour();
return union(defaultDisable, isStart ? makeSelectRange(compareHour + 1, 23) : makeSelectRange(0, compareHour - 1));
};
const disabledMinutes_ = (hour, role, compare) => {
const defaultDisable = disabledMinutes ? disabledMinutes(hour, role) : [];
const isStart = role === "start";
const compareDate = compare || (isStart ? endTime.value : startTime.value);
if (hour !== compareDate.hour()) return defaultDisable;
const compareMinute = compareDate.minute();
return union(defaultDisable, isStart ? makeSelectRange(compareMinute + 1, 59) : makeSelectRange(0, compareMinute - 1));
};
const disabledSeconds_ = (hour, minute, role, compare) => {
const defaultDisable = disabledSeconds ? disabledSeconds(hour, minute, role) : [];
const isStart = role === "start";
const compareDate = compare || (isStart ? endTime.value : startTime.value);
const compareHour = compareDate.hour();
const compareMinute = compareDate.minute();
if (hour !== compareHour || minute !== compareMinute) return defaultDisable;
const compareSecond = compareDate.second();
return union(defaultDisable, isStart ? makeSelectRange(compareSecond + 1, 59) : makeSelectRange(0, compareSecond - 1));
};
const getRangeAvailableTime = ([start, end]) => {
return [getAvailableTime(start, "start", true, end), getAvailableTime(end, "end", false, start)];
};
const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours_, disabledMinutes_, disabledSeconds_);
const { timePickerOptions, getAvailableTime, onSetOption } = useTimePanel({
getAvailableHours,
getAvailableMinutes,
getAvailableSeconds
});
const parseUserInput = (days) => {
if (!days) return null;
if (isArray$1(days)) return days.map((d) => (0, import_dayjs_min.default)(d, props.format).locale(lang.value));
return (0, import_dayjs_min.default)(days, props.format).locale(lang.value);
};
const getDefaultValue = () => {
if (isArray$1(defaultValue)) return defaultValue.map((d) => (0, import_dayjs_min.default)(d).locale(lang.value));
const defaultDay = (0, import_dayjs_min.default)(defaultValue).locale(lang.value);
return [defaultDay, defaultDay.add(60, "m")];
};
emit("set-picker-option", ["parseUserInput", parseUserInput]);
emit("set-picker-option", ["isValidValue", isValidValue]);
emit("set-picker-option", ["handleKeydownInput", handleKeydown]);
emit("set-picker-option", ["getDefaultValue", getDefaultValue]);
emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]);
emit("set-picker-option", ["handleCancel", handleCancel]);
return (_ctx, _cache) => {
return _ctx.actualVisible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).b("range-picker"), (0, vue.unref)(nsPicker).b("panel")])
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "content")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "cell")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "header")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.startTime")), 3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(startContainerKls.value) }, [(0, vue.createVNode)(basic_time_spinner_default, {
ref: "minSpinner",
role: "start",
"show-seconds": showSeconds.value,
"am-pm-mode": amPmMode.value,
"arrow-control": (0, vue.unref)(arrowControl),
"spinner-date": startTime.value,
"disabled-hours": disabledHours_,
"disabled-minutes": disabledMinutes_,
"disabled-seconds": disabledSeconds_,
onChange: handleMinChange,
onSetOption: (0, vue.unref)(onSetOption),
onSelectRange: setMinSelectionRange
}, null, 8, [
"show-seconds",
"am-pm-mode",
"arrow-control",
"spinner-date",
"onSetOption"
])], 2)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "cell")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "header")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.endTime")), 3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(endContainerKls.value) }, [(0, vue.createVNode)(basic_time_spinner_default, {
ref: "maxSpinner",
role: "end",
"show-seconds": showSeconds.value,
"am-pm-mode": amPmMode.value,
"arrow-control": (0, vue.unref)(arrowControl),
"spinner-date": endTime.value,
"disabled-hours": disabledHours_,
"disabled-minutes": disabledMinutes_,
"disabled-seconds": disabledSeconds_,
onChange: handleMaxChange,
onSetOption: (0, vue.unref)(onSetOption),
onSelectRange: setMaxSelectionRange
}, null, 8, [
"show-seconds",
"am-pm-mode",
"arrow-control",
"spinner-date",
"onSetOption"
])], 2)], 2)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("panel", "footer")) }, [(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).be("panel", "btn"), "cancel"]),
onClick: _cache[0] || (_cache[0] = ($event) => handleCancel())
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.cancel")), 3), (0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).be("panel", "btn"), "confirm"]),
disabled: btnConfirmDisabled.value,
onClick: _cache[1] || (_cache[1] = ($event) => handleConfirm())
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 11, _hoisted_1$69)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/time-picker/src/time-picker-com/panel-time-range.vue
var panel_time_range_default = panel_time_range_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-picker/src/time-picker.tsx
import_dayjs_min.default.extend(import_customParseFormat.default);
var time_picker_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTimePicker",
install: null,
props: {
...timePickerDefaultProps,
isRange: Boolean
},
emits: [UPDATE_MODEL_EVENT],
setup(props, ctx) {
const commonPicker = (0, vue.ref)();
const [type, Panel] = props.isRange ? ["timerange", panel_time_range_default] : ["time", panel_time_pick_default];
const modelUpdater = (value) => ctx.emit(UPDATE_MODEL_EVENT, value);
(0, vue.provide)(PICKER_POPPER_OPTIONS_INJECTION_KEY, props.popperOptions);
ctx.expose({
focus: () => {
commonPicker.value?.focus();
},
blur: () => {
commonPicker.value?.blur();
},
handleOpen: () => {
commonPicker.value?.handleOpen();
},
handleClose: () => {
commonPicker.value?.handleClose();
}
});
return () => {
const format = props.format ?? DEFAULT_FORMATS_TIME;
return (0, vue.createVNode)(picker_default, (0, vue.mergeProps)(props, {
"ref": commonPicker,
"type": type,
"format": format,
"onUpdate:modelValue": modelUpdater
}), { default: (props) => (0, vue.createVNode)(Panel, props, null) });
};
}
});
//#endregion
//#region ../../packages/components/time-picker/index.ts
const ElTimePicker = withInstall(time_picker_default);
//#endregion
//#region ../../packages/components/calendar/src/date-table.ts
const getPrevMonthLastDays = (date, count) => {
const lastDay = date.subtract(1, "month").endOf("month").date();
return rangeArr(count).map((_, index) => lastDay - (count - index - 1));
};
const getMonthDays = (date) => {
return rangeArr(date.daysInMonth()).map((_, index) => index + 1);
};
const toNestedArr = (days) => rangeArr(days.length / 7).map((index) => {
const start = index * 7;
return days.slice(start, start + 7);
});
/**
* @deprecated Removed after 3.0.0, Use `DateTableProps` instead.
*/
const dateTableProps = buildProps({
selectedDay: { type: definePropType(Object) },
range: { type: definePropType(Array) },
date: {
type: definePropType(Object),
required: true
},
hideHeader: { type: Boolean }
});
const dateTableEmits = { pick: (value) => isObject$1(value) };
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/localeData.js
var require_localeData = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(n, e) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (n = "undefined" != typeof globalThis ? globalThis : n || self).dayjs_plugin_localeData = e();
})(exports, (function() {
"use strict";
return function(n, e, t) {
var r = e.prototype, o = function(n) {
return n && (n.indexOf ? n : n.s);
}, u = function(n, e, t, r, u) {
var i = n.name ? n : n.$locale(), a = o(i[e]), s = o(i[t]), f = a || s.map((function(n) {
return n.slice(0, r);
}));
if (!u) return f;
var d = i.weekStart;
return f.map((function(n, e) {
return f[(e + (d || 0)) % 7];
}));
}, i = function() {
return t.Ls[t.locale()];
}, a = function(n, e) {
return n.formats[e] || function(n) {
return n.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(n, e, t) {
return e || t.slice(1);
}));
}(n.formats[e.toUpperCase()]);
}, s = function() {
var n = this;
return {
months: function(e) {
return e ? e.format("MMMM") : u(n, "months");
},
monthsShort: function(e) {
return e ? e.format("MMM") : u(n, "monthsShort", "months", 3);
},
firstDayOfWeek: function() {
return n.$locale().weekStart || 0;
},
weekdays: function(e) {
return e ? e.format("dddd") : u(n, "weekdays");
},
weekdaysMin: function(e) {
return e ? e.format("dd") : u(n, "weekdaysMin", "weekdays", 2);
},
weekdaysShort: function(e) {
return e ? e.format("ddd") : u(n, "weekdaysShort", "weekdays", 3);
},
longDateFormat: function(e) {
return a(n.$locale(), e);
},
meridiem: this.$locale().meridiem,
ordinal: this.$locale().ordinal
};
};
r.localeData = function() {
return s.bind(this)();
}, t.localeData = function() {
var n = i();
return {
firstDayOfWeek: function() {
return n.weekStart || 0;
},
weekdays: function() {
return t.weekdays();
},
weekdaysShort: function() {
return t.weekdaysShort();
},
weekdaysMin: function() {
return t.weekdaysMin();
},
months: function() {
return t.months();
},
monthsShort: function() {
return t.monthsShort();
},
longDateFormat: function(e) {
return a(n, e);
},
meridiem: n.meridiem,
ordinal: n.ordinal
};
}, t.months = function() {
return u(i(), "months");
}, t.monthsShort = function() {
return u(i(), "monthsShort", "months", 3);
}, t.weekdays = function(n) {
return u(i(), "weekdays", null, null, n);
}, t.weekdaysShort = function(n) {
return u(i(), "weekdaysShort", "weekdays", 3, n);
}, t.weekdaysMin = function(n) {
return u(i(), "weekdaysMin", "weekdays", 2, n);
};
};
}));
}));
//#endregion
//#region ../../packages/components/calendar/src/use-date-table.ts
var import_localeData = /* @__PURE__ */ __toESM(require_localeData());
const useDateTable = (props, emit) => {
import_dayjs_min.default.extend(import_localeData.default);
const firstDayOfWeek = import_dayjs_min.default.localeData().firstDayOfWeek();
const { t, lang } = useLocale();
const now = (0, import_dayjs_min.default)().locale(lang.value);
const isInRange = (0, vue.computed)(() => !!props.range && !!props.range.length);
const rows = (0, vue.computed)(() => {
let days = [];
if (isInRange.value) {
const [start, end] = props.range;
const currentMonthRange = rangeArr(end.date() - start.date() + 1).map((index) => ({
text: start.date() + index,
type: "current"
}));
let remaining = currentMonthRange.length % 7;
remaining = remaining === 0 ? 0 : 7 - remaining;
const nextMonthRange = rangeArr(remaining).map((_, index) => ({
text: index + 1,
type: "next"
}));
days = currentMonthRange.concat(nextMonthRange);
} else {
const firstDay = props.date.startOf("month").day();
const prevMonthDays = getPrevMonthLastDays(props.date, (firstDay - firstDayOfWeek + 7) % 7).map((day) => ({
text: day,
type: "prev"
}));
const currentMonthDays = getMonthDays(props.date).map((day) => ({
text: day,
type: "current"
}));
days = [...prevMonthDays, ...currentMonthDays];
const nextMonthDays = rangeArr(7 - (days.length % 7 || 7)).map((_, index) => ({
text: index + 1,
type: "next"
}));
days = days.concat(nextMonthDays);
}
return toNestedArr(days);
});
const weekDays = (0, vue.computed)(() => {
const start = firstDayOfWeek;
if (start === 0) return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`));
else return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start)).map((_) => t(`el.datepicker.weeks.${_}`));
});
const getFormattedDate = (day, type) => {
switch (type) {
case "prev": return props.date.startOf("month").subtract(1, "month").date(day);
case "next": return props.date.startOf("month").add(1, "month").date(day);
case "current": return props.date.date(day);
}
};
const handlePickDay = ({ text, type }) => {
emit("pick", getFormattedDate(text, type));
};
const getSlotData = ({ text, type }) => {
const day = getFormattedDate(text, type);
return {
isSelected: day.isSame(props.selectedDay),
type: `${type}-month`,
day: day.format(DEFAULT_FORMATS_DATE),
date: day.toDate()
};
};
return {
now,
isInRange,
rows,
weekDays,
getFormattedDate,
handlePickDay,
getSlotData
};
};
//#endregion
//#region ../../packages/components/calendar/src/date-table.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$68 = { key: 0 };
const _hoisted_2$38 = ["onClick"];
var date_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "DateTable",
__name: "date-table",
props: dateTableProps,
emits: dateTableEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const { isInRange, now, rows, weekDays, getFormattedDate, handlePickDay, getSlotData } = useDateTable(props, __emit);
const nsTable = useNamespace("calendar-table");
const nsDay = useNamespace("calendar-day");
const getCellClass = ({ text, type }) => {
const classes = [type];
if (type === "current") {
const date = getFormattedDate(text, type);
if (date.isSame(props.selectedDay, "day")) classes.push(nsDay.is("selected"));
if (date.isSame(now, "day")) classes.push(nsDay.is("today"));
}
return classes;
};
__expose({ getFormattedDate });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
class: (0, vue.normalizeClass)([(0, vue.unref)(nsTable).b(), (0, vue.unref)(nsTable).is("range", (0, vue.unref)(isInRange))]),
cellspacing: "0",
cellpadding: "0"
}, [!__props.hideHeader ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("thead", _hoisted_1$68, [(0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(weekDays), (day) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
key: day,
scope: "col"
}, (0, vue.toDisplayString)(day), 1);
}), 128))])])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("tbody", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rows), (row, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
key: index,
class: (0, vue.normalizeClass)({
[(0, vue.unref)(nsTable).e("row")]: true,
[(0, vue.unref)(nsTable).em("row", "hide-border")]: index === 0 && __props.hideHeader
})
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
key,
class: (0, vue.normalizeClass)(getCellClass(cell)),
onClick: ($event) => (0, vue.unref)(handlePickDay)(cell)
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsDay).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "date-cell", { data: (0, vue.unref)(getSlotData)(cell) }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cell.text), 1)])], 2)], 10, _hoisted_2$38);
}), 128))], 2);
}), 128))])], 2);
};
}
});
//#endregion
//#region ../../packages/components/calendar/src/date-table.vue
var date_table_default = date_table_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/calendar/src/use-calendar.ts
const adjacentMonth = (start, end) => {
const firstMonthLastDay = start.endOf("month");
const lastMonthFirstDay = end.startOf("month");
const lastMonthStartDay = firstMonthLastDay.isSame(lastMonthFirstDay, "week") ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay;
return [[start, firstMonthLastDay], [lastMonthStartDay.startOf("week"), end]];
};
const threeConsecutiveMonth = (start, end) => {
const firstMonthLastDay = start.endOf("month");
const secondMonthFirstDay = start.add(1, "month").startOf("month");
const secondMonthStartDay = firstMonthLastDay.isSame(secondMonthFirstDay, "week") ? secondMonthFirstDay.add(1, "week") : secondMonthFirstDay;
const secondMonthLastDay = secondMonthStartDay.endOf("month");
const lastMonthFirstDay = end.startOf("month");
const lastMonthStartDay = secondMonthLastDay.isSame(lastMonthFirstDay, "week") ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay;
return [
[start, firstMonthLastDay],
[secondMonthStartDay.startOf("week"), secondMonthLastDay],
[lastMonthStartDay.startOf("week"), end]
];
};
const useCalendar = (props, emit, componentName) => {
const { lang } = useLocale();
const selectedDay = (0, vue.ref)();
const now = (0, import_dayjs_min.default)().locale(lang.value);
const realSelectedDay = (0, vue.computed)({
get() {
if (!props.modelValue) return selectedDay.value;
return date.value;
},
set(val) {
if (!val) return;
selectedDay.value = val;
const result = val.toDate();
emit(INPUT_EVENT, result);
emit(UPDATE_MODEL_EVENT, result);
}
});
const validatedRange = (0, vue.computed)(() => {
if (!props.range || !isArray$1(props.range) || props.range.length !== 2 || props.range.some((item) => !isDate(item))) return [];
const [startDayjs, endDayjs] = props.range.map((_) => (0, import_dayjs_min.default)(_).locale(lang.value));
if (startDayjs.isAfter(endDayjs)) {
/* @__PURE__ */ debugWarn(componentName, "end time should be greater than start time");
return [];
}
if (startDayjs.isSame(endDayjs, "month")) return calculateValidatedDateRange(startDayjs, endDayjs);
else {
if (startDayjs.add(1, "month").month() !== endDayjs.month()) {
/* @__PURE__ */ debugWarn(componentName, "start time and end time interval must not exceed two months");
return [];
}
return calculateValidatedDateRange(startDayjs, endDayjs);
}
});
const date = (0, vue.computed)(() => {
if (!props.modelValue) return realSelectedDay.value || (validatedRange.value.length ? validatedRange.value[0][0] : now);
else return (0, import_dayjs_min.default)(props.modelValue).locale(lang.value);
});
const prevMonthDayjs = (0, vue.computed)(() => date.value.subtract(1, "month").date(1));
const nextMonthDayjs = (0, vue.computed)(() => date.value.add(1, "month").date(1));
const prevYearDayjs = (0, vue.computed)(() => date.value.subtract(1, "year").date(1));
const nextYearDayjs = (0, vue.computed)(() => date.value.add(1, "year").date(1));
const calculateValidatedDateRange = (startDayjs, endDayjs) => {
const firstDay = startDayjs.startOf("week");
const lastDay = endDayjs.endOf("week");
const firstMonth = firstDay.get("month");
const lastMonth = lastDay.get("month");
if (firstMonth === lastMonth) return [[firstDay, lastDay]];
else if ((firstMonth + 1) % 12 === lastMonth) return adjacentMonth(firstDay, lastDay);
else if (firstMonth + 2 === lastMonth || (firstMonth + 1) % 11 === lastMonth) return threeConsecutiveMonth(firstDay, lastDay);
else {
/* @__PURE__ */ debugWarn(componentName, "start time and end time interval must not exceed two months");
return [];
}
};
const pickDay = (day) => {
realSelectedDay.value = day;
};
const selectDate = (type) => {
const day = {
"prev-month": prevMonthDayjs.value,
"next-month": nextMonthDayjs.value,
"prev-year": prevYearDayjs.value,
"next-year": nextYearDayjs.value,
today: now
}[type];
if (!day.isSame(date.value, "day")) pickDay(day);
};
const handleDateChange = (date) => {
if (date === "today") selectDate("today");
else pickDay(date);
};
return {
calculateValidatedDateRange,
date,
realSelectedDay,
pickDay,
selectDate,
validatedRange,
handleDateChange
};
};
//#endregion
//#region ../../packages/components/calendar/src/select-controller.ts
/**
* @deprecated Removed after 3.0.0, Use `SelectControllerProps` instead.
*/
const selectControllerProps = buildProps({
date: {
type: definePropType(Object),
required: true
},
formatter: { type: definePropType(Function) }
});
const selectControllerEmits = { "date-change": (date) => isObject$1(date) || isString(date) };
//#endregion
//#region ../../packages/components/tag/src/tag.ts
/**
* @deprecated Removed after 3.0.0, Use `TagProps` instead.
*/
const tagProps = buildProps({
type: {
type: String,
values: [
"primary",
"success",
"info",
"warning",
"danger"
],
default: "primary"
},
closable: Boolean,
disableTransitions: Boolean,
hit: Boolean,
color: String,
size: {
type: String,
values: componentSizes
},
effect: {
type: String,
values: [
"dark",
"light",
"plain"
],
default: "light"
},
round: Boolean
});
const tagEmits = {
close: (evt) => evt instanceof MouseEvent,
click: (evt) => evt instanceof MouseEvent
};
//#endregion
//#region ../../packages/components/tag/src/tag.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$67 = ["aria-label"];
const _hoisted_2$37 = ["aria-label"];
var tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTag",
__name: "tag",
props: tagProps,
emits: tagEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const tagSize = useFormSize();
const { t } = useLocale();
const ns = useNamespace("tag");
const containerKls = (0, vue.computed)(() => {
const { type, hit, effect, closable, round } = props;
return [
ns.b(),
ns.is("closable", closable),
ns.m(type || "primary"),
ns.m(tagSize.value),
ns.m(effect),
ns.is("hit", hit),
ns.is("round", round)
];
});
const handleClose = (event) => {
emit("close", event);
};
const handleClick = (event) => {
emit("click", event);
};
const handleVNodeMounted = (vnode) => {
if (vnode?.component?.subTree?.component?.bum) vnode.component.subTree.component.bum = null;
};
return (_ctx, _cache) => {
return __props.disableTransitions ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)(containerKls.value),
style: (0, vue.normalizeStyle)({ backgroundColor: __props.color }),
onClick: handleClick
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), __props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
"aria-label": (0, vue.unref)(t)("el.tag.close"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")),
type: "button",
onClick: (0, vue.withModifiers)(handleClose, ["stop"])
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
})], 10, _hoisted_1$67)) : (0, vue.createCommentVNode)("v-if", true)], 6)) : ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
key: 1,
name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-center`,
appear: "",
onVnodeMounted: handleVNodeMounted
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)(containerKls.value),
style: (0, vue.normalizeStyle)({ backgroundColor: __props.color }),
onClick: handleClick
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), __props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
"aria-label": (0, vue.unref)(t)("el.tag.close"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")),
type: "button",
onClick: (0, vue.withModifiers)(handleClose, ["stop"])
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
})], 10, _hoisted_2$37)) : (0, vue.createCommentVNode)("v-if", true)], 6)]),
_: 3
}, 8, ["name"]));
};
}
});
//#endregion
//#region ../../packages/components/tag/src/tag.vue
var tag_default = tag_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tag/index.ts
const ElTag = withInstall(tag_default);
//#endregion
//#region ../../packages/components/select-v2/src/useProps.ts
const defaultProps$2 = {
label: "label",
value: "value",
disabled: "disabled",
options: "options"
};
function useProps(props) {
const aliasProps = (0, vue.ref)({
...defaultProps$2,
...props.props
});
let cache = { ...props.props };
(0, vue.watch)(() => props.props, (val) => {
if (!isEqual$1(val, cache)) {
aliasProps.value = {
...defaultProps$2,
...val
};
cache = { ...val };
}
}, { deep: true });
const getLabel = (option) => get(option, aliasProps.value.label);
const getValue = (option) => get(option, aliasProps.value.value);
const getDisabled = (option) => get(option, aliasProps.value.disabled);
const getOptions = (option) => get(option, aliasProps.value.options);
return {
aliasProps,
getLabel,
getValue,
getDisabled,
getOptions
};
}
//#endregion
//#region ../../packages/components/select/src/token.ts
const selectGroupKey = Symbol("ElSelectGroup");
const selectKey = Symbol("ElSelect");
//#endregion
//#region ../../packages/components/select/src/option.ts
const COMPONENT_NAME$14 = "ElOption";
const optionProps = buildProps({
value: {
type: [
String,
Number,
Boolean,
Object
],
required: true
},
label: { type: [String, Number] },
created: Boolean,
disabled: Boolean
});
//#endregion
//#region ../../packages/components/select/src/useOption.ts
function useOption$1(props, states) {
const select = (0, vue.inject)(selectKey);
if (!select) throwError(COMPONENT_NAME$14, "usage: <el-select><el-option /></el-select/>");
const selectGroup = (0, vue.inject)(selectGroupKey, { disabled: false });
const itemSelected = (0, vue.computed)(() => {
return contains(castArray$1(select.props.modelValue), props.value);
});
const limitReached = (0, vue.computed)(() => {
if (select.props.multiple) {
const modelValue = castArray$1(select.props.modelValue ?? []);
return !itemSelected.value && modelValue.length >= select.props.multipleLimit && select.props.multipleLimit > 0;
} else return false;
});
const currentLabel = (0, vue.computed)(() => {
return props.label ?? (isObject$1(props.value) ? "" : props.value);
});
const currentValue = (0, vue.computed)(() => {
return props.value || props.label || "";
});
const isDisabled = (0, vue.computed)(() => {
return props.disabled || states.groupDisabled || limitReached.value;
});
const instance = (0, vue.getCurrentInstance)();
const contains = (arr = [], target) => {
if (!isObject$1(props.value)) return arr && arr.includes(target);
else {
const valueKey = select.props.valueKey;
return arr && arr.some((item) => {
return (0, vue.toRaw)(get(item, valueKey)) === get(target, valueKey);
});
}
};
const hoverItem = () => {
if (!isDisabled.value) select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy);
};
const updateOption = (query) => {
states.visible = new RegExp(escapeStringRegexp(query), "i").test(String(currentLabel.value)) || props.created;
};
(0, vue.watch)(() => currentLabel.value, () => {
if (!props.created && !select.props.remote) select.setSelected();
});
(0, vue.watch)(() => props.value, (val, oldVal) => {
const { remote, valueKey } = select.props;
if (remote ? val !== oldVal : !isEqual$1(val, oldVal)) {
select.onOptionDestroy(oldVal, instance.proxy);
select.onOptionCreate(instance.proxy);
}
if (!props.created && !remote) {
if (valueKey && isObject$1(val) && isObject$1(oldVal) && val[valueKey] === oldVal[valueKey]) return;
select.setSelected();
}
});
(0, vue.watch)(() => selectGroup.disabled, () => {
states.groupDisabled = selectGroup.disabled;
}, { immediate: true });
return {
select,
currentLabel,
currentValue,
itemSelected,
isDisabled,
hoverItem,
updateOption
};
}
//#endregion
//#region ../../packages/components/select/src/option.vue?vue&type=script&lang.ts
var option_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: COMPONENT_NAME$14,
componentName: COMPONENT_NAME$14,
props: optionProps,
setup(props) {
const ns = useNamespace("select");
const id = useId();
const containerKls = (0, vue.computed)(() => [
ns.be("dropdown", "item"),
ns.is("disabled", (0, vue.unref)(isDisabled)),
ns.is("selected", (0, vue.unref)(itemSelected)),
ns.is("hovering", (0, vue.unref)(hover))
]);
const states = (0, vue.reactive)({
index: -1,
groupDisabled: false,
visible: true,
hover: false
});
const { currentLabel, itemSelected, isDisabled, select, hoverItem, updateOption } = useOption$1(props, states);
const { visible, hover } = (0, vue.toRefs)(states);
const vm = (0, vue.getCurrentInstance)().proxy;
select.onOptionCreate(vm);
(0, vue.onBeforeUnmount)(() => {
const key = vm.value;
(0, vue.nextTick)(() => {
const { selected: selectedOptions } = select.states;
const doesSelected = selectedOptions.some((item) => {
return item.value === vm.value;
});
if (select.states.cachedOptions.get(key) === vm && !doesSelected) select.states.cachedOptions.delete(key);
});
select.onOptionDestroy(key, vm);
});
function selectOptionClick() {
if (!isDisabled.value) select.handleOptionSelect(vm);
}
const handleMousedown = (event) => {
let target = event.target;
const currentTarget = event.currentTarget;
while (target && target !== currentTarget) {
if (isFocusable(target)) return;
target = target.parentElement;
}
event.preventDefault();
};
return {
ns,
id,
containerKls,
currentLabel,
itemSelected,
isDisabled,
select,
visible,
hover,
states,
hoverItem,
handleMousedown,
updateOption,
selectOptionClick
};
}
});
//#endregion
//#region ../../packages/components/select/src/option.vue
const _hoisted_1$66 = [
"id",
"aria-disabled",
"aria-selected"
];
function _sfc_render$20(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
id: _ctx.id,
class: (0, vue.normalizeClass)(_ctx.containerKls),
role: "option",
"aria-disabled": _ctx.isDisabled || void 0,
"aria-selected": _ctx.itemSelected,
onMousemove: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)),
onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentLabel), 1)])], 42, _hoisted_1$66)), [[vue.vShow, _ctx.visible]]);
}
var option_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_vue_vue_type_script_lang_default, [["render", _sfc_render$20]]);
//#endregion
//#region ../../packages/components/select/src/select-dropdown.vue?vue&type=script&lang.ts
var select_dropdown_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElSelectDropdown",
componentName: "ElSelectDropdown",
setup() {
const select = (0, vue.inject)(selectKey);
const ns = useNamespace("select");
const popperClass = (0, vue.computed)(() => select.props.popperClass);
const isMultiple = (0, vue.computed)(() => select.props.multiple);
const isFitInputWidth = (0, vue.computed)(() => select.props.fitInputWidth);
const minWidth = (0, vue.ref)("");
function updateMinWidth() {
const offsetWidth = select.selectRef?.offsetWidth;
if (offsetWidth) minWidth.value = `${offsetWidth - BORDER_HORIZONTAL_WIDTH}px`;
else minWidth.value = "";
}
(0, vue.onMounted)(() => {
updateMinWidth();
useResizeObserver(select.selectRef, updateMinWidth);
});
return {
ns,
minWidth,
popperClass,
isMultiple,
isFitInputWidth
};
}
});
//#endregion
//#region ../../packages/components/select/src/select-dropdown.vue
function _sfc_render$19(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
_ctx.ns.b("dropdown"),
_ctx.ns.is("multiple", _ctx.isMultiple),
_ctx.popperClass
]),
style: (0, vue.normalizeStyle)({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth })
}, [
_ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)(_ctx.ns.be("dropdown", "header"))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.renderSlot)(_ctx.$slots, "default"),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)(_ctx.ns.be("dropdown", "footer"))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 6);
}
var select_dropdown_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(select_dropdown_vue_vue_type_script_lang_default, [["render", _sfc_render$19]]);
//#endregion
//#region ../../packages/components/select/src/useSelect.ts
const useSelect$2 = (props, emit) => {
const { t } = useLocale();
const slots = (0, vue.useSlots)();
const contentId = useId();
const nsSelect = useNamespace("select");
const nsInput = useNamespace("input");
const states = (0, vue.reactive)({
inputValue: "",
options: /* @__PURE__ */ new Map(),
cachedOptions: /* @__PURE__ */ new Map(),
optionValues: [],
selected: [],
selectionWidth: 0,
collapseItemWidth: 0,
selectedLabel: "",
hoveringIndex: -1,
previousQuery: null,
inputHovering: false,
menuVisibleOnFocus: false,
isBeforeHide: false
});
const selectRef = (0, vue.ref)();
const selectionRef = (0, vue.ref)();
const tooltipRef = (0, vue.ref)();
const tagTooltipRef = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const prefixRef = (0, vue.ref)();
const suffixRef = (0, vue.ref)();
const menuRef = (0, vue.ref)();
const tagMenuRef = (0, vue.ref)();
const collapseItemRef = (0, vue.ref)();
const scrollbarRef = (0, vue.ref)();
const expanded = (0, vue.ref)(false);
const hoverOption = (0, vue.ref)();
const debouncing = (0, vue.ref)(false);
const { form, formItem } = useFormItem();
const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
const { valueOnClear, isEmptyValue } = useEmptyValues(props);
const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({ afterComposition: (e) => onInput(e) });
const selectDisabled = useFormDisabled();
const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
disabled: selectDisabled,
afterFocus() {
if (props.automaticDropdown && !expanded.value) {
expanded.value = true;
states.menuVisibleOnFocus = true;
}
},
beforeBlur(event) {
return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
},
afterBlur() {
expanded.value = false;
states.menuVisibleOnFocus = false;
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const hasModelValue = (0, vue.computed)(() => {
return isArray$1(props.modelValue) ? props.modelValue.length > 0 : !isEmptyValue(props.modelValue);
});
const needStatusIcon = (0, vue.computed)(() => form?.statusIcon ?? false);
const showClearBtn = (0, vue.computed)(() => {
return props.clearable && !selectDisabled.value && hasModelValue.value && (isFocused.value || states.inputHovering);
});
const iconComponent = (0, vue.computed)(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon);
const iconReverse = (0, vue.computed)(() => nsSelect.is("reverse", !!(iconComponent.value && expanded.value)));
const validateState = (0, vue.computed)(() => formItem?.validateState || "");
const validateIcon = (0, vue.computed)(() => validateState.value && ValidateComponentsMap[validateState.value]);
const debounce = (0, vue.computed)(() => props.remote ? props.debounce : 0);
const isRemoteSearchEmpty = (0, vue.computed)(() => props.remote && !states.inputValue && states.options.size === 0);
const emptyText = (0, vue.computed)(() => {
if (props.loading) return props.loadingText || t("el.select.loading");
else {
if (props.filterable && states.inputValue && states.options.size > 0 && filteredOptionsCount.value === 0) return props.noMatchText || t("el.select.noMatch");
if (states.options.size === 0) return props.noDataText || t("el.select.noData");
}
return null;
});
const filteredOptionsCount = (0, vue.computed)(() => optionsArray.value.filter((option) => option.visible).length);
const optionsArray = (0, vue.computed)(() => {
const list = Array.from(states.options.values());
const newList = [];
states.optionValues.forEach((item) => {
const index = list.findIndex((i) => i.value === item);
if (index > -1) newList.push(list[index]);
});
return newList.length >= list.length ? newList : list;
});
const cachedOptionsArray = (0, vue.computed)(() => Array.from(states.cachedOptions.values()));
const showNewOption = (0, vue.computed)(() => {
const hasExistingOption = optionsArray.value.filter((option) => {
return !option.created;
}).some((option) => {
return option.currentLabel === states.inputValue;
});
return props.filterable && props.allowCreate && states.inputValue !== "" && !hasExistingOption;
});
const updateOptions = () => {
if (props.filterable && isFunction$1(props.filterMethod)) return;
if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) return;
optionsArray.value.forEach((option) => {
option.updateOption?.(states.inputValue);
});
};
const selectSize = useFormSize();
const collapseTagSize = (0, vue.computed)(() => ["small"].includes(selectSize.value) ? "small" : "default");
const dropdownMenuVisible = (0, vue.computed)({
get() {
return expanded.value && (props.loading || !isRemoteSearchEmpty.value || props.remote && !!slots.empty) && (!debouncing.value || !isEmpty(states.previousQuery) || states.options.size > 0);
},
set(val) {
expanded.value = val;
}
});
const shouldShowPlaceholder = (0, vue.computed)(() => {
if (props.multiple && !isUndefined(props.modelValue)) return castArray$1(props.modelValue).length === 0 && !states.inputValue;
const value = isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue;
return props.filterable || isUndefined(value) ? !states.inputValue : true;
});
const currentPlaceholder = (0, vue.computed)(() => {
const _placeholder = props.placeholder ?? t("el.select.placeholder");
return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel;
});
const mouseEnterEventName = (0, vue.computed)(() => isIOS ? null : "mouseenter");
(0, vue.watch)(() => props.modelValue, (val, oldVal) => {
if (props.multiple) {
if (props.filterable && !props.reserveKeyword) {
states.inputValue = "";
handleQueryChange("");
}
}
setSelected();
if (!isEqual$1(val, oldVal) && props.validateEvent) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
}, {
flush: "post",
deep: true
});
(0, vue.watch)(() => expanded.value, (val) => {
if (val) handleQueryChange(states.inputValue);
else {
states.inputValue = "";
states.previousQuery = null;
states.isBeforeHide = true;
states.menuVisibleOnFocus = false;
}
});
(0, vue.watch)(() => states.options.entries(), () => {
if (!isClient) return;
setSelected();
if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) checkDefaultFirstOption();
}, { flush: "post" });
(0, vue.watch)([() => states.hoveringIndex, optionsArray], ([val]) => {
if (isNumber(val) && val > -1) hoverOption.value = optionsArray.value[val] || {};
else hoverOption.value = {};
optionsArray.value.forEach((option) => {
option.hover = hoverOption.value === option;
});
});
(0, vue.watchEffect)(() => {
if (states.isBeforeHide) return;
updateOptions();
});
const handleQueryChange = (val) => {
if (states.previousQuery === val || isComposing.value) return;
states.previousQuery = val;
if (props.filterable && isFunction$1(props.filterMethod)) props.filterMethod(val);
else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) props.remoteMethod(val);
if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) (0, vue.nextTick)(checkDefaultFirstOption);
else (0, vue.nextTick)(updateHoveringIndex);
};
/**
* find and highlight first option as default selected
* @remark
* - if the first option in dropdown list is user-created,
* it would be at the end of the optionsArray
* so find it and set hover.
* (NOTE: there must be only one user-created option in dropdown list with query)
* - if there's no user-created option in list, just find the first one as usual
* (NOTE: exclude options that are disabled or in disabled-group)
*/
const checkDefaultFirstOption = () => {
const optionsInDropdown = optionsArray.value.filter((n) => n.visible && !n.disabled && !n.states.groupDisabled);
const userCreatedOption = optionsInDropdown.find((n) => n.created);
const firstOriginOption = optionsInDropdown[0];
states.hoveringIndex = getValueIndex(optionsArray.value.map((item) => item.value), userCreatedOption || firstOriginOption);
};
const setSelected = () => {
if (!props.multiple) {
const option = getOption(isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue);
states.selectedLabel = option.currentLabel;
states.selected = [option];
return;
} else states.selectedLabel = "";
const result = [];
if (!isUndefined(props.modelValue)) castArray$1(props.modelValue).forEach((value) => {
result.push(getOption(value));
});
states.selected = result;
};
const getOption = (value) => {
let option;
const isObjectValue = isPlainObject$1(value);
for (let i = states.cachedOptions.size - 1; i >= 0; i--) {
const cachedOption = cachedOptionsArray.value[i];
if (isObjectValue ? get(cachedOption.value, props.valueKey) === get(value, props.valueKey) : cachedOption.value === value) {
option = {
index: optionsArray.value.filter((opt) => !opt.created).indexOf(cachedOption),
value,
currentLabel: cachedOption.currentLabel,
get isDisabled() {
return cachedOption.isDisabled;
}
};
break;
}
}
if (option) return option;
return {
index: -1,
value,
currentLabel: isObjectValue ? value.label : value ?? ""
};
};
const updateHoveringIndex = () => {
const length = states.selected.length;
if (length > 0) {
const lastOption = states.selected[length - 1];
states.hoveringIndex = optionsArray.value.findIndex((item) => getValueKey(lastOption) === getValueKey(item));
} else states.hoveringIndex = -1;
};
const resetSelectionWidth = () => {
states.selectionWidth = Number.parseFloat(window.getComputedStyle(selectionRef.value).width);
};
const resetCollapseItemWidth = () => {
states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
};
const updateTooltip = () => {
tooltipRef.value?.updatePopper?.();
};
const updateTagTooltip = () => {
tagTooltipRef.value?.updatePopper?.();
};
const onInputChange = () => {
if (states.inputValue.length > 0 && !expanded.value) expanded.value = true;
handleQueryChange(states.inputValue);
};
const onInput = (event) => {
states.inputValue = event.target.value;
if (props.remote) {
debouncing.value = true;
debouncedOnInputChange();
} else return onInputChange();
};
const debouncedOnInputChange = useDebounceFn(() => {
onInputChange();
debouncing.value = false;
}, debounce);
const emitChange = (val) => {
if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
};
const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => {
const option = states.cachedOptions.get(it);
return !option?.disabled && !option?.states.groupDisabled;
});
const deletePrevTag = (e) => {
const code = getEventCode(e);
if (!props.multiple) return;
if (code === EVENT_CODE.delete) return;
if (e.target.value.length <= 0) {
const value = castArray$1(props.modelValue).slice();
const lastNotDisabledIndex = getLastNotDisabledIndex(value);
if (lastNotDisabledIndex < 0) return;
const removeTagValue = value[lastNotDisabledIndex];
value.splice(lastNotDisabledIndex, 1);
emit(UPDATE_MODEL_EVENT, value);
emitChange(value);
emit("remove-tag", removeTagValue);
}
};
const deleteTag = (event, tag) => {
const index = states.selected.indexOf(tag);
if (index > -1 && !selectDisabled.value) {
const value = castArray$1(props.modelValue).slice();
value.splice(index, 1);
emit(UPDATE_MODEL_EVENT, value);
emitChange(value);
emit("remove-tag", tag.value);
}
event.stopPropagation();
focus();
};
const deleteSelected = (event) => {
event.stopPropagation();
const value = props.multiple ? [] : valueOnClear.value;
if (props.multiple) {
for (const item of states.selected) if (item.isDisabled) value.push(item.value);
}
emit(UPDATE_MODEL_EVENT, value);
emitChange(value);
states.hoveringIndex = -1;
expanded.value = false;
emit("clear");
focus();
};
const handleOptionSelect = (option) => {
if (props.multiple) {
const value = castArray$1(props.modelValue ?? []).slice();
const optionIndex = getValueIndex(value, option);
if (optionIndex > -1) value.splice(optionIndex, 1);
else if (props.multipleLimit <= 0 || value.length < props.multipleLimit) value.push(option.value);
emit(UPDATE_MODEL_EVENT, value);
emitChange(value);
if (option.created) handleQueryChange("");
if (props.filterable && (option.created || !props.reserveKeyword)) states.inputValue = "";
} else {
!isEqual$1(props.modelValue, option.value) && emit(UPDATE_MODEL_EVENT, option.value);
emitChange(option.value);
expanded.value = false;
}
focus();
if (expanded.value) return;
(0, vue.nextTick)(() => {
scrollToOption(option);
});
};
const getValueIndex = (arr, option) => {
if (isUndefined(option)) return -1;
if (!isObject$1(option.value)) return arr.indexOf(option.value);
return arr.findIndex((item) => {
return isEqual$1(get(item, props.valueKey), getValueKey(option));
});
};
const scrollToOption = (option) => {
const targetOption = isArray$1(option) ? option[option.length - 1] : option;
let target = null;
if (!isNil(targetOption?.value)) {
const options = optionsArray.value.filter((item) => item.value === targetOption.value);
if (options.length > 0) target = options[0].$el;
}
if (tooltipRef.value && target) {
const menu = tooltipRef.value?.popperRef?.contentRef?.querySelector?.(`.${nsSelect.be("dropdown", "wrap")}`);
if (menu) scrollIntoView(menu, target);
}
scrollbarRef.value?.handleScroll();
};
const onOptionCreate = (vm) => {
states.options.set(vm.value, vm);
states.cachedOptions.set(vm.value, vm);
};
const onOptionDestroy = (key, vm) => {
if (states.options.get(key) === vm) states.options.delete(key);
};
const popperRef = (0, vue.computed)(() => {
return tooltipRef.value?.popperRef?.contentRef;
});
const handleMenuEnter = () => {
states.isBeforeHide = false;
(0, vue.nextTick)(() => {
scrollbarRef.value?.update();
scrollToOption(states.selected);
});
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
if (expanded.value) {
expanded.value = false;
(0, vue.nextTick)(() => inputRef.value?.blur());
return;
}
inputRef.value?.blur();
};
const handleClearClick = (event) => {
deleteSelected(event);
};
const handleClickOutside = (event) => {
expanded.value = false;
if (isFocused.value) {
const _event = new FocusEvent("blur", event);
(0, vue.nextTick)(() => handleBlur(_event));
}
};
const handleEsc = () => {
if (states.inputValue.length > 0) states.inputValue = "";
else expanded.value = false;
};
const toggleMenu = (event) => {
if (selectDisabled.value || props.filterable && expanded.value && event && !suffixRef.value?.contains(event.target)) return;
if (isIOS) states.inputHovering = true;
if (states.menuVisibleOnFocus) states.menuVisibleOnFocus = false;
else expanded.value = !expanded.value;
};
const selectOption = () => {
if (!expanded.value) toggleMenu();
else {
const option = optionsArray.value[states.hoveringIndex];
if (option && !option.isDisabled) handleOptionSelect(option);
}
};
const getValueKey = (item) => {
return isObject$1(item.value) ? get(item.value, props.valueKey) : item.value;
};
const optionsAllDisabled = (0, vue.computed)(() => optionsArray.value.filter((option) => option.visible).every((option) => option.isDisabled));
const showTagList = (0, vue.computed)(() => {
if (!props.multiple) return [];
return props.collapseTags ? states.selected.slice(0, props.maxCollapseTags) : states.selected;
});
const collapseTagList = (0, vue.computed)(() => {
if (!props.multiple) return [];
return props.collapseTags ? states.selected.slice(props.maxCollapseTags) : [];
});
const navigateOptions = (direction) => {
if (!expanded.value) {
expanded.value = true;
return;
}
if (states.options.size === 0 || filteredOptionsCount.value === 0 || isComposing.value) return;
if (!optionsAllDisabled.value) {
if (direction === "next") {
states.hoveringIndex++;
if (states.hoveringIndex === states.options.size) states.hoveringIndex = 0;
} else if (direction === "prev") {
states.hoveringIndex--;
if (states.hoveringIndex < 0) states.hoveringIndex = states.options.size - 1;
}
const option = optionsArray.value[states.hoveringIndex];
if (option.isDisabled || !option.visible) navigateOptions(direction);
(0, vue.nextTick)(() => scrollToOption(hoverOption.value));
}
};
const findFocusableIndex = (arr, start, step, len) => {
for (let i = start; i >= 0 && i < len; i += step) {
const obj = arr[i];
if (!obj?.isDisabled && obj?.visible) return i;
}
return null;
};
const focusOption = (targetIndex, mode) => {
const len = states.options.size;
if (len === 0) return;
const start = clamp$1(targetIndex, 0, len - 1);
const options = optionsArray.value;
const direction = mode === "up" ? -1 : 1;
const newIndex = findFocusableIndex(options, start, direction, len) ?? findFocusableIndex(options, start - direction, -direction, len);
if (newIndex != null) {
states.hoveringIndex = newIndex;
(0, vue.nextTick)(() => scrollToOption(hoverOption.value));
}
};
const handleKeydown = (e) => {
const code = getEventCode(e);
let isPreventDefault = true;
switch (code) {
case EVENT_CODE.up:
navigateOptions("prev");
break;
case EVENT_CODE.down:
navigateOptions("next");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
if (!isComposing.value) selectOption();
break;
case EVENT_CODE.esc:
handleEsc();
break;
case EVENT_CODE.backspace:
isPreventDefault = false;
deletePrevTag(e);
return;
case EVENT_CODE.home:
if (!expanded.value) return;
focusOption(0, "down");
break;
case EVENT_CODE.end:
if (!expanded.value) return;
focusOption(states.options.size - 1, "up");
break;
case EVENT_CODE.pageUp:
if (!expanded.value) return;
focusOption(states.hoveringIndex - 10, "up");
break;
case EVENT_CODE.pageDown:
if (!expanded.value) return;
focusOption(states.hoveringIndex + 10, "down");
break;
default:
isPreventDefault = false;
break;
}
if (isPreventDefault) {
e.preventDefault();
e.stopPropagation();
}
};
const getGapWidth = () => {
if (!selectionRef.value) return 0;
const style = window.getComputedStyle(selectionRef.value);
return Number.parseFloat(style.gap || "6px");
};
const tagStyle = (0, vue.computed)(() => {
const gapWidth = getGapWidth();
const inputSlotWidth = props.filterable ? gapWidth + MINIMUM_INPUT_WIDTH : 0;
return { maxWidth: `${collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.selectionWidth - inputSlotWidth}px` };
});
const collapseTagStyle = (0, vue.computed)(() => {
return { maxWidth: `${states.selectionWidth}px` };
});
const popupScroll = (data) => {
emit("popup-scroll", data);
};
useResizeObserver(selectionRef, resetSelectionWidth);
useResizeObserver(wrapperRef, updateTooltip);
useResizeObserver(tagMenuRef, updateTagTooltip);
useResizeObserver(collapseItemRef, resetCollapseItemWidth);
let stop;
(0, vue.watch)(() => dropdownMenuVisible.value, (newVal) => {
if (newVal) stop = useResizeObserver(menuRef, updateTooltip).stop;
else {
stop?.();
stop = void 0;
}
emit("visible-change", newVal);
});
(0, vue.onMounted)(() => {
setSelected();
});
return {
inputId,
contentId,
nsSelect,
nsInput,
states,
isFocused,
expanded,
optionsArray,
hoverOption,
selectSize,
filteredOptionsCount,
updateTooltip,
updateTagTooltip,
debouncedOnInputChange,
onInput,
deletePrevTag,
deleteTag,
deleteSelected,
handleOptionSelect,
scrollToOption,
hasModelValue,
shouldShowPlaceholder,
currentPlaceholder,
mouseEnterEventName,
needStatusIcon,
showClearBtn,
iconComponent,
iconReverse,
validateState,
validateIcon,
showNewOption,
updateOptions,
collapseTagSize,
setSelected,
selectDisabled,
emptyText,
handleCompositionStart,
handleCompositionUpdate,
handleCompositionEnd,
handleKeydown,
onOptionCreate,
onOptionDestroy,
handleMenuEnter,
focus,
blur,
handleClearClick,
handleClickOutside,
handleEsc,
toggleMenu,
selectOption,
getValueKey,
navigateOptions,
dropdownMenuVisible,
showTagList,
collapseTagList,
popupScroll,
getOption,
tagStyle,
collapseTagStyle,
popperRef,
inputRef,
tooltipRef,
tagTooltipRef,
prefixRef,
suffixRef,
selectRef,
wrapperRef,
selectionRef,
scrollbarRef,
menuRef,
tagMenuRef,
collapseItemRef
};
};
//#endregion
//#region ../../packages/components/select/src/options.ts
var options_default = (0, vue.defineComponent)({
name: "ElOptions",
setup(_, { slots }) {
const select = (0, vue.inject)(selectKey);
let cachedValueList = [];
return () => {
const children = slots.default?.();
const valueList = [];
function filterOptions(children) {
if (!isArray$1(children)) return;
children.forEach((item) => {
const name = (item?.type || {})?.name;
if (name === "ElOptionGroup") filterOptions(!isString(item.children) && !isArray$1(item.children) && isFunction$1(item.children?.default) ? item.children?.default() : item.children);
else if (name === "ElOption") valueList.push(item.props?.value);
else if (isArray$1(item.children)) filterOptions(item.children);
});
}
if (children.length) filterOptions(children[0]?.children);
if (!isEqual$1(valueList, cachedValueList)) {
cachedValueList = valueList;
if (select) select.states.optionValues = valueList;
}
return children;
};
}
});
//#endregion
//#region ../../packages/components/select/src/select.ts
const selectProps = buildProps({
name: String,
id: String,
modelValue: {
type: definePropType([
Array,
String,
Number,
Boolean,
Object
]),
default: void 0
},
autocomplete: {
type: String,
default: "off"
},
automaticDropdown: Boolean,
size: useSizeProp,
effect: {
type: definePropType(String),
default: "light"
},
disabled: {
type: Boolean,
default: void 0
},
clearable: Boolean,
filterable: Boolean,
allowCreate: Boolean,
loading: Boolean,
popperClass: {
type: String,
default: ""
},
popperStyle: { type: definePropType([String, Object]) },
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
remote: Boolean,
debounce: {
type: Number,
default: 300
},
loadingText: String,
noMatchText: String,
noDataText: String,
remoteMethod: { type: definePropType(Function) },
filterMethod: { type: definePropType(Function) },
multiple: Boolean,
multipleLimit: {
type: Number,
default: 0
},
placeholder: { type: String },
defaultFirstOption: Boolean,
reserveKeyword: {
type: Boolean,
default: true
},
valueKey: {
type: String,
default: "value"
},
collapseTags: Boolean,
collapseTagsTooltip: Boolean,
tagTooltip: {
type: definePropType(Object),
default: () => ({})
},
maxCollapseTags: {
type: Number,
default: 1
},
teleported: useTooltipContentProps.teleported,
persistent: {
type: Boolean,
default: true
},
clearIcon: {
type: iconPropType,
default: circle_close_default
},
fitInputWidth: Boolean,
suffixIcon: {
type: iconPropType,
default: arrow_down_default
},
tagType: {
...tagProps.type,
default: "info"
},
tagEffect: {
...tagProps.effect,
default: "light"
},
validateEvent: {
type: Boolean,
default: true
},
remoteShowSuffix: Boolean,
showArrow: {
type: Boolean,
default: true
},
offset: {
type: Number,
default: 12
},
placement: {
type: definePropType(String),
values: Ee,
default: "bottom-start"
},
fallbackPlacements: {
type: definePropType(Array),
default: [
"bottom-start",
"top-start",
"right",
"left"
]
},
tabindex: {
type: [String, Number],
default: 0
},
appendTo: useTooltipContentProps.appendTo,
options: { type: definePropType(Array) },
props: {
type: definePropType(Object),
default: () => defaultProps$2
},
...useEmptyValuesProps,
...useAriaProps(["ariaLabel"])
});
const selectEmits = {
[UPDATE_MODEL_EVENT]: (val) => true,
[CHANGE_EVENT]: (val) => true,
"popup-scroll": scrollbarEmits.scroll,
"remove-tag": (val) => true,
"visible-change": (visible) => true,
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true
};
//#endregion
//#region ../../packages/components/select/src/option-group.vue?vue&type=script&lang.ts
var option_group_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElOptionGroup",
componentName: "ElOptionGroup",
props: {
label: String,
disabled: Boolean
},
setup(props) {
const ns = useNamespace("select");
const groupRef = (0, vue.ref)();
const instance = (0, vue.getCurrentInstance)();
const children = (0, vue.ref)([]);
(0, vue.provide)(selectGroupKey, (0, vue.reactive)({ ...(0, vue.toRefs)(props) }));
const visible = (0, vue.computed)(() => children.value.some((option) => option.visible === true));
const isOption = (node) => node.type.name === "ElOption" && !!node.component?.proxy;
const flattedChildren = (node) => {
const nodes = castArray$1(node);
const children = [];
nodes.forEach((child) => {
if (!(0, vue.isVNode)(child)) return;
if (isOption(child)) children.push(child.component.proxy);
else if (isArray$1(child.children) && child.children.length) children.push(...flattedChildren(child.children));
else if (child.component?.subTree) children.push(...flattedChildren(child.component.subTree));
});
return children;
};
const updateChildren = () => {
children.value = flattedChildren(instance.subTree);
};
(0, vue.onMounted)(() => {
updateChildren();
});
useMutationObserver(groupRef, updateChildren, {
attributes: true,
subtree: true,
childList: true
});
return {
groupRef,
visible,
ns
};
}
});
//#endregion
//#region ../../packages/components/select/src/option-group.vue
function _sfc_render$18(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
ref: "groupRef",
class: (0, vue.normalizeClass)(_ctx.ns.be("group", "wrap"))
}, [(0, vue.createElementVNode)("li", { class: (0, vue.normalizeClass)(_ctx.ns.be("group", "title")) }, (0, vue.toDisplayString)(_ctx.label), 3), (0, vue.createElementVNode)("li", null, [(0, vue.createElementVNode)("ul", { class: (0, vue.normalizeClass)(_ctx.ns.b("group")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)])], 2)), [[vue.vShow, _ctx.visible]]);
}
var option_group_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_group_vue_vue_type_script_lang_default, [["render", _sfc_render$18]]);
//#endregion
//#region ../../packages/components/select/src/select.vue?vue&type=script&lang.ts
const COMPONENT_NAME$13 = "ElSelect";
const warnHandlerMap = /* @__PURE__ */ new WeakMap();
const createSelectWarnHandler = (appContext) => {
return (...args) => {
const message = args[0];
if (!message || message.includes("Slot \"default\" invoked outside of the render function") && args[2]?.includes("ElTreeSelect")) return;
const original = warnHandlerMap.get(appContext)?.originalWarnHandler;
if (original) {
original(...args);
return;
}
console.warn(...args);
};
};
const getWarnHandlerRecord = (appContext) => {
let record = warnHandlerMap.get(appContext);
if (!record) {
record = {
originalWarnHandler: appContext.config.warnHandler,
handler: createSelectWarnHandler(appContext),
count: 0
};
warnHandlerMap.set(appContext, record);
}
return record;
};
var select_vue_vue_type_script_lang_default$1 = (0, vue.defineComponent)({
name: COMPONENT_NAME$13,
componentName: COMPONENT_NAME$13,
components: {
ElSelectMenu: select_dropdown_default$1,
ElOption: option_default,
ElOptions: options_default,
ElOptionGroup: option_group_default,
ElTag,
ElScrollbar,
ElTooltip,
ElIcon
},
directives: { ClickOutside },
props: selectProps,
emits: [
UPDATE_MODEL_EVENT,
CHANGE_EVENT,
"remove-tag",
"clear",
"visible-change",
"focus",
"blur",
"popup-scroll"
],
setup(props, { emit, slots }) {
const instance = (0, vue.getCurrentInstance)();
const warnRecord = getWarnHandlerRecord(instance.appContext);
warnRecord.count += 1;
instance.appContext.config.warnHandler = warnRecord.handler;
const modelValue = (0, vue.computed)(() => {
const { modelValue: rawModelValue, multiple } = props;
const fallback = multiple ? [] : void 0;
if (isArray$1(rawModelValue)) return multiple ? rawModelValue : fallback;
return multiple ? fallback : rawModelValue;
});
const _props = (0, vue.reactive)({
...(0, vue.toRefs)(props),
modelValue
});
const API = useSelect$2(_props, emit);
const { calculatorRef, inputStyle } = useCalcInputWidth();
const { getLabel, getValue, getOptions, getDisabled } = useProps(props);
const getOptionProps = (option) => ({
label: getLabel(option),
value: getValue(option),
disabled: getDisabled(option)
});
const flatTreeSelectData = (data) => {
return data.reduce((acc, item) => {
acc.push(item);
if (item.children && item.children.length > 0) acc.push(...flatTreeSelectData(item.children));
return acc;
}, []);
};
const manuallyRenderSlots = (vnodes) => {
flattedChildren(vnodes || []).forEach((item) => {
if (isObject$1(item) && (item.type.name === "ElOption" || item.type.name === "ElTree")) {
const _name = item.type.name;
if (_name === "ElTree") flatTreeSelectData(item.props?.data || []).forEach((treeItem) => {
treeItem.currentLabel = treeItem.label ?? (isObject$1(treeItem.value) ? "" : treeItem.value);
API.onOptionCreate(treeItem);
});
else if (_name === "ElOption") {
const obj = { ...item.props };
obj.currentLabel = obj.label ?? (isObject$1(obj.value) ? "" : obj.value);
API.onOptionCreate(obj);
}
}
});
};
(0, vue.watch)(() => [props.persistent || API.expanded.value || !slots.default ? void 0 : slots.default?.(), modelValue.value], () => {
if (props.persistent || API.expanded.value) return;
if (!slots.default) return;
API.states.options.clear();
manuallyRenderSlots(slots.default?.());
}, { immediate: true });
(0, vue.provide)(selectKey, (0, vue.reactive)({
props: _props,
states: API.states,
selectRef: API.selectRef,
optionsArray: API.optionsArray,
setSelected: API.setSelected,
handleOptionSelect: API.handleOptionSelect,
onOptionCreate: API.onOptionCreate,
onOptionDestroy: API.onOptionDestroy
}));
const selectedLabel = (0, vue.computed)(() => {
if (!props.multiple) return API.states.selectedLabel;
return API.states.selected.map((i) => i.currentLabel);
});
(0, vue.onBeforeUnmount)(() => {
const record = warnHandlerMap.get(instance.appContext);
if (!record) return;
record.count -= 1;
if (record.count <= 0) {
instance.appContext.config.warnHandler = record.originalWarnHandler;
warnHandlerMap.delete(instance.appContext);
}
});
return {
...API,
modelValue,
selectedLabel,
calculatorRef,
inputStyle,
getLabel,
getValue,
getOptions,
getDisabled,
getOptionProps
};
}
});
//#endregion
//#region ../../packages/components/select/src/select.vue
const _hoisted_1$65 = [
"id",
"value",
"name",
"disabled",
"autocomplete",
"tabindex",
"readonly",
"aria-activedescendant",
"aria-controls",
"aria-expanded",
"aria-label"
];
const _hoisted_2$36 = ["textContent"];
const _hoisted_3$17 = { key: 1 };
function _sfc_render$17(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_tag = (0, vue.resolveComponent)("el-tag");
const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_option = (0, vue.resolveComponent)("el-option");
const _component_el_option_group = (0, vue.resolveComponent)("el-option-group");
const _component_el_options = (0, vue.resolveComponent)("el-options");
const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
const _component_el_select_menu = (0, vue.resolveComponent)("el-select-menu");
const _directive_click_outside = (0, vue.resolveDirective)("click-outside");
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
ref: "selectRef",
class: [_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]
}, { [(0, vue.toHandlerKey)(_ctx.mouseEnterEventName)]: _cache[11] || (_cache[11] = ($event) => _ctx.states.inputHovering = true) }, { onMouseleave: _cache[12] || (_cache[12] = ($event) => _ctx.states.inputHovering = false) }), [(0, vue.createVNode)(_component_el_tooltip, {
ref: "tooltipRef",
visible: _ctx.dropdownMenuVisible,
placement: _ctx.placement,
teleported: _ctx.teleported,
"popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass],
"popper-style": _ctx.popperStyle,
"popper-options": _ctx.popperOptions,
"fallback-placements": _ctx.fallbackPlacements,
effect: _ctx.effect,
pure: "",
trigger: "click",
transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`,
"stop-popper-mouse-event": false,
"gpu-acceleration": false,
persistent: _ctx.persistent,
"append-to": _ctx.appendTo,
"show-arrow": _ctx.showArrow,
offset: _ctx.offset,
onBeforeShow: _ctx.handleMenuEnter,
onHide: _cache[10] || (_cache[10] = ($event) => _ctx.states.isBeforeHide = false)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "wrapperRef",
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("wrapper"),
_ctx.nsSelect.is("focused", _ctx.isFocused),
_ctx.nsSelect.is("hovering", _ctx.states.inputHovering),
_ctx.nsSelect.is("filterable", _ctx.filterable),
_ctx.nsSelect.is("disabled", _ctx.selectDisabled)
]),
onClick: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["prevent"]))
}, [
_ctx.$slots.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "prefixRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("prefix"))
}, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
ref: "selectionRef",
class: (0, vue.normalizeClass)([_ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.states.selected.length)])
}, [
_ctx.multiple ? (0, vue.renderSlot)(_ctx.$slots, "tag", {
key: 0,
data: _ctx.states.selected,
deleteTag: _ctx.deleteTag,
selectDisabled: _ctx.selectDisabled
}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.showTagList, (item) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: _ctx.getValueKey(item),
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
closable: !_ctx.selectDisabled && !item.isDisabled,
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
"disable-transitions": "",
style: (0, vue.normalizeStyle)(_ctx.tagStyle),
onClose: ($event) => _ctx.deleteTag($event, item)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
index: item.index,
label: item.currentLabel,
value: item.value
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.currentLabel), 1)])], 2)]),
_: 2
}, 1032, [
"closable",
"size",
"type",
"effect",
"style",
"onClose"
])], 2);
}), 128)), _ctx.collapseTags && _ctx.states.selected.length > _ctx.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
key: 0,
ref: "tagTooltipRef",
disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip,
"fallback-placements": _ctx.tagTooltip?.fallbackPlacements ?? [
"bottom",
"top",
"right",
"left"
],
effect: _ctx.tagTooltip?.effect ?? _ctx.effect,
placement: _ctx.tagTooltip?.placement ?? "bottom",
"popper-class": _ctx.tagTooltip?.popperClass ?? _ctx.popperClass,
"popper-style": _ctx.tagTooltip?.popperStyle ?? _ctx.popperStyle,
teleported: _ctx.tagTooltip?.teleported ?? _ctx.teleported,
"append-to": _ctx.tagTooltip?.appendTo ?? _ctx.appendTo,
"popper-options": _ctx.tagTooltip?.popperOptions ?? _ctx.popperOptions,
transition: _ctx.tagTooltip?.transition,
"show-after": _ctx.tagTooltip?.showAfter,
"hide-after": _ctx.tagTooltip?.hideAfter,
"auto-close": _ctx.tagTooltip?.autoClose,
offset: _ctx.tagTooltip?.offset
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "collapseItemRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
closable: false,
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
"disable-transitions": "",
style: (0, vue.normalizeStyle)(_ctx.collapseTagStyle)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, " + " + (0, vue.toDisplayString)(_ctx.states.selected.length - _ctx.maxCollapseTags), 3)]),
_: 1
}, 8, [
"size",
"type",
"effect",
"style"
])], 2)]),
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "tagMenuRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selection"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.collapseTagList, (item) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: _ctx.getValueKey(item),
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
class: "in-tooltip",
closable: !_ctx.selectDisabled && !item.isDisabled,
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
"disable-transitions": "",
onClose: ($event) => _ctx.deleteTag($event, item)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
index: item.index,
label: item.currentLabel,
value: item.value
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.currentLabel), 1)])], 2)]),
_: 2
}, 1032, [
"closable",
"size",
"type",
"effect",
"onClose"
])], 2);
}), 128))], 2)]),
_: 3
}, 8, [
"disabled",
"fallback-placements",
"effect",
"placement",
"popper-class",
"popper-style",
"teleported",
"append-to",
"popper-options",
"transition",
"show-after",
"hide-after",
"auto-close",
"offset"
])) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("selected-item"),
_ctx.nsSelect.e("input-wrapper"),
_ctx.nsSelect.is("hidden", !_ctx.filterable || _ctx.selectDisabled || !_ctx.states.inputValue && !_ctx.isFocused)
]) }, [(0, vue.createElementVNode)("input", {
id: _ctx.inputId,
ref: "inputRef",
value: _ctx.states.inputValue,
type: "text",
name: _ctx.name,
class: (0, vue.normalizeClass)([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]),
disabled: _ctx.selectDisabled,
autocomplete: _ctx.autocomplete,
style: (0, vue.normalizeStyle)(_ctx.inputStyle),
tabindex: _ctx.tabindex,
role: "combobox",
readonly: !_ctx.filterable,
spellcheck: "false",
"aria-activedescendant": _ctx.hoverOption?.id || "",
"aria-controls": _ctx.contentId,
"aria-expanded": _ctx.dropdownMenuVisible,
"aria-label": _ctx.ariaLabel,
"aria-autocomplete": "none",
"aria-haspopup": "listbox",
onKeydown: _cache[0] || (_cache[0] = (...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args)),
onCompositionstart: _cache[1] || (_cache[1] = (...args) => _ctx.handleCompositionStart && _ctx.handleCompositionStart(...args)),
onCompositionupdate: _cache[2] || (_cache[2] = (...args) => _ctx.handleCompositionUpdate && _ctx.handleCompositionUpdate(...args)),
onCompositionend: _cache[3] || (_cache[3] = (...args) => _ctx.handleCompositionEnd && _ctx.handleCompositionEnd(...args)),
onInput: _cache[4] || (_cache[4] = (...args) => _ctx.onInput && _ctx.onInput(...args)),
onChange: _cache[5] || (_cache[5] = (0, vue.withModifiers)(() => {}, ["stop"])),
onClick: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"]))
}, null, 46, _hoisted_1$65), _ctx.filterable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
ref: "calculatorRef",
"aria-hidden": "true",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("input-calculator")),
textContent: (0, vue.toDisplayString)(_ctx.states.inputValue)
}, null, 10, _hoisted_2$36)) : (0, vue.createCommentVNode)("v-if", true)], 2),
_ctx.shouldShowPlaceholder ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("selected-item"),
_ctx.nsSelect.e("placeholder"),
_ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue)
])
}, [_ctx.hasModelValue ? (0, vue.renderSlot)(_ctx.$slots, "label", {
key: 0,
index: _ctx.getOption(_ctx.modelValue).index,
label: _ctx.currentPlaceholder,
value: _ctx.modelValue
}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$17, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1))], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2),
(0, vue.createElementVNode)("div", {
ref: "suffixRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("suffix"))
}, [
_ctx.iconComponent && !_ctx.showClearBtn ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 0,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("caret"),
_ctx.nsSelect.e("icon"),
_ctx.iconReverse
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.showClearBtn && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 1,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("caret"),
_ctx.nsSelect.e("icon"),
_ctx.nsSelect.e("clear")
]),
onClick: _ctx.handleClearClick
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
_: 1
}, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 2,
class: (0, vue.normalizeClass)([
_ctx.nsInput.e("icon"),
_ctx.nsInput.e("validateIcon"),
_ctx.nsInput.is("loading", _ctx.validateState === "validating")
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.validateIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 2)
], 2)]),
content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_select_menu, { ref: "menuRef" }, {
default: (0, vue.withCtx)(() => [
_ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "header")),
onClick: _cache[8] || (_cache[8] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createVNode)(_component_el_scrollbar, {
id: _ctx.contentId,
ref: "scrollbarRef",
tag: "ul",
"wrap-class": _ctx.nsSelect.be("dropdown", "wrap"),
"view-class": _ctx.nsSelect.be("dropdown", "list"),
class: (0, vue.normalizeClass)([_ctx.nsSelect.is("empty", _ctx.filteredOptionsCount === 0)]),
role: "listbox",
"aria-label": _ctx.ariaLabel,
"aria-orientation": "vertical",
onScroll: _ctx.popupScroll
}, {
default: (0, vue.withCtx)(() => [_ctx.showNewOption ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, {
key: 0,
value: _ctx.states.inputValue,
created: true
}, null, 8, ["value"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)(_component_el_options, null, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.options, (option, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: index }, [_ctx.getOptions(option)?.length ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option_group, {
key: 0,
label: _ctx.getLabel(option),
disabled: _ctx.getDisabled(option)
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.getOptions(option), (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, (0, vue.mergeProps)({ key: _ctx.getValue(item) }, { ref_for: true }, _ctx.getOptionProps(item)), null, 16);
}), 128))]),
_: 2
}, 1032, ["label", "disabled"])) : ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, (0, vue.mergeProps)({
key: 1,
ref_for: true
}, _ctx.getOptionProps(option)), null, 16))], 64);
}), 128))])]),
_: 3
})]),
_: 3
}, 8, [
"id",
"wrap-class",
"view-class",
"class",
"aria-label",
"onScroll"
]), [[vue.vShow, _ctx.states.options.size > 0 && !_ctx.loading]]),
_ctx.$slots.loading && _ctx.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "loading"))
}, [(0, vue.renderSlot)(_ctx.$slots, "loading")], 2)) : _ctx.loading || _ctx.filteredOptionsCount === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "empty"))
}, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.emptyText), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 3,
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "footer")),
onClick: _cache[9] || (_cache[9] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
]),
_: 3
}, 512)]),
_: 3
}, 8, [
"visible",
"placement",
"teleported",
"popper-class",
"popper-style",
"popper-options",
"fallback-placements",
"effect",
"transition",
"persistent",
"append-to",
"show-arrow",
"offset",
"onBeforeShow"
])], 16)), [[
_directive_click_outside,
_ctx.handleClickOutside,
_ctx.popperRef
]]);
}
var select_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(select_vue_vue_type_script_lang_default$1, [["render", _sfc_render$17]]);
//#endregion
//#region ../../packages/components/select/index.ts
const ElSelect = withInstall(select_default$1, {
Option: option_default,
OptionGroup: option_group_default
});
const ElOption = withNoopInstall(option_default);
const ElOptionGroup = withNoopInstall(option_group_default);
//#endregion
//#region ../../packages/components/calendar/src/select-controller.vue?vue&type=script&setup=true&lang.ts
var select_controller_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "SelectController",
__name: "select-controller",
props: selectControllerProps,
emits: selectControllerEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const nsSelect = useNamespace("calendar-select");
const { t, lang } = useLocale();
const monthOptions = Array.from({ length: 12 }, (_, index) => {
const actualMonth = index + 1;
return {
value: actualMonth,
label: isFunction$1(props.formatter) ? props.formatter(actualMonth, "month") : actualMonth
};
});
const yearValue = (0, vue.computed)(() => props.date.year());
const monthValue = (0, vue.computed)(() => props.date.month() + 1);
const yearOptions = (0, vue.computed)(() => {
const years = [];
for (let i = -10; i < 10; i++) {
const year = yearValue.value + i;
if (year > 0) {
const label = isFunction$1(props.formatter) ? props.formatter(year, "year") : year;
years.push({
value: year,
label
});
}
}
return years;
});
const handleYearChange = (year) => {
emit("date-change", (0, import_dayjs_min.default)(new Date(year, monthValue.value - 1, 1)).locale(lang.value));
};
const handleMonthChange = (month) => {
emit("date-change", (0, import_dayjs_min.default)(new Date(yearValue.value, month - 1, 1)).locale(lang.value));
};
const selectToday = () => {
emit("date-change", "today");
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
(0, vue.createVNode)((0, vue.unref)(ElSelect), {
"model-value": yearValue.value,
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(nsSelect).e("year")),
"validate-event": false,
options: yearOptions.value,
onChange: handleYearChange
}, null, 8, [
"model-value",
"class",
"options"
]),
(0, vue.createVNode)((0, vue.unref)(ElSelect), {
"model-value": monthValue.value,
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(nsSelect).e("month")),
"validate-event": false,
options: (0, vue.unref)(monthOptions),
onChange: handleMonthChange
}, null, 8, [
"model-value",
"class",
"options"
]),
(0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
onClick: selectToday
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.today")), 1)]),
_: 1
})
], 64);
};
}
});
//#endregion
//#region ../../packages/components/calendar/src/select-controller.vue
var select_controller_default = select_controller_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/calendar/src/calendar.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$12 = "ElCalendar";
var calendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$12,
__name: "calendar",
props: calendarProps,
emits: calendarEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const ns = useNamespace("calendar");
const { calculateValidatedDateRange, date, pickDay, realSelectedDay, selectDate, validatedRange, handleDateChange } = useCalendar(__props, __emit, COMPONENT_NAME$12);
const { t } = useLocale();
const i18nDate = (0, vue.computed)(() => {
const pickedMonth = `el.datepicker.month${date.value.format("M")}`;
return `${date.value.year()} ${t("el.datepicker.year")} ${t(pickedMonth)}`;
});
__expose({
selectedDay: realSelectedDay,
pickDay,
selectDate,
calculateValidatedDateRange
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header")) }, [(0, vue.renderSlot)(_ctx.$slots, "header", { date: i18nDate.value }, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, (0, vue.toDisplayString)(i18nDate.value), 3), (0, vue.unref)(validatedRange).length === 0 && __props.controllerType === "button" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("button-group"))
}, [(0, vue.createVNode)((0, vue.unref)(ElButtonGroup), null, {
default: (0, vue.withCtx)(() => [
(0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
onClick: _cache[0] || (_cache[0] = ($event) => (0, vue.unref)(selectDate)("prev-month"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.prevMonth")), 1)]),
_: 1
}),
(0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
onClick: _cache[1] || (_cache[1] = ($event) => (0, vue.unref)(selectDate)("today"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.today")), 1)]),
_: 1
}),
(0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
onClick: _cache[2] || (_cache[2] = ($event) => (0, vue.unref)(selectDate)("next-month"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.nextMonth")), 1)]),
_: 1
})
]),
_: 1
})], 2)) : (0, vue.unref)(validatedRange).length === 0 && __props.controllerType === "select" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("select-controller"))
}, [(0, vue.createVNode)(select_controller_default, {
date: (0, vue.unref)(date),
formatter: __props.formatter,
onDateChange: (0, vue.unref)(handleDateChange)
}, null, 8, [
"date",
"formatter",
"onDateChange"
])], 2)) : (0, vue.createCommentVNode)("v-if", true)])], 2), (0, vue.unref)(validatedRange).length === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body"))
}, [(0, vue.createVNode)(date_table_default, {
date: (0, vue.unref)(date),
"selected-day": (0, vue.unref)(realSelectedDay),
onPick: (0, vue.unref)(pickDay)
}, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots["date-cell"] ? {
name: "date-cell",
fn: (0, vue.withCtx)((data) => [(0, vue.renderSlot)(_ctx.$slots, "date-cell", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(data)))]),
key: "0"
} : void 0]), 1032, [
"date",
"selected-day",
"onPick"
])], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(validatedRange), (range_, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(date_table_default, {
key: index,
date: range_[0],
"selected-day": (0, vue.unref)(realSelectedDay),
range: range_,
"hide-header": index !== 0,
onPick: (0, vue.unref)(pickDay)
}, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots["date-cell"] ? {
name: "date-cell",
fn: (0, vue.withCtx)((data) => [(0, vue.renderSlot)(_ctx.$slots, "date-cell", (0, vue.mergeProps)({ ref_for: true }, data))]),
key: "0"
} : void 0]), 1032, [
"date",
"selected-day",
"range",
"hide-header",
"onPick"
]);
}), 128))], 2))], 2);
};
}
});
//#endregion
//#region ../../packages/components/calendar/src/calendar.vue
var calendar_default = calendar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/calendar/index.ts
const ElCalendar = withInstall(calendar_default);
//#endregion
//#region ../../packages/components/card/src/card.ts
/**
* @deprecated Removed after 3.0.0, Use `CardProps` instead.
*/
const cardProps = buildProps({
header: {
type: String,
default: ""
},
footer: {
type: String,
default: ""
},
bodyStyle: {
type: definePropType([
String,
Object,
Array
]),
default: ""
},
headerClass: String,
bodyClass: String,
footerClass: String,
shadow: {
type: String,
values: [
"always",
"hover",
"never"
],
default: void 0
}
});
const cardContextKey = Symbol("cardContextKey");
//#endregion
//#region ../../packages/components/card/src/card.vue?vue&type=script&setup=true&lang.ts
var card_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCard",
__name: "card",
props: cardProps,
setup(__props) {
const globalConfig = useGlobalConfig("card");
const ns = useNamespace("card");
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is(`${__props.shadow || (0, vue.unref)(globalConfig)?.shadow || "always"}-shadow`)]) }, [
_ctx.$slots.header || __props.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), __props.headerClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.header), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass]),
style: (0, vue.normalizeStyle)(__props.bodyStyle)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6),
_ctx.$slots.footer || __props.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "footer", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.footer), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/card/src/card.vue
var card_default = card_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/card/index.ts
const ElCard = withInstall(card_default);
//#endregion
//#region ../../packages/components/carousel/src/carousel.ts
/**
* @deprecated Removed after 3.0.0, Use `CarouselProps` instead.
*/
const carouselProps = buildProps({
initialIndex: {
type: Number,
default: 0
},
height: {
type: String,
default: ""
},
trigger: {
type: String,
values: ["hover", "click"],
default: "hover"
},
autoplay: {
type: Boolean,
default: true
},
interval: {
type: Number,
default: 3e3
},
indicatorPosition: {
type: String,
values: [
"",
"none",
"outside"
],
default: ""
},
arrow: {
type: String,
values: [
"always",
"hover",
"never"
],
default: "hover"
},
type: {
type: String,
values: ["", "card"],
default: ""
},
cardScale: {
type: Number,
default: .83
},
loop: {
type: Boolean,
default: true
},
direction: {
type: String,
values: ["horizontal", "vertical"],
default: "horizontal"
},
pauseOnHover: {
type: Boolean,
default: true
},
motionBlur: Boolean
});
const carouselEmits = { change: (current, prev) => [current, prev].every(isNumber) };
//#endregion
//#region ../../packages/components/carousel/src/constants.ts
const carouselContextKey = Symbol("carouselContextKey");
const CAROUSEL_ITEM_NAME = "ElCarouselItem";
//#endregion
//#region ../../packages/components/carousel/src/use-carousel.ts
const THROTTLE_TIME = 300;
const useCarousel = (props, emit, componentName) => {
const { children: items, addChild: addItem, removeChild: removeItem, ChildrenSorter: ItemsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), CAROUSEL_ITEM_NAME);
const slots = (0, vue.useSlots)();
const activeIndex = (0, vue.ref)(-1);
const timer = (0, vue.ref)(null);
const hover = (0, vue.ref)(false);
const root = (0, vue.ref)();
const containerHeight = (0, vue.ref)(0);
const isItemsTwoLength = (0, vue.ref)(true);
const arrowDisplay = (0, vue.computed)(() => props.arrow !== "never" && !(0, vue.unref)(isVertical));
const hasLabel = (0, vue.computed)(() => {
return items.value.some((item) => item.props.label.toString().length > 0);
});
const isCardType = (0, vue.computed)(() => props.type === "card");
const isVertical = (0, vue.computed)(() => props.direction === "vertical");
const containerStyle = (0, vue.computed)(() => {
if (props.height !== "auto") return { height: props.height };
return {
height: `${containerHeight.value}px`,
overflow: "hidden"
};
});
const throttledArrowClick = throttle((index) => {
setActiveItem(index);
}, THROTTLE_TIME, { trailing: true });
const throttledIndicatorHover = throttle((index) => {
handleIndicatorHover(index);
}, THROTTLE_TIME);
const isTwoLengthShow = (index) => {
if (!isItemsTwoLength.value) return true;
return activeIndex.value <= 1 ? index <= 1 : index > 1;
};
function pauseTimer() {
if (timer.value) {
clearInterval(timer.value);
timer.value = null;
}
}
function startTimer() {
if (props.interval <= 0 || !props.autoplay || timer.value) return;
timer.value = setInterval(() => playSlides(), props.interval);
}
const playSlides = () => {
if (activeIndex.value < items.value.length - 1) activeIndex.value = activeIndex.value + 1;
else if (props.loop) activeIndex.value = 0;
};
function setActiveItem(index) {
if (isString(index)) {
const filteredItems = items.value.filter((item) => item.props.name === index);
if (filteredItems.length > 0) index = items.value.indexOf(filteredItems[0]);
}
index = Number(index);
if (Number.isNaN(index) || index !== Math.floor(index)) {
/* @__PURE__ */ debugWarn(componentName, "index must be integer.");
return;
}
const itemCount = items.value.length;
const oldIndex = activeIndex.value;
if (index < 0) activeIndex.value = props.loop ? itemCount - 1 : 0;
else if (index >= itemCount) activeIndex.value = props.loop ? 0 : itemCount - 1;
else activeIndex.value = index;
if (oldIndex === activeIndex.value) resetItemPosition(oldIndex);
resetTimer();
}
function resetItemPosition(oldIndex) {
items.value.forEach((item, index) => {
item.translateItem(index, activeIndex.value, oldIndex);
});
}
function itemInStage(item, index) {
const _items = (0, vue.unref)(items);
const itemCount = _items.length;
if (itemCount === 0 || !item.states.inStage) return false;
const nextItemIndex = index + 1;
const prevItemIndex = index - 1;
const lastItemIndex = itemCount - 1;
const isLastItemActive = _items[lastItemIndex].states.active;
const isFirstItemActive = _items[0].states.active;
const isNextItemActive = _items[nextItemIndex]?.states?.active;
const isPrevItemActive = _items[prevItemIndex]?.states?.active;
if (index === lastItemIndex && isFirstItemActive || isNextItemActive) return "left";
else if (index === 0 && isLastItemActive || isPrevItemActive) return "right";
return false;
}
function handleMouseEnter() {
hover.value = true;
if (props.pauseOnHover) pauseTimer();
}
function handleMouseLeave() {
hover.value = false;
startTimer();
}
function handleButtonEnter(arrow) {
if ((0, vue.unref)(isVertical)) return;
items.value.forEach((item, index) => {
if (arrow === itemInStage(item, index)) item.states.hover = true;
});
}
function handleButtonLeave() {
if ((0, vue.unref)(isVertical)) return;
items.value.forEach((item) => {
item.states.hover = false;
});
}
function handleIndicatorClick(index) {
activeIndex.value = index;
}
function handleIndicatorHover(index) {
if (props.trigger === "hover" && index !== activeIndex.value) activeIndex.value = index;
}
function prev() {
setActiveItem(activeIndex.value - 1);
}
function next() {
setActiveItem(activeIndex.value + 1);
}
function resetTimer() {
pauseTimer();
if (!props.pauseOnHover || !hover.value) startTimer();
}
function setContainerHeight(height) {
if (props.height !== "auto") return;
containerHeight.value = height;
}
function PlaceholderItem() {
const defaultSlots = slots.default?.();
if (!defaultSlots) return null;
const normalizeSlots = flattedChildren(defaultSlots).filter((slot) => {
return (0, vue.isVNode)(slot) && slot.type.name === CAROUSEL_ITEM_NAME;
});
if (normalizeSlots?.length === 2 && props.loop && !isCardType.value) {
isItemsTwoLength.value = true;
return normalizeSlots;
}
isItemsTwoLength.value = false;
return null;
}
(0, vue.watch)(() => activeIndex.value, (current, prev) => {
resetItemPosition(prev);
if (isItemsTwoLength.value) {
current = current % 2;
prev = prev % 2;
}
if (prev > -1) emit(CHANGE_EVENT, current, prev);
});
const exposeActiveIndex = (0, vue.computed)({
get: () => {
return isItemsTwoLength.value ? activeIndex.value % 2 : activeIndex.value;
},
set: (value) => activeIndex.value = value
});
(0, vue.watch)(() => props.autoplay, (autoplay) => {
autoplay ? startTimer() : pauseTimer();
});
(0, vue.watch)(() => props.loop, () => {
setActiveItem(activeIndex.value);
});
(0, vue.watch)(() => props.interval, () => {
resetTimer();
});
const resizeObserver = (0, vue.shallowRef)();
(0, vue.onMounted)(() => {
(0, vue.watch)(() => items.value, () => {
if (items.value.length > 0) setActiveItem(props.initialIndex);
}, { immediate: true });
resizeObserver.value = useResizeObserver(root.value, () => {
resetItemPosition();
});
startTimer();
});
(0, vue.onBeforeUnmount)(() => {
pauseTimer();
if (root.value && resizeObserver.value) resizeObserver.value.stop();
});
(0, vue.provide)(carouselContextKey, {
root,
isCardType,
isVertical,
items,
loop: props.loop,
cardScale: props.cardScale,
addItem,
removeItem,
setActiveItem,
setContainerHeight
});
return {
root,
activeIndex,
exposeActiveIndex,
arrowDisplay,
hasLabel,
hover,
isCardType,
items,
isVertical,
containerStyle,
isItemsTwoLength,
handleButtonEnter,
handleButtonLeave,
handleIndicatorClick,
handleMouseEnter,
handleMouseLeave,
setActiveItem,
prev,
next,
PlaceholderItem,
isTwoLengthShow,
ItemsSorter,
throttledArrowClick,
throttledIndicatorHover
};
};
//#endregion
//#region ../../packages/components/carousel/src/carousel.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$64 = ["aria-label"];
const _hoisted_2$35 = ["aria-label"];
const _hoisted_3$16 = ["onMouseenter", "onClick"];
const _hoisted_4$12 = ["aria-label"];
const _hoisted_5$9 = { key: 0 };
const _hoisted_6$4 = {
key: 2,
xmlns: "http://www.w3.org/2000/svg",
version: "1.1",
style: { "display": "none" }
};
const COMPONENT_NAME$11 = "ElCarousel";
var carousel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$11,
__name: "carousel",
props: carouselProps,
emits: carouselEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const { root, activeIndex, exposeActiveIndex, arrowDisplay, hasLabel, hover, isCardType, items, isVertical, containerStyle, handleButtonEnter, handleButtonLeave, handleIndicatorClick, handleMouseEnter, handleMouseLeave, setActiveItem, prev, next, PlaceholderItem, isTwoLengthShow, ItemsSorter, throttledArrowClick, throttledIndicatorHover } = useCarousel(props, __emit, COMPONENT_NAME$11);
const ns = useNamespace("carousel");
const { t } = useLocale();
const carouselClasses = (0, vue.computed)(() => {
const classes = [ns.b(), ns.m(props.direction)];
if ((0, vue.unref)(isCardType)) classes.push(ns.m("card"));
classes.push(ns.is("vertical-outside", (0, vue.unref)(isVertical) && props.indicatorPosition === "outside"));
return classes;
});
const indicatorsClasses = (0, vue.computed)(() => {
const classes = [ns.e("indicators"), ns.em("indicators", props.direction)];
if ((0, vue.unref)(hasLabel)) classes.push(ns.em("indicators", "labels"));
if (props.indicatorPosition === "outside") classes.push(ns.em("indicators", "outside"));
if ((0, vue.unref)(isVertical)) classes.push(ns.em("indicators", "right"));
return classes;
});
function handleTransitionStart(e) {
if (!props.motionBlur) return;
const kls = (0, vue.unref)(isVertical) ? `${ns.namespace.value}-transitioning-vertical` : `${ns.namespace.value}-transitioning`;
e.currentTarget.classList.add(kls);
}
function handleTransitionEnd(e) {
if (!props.motionBlur) return;
const kls = (0, vue.unref)(isVertical) ? `${ns.namespace.value}-transitioning-vertical` : `${ns.namespace.value}-transitioning`;
e.currentTarget.classList.remove(kls);
}
__expose({
activeIndex: exposeActiveIndex,
setActiveItem,
prev,
next
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "root",
ref: root,
class: (0, vue.normalizeClass)(carouselClasses.value),
onMouseenter: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args), ["stop"])),
onMouseleave: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args), ["stop"]))
}, [
(0, vue.unref)(arrowDisplay) ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
key: 0,
name: "carousel-arrow-left",
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("arrow"), (0, vue.unref)(ns).em("arrow", "left")]),
"aria-label": (0, vue.unref)(t)("el.carousel.leftArrow"),
onMouseenter: _cache[0] || (_cache[0] = ($event) => (0, vue.unref)(handleButtonEnter)("left")),
onMouseleave: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleButtonLeave) && (0, vue.unref)(handleButtonLeave)(...args)),
onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)(($event) => (0, vue.unref)(throttledArrowClick)((0, vue.unref)(activeIndex) - 1), ["stop"]))
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
})], 42, _hoisted_1$64), [[vue.vShow, (__props.arrow === "always" || (0, vue.unref)(hover)) && (__props.loop || (0, vue.unref)(activeIndex) > 0)]])]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(arrowDisplay) ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
key: 1,
name: "carousel-arrow-right",
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("arrow"), (0, vue.unref)(ns).em("arrow", "right")]),
"aria-label": (0, vue.unref)(t)("el.carousel.rightArrow"),
onMouseenter: _cache[3] || (_cache[3] = ($event) => (0, vue.unref)(handleButtonEnter)("right")),
onMouseleave: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleButtonLeave) && (0, vue.unref)(handleButtonLeave)(...args)),
onClick: _cache[5] || (_cache[5] = (0, vue.withModifiers)(($event) => (0, vue.unref)(throttledArrowClick)((0, vue.unref)(activeIndex) + 1), ["stop"]))
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})], 42, _hoisted_2$35), [[vue.vShow, (__props.arrow === "always" || (0, vue.unref)(hover)) && (__props.loop || (0, vue.unref)(activeIndex) < (0, vue.unref)(items).length - 1)]])]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("container")),
style: (0, vue.normalizeStyle)((0, vue.unref)(containerStyle)),
onTransitionstart: handleTransitionStart,
onTransitionend: handleTransitionEnd
}, [(0, vue.createVNode)((0, vue.unref)(PlaceholderItem)), (0, vue.renderSlot)(_ctx.$slots, "default")], 38),
(0, vue.createVNode)((0, vue.unref)(ItemsSorter), null, {
default: (0, vue.withCtx)(() => [__props.indicatorPosition !== "none" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
key: 0,
class: (0, vue.normalizeClass)(indicatorsClasses.value)
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(items), (item, index) => {
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: index,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("indicator"),
(0, vue.unref)(ns).em("indicator", __props.direction),
(0, vue.unref)(ns).is("active", index === (0, vue.unref)(activeIndex))
]),
onMouseenter: ($event) => (0, vue.unref)(throttledIndicatorHover)(index),
onClick: (0, vue.withModifiers)(($event) => (0, vue.unref)(handleIndicatorClick)(index), ["stop"])
}, [(0, vue.createElementVNode)("button", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("button")),
"aria-label": (0, vue.unref)(t)("el.carousel.indicator", { index: index + 1 })
}, [(0, vue.unref)(hasLabel) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$9, (0, vue.toDisplayString)(item.props.label), 1)) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_4$12)], 42, _hoisted_3$16)), [[vue.vShow, (0, vue.unref)(isTwoLengthShow)(index)]]);
}), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 1
}),
__props.motionBlur ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$4, [..._cache[8] || (_cache[8] = [(0, vue.createElementVNode)("defs", null, [(0, vue.createElementVNode)("filter", { id: "elCarouselHorizontal" }, [(0, vue.createElementVNode)("feGaussianBlur", {
in: "SourceGraphic",
stdDeviation: "12,0"
})]), (0, vue.createElementVNode)("filter", { id: "elCarouselVertical" }, [(0, vue.createElementVNode)("feGaussianBlur", {
in: "SourceGraphic",
stdDeviation: "0,10"
})])], -1)])])) : (0, vue.createCommentVNode)("v-if", true)
], 34);
};
}
});
//#endregion
//#region ../../packages/components/carousel/src/carousel.vue
var carousel_default = carousel_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/carousel/src/carousel-item.ts
/**
* @deprecated Removed after 3.0.0, Use `CarouselItemProps` instead.
*/
const carouselItemProps = buildProps({
name: {
type: String,
default: ""
},
label: {
type: [String, Number],
default: ""
}
});
//#endregion
//#region ../../packages/components/carousel/src/use-carousel-item.ts
const useCarouselItem = (props) => {
const carouselContext = (0, vue.inject)(carouselContextKey);
const instance = (0, vue.getCurrentInstance)();
if (!carouselContext) /* @__PURE__ */ debugWarn(CAROUSEL_ITEM_NAME, "usage: <el-carousel></el-carousel-item></el-carousel>");
if (!instance) /* @__PURE__ */ debugWarn(CAROUSEL_ITEM_NAME, "compositional hook can only be invoked inside setups");
const carouselItemRef = (0, vue.ref)();
const hover = (0, vue.ref)(false);
const translate = (0, vue.ref)(0);
const scale = (0, vue.ref)(1);
const active = (0, vue.ref)(false);
const ready = (0, vue.ref)(false);
const inStage = (0, vue.ref)(false);
const animating = (0, vue.ref)(false);
const { isCardType, isVertical, cardScale } = carouselContext;
function processIndex(index, activeIndex, length) {
const lastItemIndex = length - 1;
const prevItemIndex = activeIndex - 1;
const nextItemIndex = activeIndex + 1;
const halfItemIndex = length / 2;
if (activeIndex === 0 && index === lastItemIndex) return -1;
else if (activeIndex === lastItemIndex && index === 0) return length;
else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) return length + 1;
else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) return -2;
return index;
}
function calcCardTranslate(index, activeIndex) {
const parentWidth = (0, vue.unref)(isVertical) ? carouselContext.root.value?.offsetHeight || 0 : carouselContext.root.value?.offsetWidth || 0;
if (inStage.value) return parentWidth * ((2 - cardScale) * (index - activeIndex) + 1) / 4;
else if (index < activeIndex) return -(1 + cardScale) * parentWidth / 4;
else return (3 + cardScale) * parentWidth / 4;
}
function calcTranslate(index, activeIndex, isVertical) {
const rootEl = carouselContext.root.value;
if (!rootEl) return 0;
return ((isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0) * (index - activeIndex);
}
const translateItem = (index, activeIndex, oldIndex) => {
const _isCardType = (0, vue.unref)(isCardType);
const carouselItemLength = carouselContext.items.value.length ?? NaN;
const isActive = index === activeIndex;
if (!_isCardType && !isUndefined(oldIndex)) animating.value = isActive || index === oldIndex;
if (!isActive && carouselItemLength > 2 && carouselContext.loop) index = processIndex(index, activeIndex, carouselItemLength);
const _isVertical = (0, vue.unref)(isVertical);
active.value = isActive;
if (_isCardType) {
inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1;
translate.value = calcCardTranslate(index, activeIndex);
scale.value = (0, vue.unref)(active) ? 1 : cardScale;
} else translate.value = calcTranslate(index, activeIndex, _isVertical);
ready.value = true;
if (isActive && carouselItemRef.value) carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight);
};
function handleItemClick() {
if (carouselContext && (0, vue.unref)(isCardType)) {
const index = carouselContext.items.value.findIndex(({ uid }) => uid === instance.uid);
carouselContext.setActiveItem(index);
}
}
const carouselItemContext = {
props,
states: (0, vue.reactive)({
hover,
translate,
scale,
active,
ready,
inStage,
animating
}),
uid: instance.uid,
getVnode: () => instance.vnode,
translateItem
};
carouselContext.addItem(carouselItemContext);
(0, vue.onBeforeUnmount)(() => {
carouselContext.removeItem(carouselItemContext);
});
return {
carouselItemRef,
active,
animating,
hover,
inStage,
isVertical,
translate,
isCardType,
scale,
ready,
handleItemClick
};
};
//#endregion
//#region ../../packages/components/carousel/src/carousel-item.vue?vue&type=script&setup=true&lang.ts
var carousel_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: CAROUSEL_ITEM_NAME,
__name: "carousel-item",
props: carouselItemProps,
setup(__props) {
const props = __props;
const ns = useNamespace("carousel");
const { carouselItemRef, active, animating, hover, inStage, isVertical, translate, isCardType, scale, ready, handleItemClick } = useCarouselItem(props);
const itemKls = (0, vue.computed)(() => [
ns.e("item"),
ns.is("active", active.value),
ns.is("in-stage", inStage.value),
ns.is("hover", hover.value),
ns.is("animating", animating.value),
{
[ns.em("item", "card")]: isCardType.value,
[ns.em("item", "card-vertical")]: isCardType.value && isVertical.value
}
]);
const itemStyle = (0, vue.computed)(() => {
return { transform: [`${`translate${(0, vue.unref)(isVertical) ? "Y" : "X"}`}(${(0, vue.unref)(translate)}px)`, `scale(${(0, vue.unref)(scale)})`].join(" ") };
});
return (_ctx, _cache) => {
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "carouselItemRef",
ref: carouselItemRef,
class: (0, vue.normalizeClass)(itemKls.value),
style: (0, vue.normalizeStyle)(itemStyle.value),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleItemClick) && (0, vue.unref)(handleItemClick)(...args))
}, [(0, vue.unref)(isCardType) ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("mask"))
}, null, 2)), [[vue.vShow, !(0, vue.unref)(active)]]) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default")], 6)), [[vue.vShow, (0, vue.unref)(ready)]]);
};
}
});
//#endregion
//#region ../../packages/components/carousel/src/carousel-item.vue
var carousel_item_default = carousel_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/carousel/index.ts
const ElCarousel = withInstall(carousel_default, { CarouselItem: carousel_item_default });
const ElCarouselItem = withNoopInstall(carousel_item_default);
//#endregion
//#region ../../packages/components/cascader-panel/src/config.ts
const CommonProps = buildProps({
modelValue: { type: definePropType([
Number,
String,
Array,
Object
]) },
options: {
type: definePropType(Array),
default: () => []
},
props: {
type: definePropType(Object),
default: () => ({})
}
});
const DefaultProps = {
expandTrigger: "click",
multiple: false,
checkStrictly: false,
emitPath: true,
lazy: false,
lazyLoad: NOOP,
value: "value",
label: "label",
children: "children",
leaf: "leaf",
disabled: "disabled",
hoverThreshold: 500,
checkOnClickNode: false,
checkOnClickLeaf: true,
showPrefix: true
};
/**
* @deprecated Removed after 3.0.0, Use `CascaderPanelProps` instead.
*/
const cascaderPanelProps = buildProps({
...CommonProps,
border: {
type: Boolean,
default: true
},
renderLabel: { type: Function }
});
const emitChangeFn$2 = (value) => true;
const cascaderPanelEmits = {
[UPDATE_MODEL_EVENT]: emitChangeFn$2,
[CHANGE_EVENT]: emitChangeFn$2,
close: () => true,
"expand-change": (value) => value
};
const useCascaderConfig = (props) => {
return (0, vue.computed)(() => ({
...DefaultProps,
...props.props
}));
};
//#endregion
//#region ../../packages/components/checkbox/src/checkbox.ts
/**
* @deprecated Removed after 3.0.0, Use `CheckboxProps` instead.
*/
const checkboxProps = {
modelValue: {
type: [
Number,
String,
Boolean
],
default: void 0
},
label: {
type: [
String,
Boolean,
Number,
Object
],
default: void 0
},
value: {
type: [
String,
Boolean,
Number,
Object
],
default: void 0
},
indeterminate: Boolean,
disabled: {
type: Boolean,
default: void 0
},
checked: Boolean,
name: {
type: String,
default: void 0
},
trueValue: {
type: [String, Number],
default: void 0
},
falseValue: {
type: [String, Number],
default: void 0
},
trueLabel: {
type: [String, Number],
default: void 0
},
falseLabel: {
type: [String, Number],
default: void 0
},
id: {
type: String,
default: void 0
},
border: Boolean,
size: useSizeProp,
tabindex: [String, Number],
validateEvent: {
type: Boolean,
default: true
},
ariaLabel: String,
...useAriaProps(["ariaControls"])
};
const checkboxEmits = {
[UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
change: (val) => isString(val) || isNumber(val) || isBoolean(val)
};
const checkboxPropsDefaults = {
modelValue: void 0,
label: void 0,
value: void 0,
disabled: void 0,
name: void 0,
trueValue: void 0,
falseValue: void 0,
trueLabel: void 0,
falseLabel: void 0,
id: void 0,
validateEvent: true
};
//#endregion
//#region ../../packages/components/checkbox/src/constants.ts
const checkboxGroupContextKey = Symbol("checkboxGroupContextKey");
//#endregion
//#region ../../packages/components/checkbox/src/composables/use-checkbox-disabled.ts
const useCheckboxDisabled = ({ model, isChecked }) => {
const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
const formContext = (0, vue.inject)(formContextKey, void 0);
const isLimitDisabled = (0, vue.computed)(() => {
const max = checkboxGroup?.max?.value;
const min = checkboxGroup?.min?.value;
return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value;
});
return {
isDisabled: useFormDisabled((0, vue.computed)(() => {
if (checkboxGroup === void 0) return formContext?.disabled ?? isLimitDisabled.value;
else return checkboxGroup.disabled?.value || isLimitDisabled.value;
})),
isLimitDisabled
};
};
//#endregion
//#region ../../packages/components/checkbox/src/composables/use-checkbox-event.ts
const useCheckboxEvent = (props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }) => {
const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
const { formItem } = useFormItem();
const { emit } = (0, vue.getCurrentInstance)();
function getLabeledValue(value) {
return [
true,
props.trueValue,
props.trueLabel
].includes(value) ? props.trueValue ?? props.trueLabel ?? true : props.falseValue ?? props.falseLabel ?? false;
}
function emitChangeEvent(checked, e) {
emit(CHANGE_EVENT, getLabeledValue(checked), e);
}
function handleChange(e) {
if (isLimitExceeded.value) return;
const target = e.target;
emit(CHANGE_EVENT, getLabeledValue(target.checked), e);
}
async function onClickRoot(e) {
if (isLimitExceeded.value) return;
if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) {
if (!e.composedPath().some((item) => item.tagName === "LABEL")) {
model.value = getLabeledValue([
false,
props.falseValue,
props.falseLabel
].includes(model.value));
await (0, vue.nextTick)();
emitChangeEvent(model.value, e);
}
}
}
const validateEvent = (0, vue.computed)(() => checkboxGroup?.validateEvent || props.validateEvent);
(0, vue.watch)(() => props.modelValue, () => {
if (validateEvent.value) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
return {
handleChange,
onClickRoot
};
};
//#endregion
//#region ../../packages/components/checkbox/src/composables/use-checkbox-model.ts
const useCheckboxModel = (props) => {
const selfModel = (0, vue.ref)(false);
const { emit, vnode } = (0, vue.getCurrentInstance)();
const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
const isGroup = (0, vue.computed)(() => isUndefined(checkboxGroup) === false);
const isLimitExceeded = (0, vue.ref)(false);
const isControlled = (0, vue.computed)(() => {
const rawProps = vnode.props ?? {};
return "modelValue" in rawProps || "model-value" in rawProps;
});
const model = (0, vue.computed)({
get() {
return isGroup.value ? checkboxGroup?.modelValue?.value : !isControlled.value ? selfModel.value : props.modelValue;
},
set(val) {
if (isGroup.value && isArray$1(val)) {
isLimitExceeded.value = checkboxGroup?.max?.value !== void 0 && val.length > checkboxGroup?.max.value && val.length > model.value.length;
isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val);
} else {
emit(UPDATE_MODEL_EVENT, val);
selfModel.value = val;
}
}
});
return {
model,
isGroup,
isLimitExceeded
};
};
//#endregion
//#region ../../packages/components/checkbox/src/composables/use-checkbox-status.ts
const useCheckboxStatus = (props, slots, { model }) => {
const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
const isFocused = (0, vue.ref)(false);
const actualValue = (0, vue.computed)(() => {
if (!isPropAbsent(props.value)) return props.value;
return props.label;
});
const isChecked = (0, vue.computed)(() => {
const value = model.value;
if (isBoolean(value)) return value;
else if (isArray$1(value)) if (isObject$1(actualValue.value)) return value.map(vue.toRaw).some((o) => isEqual$1(o, actualValue.value));
else return value.map(vue.toRaw).includes(actualValue.value);
else if (value !== null && value !== void 0) return value === props.trueValue || value === props.trueLabel;
else return !!value;
});
return {
checkboxButtonSize: useFormSize((0, vue.computed)(() => checkboxGroup?.size?.value), { prop: true }),
isChecked,
isFocused,
checkboxSize: useFormSize((0, vue.computed)(() => checkboxGroup?.size?.value)),
hasOwnLabel: (0, vue.computed)(() => {
return !!slots.default || !isPropAbsent(actualValue.value);
}),
actualValue
};
};
//#endregion
//#region ../../packages/components/checkbox/src/composables/use-checkbox.ts
const useCheckbox = (props, slots) => {
const { formItem: elFormItem } = useFormItem();
const { model, isGroup, isLimitExceeded } = useCheckboxModel(props);
const { isFocused, isChecked, checkboxButtonSize, checkboxSize, hasOwnLabel, actualValue } = useCheckboxStatus(props, slots, { model });
const { isDisabled } = useCheckboxDisabled({
model,
isChecked
});
const { inputId, isLabeledByFormItem } = useFormItemInputId(props, {
formItemContext: elFormItem,
disableIdGeneration: hasOwnLabel,
disableIdManagement: isGroup
});
const { handleChange, onClickRoot } = useCheckboxEvent(props, {
model,
isLimitExceeded,
hasOwnLabel,
isDisabled,
isLabeledByFormItem
});
const setStoreValue = () => {
function addToStore() {
if (isArray$1(model.value) && !model.value.includes(actualValue.value)) model.value.push(actualValue.value);
else model.value = props.trueValue ?? props.trueLabel ?? true;
}
props.checked && addToStore();
};
setStoreValue();
useDeprecated({
from: "label act as value",
replacement: "value",
version: "3.0.0",
scope: "el-checkbox",
ref: "https://element-plus.org/en-US/component/checkbox.html"
}, (0, vue.computed)(() => isGroup.value && isPropAbsent(props.value)));
useDeprecated({
from: "true-label",
replacement: "true-value",
version: "3.0.0",
scope: "el-checkbox",
ref: "https://element-plus.org/en-US/component/checkbox.html"
}, (0, vue.computed)(() => !!props.trueLabel));
useDeprecated({
from: "false-label",
replacement: "false-value",
version: "3.0.0",
scope: "el-checkbox",
ref: "https://element-plus.org/en-US/component/checkbox.html"
}, (0, vue.computed)(() => !!props.falseLabel));
return {
inputId,
isLabeledByFormItem,
isChecked,
isDisabled,
isFocused,
checkboxButtonSize,
checkboxSize,
hasOwnLabel,
model,
actualValue,
handleChange,
onClickRoot
};
};
//#endregion
//#region ../../packages/components/checkbox/src/checkbox.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$63 = [
"id",
"indeterminate",
"name",
"tabindex",
"disabled"
];
var checkbox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCheckbox",
__name: "checkbox",
props: checkboxProps,
emits: checkboxEmits,
setup(__props) {
const props = __props;
const { inputId, isLabeledByFormItem, isChecked, isDisabled, isFocused, checkboxSize, hasOwnLabel, model, actualValue, handleChange, onClickRoot } = useCheckbox(props, (0, vue.useSlots)());
const inputBindings = (0, vue.computed)(() => {
if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) return {
"true-value": props.trueValue ?? props.trueLabel ?? true,
"false-value": props.falseValue ?? props.falseLabel ?? false
};
return { value: actualValue.value };
});
const ns = useNamespace("checkbox");
const compKls = (0, vue.computed)(() => {
return [
ns.b(),
ns.m(checkboxSize.value),
ns.is("disabled", isDisabled.value),
ns.is("bordered", props.border),
ns.is("checked", isChecked.value)
];
});
const spanKls = (0, vue.computed)(() => {
return [
ns.e("input"),
ns.is("disabled", isDisabled.value),
ns.is("checked", isChecked.value),
ns.is("indeterminate", props.indeterminate),
ns.is("focus", isFocused.value)
];
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(!(0, vue.unref)(hasOwnLabel) && (0, vue.unref)(isLabeledByFormItem) ? "span" : "label"), {
for: !(0, vue.unref)(hasOwnLabel) && (0, vue.unref)(isLabeledByFormItem) ? null : (0, vue.unref)(inputId),
class: (0, vue.normalizeClass)(compKls.value),
"aria-controls": __props.indeterminate ? __props.ariaControls : null,
"aria-checked": __props.indeterminate ? "mixed" : void 0,
"aria-label": __props.ariaLabel,
onClick: (0, vue.unref)(onClickRoot)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(spanKls.value) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
id: (0, vue.unref)(inputId),
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(model) ? model.value = $event : null),
class: (0, vue.unref)(ns).e("original"),
type: "checkbox",
indeterminate: __props.indeterminate,
name: __props.name,
tabindex: __props.tabindex,
disabled: (0, vue.unref)(isDisabled)
}, inputBindings.value, {
onChange: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleChange) && (0, vue.unref)(handleChange)(...args)),
onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true),
onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false),
onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
}), null, 16, _hoisted_1$63), [[vue.vModelCheckbox, (0, vue.unref)(model)]]), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner")) }, null, 2)], 2), (0, vue.unref)(hasOwnLabel) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default"), !_ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)], 64)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, [
"for",
"class",
"aria-controls",
"aria-checked",
"aria-label",
"onClick"
]);
};
}
});
//#endregion
//#region ../../packages/components/checkbox/src/checkbox.vue
var checkbox_default = checkbox_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/checkbox/src/checkbox-button.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$62 = [
"name",
"tabindex",
"disabled"
];
var checkbox_button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCheckboxButton",
__name: "checkbox-button",
props: checkboxProps,
emits: checkboxEmits,
setup(__props) {
const props = __props;
const { isFocused, isChecked, isDisabled, checkboxButtonSize, model, actualValue, handleChange } = useCheckbox(props, (0, vue.useSlots)());
const inputBindings = (0, vue.computed)(() => {
if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) return {
"true-value": props.trueValue ?? props.trueLabel ?? true,
"false-value": props.falseValue ?? props.falseLabel ?? false
};
return { value: actualValue.value };
});
const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
const ns = useNamespace("checkbox");
const activeStyle = (0, vue.computed)(() => {
const fillValue = checkboxGroup?.fill?.value ?? "";
return {
backgroundColor: fillValue,
borderColor: fillValue,
color: checkboxGroup?.textColor?.value ?? "",
boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0
};
});
const labelKls = (0, vue.computed)(() => {
return [
ns.b("button"),
ns.bm("button", checkboxButtonSize.value),
ns.is("disabled", isDisabled.value),
ns.is("checked", isChecked.value),
ns.is("focus", isFocused.value)
];
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)(labelKls.value) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(model) ? model.value = $event : null),
class: (0, vue.unref)(ns).be("button", "original"),
type: "checkbox",
name: __props.name,
tabindex: __props.tabindex,
disabled: (0, vue.unref)(isDisabled)
}, inputBindings.value, {
onChange: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleChange) && (0, vue.unref)(handleChange)(...args)),
onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true),
onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false),
onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
}), null, 16, _hoisted_1$62), [[vue.vModelCheckbox, (0, vue.unref)(model)]]), _ctx.$slots.default || __props.label ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "inner")),
style: (0, vue.normalizeStyle)((0, vue.unref)(isChecked) ? activeStyle.value : void 0)
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 6)) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/checkbox/src/checkbox-button.vue
var checkbox_button_default = checkbox_button_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/checkbox/src/checkbox-group.ts
/**
* @deprecated Removed after 3.0.0, Use `CheckboxGroupProps` instead.
*/
const checkboxGroupProps = buildProps({
modelValue: {
type: definePropType(Array),
default: () => []
},
disabled: {
type: Boolean,
default: void 0
},
min: Number,
max: Number,
size: useSizeProp,
fill: String,
textColor: String,
tag: {
type: String,
default: "div"
},
validateEvent: {
type: Boolean,
default: true
},
options: { type: definePropType(Array) },
props: {
type: definePropType(Object),
default: () => checkboxDefaultProps
},
type: {
type: String,
values: ["checkbox", "button"],
default: "checkbox"
},
...useAriaProps(["ariaLabel"])
});
const checkboxGroupEmits = {
[UPDATE_MODEL_EVENT]: (val) => isArray$1(val),
change: (val) => isArray$1(val)
};
const checkboxDefaultProps = {
label: "label",
value: "value",
disabled: "disabled"
};
//#endregion
//#region ../../packages/components/checkbox/src/checkbox-group.vue?vue&type=script&setup=true&lang.ts
var checkbox_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCheckboxGroup",
__name: "checkbox-group",
props: checkboxGroupProps,
emits: checkboxGroupEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("checkbox");
const checkboxDisabled = useFormDisabled();
const { formItem } = useFormItem();
const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
const changeEvent = async (value) => {
emit(UPDATE_MODEL_EVENT, value);
await (0, vue.nextTick)();
emit(CHANGE_EVENT, value);
};
const modelValue = (0, vue.computed)({
get() {
return props.modelValue;
},
set(val) {
changeEvent(val);
}
});
const aliasProps = (0, vue.computed)(() => ({
...checkboxDefaultProps,
...props.props
}));
const getOptionProps = (option) => {
const { label, value, disabled } = aliasProps.value;
const base = {
label: option[label],
value: option[value],
disabled: option[disabled]
};
return {
...omit(option, [
label,
value,
disabled
]),
...base
};
};
const optionComponent = (0, vue.computed)(() => props.type === "button" ? checkbox_button_default : checkbox_default);
(0, vue.provide)(checkboxGroupContextKey, {
...pick((0, vue.toRefs)(props), [
"size",
"min",
"max",
"validateEvent",
"fill",
"textColor"
]),
disabled: checkboxDisabled,
modelValue,
changeEvent
});
(0, vue.watch)(() => props.modelValue, (newVal, oldValue) => {
if (props.validateEvent && !isEqual$1(newVal, oldValue)) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
id: (0, vue.unref)(groupId),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("group")),
role: "group",
"aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "checkbox-group" : void 0,
"aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem)?.labelId : void 0
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(optionComponent.value), (0, vue.mergeProps)({ key: index }, { ref_for: true }, getOptionProps(item)), null, 16);
}), 128))])]),
_: 3
}, 8, [
"id",
"class",
"aria-label",
"aria-labelledby"
]);
};
}
});
//#endregion
//#region ../../packages/components/checkbox/src/checkbox-group.vue
var checkbox_group_default = checkbox_group_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/checkbox/index.ts
const ElCheckbox = withInstall(checkbox_default, {
CheckboxButton: checkbox_button_default,
CheckboxGroup: checkbox_group_default
});
const ElCheckboxButton = withNoopInstall(checkbox_button_default);
const ElCheckboxGroup = withNoopInstall(checkbox_group_default);
//#endregion
//#region ../../packages/components/radio/src/radio.ts
/**
* @deprecated Removed after 3.0.0, Use `RadioPropsBase` instead.
*/
const radioPropsBase = buildProps({
modelValue: {
type: [
String,
Number,
Boolean
],
default: void 0
},
size: useSizeProp,
disabled: {
type: Boolean,
default: void 0
},
label: {
type: [
String,
Number,
Boolean
],
default: void 0
},
value: {
type: [
String,
Number,
Boolean
],
default: void 0
},
name: {
type: String,
default: void 0
}
});
/**
* @deprecated Removed after 3.0.0, Use `RadioProps` instead.
*/
const radioProps = buildProps({
...radioPropsBase,
border: Boolean
});
const radioEmits = {
[UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
[CHANGE_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val)
};
/**
* @description default values for RadioProps
*/
const radioPropsDefaults = {
modelValue: void 0,
disabled: void 0,
label: void 0,
value: void 0,
name: void 0,
border: false
};
//#endregion
//#region ../../packages/components/radio/src/constants.ts
const radioGroupKey = Symbol("radioGroupKey");
//#endregion
//#region ../../packages/components/radio/src/use-radio.ts
const useRadio = (props, emit) => {
const radioRef = (0, vue.ref)();
const radioGroup = (0, vue.inject)(radioGroupKey, void 0);
const isGroup = (0, vue.computed)(() => !!radioGroup);
const actualValue = (0, vue.computed)(() => {
if (!isPropAbsent(props.value)) return props.value;
return props.label;
});
const modelValue = (0, vue.computed)({
get() {
return isGroup.value ? radioGroup.modelValue : props.modelValue;
},
set(val) {
if (isGroup.value) radioGroup.changeEvent(val);
else emit && emit(UPDATE_MODEL_EVENT, val);
radioRef.value.checked = props.modelValue === actualValue.value;
}
});
const size = useFormSize((0, vue.computed)(() => radioGroup?.size));
const disabled = useFormDisabled((0, vue.computed)(() => radioGroup?.disabled));
const focus = (0, vue.ref)(false);
const tabIndex = (0, vue.computed)(() => {
return disabled.value || isGroup.value && modelValue.value !== actualValue.value ? -1 : 0;
});
useDeprecated({
from: "label act as value",
replacement: "value",
version: "3.0.0",
scope: "el-radio",
ref: "https://element-plus.org/en-US/component/radio.html"
}, (0, vue.computed)(() => isGroup.value && isPropAbsent(props.value)));
return {
radioRef,
isGroup,
radioGroup,
focus,
size,
disabled,
tabIndex,
modelValue,
actualValue
};
};
//#endregion
//#region ../../packages/components/radio/src/radio.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$61 = [
"value",
"name",
"disabled",
"checked"
];
var radio_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElRadio",
__name: "radio",
props: radioProps,
emits: radioEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("radio");
const { radioRef, radioGroup, focus, size, disabled, modelValue, actualValue } = useRadio(props, emit);
function handleChange() {
(0, vue.nextTick)(() => emit(CHANGE_EVENT, modelValue.value));
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
(0, vue.unref)(ns).is("focus", (0, vue.unref)(focus)),
(0, vue.unref)(ns).is("bordered", __props.border),
(0, vue.unref)(ns).is("checked", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue)),
(0, vue.unref)(ns).m((0, vue.unref)(size))
]) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("input"),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
(0, vue.unref)(ns).is("checked", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue))
]) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
ref_key: "radioRef",
ref: radioRef,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(modelValue) ? modelValue.value = $event : null),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("original")),
value: (0, vue.unref)(actualValue),
name: __props.name || (0, vue.unref)(radioGroup)?.name,
disabled: (0, vue.unref)(disabled),
checked: (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue),
type: "radio",
onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true),
onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false),
onChange: handleChange,
onClick: _cache[3] || (_cache[3] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, null, 42, _hoisted_1$61), [[vue.vModelRadio, (0, vue.unref)(modelValue)]]), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner")) }, null, 2)], 2), (0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label")),
onKeydown: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 34)], 2);
};
}
});
//#endregion
//#region ../../packages/components/radio/src/radio.vue
var radio_default = radio_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/radio/src/radio-button.ts
/**
* @deprecated Removed after 3.0.0, Use `RadioButtonProps` instead.
*/
const radioButtonProps = buildProps({ ...radioPropsBase });
/**
* @description default values for RadioButtonProps
*/
const radioButtonPropsDefaults = {
modelValue: void 0,
disabled: void 0,
label: void 0,
value: void 0,
name: void 0
};
//#endregion
//#region ../../packages/components/radio/src/radio-button.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$60 = [
"value",
"name",
"disabled"
];
var radio_button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElRadioButton",
__name: "radio-button",
props: radioButtonProps,
setup(__props) {
const props = __props;
const ns = useNamespace("radio");
const { radioRef, focus, size, disabled, modelValue, radioGroup, actualValue } = useRadio(props);
const activeStyle = (0, vue.computed)(() => {
return {
backgroundColor: radioGroup?.fill || "",
borderColor: radioGroup?.fill || "",
boxShadow: radioGroup?.fill ? `-1px 0 0 0 ${radioGroup.fill}` : "",
color: radioGroup?.textColor || ""
};
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b("button"),
(0, vue.unref)(ns).is("active", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue)),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
(0, vue.unref)(ns).is("focus", (0, vue.unref)(focus)),
(0, vue.unref)(ns).bm("button", (0, vue.unref)(size))
]) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
ref_key: "radioRef",
ref: radioRef,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(modelValue) ? modelValue.value = $event : null),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "original-radio")),
value: (0, vue.unref)(actualValue),
type: "radio",
name: __props.name || (0, vue.unref)(radioGroup)?.name,
disabled: (0, vue.unref)(disabled),
onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true),
onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false),
onClick: _cache[3] || (_cache[3] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, null, 42, _hoisted_1$60), [[vue.vModelRadio, (0, vue.unref)(modelValue)]]), (0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "inner")),
style: (0, vue.normalizeStyle)((0, vue.unref)(modelValue) === (0, vue.unref)(actualValue) ? activeStyle.value : {}),
onKeydown: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 38)], 2);
};
}
});
//#endregion
//#region ../../packages/components/radio/src/radio-button.vue
var radio_button_default = radio_button_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/radio/src/radio-group.ts
const radioDefaultProps = {
label: "label",
value: "value",
disabled: "disabled"
};
/**
* @deprecated Removed after 3.0.0, Use `RadioGroupProps` instead.
*/
const radioGroupProps = buildProps({
id: {
type: String,
default: void 0
},
size: useSizeProp,
disabled: {
type: Boolean,
default: void 0
},
modelValue: {
type: [
String,
Number,
Boolean
],
default: void 0
},
fill: {
type: String,
default: ""
},
textColor: {
type: String,
default: ""
},
name: {
type: String,
default: void 0
},
validateEvent: {
type: Boolean,
default: true
},
options: { type: definePropType(Array) },
props: {
type: definePropType(Object),
default: () => radioDefaultProps
},
type: {
type: String,
values: ["radio", "button"],
default: "radio"
},
...useAriaProps(["ariaLabel"])
});
const radioGroupEmits = radioEmits;
/**
* @description default values for RadioGroupProps
*/
const radioGroupPropsDefaults = {
id: void 0,
disabled: void 0,
modelValue: void 0,
fill: "",
textColor: "",
name: void 0,
validateEvent: true,
props: () => radioDefaultProps,
type: "radio"
};
//#endregion
//#region ../../packages/components/radio/src/radio-group.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$59 = [
"id",
"aria-label",
"aria-labelledby"
];
var radio_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElRadioGroup",
__name: "radio-group",
props: radioGroupProps,
emits: radioGroupEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("radio");
const radioId = useId();
const radioGroupRef = (0, vue.ref)();
const { formItem } = useFormItem();
const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
const changeEvent = (value) => {
emit(UPDATE_MODEL_EVENT, value);
(0, vue.nextTick)(() => emit(CHANGE_EVENT, value));
};
(0, vue.onMounted)(() => {
const radios = radioGroupRef.value.querySelectorAll("[type=radio]");
const firstLabel = radios[0];
if (!Array.from(radios).some((radio) => radio.checked) && firstLabel) firstLabel.tabIndex = 0;
});
const name = (0, vue.computed)(() => {
return props.name || radioId.value;
});
const aliasProps = (0, vue.computed)(() => ({
...radioDefaultProps,
...props.props
}));
const getOptionProps = (option) => {
const { label, value, disabled } = aliasProps.value;
const base = {
label: option[label],
value: option[value],
disabled: option[disabled]
};
return {
...omit(option, [
label,
value,
disabled
]),
...base
};
};
const optionComponent = (0, vue.computed)(() => props.type === "button" ? radio_button_default : radio_default);
(0, vue.provide)(radioGroupKey, (0, vue.reactive)({
...(0, vue.toRefs)(props),
changeEvent,
name
}));
(0, vue.watch)(() => props.modelValue, (newVal, oldValue) => {
if (props.validateEvent && !isEqual$1(newVal, oldValue)) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
id: (0, vue.unref)(groupId),
ref_key: "radioGroupRef",
ref: radioGroupRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("group")),
role: "radiogroup",
"aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "radio-group" : void 0,
"aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem).labelId : void 0
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(optionComponent.value), (0, vue.mergeProps)({ key: index }, { ref_for: true }, getOptionProps(item)), null, 16);
}), 128))])], 10, _hoisted_1$59);
};
}
});
//#endregion
//#region ../../packages/components/radio/src/radio-group.vue
var radio_group_default = radio_group_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/radio/index.ts
const ElRadio = withInstall(radio_default, {
RadioButton: radio_button_default,
RadioGroup: radio_group_default
});
const ElRadioGroup = withNoopInstall(radio_group_default);
const ElRadioButton = withNoopInstall(radio_button_default);
//#endregion
//#region ../../packages/components/cascader-panel/src/types.ts
const CASCADER_PANEL_INJECTION_KEY = Symbol();
//#endregion
//#region ../../packages/components/cascader-panel/src/node-content.tsx
function isVNodeEmpty(vnodes) {
return !!(isArray$1(vnodes) ? vnodes.every(({ type }) => type === vue.Comment) : vnodes?.type === vue.Comment);
}
var node_content_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "NodeContent",
props: { node: {
type: Object,
required: true
} },
setup(props) {
const ns = useNamespace("cascader-node");
const { renderLabelFn } = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
const { node } = props;
const { data, label: nodeLabel } = node;
const label = () => {
const renderLabel = renderLabelFn?.({
node,
data
});
return isVNodeEmpty(renderLabel) ? nodeLabel : renderLabel ?? nodeLabel;
};
return () => (0, vue.createVNode)("span", { "class": ns.e("label") }, [label()]);
}
});
//#endregion
//#region ../../packages/components/cascader-panel/src/node.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$58 = [
"id",
"aria-haspopup",
"aria-owns",
"aria-expanded",
"tabindex"
];
var node_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCascaderNode",
__name: "node",
props: {
node: {
type: Object,
required: true
},
menuId: String
},
emits: ["expand"],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const panel = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
const ns = useNamespace("cascader-node");
const isHoverMenu = (0, vue.computed)(() => panel.isHoverMenu);
const multiple = (0, vue.computed)(() => panel.config.multiple);
const checkStrictly = (0, vue.computed)(() => panel.config.checkStrictly);
const showPrefix = (0, vue.computed)(() => panel.config.showPrefix);
const checkedNodeId = (0, vue.computed)(() => panel.checkedNodes[0]?.uid);
const isDisabled = (0, vue.computed)(() => props.node.isDisabled);
const isLeaf = (0, vue.computed)(() => props.node.isLeaf);
const expandable = (0, vue.computed)(() => checkStrictly.value && !isLeaf.value || !isDisabled.value);
const inExpandingPath = (0, vue.computed)(() => isInPath(panel.expandingNode));
const inCheckedPath = (0, vue.computed)(() => checkStrictly.value && panel.checkedNodes.some(isInPath));
const isInPath = (node) => {
const { level, uid } = props.node;
return node?.pathNodes[level - 1]?.uid === uid;
};
const doExpand = () => {
if (inExpandingPath.value) return;
panel.expandNode(props.node);
};
const doCheck = (checked) => {
const { node } = props;
if (checked === node.checked) return;
panel.handleCheckChange(node, checked);
};
const doLoad = () => {
panel.lazyLoad(props.node, () => {
if (!isLeaf.value) doExpand();
});
};
const handleHoverExpand = (e) => {
if (!isHoverMenu.value) return;
handleExpand();
!isLeaf.value && emit("expand", e);
};
const handleExpand = () => {
const { node } = props;
if (!expandable.value || node.loading) return;
node.loaded ? doExpand() : doLoad();
};
const handleClick = () => {
if (isLeaf.value && !isDisabled.value && !checkStrictly.value && !multiple.value) handleCheck(true);
else if ((panel.config.checkOnClickNode && (multiple.value || checkStrictly.value) || isLeaf.value && panel.config.checkOnClickLeaf) && !isDisabled.value) handleSelectCheck(!props.node.checked);
else if (!isHoverMenu.value) handleExpand();
};
const handleSelectCheck = (checked) => {
if (checkStrictly.value) {
doCheck(checked);
if (props.node.loaded) doExpand();
} else handleCheck(checked);
};
const handleCheck = (checked) => {
if (!props.node.loaded) doLoad();
else {
doCheck(checked);
!checkStrictly.value && doExpand();
}
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
id: `${__props.menuId}-${__props.node.uid}`,
role: "menuitem",
"aria-haspopup": !isLeaf.value,
"aria-owns": isLeaf.value ? void 0 : __props.menuId,
"aria-expanded": inExpandingPath.value,
tabindex: expandable.value ? -1 : void 0,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).is("selectable", checkStrictly.value),
(0, vue.unref)(ns).is("active", __props.node.checked),
(0, vue.unref)(ns).is("disabled", !expandable.value),
inExpandingPath.value && "in-active-path",
inCheckedPath.value && "in-checked-path"
]),
onMouseenter: handleHoverExpand,
onFocus: handleHoverExpand,
onClick: handleClick
}, [
(0, vue.createCommentVNode)(" prefix "),
multiple.value && showPrefix.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
key: 0,
"model-value": __props.node.checked,
indeterminate: __props.node.indeterminate,
disabled: isDisabled.value,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"])),
"onUpdate:modelValue": handleSelectCheck
}, null, 8, [
"model-value",
"indeterminate",
"disabled"
])) : checkStrictly.value && showPrefix.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElRadio), {
key: 1,
"model-value": checkedNodeId.value,
label: __props.node.uid,
disabled: isDisabled.value,
"onUpdate:modelValue": handleSelectCheck,
onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createCommentVNode)("\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n "), _cache[2] || (_cache[2] = (0, vue.createElementVNode)("span", null, null, -1))]),
_: 1
}, 8, [
"model-value",
"label",
"disabled"
])) : isLeaf.value && __props.node.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createCommentVNode)(" content "),
(0, vue.createVNode)((0, vue.unref)(node_content_default), { node: __props.node }, null, 8, ["node"]),
(0, vue.createCommentVNode)(" postfix "),
!isLeaf.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 3 }, [__props.node.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).is("loading"), (0, vue.unref)(ns).e("postfix")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
_: 1
}, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)(["arrow-right", (0, vue.unref)(ns).e("postfix")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
}, 8, ["class"]))], 64)) : (0, vue.createCommentVNode)("v-if", true)
], 42, _hoisted_1$58);
};
}
});
//#endregion
//#region ../../packages/components/cascader-panel/src/node.vue
var node_default = node_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/cascader-panel/src/menu.vue?vue&type=script&setup=true&lang.ts
var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCascaderMenu",
__name: "menu",
props: {
nodes: {
type: Array,
required: true
},
index: {
type: Number,
required: true
}
},
setup(__props) {
const props = __props;
const instance = (0, vue.getCurrentInstance)();
const ns = useNamespace("cascader-menu");
const { t } = useLocale();
const id = useId();
let activeNode;
let hoverTimer;
const panel = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
const hoverZone = (0, vue.ref)();
const isEmpty = (0, vue.computed)(() => !props.nodes.length);
const isLoading = (0, vue.computed)(() => !panel.initialLoaded);
const menuId = (0, vue.computed)(() => `${id.value}-${props.index}`);
const handleExpand = (e) => {
activeNode = e.target;
};
const handleMouseMove = (e) => {
if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return;
if (activeNode.contains(e.target)) {
clearHoverTimer();
const el = instance.vnode.el;
const { left } = el.getBoundingClientRect();
const { offsetWidth, offsetHeight } = el;
const startX = e.clientX - left;
const top = activeNode.offsetTop;
const bottom = top + activeNode.offsetHeight;
const scrollTop = el.querySelector(`.${ns.e("wrap")}`)?.scrollTop || 0;
hoverZone.value.innerHTML = `
<path style="pointer-events: auto;" fill="transparent" d="M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z" />
<path style="pointer-events: auto;" fill="transparent" d="M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z" />
`;
} else if (!hoverTimer) hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold);
};
const clearHoverTimer = () => {
if (!hoverTimer) return;
clearTimeout(hoverTimer);
hoverTimer = void 0;
};
const clearHoverZone = () => {
if (!hoverZone.value) return;
hoverZone.value.innerHTML = "";
clearHoverTimer();
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
key: menuId.value,
tag: "ul",
role: "menu",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
"wrap-class": (0, vue.unref)(ns).e("wrap"),
"view-class": [(0, vue.unref)(ns).e("list"), (0, vue.unref)(ns).is("empty", isEmpty.value)],
onMousemove: handleMouseMove,
onMouseleave: clearHoverZone
}, {
default: (0, vue.withCtx)(() => [
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.nodes, (node) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(node_default, {
key: node.uid,
node,
"menu-id": menuId.value,
onExpand: handleExpand
}, null, 8, ["node", "menu-id"]);
}), 128)),
isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), {
size: "14",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
_: 1
}, 8, ["class"]), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.loading")), 1)], 2)) : isEmpty.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
}, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noData")), 1)])], 2)) : (0, vue.unref)(panel)?.isHoverMenu ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createCommentVNode)(" eslint-disable vue/html-self-closing "), ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
ref_key: "hoverZone",
ref: hoverZone,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hover-zone"))
}, null, 2))], 2112)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createCommentVNode)(" eslint-enable vue/html-self-closing ")
]),
_: 3
}, 8, [
"class",
"wrap-class",
"view-class"
]);
};
}
});
//#endregion
//#region ../../packages/components/cascader-panel/src/menu.vue
var menu_default$1 = menu_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/cascader-panel/src/node.ts
let uid = 0;
const calculatePathNodes = (node) => {
const nodes = [node];
let { parent } = node;
while (parent) {
nodes.unshift(parent);
parent = parent.parent;
}
return nodes;
};
var Node$2 = class Node$2 {
constructor(data, config, parent, root = false) {
this.data = data;
this.config = config;
this.parent = parent;
this.root = root;
this.uid = uid++;
this.checked = false;
this.indeterminate = false;
this.loading = false;
const { value: valueKey, label: labelKey, children: childrenKey } = config;
const childrenData = data[childrenKey];
const pathNodes = calculatePathNodes(this);
this.level = root ? 0 : parent ? parent.level + 1 : 1;
this.value = data[valueKey];
this.label = data[labelKey];
this.pathNodes = pathNodes;
this.pathValues = pathNodes.map((node) => node.value);
this.pathLabels = pathNodes.map((node) => node.label);
this.childrenData = childrenData;
this.children = (childrenData || []).map((child) => new Node$2(child, config, this));
this.loaded = !config.lazy || this.isLeaf || !isEmpty(childrenData);
this.text = "";
}
get isDisabled() {
const { data, parent, config } = this;
const { disabled, checkStrictly } = config;
return (isFunction$1(disabled) ? disabled(data, this) : !!data[disabled]) || !checkStrictly && !!parent?.isDisabled;
}
get isLeaf() {
const { data, config, childrenData, loaded } = this;
const { lazy, leaf } = config;
const isLeaf = isFunction$1(leaf) ? leaf(data, this) : data[leaf];
return isUndefined(isLeaf) ? lazy && !loaded ? false : !(isArray$1(childrenData) && childrenData.length) : !!isLeaf;
}
get valueByOption() {
return this.config.emitPath ? this.pathValues : this.value;
}
appendChild(childData) {
const { childrenData, children } = this;
const node = new Node$2(childData, this.config, this);
if (isArray$1(childrenData)) childrenData.push(childData);
else this.childrenData = [childData];
children.push(node);
return node;
}
calcText(allLevels, separator) {
const text = allLevels ? this.pathLabels.join(separator) : this.label;
this.text = text;
return text;
}
broadcast(checked) {
this.children.forEach((child) => {
if (child) {
child.broadcast(checked);
child.onParentCheck?.(checked);
}
});
}
emit() {
const { parent } = this;
if (parent) {
parent.onChildCheck?.();
parent.emit();
}
}
onParentCheck(checked) {
if (!this.isDisabled) this.setCheckState(checked);
}
onChildCheck() {
const { children } = this;
const validChildren = children.filter((child) => !child.isDisabled);
const checked = validChildren.length ? validChildren.every((child) => child.checked) : false;
this.setCheckState(checked);
}
setCheckState(checked) {
const totalNum = this.children.length;
const checkedNum = this.children.reduce((c, p) => {
return c + (p.checked ? 1 : p.indeterminate ? .5 : 0);
}, 0);
this.checked = this.loaded && this.children.filter((child) => !child.isDisabled).every((child) => child.loaded && child.checked) && checked;
this.indeterminate = this.loaded && checkedNum !== totalNum && checkedNum > 0;
}
doCheck(checked) {
if (this.checked === checked) return;
const { checkStrictly, multiple } = this.config;
if (checkStrictly || !multiple) this.checked = checked;
else {
this.broadcast(checked);
this.setCheckState(checked);
this.emit();
}
}
};
//#endregion
//#region ../../packages/components/cascader-panel/src/store.ts
const flatNodes = (nodes, leafOnly) => {
return nodes.reduce((res, node) => {
if (node.isLeaf) res.push(node);
else {
!leafOnly && res.push(node);
res = res.concat(flatNodes(node.children, leafOnly));
}
return res;
}, []);
};
var Store = class {
constructor(data, config) {
this.config = config;
const nodes = (data || []).map((nodeData) => new Node$2(nodeData, this.config));
this.nodes = nodes;
this.allNodes = flatNodes(nodes, false);
this.leafNodes = flatNodes(nodes, true);
}
getNodes() {
return this.nodes;
}
getFlattedNodes(leafOnly) {
return leafOnly ? this.leafNodes : this.allNodes;
}
appendNode(nodeData, parentNode) {
const node = parentNode ? parentNode.appendChild(nodeData) : new Node$2(nodeData, this.config);
if (!parentNode) this.nodes.push(node);
this.appendAllNodesAndLeafNodes(node);
}
appendNodes(nodeDataList, parentNode) {
if (nodeDataList.length > 0) nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode));
else parentNode && parentNode.isLeaf && this.leafNodes.push(parentNode);
}
appendAllNodesAndLeafNodes(node) {
this.allNodes.push(node);
node.isLeaf && this.leafNodes.push(node);
if (node.children) node.children.forEach((subNode) => {
this.appendAllNodesAndLeafNodes(subNode);
});
}
getNodeByValue(value, leafOnly = false) {
if (isPropAbsent(value)) return null;
return this.getFlattedNodes(leafOnly).find((node) => isEqual$1(node.value, value) || isEqual$1(node.pathValues, value)) || null;
}
getSameNode(node) {
if (!node) return null;
return this.getFlattedNodes(false).find(({ value, level }) => isEqual$1(node.value, value) && node.level === level) || null;
}
};
//#endregion
//#region ../../packages/components/cascader-panel/src/utils.ts
const getMenuIndex = (el) => {
if (!el) return 0;
const pieces = el.id.split("-");
return Number(pieces[pieces.length - 2]);
};
const checkNode = (el) => {
if (!el) return;
const input = el.querySelector("input");
if (input) input.click();
else if (isLeaf(el)) el.click();
};
const sortByOriginalOrder = (oldNodes, newNodes) => {
const newNodesCopy = newNodes.slice(0);
const newIds = newNodesCopy.map((node) => node.uid);
const res = oldNodes.reduce((acc, item) => {
const index = newIds.indexOf(item.uid);
if (index > -1) {
acc.push(item);
newNodesCopy.splice(index, 1);
newIds.splice(index, 1);
}
return acc;
}, []);
res.push(...newNodesCopy);
return res;
};
//#endregion
//#region ../../packages/components/cascader-panel/src/index.vue?vue&type=script&setup=true&lang.ts
var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCascaderPanel",
__name: "index",
props: cascaderPanelProps,
emits: cascaderPanelEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
let manualChecked = false;
const ns = useNamespace("cascader");
const config = useCascaderConfig(props);
const slots = (0, vue.useSlots)();
let store;
const initialLoaded = (0, vue.ref)(true);
const initialLoadedOnce = (0, vue.ref)(false);
const menuList = (0, vue.ref)([]);
const checkedValue = (0, vue.ref)();
const menus = (0, vue.ref)([]);
const expandingNode = (0, vue.ref)();
const checkedNodes = (0, vue.ref)([]);
const isHoverMenu = (0, vue.computed)(() => config.value.expandTrigger === "hover");
const renderLabelFn = (0, vue.computed)(() => props.renderLabel || slots.default);
const initStore = () => {
const { options } = props;
const cfg = config.value;
manualChecked = false;
store = new Store(options, cfg);
menus.value = [store.getNodes()];
if (cfg.lazy && isEmpty(props.options)) {
initialLoaded.value = false;
lazyLoad(void 0, (list) => {
if (list) {
store = new Store(list, cfg);
menus.value = [store.getNodes()];
}
initialLoaded.value = true;
syncCheckedValue(false, true);
});
} else syncCheckedValue(false, true);
};
const lazyLoad = (node, cb) => {
const cfg = config.value;
node = node || new Node$2({}, cfg, void 0, true);
node.loading = true;
const resolve = (dataList) => {
const _node = node;
const parent = _node.root ? null : _node;
_node.loading = false;
_node.loaded = true;
_node.childrenData = _node.childrenData || [];
dataList && store?.appendNodes(dataList, parent);
dataList && cb?.(dataList);
if (node.level === 0) initialLoadedOnce.value = true;
};
const reject = () => {
node.loading = false;
node.loaded = false;
if (node.level === 0) initialLoaded.value = true;
};
cfg.lazyLoad(node, resolve, reject);
};
const expandNode = (node, silent) => {
const { level } = node;
const newMenus = menus.value.slice(0, level);
let newExpandingNode;
if (node.isLeaf) newExpandingNode = node.pathNodes[level - 2];
else {
newExpandingNode = node;
newMenus.push(node.children);
}
if (expandingNode.value?.uid !== newExpandingNode?.uid) {
expandingNode.value = node;
menus.value = newMenus;
!silent && emit("expand-change", node?.pathValues || []);
}
};
const handleCheckChange = (node, checked, emitClose = true) => {
const { checkStrictly, multiple } = config.value;
const oldNode = checkedNodes.value[0];
manualChecked = true;
!multiple && oldNode?.doCheck(false);
node.doCheck(checked);
calculateCheckedValue();
emitClose && !multiple && !checkStrictly && emit("close");
!emitClose && !multiple && expandParentNode(node);
};
const expandParentNode = (node) => {
if (!node) return;
node = node.parent;
expandParentNode(node);
node && expandNode(node);
};
const getFlattedNodes = (leafOnly) => store?.getFlattedNodes(leafOnly);
const getCheckedNodes = (leafOnly) => {
return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false);
};
const clearCheckedNodes = () => {
checkedNodes.value.forEach((node) => node.doCheck(false));
calculateCheckedValue();
menus.value = menus.value.slice(0, 1);
expandingNode.value = void 0;
emit("expand-change", []);
};
const calculateCheckedValue = () => {
const { checkStrictly, multiple } = config.value;
const oldNodes = checkedNodes.value;
const nodes = sortByOriginalOrder(oldNodes, getCheckedNodes(!checkStrictly));
const values = nodes.map((node) => node.valueByOption);
checkedNodes.value = nodes;
checkedValue.value = multiple ? values : values[0] ?? null;
};
const syncCheckedValue = (loaded = false, forced = false) => {
const { modelValue } = props;
const { lazy, multiple, checkStrictly } = config.value;
const leafOnly = !checkStrictly;
if (!initialLoaded.value || manualChecked || !forced && isEqual$1(modelValue, checkedValue.value)) return;
if (lazy && !loaded) {
const nodes = unique(flattenDeep(castArray(modelValue))).map((val) => store?.getNodeByValue(val)).filter((node) => !!node && !node.loaded && !node.loading);
if (nodes.length) nodes.forEach((node) => {
lazyLoad(node, () => syncCheckedValue(false, forced));
});
else syncCheckedValue(true, forced);
} else {
syncMenuState(unique((multiple ? castArray(modelValue) : [modelValue]).map((val) => store?.getNodeByValue(val, leafOnly))), forced);
checkedValue.value = cloneDeep(modelValue ?? void 0);
}
};
const syncMenuState = (newCheckedNodes, reserveExpandingState = true) => {
const { checkStrictly } = config.value;
const oldNodes = checkedNodes.value;
const newNodes = newCheckedNodes.filter((node) => !!node && (checkStrictly || node.isLeaf));
const oldExpandingNode = store?.getSameNode(expandingNode.value);
const newExpandingNode = reserveExpandingState && oldExpandingNode || newNodes[0];
if (newExpandingNode) newExpandingNode.pathNodes.forEach((node) => expandNode(node, true));
else expandingNode.value = void 0;
oldNodes.forEach((node) => node.doCheck(false));
(0, vue.reactive)(newNodes).forEach((node) => node.doCheck(true));
checkedNodes.value = newNodes;
(0, vue.nextTick)(scrollToExpandingNode);
};
const scrollToExpandingNode = () => {
if (!isClient) return;
menuList.value.forEach((menu) => {
const menuElement = menu?.$el;
if (menuElement) {
const container = menuElement.querySelector(`.${ns.namespace.value}-scrollbar__wrap`);
let activeNode = menuElement.querySelector(`.${ns.b("node")}.in-active-path`);
if (!activeNode) {
const activeElements = menuElement.querySelectorAll(`.${ns.b("node")}.${ns.is("active")}`);
activeNode = activeElements[activeElements.length - 1];
}
scrollIntoView(container, activeNode);
}
});
};
const handleKeyDown = (e) => {
const target = e.target;
const code = getEventCode(e);
switch (code) {
case EVENT_CODE.up:
case EVENT_CODE.down:
e.preventDefault();
focusNode(getSibling(target, code === EVENT_CODE.up ? -1 : 1, `.${ns.b("node")}[tabindex="-1"]`));
break;
case EVENT_CODE.left: {
e.preventDefault();
const expandedNode = menuList.value[getMenuIndex(target) - 1]?.$el.querySelector(`.${ns.b("node")}[aria-expanded="true"]`);
focusNode(expandedNode);
break;
}
case EVENT_CODE.right: {
e.preventDefault();
const firstNode = menuList.value[getMenuIndex(target) + 1]?.$el.querySelector(`.${ns.b("node")}[tabindex="-1"]`);
focusNode(firstNode);
break;
}
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
checkNode(target);
break;
}
};
(0, vue.provide)(CASCADER_PANEL_INJECTION_KEY, (0, vue.reactive)({
config,
expandingNode,
checkedNodes,
isHoverMenu,
initialLoaded,
renderLabelFn,
lazyLoad,
expandNode,
handleCheckChange
}));
(0, vue.watch)(config, (newVal, oldVal) => {
if (isEqual$1(newVal, oldVal)) return;
initStore();
}, { immediate: true });
(0, vue.watch)(() => props.options, initStore, { deep: true });
(0, vue.watch)(() => props.modelValue, () => {
manualChecked = false;
syncCheckedValue();
}, { deep: true });
(0, vue.watch)(() => checkedValue.value, (val) => {
if (!isEqual$1(val, props.modelValue)) {
emit(UPDATE_MODEL_EVENT, val);
emit(CHANGE_EVENT, val);
}
});
const loadLazyRootNodes = () => {
if (initialLoadedOnce.value) return;
initStore();
};
(0, vue.onBeforeUpdate)(() => menuList.value = []);
(0, vue.onMounted)(() => !isEmpty(props.modelValue) && syncCheckedValue());
__expose({
menuList,
menus,
checkedNodes,
handleKeyDown,
handleCheckChange,
getFlattedNodes,
getCheckedNodes,
clearCheckedNodes,
calculateCheckedValue,
scrollToExpandingNode,
loadLazyRootNodes
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("panel"), (0, vue.unref)(ns).is("bordered", __props.border)]),
onKeydown: handleKeyDown
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(menus.value, (menu, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(menu_default$1, {
key: index,
ref_for: true,
ref: (item) => menuList.value[index] = item,
index,
nodes: [...menu]
}, {
empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "empty")]),
_: 3
}, 8, ["index", "nodes"]);
}), 128))], 34);
};
}
});
//#endregion
//#region ../../packages/components/cascader-panel/src/index.vue
var src_default$1 = index_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/cascader-panel/index.ts
const ElCascaderPanel = withInstall(src_default$1);
//#endregion
//#region ../../packages/components/cascader/src/cascader.ts
/**
* @deprecated Removed after 3.0.0, Use `CascaderComponentProps` instead.
*/
const cascaderProps = buildProps({
...CommonProps,
size: useSizeProp,
placeholder: String,
disabled: {
type: Boolean,
default: void 0
},
clearable: Boolean,
clearIcon: {
type: iconPropType,
default: circle_close_default
},
filterable: Boolean,
filterMethod: {
type: definePropType(Function),
default: (node, keyword) => node.text.includes(keyword)
},
separator: {
type: String,
default: " / "
},
showAllLevels: {
type: Boolean,
default: true
},
collapseTags: Boolean,
maxCollapseTags: {
type: Number,
default: 1
},
collapseTagsTooltip: Boolean,
maxCollapseTagsTooltipHeight: { type: [String, Number] },
debounce: {
type: Number,
default: 300
},
beforeFilter: {
type: definePropType(Function),
default: () => true
},
placement: {
type: definePropType(String),
values: Ee,
default: "bottom-start"
},
fallbackPlacements: {
type: definePropType(Array),
default: [
"bottom-start",
"bottom",
"top-start",
"top",
"right",
"left"
]
},
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
teleported: useTooltipContentProps.teleported,
effect: {
type: definePropType(String),
default: "light"
},
tagType: {
...tagProps.type,
default: "info"
},
tagEffect: {
...tagProps.effect,
default: "light"
},
validateEvent: {
type: Boolean,
default: true
},
persistent: {
type: Boolean,
default: true
},
showCheckedStrategy: {
type: String,
values: ["parent", "child"],
default: "child"
},
checkOnClickNode: Boolean,
showPrefix: {
type: Boolean,
default: true
},
...useEmptyValuesProps
});
const emitChangeFn$1 = (value) => true;
const cascaderEmits = {
[UPDATE_MODEL_EVENT]: emitChangeFn$1,
[CHANGE_EVENT]: emitChangeFn$1,
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true,
visibleChange: (val) => isBoolean(val),
expandChange: (val) => !!val,
removeTag: (val) => !!val
};
//#endregion
//#region ../../packages/components/cascader/src/cascader.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$57 = ["placeholder"];
const _hoisted_2$34 = ["onClick"];
var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCascader",
__name: "cascader",
props: cascaderProps,
emits: cascaderEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const popperOptions = { modifiers: [{
name: "arrowPosition",
enabled: true,
phase: "main",
fn: ({ state }) => {
const { modifiersData, placement } = state;
if ([
"right",
"left",
"bottom",
"top"
].includes(placement)) return;
if (modifiersData.arrow) modifiersData.arrow.x = 35;
},
requires: ["arrow"]
}] };
const props = __props;
const emit = __emit;
const attrs = (0, vue.useAttrs)();
const slots = (0, vue.useSlots)();
let inputInitialHeight = 0;
let pressDeleteCount = 0;
const nsCascader = useNamespace("cascader");
const nsInput = useNamespace("input");
const sizeMapPadding = {
small: 7,
default: 11,
large: 15
};
const { t } = useLocale();
const { formItem } = useFormItem();
const isDisabled = useFormDisabled();
const { valueOnClear } = useEmptyValues(props);
const { isComposing, handleComposition } = useComposition({ afterComposition(event) {
const text = event.target?.value;
handleInput(text);
} });
const tooltipRef = (0, vue.ref)();
const tagTooltipRef = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const tagWrapper = (0, vue.ref)();
const cascaderPanelRef = (0, vue.ref)();
const suggestionPanel = (0, vue.ref)();
const popperVisible = (0, vue.ref)(false);
const inputHover = (0, vue.ref)(false);
const filtering = (0, vue.ref)(false);
const inputValue = (0, vue.ref)("");
const searchInputValue = (0, vue.ref)("");
const tags = (0, vue.ref)([]);
const suggestions = (0, vue.ref)([]);
const showTagList = (0, vue.computed)(() => {
if (!props.props.multiple) return [];
return props.collapseTags ? tags.value.slice(0, props.maxCollapseTags) : tags.value;
});
const collapseTagList = (0, vue.computed)(() => {
if (!props.props.multiple) return [];
return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : [];
});
const cascaderStyle = (0, vue.computed)(() => {
return attrs.style;
});
const inputPlaceholder = (0, vue.computed)(() => props.placeholder ?? t("el.cascader.placeholder"));
const currentPlaceholder = (0, vue.computed)(() => searchInputValue.value || tags.value.length > 0 || isComposing.value ? "" : inputPlaceholder.value);
const realSize = useFormSize();
const tagSize = (0, vue.computed)(() => realSize.value === "small" ? "small" : "default");
const multiple = (0, vue.computed)(() => !!props.props.multiple);
const readonly = (0, vue.computed)(() => !props.filterable || multiple.value);
const searchKeyword = (0, vue.computed)(() => multiple.value ? searchInputValue.value : inputValue.value);
const checkedNodes = (0, vue.computed)(() => cascaderPanelRef.value?.checkedNodes || []);
const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
disabled: isDisabled,
beforeBlur(event) {
return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
},
afterBlur() {
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const clearBtnVisible = (0, vue.computed)(() => {
if (!props.clearable || isDisabled.value || filtering.value || !inputHover.value && !isFocused.value) return false;
return !!checkedNodes.value.length;
});
const presentText = (0, vue.computed)(() => {
const { showAllLevels, separator } = props;
const nodes = checkedNodes.value;
return nodes.length ? multiple.value ? "" : nodes[0].calcText(showAllLevels, separator) : "";
});
const validateState = (0, vue.computed)(() => formItem?.validateState || "");
const checkedValue = (0, vue.computed)({
get() {
return cloneDeep(props.modelValue);
},
set(val) {
const value = val ?? valueOnClear.value;
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
if (props.validateEvent) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const cascaderKls = (0, vue.computed)(() => {
return [
nsCascader.b(),
nsCascader.m(realSize.value),
nsCascader.is("disabled", isDisabled.value),
attrs.class
];
});
const cascaderIconKls = (0, vue.computed)(() => {
return [
nsInput.e("icon"),
"icon-arrow-down",
nsCascader.is("reverse", popperVisible.value)
];
});
const inputClass = (0, vue.computed)(() => nsCascader.is("focus", isFocused.value));
const contentRef = (0, vue.computed)(() => {
return tooltipRef.value?.popperRef?.contentRef;
});
const handleClickOutside = (event) => {
if (isFocused.value) handleBlur(new FocusEvent("blur", event));
togglePopperVisible(false);
};
const togglePopperVisible = (visible) => {
if (isDisabled.value) return;
visible = visible ?? !popperVisible.value;
if (visible !== popperVisible.value) {
popperVisible.value = visible;
inputRef.value?.input?.setAttribute("aria-expanded", `${visible}`);
if (visible) {
updatePopperPosition();
cascaderPanelRef.value && (0, vue.nextTick)(cascaderPanelRef.value.scrollToExpandingNode);
} else if (props.filterable) syncPresentTextValue();
emit("visibleChange", visible);
}
};
const updatePopperPosition = () => {
(0, vue.nextTick)(() => {
tooltipRef.value?.updatePopper();
});
};
const hideSuggestionPanel = () => {
filtering.value = false;
};
const genTag = (node) => {
const { showAllLevels, separator } = props;
return {
node,
key: node.uid,
text: node.calcText(showAllLevels, separator),
hitState: false,
closable: !isDisabled.value && !node.isDisabled
};
};
const deleteTag = (tag) => {
const node = tag.node;
node.doCheck(false);
cascaderPanelRef.value?.calculateCheckedValue();
emit("removeTag", node.valueByOption);
};
const getStrategyCheckedNodes = () => {
switch (props.showCheckedStrategy) {
case "child": return checkedNodes.value;
case "parent": {
const clickedNodes = getCheckedNodes(false);
const clickedNodesValue = clickedNodes.map((o) => o.value);
return clickedNodes.filter((o) => !o.parent || !clickedNodesValue.includes(o.parent.value));
}
default: return [];
}
};
const calculatePresentTags = () => {
if (!multiple.value) return;
const nodes = getStrategyCheckedNodes();
const allTags = [];
nodes.forEach((node) => allTags.push(genTag(node)));
tags.value = allTags;
};
const calculateSuggestions = () => {
const { filterMethod, showAllLevels, separator } = props;
const res = cascaderPanelRef.value?.getFlattedNodes(!props.props.checkStrictly)?.filter((node) => {
if (node.isDisabled) return false;
node.calcText(showAllLevels, separator);
return filterMethod(node, searchKeyword.value);
});
if (multiple.value) tags.value.forEach((tag) => {
tag.hitState = false;
});
filtering.value = true;
suggestions.value = res;
updatePopperPosition();
};
const focusFirstNode = () => {
let firstNode;
if (filtering.value && suggestionPanel.value) firstNode = suggestionPanel.value.$el.querySelector(`.${nsCascader.e("suggestion-item")}`);
else firstNode = cascaderPanelRef.value?.$el.querySelector(`.${nsCascader.b("node")}[tabindex="-1"]`);
if (firstNode) {
firstNode.focus();
if (!filtering.value && firstNode.getAttribute("aria-haspopup") === "true") firstNode.click();
}
};
const updateStyle = () => {
const inputInner = inputRef.value?.input;
const tagWrapperEl = tagWrapper.value;
const suggestionPanelEl = suggestionPanel.value?.$el;
if (!isClient || !inputInner) return;
if (suggestionPanelEl) {
const suggestionList = suggestionPanelEl.querySelector(`.${nsCascader.e("suggestion-list")}`);
suggestionList.style.minWidth = `${inputInner.offsetWidth}px`;
}
if (tagWrapperEl) {
const { offsetHeight } = tagWrapperEl;
const height = tags.value.length > 0 ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px` : `${inputInitialHeight}px`;
inputInner.style.height = height;
if (slots.prefix) {
const prefix = inputRef.value?.$el.querySelector(`.${nsInput.e("prefix")}`);
let left = 0;
if (prefix) {
left = prefix.offsetWidth;
if (left > 0) left += sizeMapPadding[realSize.value || "default"];
}
tagWrapperEl.style.left = `${left}px`;
} else tagWrapperEl.style.left = `0`;
updatePopperPosition();
}
};
const getCheckedNodes = (leafOnly) => {
return cascaderPanelRef.value?.getCheckedNodes(leafOnly);
};
const handleExpandChange = (value) => {
updatePopperPosition();
emit("expandChange", value);
};
const handleKeyDown = (e) => {
if (isComposing.value) return;
switch (getEventCode(e)) {
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
togglePopperVisible();
break;
case EVENT_CODE.down:
togglePopperVisible(true);
(0, vue.nextTick)(focusFirstNode);
e.preventDefault();
break;
case EVENT_CODE.esc:
if (popperVisible.value === true) {
e.preventDefault();
e.stopPropagation();
togglePopperVisible(false);
}
break;
case EVENT_CODE.tab:
togglePopperVisible(false);
break;
}
};
const handleClear = () => {
cascaderPanelRef.value?.clearCheckedNodes();
if (!popperVisible.value && props.filterable) syncPresentTextValue();
togglePopperVisible(false);
emit("clear");
};
const syncPresentTextValue = () => {
const { value } = presentText;
inputValue.value = value;
searchInputValue.value = value;
};
const handleSuggestionClick = (node) => {
const { checked } = node;
if (multiple.value) cascaderPanelRef.value?.handleCheckChange(node, !checked, false);
else {
!checked && cascaderPanelRef.value?.handleCheckChange(node, true, false);
togglePopperVisible(false);
}
};
const handleSuggestionKeyDown = (e) => {
const target = e.target;
const code = getEventCode(e);
switch (code) {
case EVENT_CODE.up:
case EVENT_CODE.down:
e.preventDefault();
focusNode(getSibling(target, code === EVENT_CODE.up ? -1 : 1, `.${nsCascader.e("suggestion-item")}[tabindex="-1"]`));
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
target.click();
break;
}
};
const handleDelete = () => {
const lastTag = tags.value[tags.value.length - 1];
pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1;
if (!lastTag || !pressDeleteCount || props.collapseTags && tags.value.length > 1) return;
if (lastTag.hitState) deleteTag(lastTag);
else lastTag.hitState = true;
};
const handleFilter = useDebounceFn(() => {
const { value } = searchKeyword;
if (!value) return;
const passed = props.beforeFilter(value);
if (isPromise(passed)) passed.then(calculateSuggestions).catch(() => {});
else if (passed !== false) calculateSuggestions();
else hideSuggestionPanel();
}, (0, vue.computed)(() => props.debounce));
const handleInput = (val, e) => {
!popperVisible.value && togglePopperVisible(true);
if (e?.isComposing) return;
if (val) handleFilter();
else {
const passed = props.beforeFilter("");
if (isPromise(passed)) passed.catch(() => {});
hideSuggestionPanel();
}
};
const getInputInnerHeight = (inputInner) => Number.parseFloat(useCssVar(nsInput.cssVarName("input-height"), inputInner).value) - 2;
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
inputRef.value?.blur();
};
(0, vue.watch)(filtering, updatePopperPosition);
(0, vue.watch)([
checkedNodes,
isDisabled,
() => props.collapseTags,
() => props.maxCollapseTags
], calculatePresentTags);
(0, vue.watch)(tags, () => {
(0, vue.nextTick)(() => updateStyle());
});
(0, vue.watch)(realSize, async () => {
await (0, vue.nextTick)();
const inputInner = inputRef.value.input;
inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight;
updateStyle();
});
(0, vue.watch)(presentText, syncPresentTextValue, { immediate: true });
(0, vue.watch)(() => popperVisible.value, (val) => {
if (val && props.props.lazy && props.props.lazyLoad) cascaderPanelRef.value?.loadLazyRootNodes();
});
(0, vue.onMounted)(() => {
const inputInner = inputRef.value.input;
const inputInnerHeight = getInputInnerHeight(inputInner);
inputInitialHeight = inputInner.offsetHeight || inputInnerHeight;
useResizeObserver(inputInner, updateStyle);
});
__expose({
getCheckedNodes,
cascaderPanelRef,
togglePopperVisible,
contentRef,
presentText,
focus,
blur
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
ref_key: "tooltipRef",
ref: tooltipRef,
visible: popperVisible.value,
teleported: __props.teleported,
"popper-class": [(0, vue.unref)(nsCascader).e("dropdown"), __props.popperClass],
"popper-style": __props.popperStyle,
"popper-options": popperOptions,
"fallback-placements": __props.fallbackPlacements,
"stop-popper-mouse-event": false,
"gpu-acceleration": false,
placement: __props.placement,
transition: `${(0, vue.unref)(nsCascader).namespace.value}-zoom-in-top`,
effect: __props.effect,
pure: "",
persistent: __props.persistent,
onHide: hideSuggestionPanel
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "wrapperRef",
ref: wrapperRef,
class: (0, vue.normalizeClass)(cascaderKls.value),
style: (0, vue.normalizeStyle)(cascaderStyle.value),
onClick: _cache[8] || (_cache[8] = () => togglePopperVisible(readonly.value ? void 0 : true)),
onKeydown: handleKeyDown,
onMouseenter: _cache[9] || (_cache[9] = ($event) => inputHover.value = true),
onMouseleave: _cache[10] || (_cache[10] = ($event) => inputHover.value = false)
}, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
ref_key: "inputRef",
ref: inputRef,
modelValue: inputValue.value,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => inputValue.value = $event),
placeholder: currentPlaceholder.value,
readonly: readonly.value,
disabled: (0, vue.unref)(isDisabled),
"validate-event": false,
size: (0, vue.unref)(realSize),
class: (0, vue.normalizeClass)(inputClass.value),
tabindex: multiple.value && __props.filterable && !(0, vue.unref)(isDisabled) ? -1 : void 0,
onCompositionstart: (0, vue.unref)(handleComposition),
onCompositionupdate: (0, vue.unref)(handleComposition),
onCompositionend: (0, vue.unref)(handleComposition),
onInput: handleInput
}, (0, vue.createSlots)({
suffix: (0, vue.withCtx)(() => [clearBtnVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: "clear",
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), "icon-circle-close"]),
onClick: (0, vue.withModifiers)(handleClear, ["stop"])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
_: 1
}, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: "arrow-down",
class: (0, vue.normalizeClass)(cascaderIconKls.value),
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => togglePopperVisible(), ["stop"]))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
_: 1
}, 8, ["class"]))]),
_: 2
}, [_ctx.$slots.prefix ? {
name: "prefix",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
key: "0"
} : void 0]), 1032, [
"modelValue",
"placeholder",
"readonly",
"disabled",
"size",
"class",
"tabindex",
"onCompositionstart",
"onCompositionupdate",
"onCompositionend"
]), multiple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref_key: "tagWrapper",
ref: tagWrapper,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("tags"), (0, vue.unref)(nsCascader).is("validate", Boolean(validateState.value))])
}, [
(0, vue.renderSlot)(_ctx.$slots, "tag", {
data: tags.value,
deleteTag
}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(showTagList.value, (tag) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
key: tag.key,
type: __props.tagType,
size: tagSize.value,
effect: __props.tagEffect,
hit: tag.hitState,
closable: tag.closable,
"disable-transitions": "",
onClose: ($event) => deleteTag(tag)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(tag.text), 1)]),
_: 2
}, 1032, [
"type",
"size",
"effect",
"hit",
"closable",
"onClose"
]);
}), 128))]),
__props.collapseTags && tags.value.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
key: 0,
ref_key: "tagTooltipRef",
ref: tagTooltipRef,
disabled: popperVisible.value || !__props.collapseTagsTooltip,
"fallback-placements": [
"bottom",
"top",
"right",
"left"
],
placement: "bottom",
"popper-class": __props.popperClass,
"popper-style": __props.popperStyle,
effect: __props.effect,
persistent: __props.persistent
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElTag), {
closable: false,
size: tagSize.value,
type: __props.tagType,
effect: __props.tagEffect,
"disable-transitions": ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("tags-text")) }, " + " + (0, vue.toDisplayString)(tags.value.length - __props.maxCollapseTags), 3)]),
_: 1
}, 8, [
"size",
"type",
"effect"
])]),
content: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElScrollbar), { "max-height": __props.maxCollapseTagsTooltipHeight }, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("collapse-tags")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(collapseTagList.value, (tag, idx) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: idx,
class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("collapse-tag"))
}, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
key: tag.key,
class: "in-tooltip",
type: __props.tagType,
size: tagSize.value,
effect: __props.tagEffect,
hit: tag.hitState,
closable: tag.closable,
"disable-transitions": "",
onClose: ($event) => deleteTag(tag)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(tag.text), 1)]),
_: 2
}, 1032, [
"type",
"size",
"effect",
"hit",
"closable",
"onClose"
]))], 2);
}), 128))], 2)]),
_: 1
}, 8, ["max-height"])]),
_: 1
}, 8, [
"disabled",
"popper-class",
"popper-style",
"effect",
"persistent"
])) : (0, vue.createCommentVNode)("v-if", true),
__props.filterable && !(0, vue.unref)(isDisabled) ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("input", {
key: 1,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => searchInputValue.value = $event),
type: "text",
class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("search-input")),
placeholder: presentText.value ? "" : inputPlaceholder.value,
onInput: _cache[3] || (_cache[3] = (e) => handleInput(searchInputValue.value, e)),
onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(($event) => togglePopperVisible(true), ["stop"])),
onKeydown: (0, vue.withKeys)(handleDelete, ["delete"]),
onCompositionstart: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args)),
onCompositionupdate: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args)),
onCompositionend: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args))
}, null, 42, _hoisted_1$57)), [[vue.vModelText, searchInputValue.value]]) : (0, vue.createCommentVNode)("v-if", true)
], 2)) : (0, vue.createCommentVNode)("v-if", true)], 38)), [[
(0, vue.unref)(ClickOutside),
handleClickOutside,
contentRef.value
]])]),
content: (0, vue.withCtx)(() => [
_ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("header")),
onClick: _cache[11] || (_cache[11] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElCascaderPanel), {
ref_key: "cascaderPanelRef",
ref: cascaderPanelRef,
modelValue: checkedValue.value,
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => checkedValue.value = $event),
options: __props.options,
props: props.props,
border: false,
"render-label": _ctx.$slots.default,
onExpandChange: handleExpandChange,
onClose: _cache[13] || (_cache[13] = ($event) => _ctx.$nextTick(() => togglePopperVisible(false)))
}, {
empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "empty")]),
_: 3
}, 8, [
"modelValue",
"options",
"props",
"render-label"
]), [[vue.vShow, !filtering.value]]),
__props.filterable ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
key: 1,
ref_key: "suggestionPanel",
ref: suggestionPanel,
tag: "ul",
class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("suggestion-panel")),
"view-class": (0, vue.unref)(nsCascader).e("suggestion-list"),
onKeydown: handleSuggestionKeyDown
}, {
default: (0, vue.withCtx)(() => [suggestions.value.length ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, (0, vue.renderList)(suggestions.value, (item) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: item.uid,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("suggestion-item"), (0, vue.unref)(nsCascader).is("checked", item.checked)]),
tabindex: -1,
onClick: ($event) => handleSuggestionClick(item)
}, [(0, vue.renderSlot)(_ctx.$slots, "suggestion-item", { item }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.text), 1), item.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true)])], 10, _hoisted_2$34);
}), 128)) : (0, vue.renderSlot)(_ctx.$slots, "empty", { key: 1 }, () => [(0, vue.createElementVNode)("li", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("empty-text")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noMatch")), 3)])]),
_: 3
}, 8, ["class", "view-class"])), [[vue.vShow, filtering.value]]) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("footer")),
onClick: _cache[14] || (_cache[14] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
]),
_: 3
}, 8, [
"visible",
"teleported",
"popper-class",
"popper-style",
"fallback-placements",
"placement",
"transition",
"effect",
"persistent"
]);
};
}
});
//#endregion
//#region ../../packages/components/cascader/src/cascader.vue
var cascader_default = cascader_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/cascader/index.ts
const ElCascader = withInstall(cascader_default);
//#endregion
//#region ../../packages/components/check-tag/src/check-tag.ts
/**
* @deprecated Removed after 3.0.0, Use `CheckTagProps` instead.
*/
const checkTagProps = buildProps({
checked: Boolean,
disabled: Boolean,
type: {
type: String,
values: [
"primary",
"success",
"info",
"warning",
"danger"
],
default: "primary"
}
});
const checkTagEmits = {
"update:checked": (value) => isBoolean(value),
[CHANGE_EVENT]: (value) => isBoolean(value)
};
//#endregion
//#region ../../packages/components/check-tag/src/check-tag.vue?vue&type=script&setup=true&lang.ts
var check_tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCheckTag",
__name: "check-tag",
props: checkTagProps,
emits: checkTagEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("check-tag");
const containerKls = (0, vue.computed)(() => [
ns.b(),
ns.is("checked", props.checked),
ns.is("disabled", props.disabled),
ns.m(props.type || "primary")
]);
const handleChange = () => {
if (props.disabled) return;
const checked = !props.checked;
emit(CHANGE_EVENT, checked);
emit("update:checked", checked);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
class: (0, vue.normalizeClass)(containerKls.value),
onClick: handleChange
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/check-tag/src/check-tag.vue
var check_tag_default = check_tag_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/check-tag/index.ts
const ElCheckTag = withInstall(check_tag_default);
//#endregion
//#region ../../packages/components/col/src/col.ts
/**
* @deprecated Removed after 3.0.0, Use `ColProps` instead.
*/
const colProps = buildProps({
tag: {
type: String,
default: "div"
},
span: {
type: Number,
default: 24
},
offset: {
type: Number,
default: 0
},
pull: {
type: Number,
default: 0
},
push: {
type: Number,
default: 0
},
xs: {
type: definePropType([Number, Object]),
default: () => mutable({})
},
sm: {
type: definePropType([Number, Object]),
default: () => mutable({})
},
md: {
type: definePropType([Number, Object]),
default: () => mutable({})
},
lg: {
type: definePropType([Number, Object]),
default: () => mutable({})
},
xl: {
type: definePropType([Number, Object]),
default: () => mutable({})
}
});
//#endregion
//#region ../../packages/components/row/src/row.ts
const RowJustify = [
"start",
"center",
"end",
"space-around",
"space-between",
"space-evenly"
];
const RowAlign = [
"top",
"middle",
"bottom"
];
/**
* @deprecated Removed after 3.0.0, Use `RowProps` instead.
*/
const rowProps = buildProps({
tag: {
type: String,
default: "div"
},
gutter: {
type: Number,
default: 0
},
justify: {
type: String,
values: RowJustify,
default: "start"
},
align: {
type: String,
values: RowAlign
}
});
//#endregion
//#region ../../packages/components/row/src/constants.ts
const rowContextKey = Symbol("rowContextKey");
//#endregion
//#region ../../packages/components/row/src/row.vue?vue&type=script&setup=true&lang.ts
var row_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElRow",
__name: "row",
props: rowProps,
setup(__props) {
const props = __props;
const ns = useNamespace("row");
(0, vue.provide)(rowContextKey, { gutter: (0, vue.computed)(() => props.gutter) });
const style = (0, vue.computed)(() => {
const styles = {};
if (!props.gutter) return styles;
styles.marginRight = styles.marginLeft = `-${props.gutter / 2}px`;
return styles;
});
const rowKls = (0, vue.computed)(() => [
ns.b(),
ns.is(`justify-${props.justify}`, props.justify !== "start"),
ns.is(`align-${props.align}`, !!props.align)
]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
class: (0, vue.normalizeClass)(rowKls.value),
style: (0, vue.normalizeStyle)(style.value)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["class", "style"]);
};
}
});
//#endregion
//#region ../../packages/components/row/src/row.vue
var row_default = row_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/row/index.ts
const ElRow = withInstall(row_default);
//#endregion
//#region ../../packages/components/col/src/col.vue?vue&type=script&setup=true&lang.ts
var col_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCol",
__name: "col",
props: colProps,
setup(__props) {
const props = __props;
const { gutter } = (0, vue.inject)(rowContextKey, { gutter: (0, vue.computed)(() => 0) });
const ns = useNamespace("col");
const style = (0, vue.computed)(() => {
const styles = {};
if (gutter.value) styles.paddingLeft = styles.paddingRight = `${gutter.value / 2}px`;
return styles;
});
const colKls = (0, vue.computed)(() => {
const classes = [];
[
"span",
"offset",
"pull",
"push"
].forEach((prop) => {
const size = props[prop];
if (isNumber(size)) {
if (prop === "span") classes.push(ns.b(`${props[prop]}`));
else if (size > 0) classes.push(ns.b(`${prop}-${props[prop]}`));
}
});
[
"xs",
"sm",
"md",
"lg",
"xl"
].forEach((size) => {
if (isNumber(props[size])) classes.push(ns.b(`${size}-${props[size]}`));
else if (isObject$1(props[size])) Object.entries(props[size]).forEach(([prop, sizeProp]) => {
classes.push(prop !== "span" ? ns.b(`${size}-${prop}-${sizeProp}`) : ns.b(`${size}-${sizeProp}`));
});
});
if (gutter.value) classes.push(ns.is("guttered"));
return [ns.b(), classes];
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
class: (0, vue.normalizeClass)(colKls.value),
style: (0, vue.normalizeStyle)(style.value)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["class", "style"]);
};
}
});
//#endregion
//#region ../../packages/components/col/src/col.vue
var col_default = col_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/col/index.ts
const ElCol = withInstall(col_default);
//#endregion
//#region ../../packages/components/collapse/src/collapse.ts
const emitChangeFn = (value) => isNumber(value) || isString(value) || isArray$1(value);
/**
* @deprecated Removed after 3.0.0, Use `CollapseProps` instead.
*/
const collapseProps = buildProps({
accordion: Boolean,
modelValue: {
type: definePropType([
Array,
String,
Number
]),
default: () => mutable([])
},
expandIconPosition: {
type: definePropType([String]),
default: "right"
},
beforeCollapse: { type: definePropType(Function) }
});
const collapseEmits = {
[UPDATE_MODEL_EVENT]: emitChangeFn,
[CHANGE_EVENT]: emitChangeFn
};
//#endregion
//#region ../../packages/components/collapse/src/constants.ts
const collapseContextKey = Symbol("collapseContextKey");
//#endregion
//#region ../../packages/components/collapse/src/use-collapse.ts
const SCOPE$4 = "ElCollapse";
const useCollapse = (props, emit) => {
const activeNames = (0, vue.ref)(castArray$1(props.modelValue));
const setActiveNames = (_activeNames) => {
activeNames.value = _activeNames;
const value = props.accordion ? activeNames.value[0] : activeNames.value;
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
};
const handleChange = (name) => {
if (props.accordion) setActiveNames([activeNames.value[0] === name ? "" : name]);
else {
const _activeNames = [...activeNames.value];
const index = _activeNames.indexOf(name);
if (index > -1) _activeNames.splice(index, 1);
else _activeNames.push(name);
setActiveNames(_activeNames);
}
};
const handleItemClick = async (name) => {
const { beforeCollapse } = props;
if (!beforeCollapse) {
handleChange(name);
return;
}
const shouldChange = beforeCollapse(name);
if (![isPromise(shouldChange), isBoolean(shouldChange)].includes(true)) throwError(SCOPE$4, "beforeCollapse must return type `Promise<boolean>` or `boolean`");
if (isPromise(shouldChange)) shouldChange.then((result) => {
if (result !== false) handleChange(name);
}).catch((e) => {
/* @__PURE__ */ debugWarn(SCOPE$4, `some error occurred: ${e}`);
});
else if (shouldChange) handleChange(name);
};
(0, vue.watch)(() => props.modelValue, () => activeNames.value = castArray$1(props.modelValue), { deep: true });
(0, vue.provide)(collapseContextKey, {
activeNames,
handleItemClick
});
return {
activeNames,
setActiveNames
};
};
const useCollapseDOM = (props) => {
const ns = useNamespace("collapse");
return { rootKls: (0, vue.computed)(() => [ns.b(), ns.b(`icon-position-${props.expandIconPosition}`)]) };
};
//#endregion
//#region ../../packages/components/collapse/src/collapse.vue?vue&type=script&setup=true&lang.ts
var collapse_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCollapse",
__name: "collapse",
props: collapseProps,
emits: collapseEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const { activeNames, setActiveNames } = useCollapse(props, __emit);
const { rootKls } = useCollapseDOM(props);
__expose({
activeNames,
setActiveNames
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/collapse/src/collapse.vue
var collapse_default = collapse_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/collapse/src/collapse-item.ts
/**
* @deprecated Removed after 3.0.0, Use `CollapseItemProps` instead.
*/
const collapseItemProps = buildProps({
title: {
type: String,
default: ""
},
name: {
type: definePropType([String, Number]),
default: void 0
},
icon: {
type: iconPropType,
default: arrow_right_default
},
disabled: Boolean
});
//#endregion
//#region ../../packages/components/collapse-transition/src/collapse-transition.vue?vue&type=script&setup=true&lang.ts
var collapse_transition_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCollapseTransition",
__name: "collapse-transition",
setup(__props) {
const ns = useNamespace("collapse-transition");
const reset = (el) => {
el.style.maxHeight = "";
el.style.overflow = el.dataset.oldOverflow;
el.style.paddingTop = el.dataset.oldPaddingTop;
el.style.paddingBottom = el.dataset.oldPaddingBottom;
};
const on = {
beforeEnter(el) {
if (!el.dataset) el.dataset = {};
el.dataset.oldPaddingTop = el.style.paddingTop;
el.dataset.oldPaddingBottom = el.style.paddingBottom;
if (el.style.height) el.dataset.elExistsHeight = el.style.height;
el.style.maxHeight = 0;
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
},
enter(el) {
requestAnimationFrame(() => {
el.dataset.oldOverflow = el.style.overflow;
if (el.dataset.elExistsHeight) el.style.maxHeight = el.dataset.elExistsHeight;
else if (el.scrollHeight !== 0) el.style.maxHeight = `${el.scrollHeight}px`;
else el.style.maxHeight = 0;
el.style.paddingTop = el.dataset.oldPaddingTop;
el.style.paddingBottom = el.dataset.oldPaddingBottom;
el.style.overflow = "hidden";
});
},
afterEnter(el) {
el.style.maxHeight = "";
el.style.overflow = el.dataset.oldOverflow;
},
enterCancelled(el) {
reset(el);
},
beforeLeave(el) {
if (!el.dataset) el.dataset = {};
el.dataset.oldPaddingTop = el.style.paddingTop;
el.dataset.oldPaddingBottom = el.style.paddingBottom;
el.dataset.oldOverflow = el.style.overflow;
el.style.maxHeight = `${el.scrollHeight}px`;
el.style.overflow = "hidden";
},
leave(el) {
if (el.scrollHeight !== 0) {
el.style.maxHeight = 0;
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
}
},
afterLeave(el) {
reset(el);
},
leaveCancelled(el) {
reset(el);
}
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, (0, vue.mergeProps)({ name: (0, vue.unref)(ns).b() }, (0, vue.toHandlers)(on)), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16, ["name"]);
};
}
});
//#endregion
//#region ../../packages/components/collapse-transition/src/collapse-transition.vue
var collapse_transition_default = collapse_transition_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/collapse-transition/index.ts
const ElCollapseTransition = withInstall(collapse_transition_default);
//#endregion
//#region ../../packages/components/collapse/src/use-collapse-item.ts
const useCollapseItem = (props) => {
const collapse = (0, vue.inject)(collapseContextKey);
const { namespace } = useNamespace("collapse");
const focusing = (0, vue.ref)(false);
const isClick = (0, vue.ref)(false);
const idInjection = useIdInjection();
const id = (0, vue.computed)(() => idInjection.current++);
const name = (0, vue.computed)(() => {
return props.name ?? `${namespace.value}-id-${idInjection.prefix}-${(0, vue.unref)(id)}`;
});
const isActive = (0, vue.computed)(() => collapse?.activeNames.value.includes((0, vue.unref)(name)));
const handleFocus = () => {
setTimeout(() => {
if (!isClick.value) focusing.value = true;
else isClick.value = false;
}, 50);
};
const handleHeaderClick = (e) => {
if (props.disabled) return;
if (e.target?.closest("input, textarea, select")) return;
collapse?.handleItemClick((0, vue.unref)(name));
focusing.value = false;
isClick.value = true;
};
const handleEnterClick = (e) => {
if (e.target?.closest("input, textarea, select")) return;
e.preventDefault();
collapse?.handleItemClick((0, vue.unref)(name));
};
return {
focusing,
id,
isActive,
handleFocus,
handleHeaderClick,
handleEnterClick
};
};
const useCollapseItemDOM = (props, { focusing, isActive, id }) => {
const ns = useNamespace("collapse");
const rootKls = (0, vue.computed)(() => [
ns.b("item"),
ns.is("active", (0, vue.unref)(isActive)),
ns.is("disabled", props.disabled)
]);
const headKls = (0, vue.computed)(() => [
ns.be("item", "header"),
ns.is("active", (0, vue.unref)(isActive)),
{ focusing: (0, vue.unref)(focusing) && !props.disabled }
]);
const arrowKls = (0, vue.computed)(() => [ns.be("item", "arrow"), ns.is("active", (0, vue.unref)(isActive))]);
return {
itemTitleKls: (0, vue.computed)(() => [ns.be("item", "title")]),
arrowKls,
headKls,
rootKls,
itemWrapperKls: (0, vue.computed)(() => ns.be("item", "wrap")),
itemContentKls: (0, vue.computed)(() => ns.be("item", "content")),
scopedContentId: (0, vue.computed)(() => ns.b(`content-${(0, vue.unref)(id)}`)),
scopedHeadId: (0, vue.computed)(() => ns.b(`head-${(0, vue.unref)(id)}`))
};
};
//#endregion
//#region ../../packages/components/collapse/src/collapse-item.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$56 = [
"id",
"aria-expanded",
"aria-controls",
"aria-describedby",
"tabindex",
"aria-disabled"
];
const _hoisted_2$33 = [
"id",
"aria-hidden",
"aria-labelledby"
];
var collapse_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCollapseItem",
__name: "collapse-item",
props: collapseItemProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { focusing, id, isActive, handleFocus, handleHeaderClick, handleEnterClick } = useCollapseItem(props);
const { arrowKls, headKls, rootKls, itemTitleKls, itemWrapperKls, itemContentKls, scopedContentId, scopedHeadId } = useCollapseItemDOM(props, {
focusing,
isActive,
id
});
__expose({ isActive });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
id: (0, vue.unref)(scopedHeadId),
class: (0, vue.normalizeClass)((0, vue.unref)(headKls)),
"aria-expanded": (0, vue.unref)(isActive),
"aria-controls": (0, vue.unref)(scopedContentId),
"aria-describedby": (0, vue.unref)(scopedContentId),
tabindex: __props.disabled ? void 0 : 0,
"aria-disabled": __props.disabled,
role: "button",
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleHeaderClick) && (0, vue.unref)(handleHeaderClick)(...args)),
onKeydown: _cache[1] || (_cache[1] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => (0, vue.unref)(handleEnterClick) && (0, vue.unref)(handleEnterClick)(...args), ["stop"]), ["space", "enter"])),
onFocus: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
onBlur: _cache[3] || (_cache[3] = ($event) => focusing.value = false)
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(itemTitleKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "title", { isActive: (0, vue.unref)(isActive) }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), (0, vue.renderSlot)(_ctx.$slots, "icon", { isActive: (0, vue.unref)(isActive) }, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(arrowKls)) }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
}, 8, ["class"])])], 42, _hoisted_1$56), (0, vue.createVNode)((0, vue.unref)(ElCollapseTransition), null, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
id: (0, vue.unref)(scopedContentId),
role: "region",
class: (0, vue.normalizeClass)((0, vue.unref)(itemWrapperKls)),
"aria-hidden": !(0, vue.unref)(isActive),
"aria-labelledby": (0, vue.unref)(scopedHeadId)
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(itemContentKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)], 10, _hoisted_2$33), [[vue.vShow, (0, vue.unref)(isActive)]])]),
_: 3
})], 2);
};
}
});
//#endregion
//#region ../../packages/components/collapse/src/collapse-item.vue
var collapse_item_default = collapse_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/collapse/index.ts
const ElCollapse = withInstall(collapse_default, { CollapseItem: collapse_item_default });
const ElCollapseItem = withNoopInstall(collapse_item_default);
//#endregion
//#region ../../packages/components/color-picker-panel/src/color-picker-panel.ts
/**
* @deprecated Removed after 3.0.0, Use `ColorPickerPanelProps` instead.
*/
const colorPickerPanelProps = buildProps({
modelValue: {
type: definePropType(String),
default: void 0
},
border: {
type: Boolean,
default: true
},
showAlpha: Boolean,
colorFormat: { type: definePropType(String) },
disabled: Boolean,
predefine: { type: definePropType(Array) },
validateEvent: {
type: Boolean,
default: true
},
hueSliderClass: { type: definePropType([
String,
Array,
Object
]) },
hueSliderStyle: { type: definePropType([
String,
Array,
Object
]) }
});
const colorPickerPanelEmits = { [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNil(val) };
const ROOT_COMMON_COLOR_INJECTION_KEY = Symbol("colorCommonPickerKey");
const colorPickerPanelContextKey = Symbol("colorPickerPanelContextKey");
//#endregion
//#region ../../packages/components/color-picker-panel/src/props/slider.ts
/**
* @deprecated Removed after 3.0.0, Use `AlphaSliderProps` instead.
*/
const alphaSliderProps = buildProps({
color: {
type: definePropType(Object),
required: true
},
vertical: Boolean,
disabled: Boolean
});
/**
* @deprecated Removed after 3.0.0, Use `HueSliderProps` instead.
*/
const hueSliderProps = alphaSliderProps;
//#endregion
//#region ../../packages/components/color-picker-panel/src/utils/draggable.ts
let isDragging = false;
function draggable(element, options) {
if (!isClient) return;
const moveFn = function(event) {
options.drag?.(event);
};
const upFn = function(event) {
document.removeEventListener("mousemove", moveFn);
document.removeEventListener("mouseup", upFn);
document.removeEventListener("touchmove", moveFn);
document.removeEventListener("touchend", upFn);
document.onselectstart = null;
document.ondragstart = null;
isDragging = false;
options.end?.(event);
};
const downFn = function(event) {
if (isDragging) return;
document.onselectstart = () => false;
document.ondragstart = () => false;
document.addEventListener("mousemove", moveFn);
document.addEventListener("mouseup", upFn);
document.addEventListener("touchmove", moveFn);
document.addEventListener("touchend", upFn);
isDragging = true;
options.start?.(event);
};
element.addEventListener("mousedown", downFn);
element.addEventListener("touchstart", downFn, { passive: false });
}
//#endregion
//#region ../../packages/components/color-picker-panel/src/composables/use-slider.ts
const useSlider = (props, { key, minValue, maxValue }) => {
const instance = (0, vue.getCurrentInstance)();
const thumb = (0, vue.shallowRef)();
const bar = (0, vue.shallowRef)();
const currentValue = (0, vue.computed)(() => props.color.get(key));
function handleClick(event) {
if (props.disabled) return;
if (event.target !== thumb.value) handleDrag(event);
thumb.value?.focus();
}
function handleDrag(event) {
if (!bar.value || !thumb.value || props.disabled) return;
const rect = instance.vnode.el.getBoundingClientRect();
const { clientX, clientY } = getClientXY(event);
let value;
if (!props.vertical) {
let left = clientX - rect.left;
left = Math.max(thumb.value.offsetWidth / 2, left);
left = Math.min(left, rect.width - thumb.value.offsetWidth / 2);
value = Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * maxValue);
} else {
let top = clientY - rect.top;
top = Math.max(thumb.value.offsetHeight / 2, top);
top = Math.min(top, rect.height - thumb.value.offsetHeight / 2);
value = Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * maxValue);
}
props.color.set(key, value);
}
function handleKeydown(event) {
if (props.disabled) return;
const { shiftKey } = event;
const code = getEventCode(event);
const step = shiftKey ? 10 : 1;
const reverse = key === "hue" ? -1 : 1;
let isPreventDefault = true;
switch (code) {
case EVENT_CODE.left:
case EVENT_CODE.down:
incrementPosition(-step * reverse);
break;
case EVENT_CODE.right:
case EVENT_CODE.up:
incrementPosition(step * reverse);
break;
case EVENT_CODE.home:
props.color.set(key, key === "hue" ? maxValue : minValue);
break;
case EVENT_CODE.end:
props.color.set(key, key === "hue" ? minValue : maxValue);
break;
case EVENT_CODE.pageDown:
incrementPosition(-4 * reverse);
break;
case EVENT_CODE.pageUp:
incrementPosition(4 * reverse);
break;
default:
isPreventDefault = false;
break;
}
isPreventDefault && event.preventDefault();
}
function incrementPosition(step) {
let next = currentValue.value + step;
next = next < minValue ? minValue : next > maxValue ? maxValue : next;
props.color.set(key, next);
}
return {
thumb,
bar,
currentValue,
handleDrag,
handleClick,
handleKeydown
};
};
const useSliderDOM = (props, { namespace, maxValue, bar, thumb, currentValue, handleDrag, getBackground }) => {
const instance = (0, vue.getCurrentInstance)();
const ns = useNamespace(namespace);
const thumbLeft = (0, vue.ref)(0);
const thumbTop = (0, vue.ref)(0);
const background = (0, vue.ref)();
function getThumbLeft() {
if (!thumb.value) return 0;
if (props.vertical) return 0;
const el = instance.vnode.el;
const value = currentValue.value;
if (!el) return 0;
return Math.round(value * (el.offsetWidth - thumb.value.offsetWidth / 2) / maxValue);
}
function getThumbTop() {
if (!thumb.value) return 0;
const el = instance.vnode.el;
if (!props.vertical) return 0;
const value = currentValue.value;
if (!el) return 0;
return Math.round(value * (el.offsetHeight - thumb.value.offsetHeight / 2) / maxValue);
}
function update() {
thumbLeft.value = getThumbLeft();
thumbTop.value = getThumbTop();
background.value = getBackground?.();
}
(0, vue.onMounted)(() => {
if (!bar.value || !thumb.value) return;
const dragConfig = {
drag: (event) => {
handleDrag(event);
},
end: (event) => {
handleDrag(event);
}
};
draggable(bar.value, dragConfig);
draggable(thumb.value, dragConfig);
update();
});
(0, vue.watch)(currentValue, () => update());
(0, vue.watch)(() => props.color.value, () => update());
const rootKls = (0, vue.computed)(() => [
ns.b(),
ns.is("vertical", props.vertical),
ns.is("disabled", props.disabled)
]);
const barKls = (0, vue.computed)(() => ns.e("bar"));
const thumbKls = (0, vue.computed)(() => ns.e("thumb"));
return {
rootKls,
barKls,
barStyle: (0, vue.computed)(() => ({ background: background.value })),
thumbKls,
thumbStyle: (0, vue.computed)(() => ({
left: addUnit(thumbLeft.value),
top: addUnit(thumbTop.value)
})),
thumbLeft,
thumbTop,
update
};
};
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/alpha-slider.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$55 = [
"aria-label",
"aria-valuenow",
"aria-valuetext",
"aria-orientation",
"tabindex",
"aria-disabled"
];
const minValue$1 = 0;
const maxValue$1 = 100;
var alpha_slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElColorAlphaSlider",
__name: "alpha-slider",
props: alphaSliderProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { currentValue, bar, thumb, handleDrag, handleClick, handleKeydown } = useSlider(props, {
key: "alpha",
minValue: minValue$1,
maxValue: maxValue$1
});
const { rootKls, barKls, barStyle, thumbKls, thumbStyle, update } = useSliderDOM(props, {
namespace: "color-alpha-slider",
maxValue: maxValue$1,
currentValue,
bar,
thumb,
handleDrag,
getBackground
});
const { t } = useLocale();
const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.alphaLabel"));
const ariaValuetext = (0, vue.computed)(() => {
return t("el.colorpicker.alphaDescription", {
alpha: currentValue.value,
color: props.color.value
});
});
function getBackground() {
if (props.color && props.color.value) {
const { r, g, b } = props.color.toRgb();
return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0) 0%, rgba(${r}, ${g}, ${b}, 1) 100%)`;
}
return "";
}
__expose({
update,
bar,
thumb
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
ref_key: "bar",
ref: bar,
class: (0, vue.normalizeClass)((0, vue.unref)(barKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(barStyle)),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
}, null, 6), (0, vue.createElementVNode)("div", {
ref_key: "thumb",
ref: thumb,
class: (0, vue.normalizeClass)((0, vue.unref)(thumbKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(thumbStyle)),
"aria-label": ariaLabel.value,
"aria-valuenow": (0, vue.unref)(currentValue),
"aria-valuetext": ariaValuetext.value,
"aria-orientation": __props.vertical ? "vertical" : "horizontal",
"aria-valuemin": minValue$1,
"aria-valuemax": maxValue$1,
role: "slider",
tabindex: __props.disabled ? void 0 : 0,
"aria-disabled": __props.disabled,
onKeydown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
}, null, 46, _hoisted_1$55)], 2);
};
}
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/alpha-slider.vue
var alpha_slider_default = alpha_slider_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/hue-slider.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$54 = [
"aria-label",
"aria-valuenow",
"aria-valuetext",
"aria-orientation",
"tabindex",
"aria-disabled"
];
const minValue = 0;
const maxValue = 360;
var hue_slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElColorHueSlider",
__name: "hue-slider",
props: hueSliderProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { currentValue, bar, thumb, handleDrag, handleClick, handleKeydown } = useSlider(props, {
key: "hue",
minValue,
maxValue
});
const { rootKls, barKls, thumbKls, thumbStyle, thumbTop, update } = useSliderDOM(props, {
namespace: "color-hue-slider",
maxValue,
currentValue,
bar,
thumb,
handleDrag
});
const { t } = useLocale();
const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.hueLabel"));
const ariaValuetext = (0, vue.computed)(() => {
return t("el.colorpicker.hueDescription", {
hue: currentValue.value,
color: props.color.value
});
});
__expose({
bar,
thumb,
thumbTop,
update
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
ref_key: "bar",
ref: bar,
class: (0, vue.normalizeClass)((0, vue.unref)(barKls)),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
}, null, 2), (0, vue.createElementVNode)("div", {
ref_key: "thumb",
ref: thumb,
class: (0, vue.normalizeClass)((0, vue.unref)(thumbKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(thumbStyle)),
"aria-label": ariaLabel.value,
"aria-valuenow": (0, vue.unref)(currentValue),
"aria-valuetext": ariaValuetext.value,
"aria-orientation": __props.vertical ? "vertical" : "horizontal",
"aria-valuemin": minValue,
"aria-valuemax": maxValue,
role: "slider",
tabindex: __props.disabled ? void 0 : 0,
"aria-disabled": __props.disabled,
onKeydown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
}, null, 46, _hoisted_1$54)], 2);
};
}
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/hue-slider.vue
var hue_slider_default = hue_slider_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker-panel/src/props/predefine.ts
/**
* @deprecated Removed after 3.0.0, Use `PredefineProps` instead.
*/
const predefineProps = buildProps({
colors: {
type: definePropType(Array),
required: true
},
color: {
type: definePropType(Object),
required: true
},
enableAlpha: {
type: Boolean,
required: true
},
disabled: Boolean
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/utils/color.ts
var Color = class {
constructor(options = {}) {
this._hue = 0;
this._saturation = 100;
this._value = 100;
this._alpha = 100;
this._tiny = new TinyColor();
this._isValid = false;
this.enableAlpha = false;
this.format = "";
this.value = "";
for (const option in options) if (hasOwn(options, option)) this[option] = options[option];
if (options.value) this.fromString(options.value);
else this.doOnChange();
}
set(prop, value) {
if (arguments.length === 1 && typeof prop === "object") {
for (const p in prop) if (hasOwn(prop, p)) this.set(p, prop[p]);
return;
}
this[`_${prop}`] = value;
this._isValid = true;
this.doOnChange();
}
get(prop) {
if ([
"hue",
"saturation",
"value",
"alpha"
].includes(prop)) return Math.round(this[`_${prop}`]);
return this[`_${prop}`];
}
toRgb() {
return this._isValid ? this._tiny.toRgb() : {
r: 255,
g: 255,
b: 255,
a: 0
};
}
fromString(value) {
const color = new TinyColor(value);
this._isValid = color.isValid;
if (color.isValid) {
const { h, s, v, a } = color.toHsv();
this._hue = h;
this._saturation = s * 100;
this._value = v * 100;
this._alpha = a * 100;
} else {
this._hue = 0;
this._saturation = 100;
this._value = 100;
this._alpha = 100;
}
this.doOnChange();
}
clear() {
this._isValid = false;
this.value = "";
this._hue = 0;
this._saturation = 100;
this._value = 100;
this._alpha = 100;
}
compare(color) {
const compareColor = new TinyColor({
h: color._hue,
s: color._saturation / 100,
v: color._value / 100,
a: color._alpha / 100
});
return this._tiny.equals(compareColor);
}
doOnChange() {
const { _hue, _saturation, _value, _alpha, format, enableAlpha } = this;
let _format = format || (enableAlpha ? "rgb" : "hex");
if (format === "hex" && enableAlpha) _format = "hex8";
this._tiny = new TinyColor({
h: _hue,
s: _saturation / 100,
v: _value / 100,
a: _alpha / 100
});
this.value = this._isValid ? this._tiny.toString(_format) : "";
}
};
//#endregion
//#region ../../packages/components/color-picker-panel/src/composables/use-predefine.ts
const usePredefine = (props) => {
const { currentColor } = (0, vue.inject)(colorPickerPanelContextKey);
const rgbaColors = (0, vue.ref)(parseColors(props.colors, props.color));
(0, vue.watch)(() => currentColor.value, (val) => {
const color = new Color({
value: val,
enableAlpha: props.enableAlpha
});
rgbaColors.value.forEach((item) => {
item.selected = color.compare(item);
});
});
(0, vue.watchEffect)(() => {
rgbaColors.value = parseColors(props.colors, props.color);
});
function handleSelect(index) {
props.color.fromString(props.colors[index]);
}
function parseColors(colors, color) {
return colors.map((value) => {
const c = new Color({
value,
enableAlpha: props.enableAlpha
});
c.selected = c.compare(color);
return c;
});
}
return {
rgbaColors,
handleSelect
};
};
const usePredefineDOM = (props) => {
const ns = useNamespace("color-predefine");
const rootKls = (0, vue.computed)(() => [ns.b(), ns.is("disabled", props.disabled)]);
const colorsKls = (0, vue.computed)(() => ns.e("colors"));
function colorSelectorKls(item) {
return [
ns.e("color-selector"),
ns.is("alpha", item.get("alpha") < 100),
{ selected: item.selected }
];
}
return {
rootKls,
colorsKls,
colorSelectorKls
};
};
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/predefine.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$53 = [
"disabled",
"aria-label",
"onClick"
];
var predefine_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElColorPredefine",
__name: "predefine",
props: predefineProps,
setup(__props) {
const props = __props;
const { rgbaColors, handleSelect } = usePredefine(props);
const { rootKls, colorsKls, colorSelectorKls } = usePredefineDOM(props);
const { t } = useLocale();
const ariaLabel = (value) => {
return t("el.colorpicker.predefineDescription", { value });
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(colorsKls)) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rgbaColors), (item, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: __props.colors[index],
type: "button",
disabled: __props.disabled,
"aria-label": ariaLabel(item.value),
class: (0, vue.normalizeClass)((0, vue.unref)(colorSelectorKls)(item)),
onClick: ($event) => (0, vue.unref)(handleSelect)(index)
}, [(0, vue.createElementVNode)("div", { style: (0, vue.normalizeStyle)({ backgroundColor: item.value }) }, null, 4)], 10, _hoisted_1$53);
}), 128))], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/predefine.vue
var predefine_default = predefine_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker-panel/src/props/sv-panel.ts
/**
* @deprecated Removed after 3.0.0, Use `SvPanelProps` instead.
*/
const svPanelProps = buildProps({
color: {
type: definePropType(Object),
required: true
},
disabled: Boolean
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/composables/use-sv-panel.ts
const useSvPanel = (props) => {
const instance = (0, vue.getCurrentInstance)();
const cursorRef = (0, vue.ref)();
const cursorTop = (0, vue.ref)(0);
const cursorLeft = (0, vue.ref)(0);
const background = (0, vue.ref)("hsl(0, 100%, 50%)");
const saturation = (0, vue.computed)(() => props.color.get("saturation"));
const brightness = (0, vue.computed)(() => props.color.get("value"));
const hue = (0, vue.computed)(() => props.color.get("hue"));
function handleClick(event) {
if (props.disabled) return;
if (event.target !== cursorRef.value) handleDrag(event);
cursorRef.value?.focus({ preventScroll: true });
}
function handleDrag(event) {
if (props.disabled) return;
const rect = instance.vnode.el.getBoundingClientRect();
const { clientX, clientY } = getClientXY(event);
let left = clientX - rect.left;
let top = clientY - rect.top;
left = Math.max(0, left);
left = Math.min(left, rect.width);
top = Math.max(0, top);
top = Math.min(top, rect.height);
cursorLeft.value = left;
cursorTop.value = top;
props.color.set({
saturation: left / rect.width * 100,
value: 100 - top / rect.height * 100
});
}
function handleKeydown(event) {
if (props.disabled) return;
const { shiftKey } = event;
const code = getEventCode(event);
const step = shiftKey ? 10 : 1;
let isPreventDefault = true;
switch (code) {
case EVENT_CODE.left:
incrementSaturation(-step);
break;
case EVENT_CODE.right:
incrementSaturation(step);
break;
case EVENT_CODE.up:
incrementBrightness(step);
break;
case EVENT_CODE.down:
incrementBrightness(-step);
break;
default:
isPreventDefault = false;
break;
}
isPreventDefault && event.preventDefault();
}
function incrementSaturation(step) {
let next = saturation.value + step;
next = next < 0 ? 0 : next > 100 ? 100 : next;
props.color.set("saturation", next);
}
function incrementBrightness(step) {
let next = brightness.value + step;
next = next < 0 ? 0 : next > 100 ? 100 : next;
props.color.set("value", next);
}
return {
cursorRef,
cursorTop,
cursorLeft,
background,
saturation,
brightness,
hue,
handleClick,
handleDrag,
handleKeydown
};
};
const useSvPanelDOM = (props, { cursorTop, cursorLeft, background, handleDrag }) => {
const instance = (0, vue.getCurrentInstance)();
const ns = useNamespace("color-svpanel");
function update() {
const saturation = props.color.get("saturation");
const brightness = props.color.get("value");
const { clientWidth: width, clientHeight: height } = instance.vnode.el;
cursorLeft.value = saturation * width / 100;
cursorTop.value = (100 - brightness) * height / 100;
background.value = `hsl(${props.color.get("hue")}, 100%, 50%)`;
}
(0, vue.onMounted)(() => {
draggable(instance.vnode.el, {
drag: (event) => {
handleDrag(event);
},
end: (event) => {
handleDrag(event);
}
});
update();
});
(0, vue.watch)([
() => props.color.get("hue"),
() => props.color.get("value"),
() => props.color.value
], () => update());
return {
rootKls: (0, vue.computed)(() => ns.b()),
cursorKls: (0, vue.computed)(() => ns.e("cursor")),
rootStyle: (0, vue.computed)(() => ({ backgroundColor: background.value })),
cursorStyle: (0, vue.computed)(() => ({
top: addUnit(cursorTop.value),
left: addUnit(cursorLeft.value)
})),
update
};
};
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/sv-panel.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$52 = [
"tabindex",
"aria-disabled",
"aria-label",
"aria-valuenow",
"aria-valuetext"
];
var sv_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSvPanel",
__name: "sv-panel",
props: svPanelProps,
setup(__props, { expose: __expose }) {
const props = __props;
const { cursorRef, cursorTop, cursorLeft, background, saturation, brightness, handleClick, handleDrag, handleKeydown } = useSvPanel(props);
const { rootKls, cursorKls, rootStyle, cursorStyle, update } = useSvPanelDOM(props, {
cursorTop,
cursorLeft,
background,
handleDrag
});
const { t } = useLocale();
const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.svLabel"));
const ariaValuetext = (0, vue.computed)(() => {
return t("el.colorpicker.svDescription", {
saturation: saturation.value,
brightness: brightness.value,
color: props.color.value
});
});
__expose({ update });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(rootStyle)),
onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
}, [(0, vue.createElementVNode)("div", {
ref_key: "cursorRef",
ref: cursorRef,
class: (0, vue.normalizeClass)((0, vue.unref)(cursorKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(cursorStyle)),
tabindex: __props.disabled ? void 0 : 0,
"aria-disabled": __props.disabled,
role: "slider",
"aria-valuemin": "0,0",
"aria-valuemax": "100,100",
"aria-label": ariaLabel.value,
"aria-valuenow": `${(0, vue.unref)(saturation)},${(0, vue.unref)(brightness)}`,
"aria-valuetext": ariaValuetext.value,
onKeydown: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
}, null, 46, _hoisted_1$52)], 6);
};
}
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/components/sv-panel.vue
var sv_panel_default = sv_panel_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker-panel/src/composables/use-common-color.ts
const useCommonColor = (props, emit) => {
const color = (0, vue.reactive)(new Color({
enableAlpha: props.showAlpha,
format: props.colorFormat || "",
value: props.modelValue
}));
(0, vue.watch)(() => [props.colorFormat, props.showAlpha], () => {
color.enableAlpha = props.showAlpha;
color.format = props.colorFormat || color.format;
color.doOnChange();
emit(UPDATE_MODEL_EVENT, color.value);
});
return { color };
};
//#endregion
//#region ../../packages/components/color-picker-panel/src/color-picker-panel.vue?vue&type=script&setup=true&lang.ts
var color_picker_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElColorPickerPanel",
__name: "color-picker-panel",
props: colorPickerPanelProps,
emits: colorPickerPanelEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("color-picker-panel");
const { formItem } = useFormItem();
const disabled = useFormDisabled();
const hueRef = (0, vue.ref)();
const svRef = (0, vue.ref)();
const alphaRef = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const customInput = (0, vue.ref)("");
const { color } = (0, vue.inject)(ROOT_COMMON_COLOR_INJECTION_KEY, () => useCommonColor(props, emit), true);
function handleConfirm() {
color.fromString(customInput.value);
if (color.value !== customInput.value) customInput.value = color.value;
}
function handleFocusout() {
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
function update() {
hueRef.value?.update();
svRef.value?.update();
alphaRef.value?.update();
}
(0, vue.onMounted)(() => {
if (props.modelValue) customInput.value = color.value;
(0, vue.nextTick)(update);
});
(0, vue.watch)(() => props.modelValue, (newVal) => {
if (newVal !== color.value) newVal ? color.fromString(newVal) : color.clear();
});
(0, vue.watch)(() => color.value, (val) => {
emit(UPDATE_MODEL_EVENT, val);
customInput.value = val;
if (props.validateEvent) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
(0, vue.provide)(colorPickerPanelContextKey, { currentColor: (0, vue.computed)(() => color.value) });
__expose({
color,
inputRef,
update
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
(0, vue.unref)(ns).is("border", __props.border)
]),
onFocusout: handleFocusout
}, [
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")) }, [(0, vue.createVNode)(hue_slider_default, {
ref_key: "hueRef",
ref: hueRef,
color: (0, vue.unref)(color),
vertical: "",
disabled: (0, vue.unref)(disabled),
class: (0, vue.normalizeClass)(["hue-slider", __props.hueSliderClass]),
style: (0, vue.normalizeStyle)(__props.hueSliderStyle)
}, null, 8, [
"color",
"disabled",
"class",
"style"
]), (0, vue.createVNode)(sv_panel_default, {
ref_key: "svRef",
ref: svRef,
color: (0, vue.unref)(color),
disabled: (0, vue.unref)(disabled)
}, null, 8, ["color", "disabled"])], 2),
__props.showAlpha ? ((0, vue.openBlock)(), (0, vue.createBlock)(alpha_slider_default, {
key: 0,
ref_key: "alphaRef",
ref: alphaRef,
color: (0, vue.unref)(color),
disabled: (0, vue.unref)(disabled)
}, null, 8, ["color", "disabled"])) : (0, vue.createCommentVNode)("v-if", true),
__props.predefine ? ((0, vue.openBlock)(), (0, vue.createBlock)(predefine_default, {
key: 1,
ref: "predefine",
"enable-alpha": __props.showAlpha,
color: (0, vue.unref)(color),
colors: __props.predefine,
disabled: (0, vue.unref)(disabled)
}, null, 8, [
"enable-alpha",
"color",
"colors",
"disabled"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
ref_key: "inputRef",
ref: inputRef,
modelValue: customInput.value,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => customInput.value = $event),
"validate-event": false,
size: "small",
disabled: (0, vue.unref)(disabled),
onChange: handleConfirm
}, null, 8, ["modelValue", "disabled"]), (0, vue.renderSlot)(_ctx.$slots, "footer")], 2)
], 34);
};
}
});
//#endregion
//#region ../../packages/components/color-picker-panel/src/color-picker-panel.vue
var color_picker_panel_default = color_picker_panel_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker-panel/index.ts
const ElColorPickerPanel = withInstall(color_picker_panel_default);
//#endregion
//#region ../../packages/components/color-picker/src/color-picker.ts
/**
* @deprecated Removed after 3.0.0, Use `ColorPickerProps` instead.
*/
const colorPickerProps = buildProps({
persistent: {
type: Boolean,
default: true
},
modelValue: {
type: definePropType(String),
default: void 0
},
id: String,
showAlpha: Boolean,
colorFormat: { type: definePropType(String) },
disabled: {
type: Boolean,
default: void 0
},
clearable: {
type: Boolean,
default: true
},
size: useSizeProp,
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
tabindex: {
type: [String, Number],
default: 0
},
teleported: useTooltipContentProps.teleported,
appendTo: useTooltipContentProps.appendTo,
predefine: { type: definePropType(Array) },
validateEvent: {
type: Boolean,
default: true
},
...useEmptyValuesProps,
...useAriaProps(["ariaLabel"])
});
const colorPickerEmits = {
[UPDATE_MODEL_EVENT]: (val) => isString(val) || isNil(val),
[CHANGE_EVENT]: (val) => isString(val) || isNil(val),
activeChange: (val) => isString(val) || isNil(val),
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true
};
/**
* @description default values for ColorPickerProps, used in components that extend ColorPickerProps
*/
const colorPickerPropsDefaults = {
persistent: true,
modelValue: void 0,
disabled: void 0,
clearable: true,
popperStyle: void 0,
tabindex: 0,
teleported: true,
validateEvent: true,
valueOnClear: void 0
};
//#endregion
//#region ../../packages/components/color-picker/src/color-picker.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$51 = [
"id",
"aria-label",
"aria-labelledby",
"aria-description",
"aria-disabled",
"tabindex"
];
var color_picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElColorPicker",
__name: "color-picker",
props: colorPickerProps,
emits: colorPickerEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("color");
const { formItem } = useFormItem();
const colorSize = useFormSize();
const colorDisabled = useFormDisabled();
const { valueOnClear, isEmptyValue } = useEmptyValues(props, null);
const commonColor = useCommonColor(props, emit);
const { inputId: buttonId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
const popper = (0, vue.ref)();
const triggerRef = (0, vue.ref)();
const pickerPanelRef = (0, vue.ref)();
const showPicker = (0, vue.ref)(false);
const showPanelColor = (0, vue.ref)(false);
let shouldActiveChange = true;
const { isFocused, handleFocus, handleBlur } = useFocusController(triggerRef, {
disabled: colorDisabled,
beforeBlur(event) {
return popper.value?.isFocusInsideContent(event);
},
afterBlur() {
setShowPicker(false);
resetColor();
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const color = reactiveComputed(() => pickerPanelRef.value?.color ?? commonColor.color);
const panelProps = (0, vue.computed)(() => pick(props, Object.keys(colorPickerPanelProps)));
const displayedColor = (0, vue.computed)(() => {
if (!props.modelValue && !showPanelColor.value) return "transparent";
return displayedRgb(color, props.showAlpha);
});
const currentColor = (0, vue.computed)(() => {
return !props.modelValue && !showPanelColor.value ? "" : color.value;
});
const buttonAriaLabel = (0, vue.computed)(() => {
return !isLabeledByFormItem.value ? props.ariaLabel || t("el.colorpicker.defaultLabel") : void 0;
});
const buttonAriaLabelledby = (0, vue.computed)(() => {
return isLabeledByFormItem.value ? formItem?.labelId : void 0;
});
const btnKls = (0, vue.computed)(() => {
return [
ns.b("picker"),
ns.is("disabled", colorDisabled.value),
ns.bm("picker", colorSize.value),
ns.is("focused", isFocused.value)
];
});
function displayedRgb(color, showAlpha) {
const { r, g, b, a } = color.toRgb();
return showAlpha ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;
}
function setShowPicker(value) {
showPicker.value = value;
}
const debounceSetShowPicker = debounce(setShowPicker, 100, { leading: true });
function show() {
if (colorDisabled.value) return;
setShowPicker(true);
}
function hide() {
debounceSetShowPicker(false);
resetColor();
}
function resetColor() {
(0, vue.nextTick)(() => {
if (props.modelValue) color.fromString(props.modelValue);
else {
color.value = "";
(0, vue.nextTick)(() => {
showPanelColor.value = false;
});
}
});
}
function handleTrigger() {
if (colorDisabled.value) return;
if (showPicker.value) resetColor();
debounceSetShowPicker(!showPicker.value);
}
function confirmValue() {
const value = isEmptyValue(color.value) ? valueOnClear.value : color.value;
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
if (props.validateEvent) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
debounceSetShowPicker(false);
(0, vue.nextTick)(() => {
const newColor = new Color({
enableAlpha: props.showAlpha,
format: props.colorFormat || "",
value: props.modelValue
});
if (!color.compare(newColor)) resetColor();
});
}
function clear() {
debounceSetShowPicker(false);
emit(UPDATE_MODEL_EVENT, valueOnClear.value);
emit(CHANGE_EVENT, valueOnClear.value);
if (props.modelValue !== valueOnClear.value && props.validateEvent) formItem?.validate("change").catch((err) => /* @__PURE__ */ debugWarn(err));
resetColor();
emit("clear");
}
function handleShowTooltip() {
pickerPanelRef?.value?.inputRef?.focus();
}
function handleClickOutside() {
if (!showPicker.value) return;
hide();
isFocused.value && focus();
}
function handleEsc(event) {
event.preventDefault();
event.stopPropagation();
setShowPicker(false);
resetColor();
}
function handleKeyDown(event) {
switch (getEventCode(event)) {
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
case EVENT_CODE.space:
event.preventDefault();
event.stopPropagation();
show();
break;
case EVENT_CODE.esc:
handleEsc(event);
break;
}
}
function focus() {
triggerRef.value.focus();
}
function blur() {
triggerRef.value.blur();
}
(0, vue.watch)(() => currentColor.value, (val) => {
shouldActiveChange && emit("activeChange", val);
shouldActiveChange = true;
});
(0, vue.watch)(() => color.value, () => {
if (!props.modelValue && !showPanelColor.value) showPanelColor.value = true;
});
(0, vue.watch)(() => props.modelValue, (newVal) => {
if (!newVal) showPanelColor.value = false;
else if (newVal && newVal !== color.value) {
shouldActiveChange = false;
color.fromString(newVal);
}
});
(0, vue.watch)(() => showPicker.value, () => {
pickerPanelRef.value && (0, vue.nextTick)(pickerPanelRef.value.update);
});
(0, vue.provide)(ROOT_COMMON_COLOR_INJECTION_KEY, commonColor);
__expose({
color,
show,
hide,
focus,
blur
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
ref_key: "popper",
ref: popper,
visible: showPicker.value,
"show-arrow": false,
"fallback-placements": [
"bottom",
"top",
"right",
"left"
],
offset: 0,
"gpu-acceleration": false,
"popper-class": [(0, vue.unref)(ns).be("picker", "panel"), __props.popperClass],
"popper-style": __props.popperStyle,
"stop-popper-mouse-event": false,
pure: "",
loop: "",
role: "dialog",
effect: "light",
trigger: "click",
teleported: __props.teleported,
transition: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top`,
persistent: __props.persistent,
"append-to": __props.appendTo,
onShow: handleShowTooltip,
onHide: _cache[2] || (_cache[2] = ($event) => setShowPicker(false))
}, {
content: (0, vue.withCtx)(() => [(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElColorPickerPanel), (0, vue.mergeProps)({
ref_key: "pickerPanelRef",
ref: pickerPanelRef
}, panelProps.value, {
border: false,
"validate-event": false,
onKeydown: (0, vue.withKeys)(handleEsc, ["esc"])
}), {
footer: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", null, [__props.clearable ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("footer", "link-btn")),
text: "",
size: "small",
onClick: clear
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.colorpicker.clear")), 1)]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(ElButton), {
plain: "",
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("footer", "btn")),
onClick: confirmValue
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.colorpicker.confirm")), 1)]),
_: 1
}, 8, ["class"])])]),
_: 1
}, 16)), [[
(0, vue.unref)(ClickOutside),
handleClickOutside,
triggerRef.value
]])]),
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
id: (0, vue.unref)(buttonId),
ref_key: "triggerRef",
ref: triggerRef
}, _ctx.$attrs, {
class: btnKls.value,
role: "button",
"aria-label": buttonAriaLabel.value,
"aria-labelledby": buttonAriaLabelledby.value,
"aria-description": (0, vue.unref)(t)("el.colorpicker.description", { color: __props.modelValue || "" }),
"aria-disabled": (0, vue.unref)(colorDisabled),
tabindex: (0, vue.unref)(colorDisabled) ? void 0 : __props.tabindex,
onKeydown: handleKeyDown,
onFocus: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
onBlur: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleBlur) && (0, vue.unref)(handleBlur)(...args))
}), [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("picker", "trigger")),
onClick: handleTrigger
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "color"), (0, vue.unref)(ns).is("alpha", __props.showAlpha)]) }, [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("picker", "color-inner")),
style: (0, vue.normalizeStyle)({ backgroundColor: displayedColor.value })
}, [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "icon"), (0, vue.unref)(ns).is("icon-arrow-down")]) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
_: 1
}, 8, ["class"]), [[vue.vShow, __props.modelValue || showPanelColor.value]]), (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "empty"), (0, vue.unref)(ns).is("icon-close")]) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
}, 8, ["class"]), [[vue.vShow, !__props.modelValue && !showPanelColor.value]])], 6)], 2)], 2)], 16, _hoisted_1$51)]),
_: 1
}, 8, [
"visible",
"popper-class",
"popper-style",
"teleported",
"transition",
"persistent",
"append-to"
]);
};
}
});
//#endregion
//#region ../../packages/components/color-picker/src/color-picker.vue
var color_picker_default = color_picker_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/color-picker/index.ts
const ElColorPicker = withInstall(color_picker_default);
//#endregion
//#region ../../packages/components/container/src/container.vue?vue&type=script&setup=true&lang.ts
var container_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElContainer",
__name: "container",
props: { direction: {
type: String,
required: false
} },
setup(__props) {
const props = __props;
const slots = (0, vue.useSlots)();
const ns = useNamespace("container");
const isVertical = (0, vue.computed)(() => {
if (props.direction === "vertical") return true;
else if (props.direction === "horizontal") return false;
if (slots && slots.default) return slots.default().some((vNode) => {
const tag = vNode.type.name;
return tag === "ElHeader" || tag === "ElFooter";
});
else return false;
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is("vertical", isVertical.value)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/container/src/container.vue
var container_default = container_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/container/src/aside.vue?vue&type=script&setup=true&lang.ts
var aside_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAside",
__name: "aside",
props: { width: {
type: [String, null],
required: false,
default: null
} },
setup(__props) {
const props = __props;
const ns = useNamespace("aside");
const style = (0, vue.computed)(() => props.width ? ns.cssVarBlock({ width: props.width }) : {});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("aside", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
style: (0, vue.normalizeStyle)(style.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
};
}
});
//#endregion
//#region ../../packages/components/container/src/aside.vue
var aside_default = aside_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/container/src/footer.vue?vue&type=script&setup=true&lang.ts
var footer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElFooter",
__name: "footer",
props: { height: {
type: [String, null],
required: false,
default: null
} },
setup(__props) {
const props = __props;
const ns = useNamespace("footer");
const style = (0, vue.computed)(() => props.height ? ns.cssVarBlock({ height: props.height }) : {});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("footer", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
style: (0, vue.normalizeStyle)(style.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
};
}
});
//#endregion
//#region ../../packages/components/container/src/footer.vue
var footer_default = footer_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/container/src/header.vue?vue&type=script&setup=true&lang.ts
var header_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElHeader",
__name: "header",
props: { height: {
type: [String, null],
required: false,
default: null
} },
setup(__props) {
const props = __props;
const ns = useNamespace("header");
const style = (0, vue.computed)(() => {
return props.height ? ns.cssVarBlock({ height: props.height }) : {};
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
style: (0, vue.normalizeStyle)(style.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
};
}
});
//#endregion
//#region ../../packages/components/container/src/header.vue
var header_default = header_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/container/src/main.vue?vue&type=script&setup=true&lang.ts
var main_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMain",
__name: "main",
setup(__props) {
const ns = useNamespace("main");
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("main", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
};
}
});
//#endregion
//#region ../../packages/components/container/src/main.vue
var main_default = main_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/container/index.ts
const ElContainer = withInstall(container_default, {
Aside: aside_default,
Footer: footer_default,
Header: header_default,
Main: main_default
});
const ElAside = withNoopInstall(aside_default);
const ElFooter = withNoopInstall(footer_default);
const ElHeader = withNoopInstall(header_default);
const ElMain = withNoopInstall(main_default);
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/advancedFormat.js
var require_advancedFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_advancedFormat = t();
})(exports, (function() {
"use strict";
return function(e, t) {
var r = t.prototype, n = r.format;
r.format = function(e) {
var t = this, r = this.$locale();
if (!this.isValid()) return n.bind(this)(e);
var s = this.$utils(), a = (e || "YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (function(e) {
switch (e) {
case "Q": return Math.ceil((t.$M + 1) / 3);
case "Do": return r.ordinal(t.$D);
case "gggg": return t.weekYear();
case "GGGG": return t.isoWeekYear();
case "wo": return r.ordinal(t.week(), "W");
case "w":
case "ww": return s.s(t.week(), "w" === e ? 1 : 2, "0");
case "W":
case "WW": return s.s(t.isoWeek(), "W" === e ? 1 : 2, "0");
case "k":
case "kk": return s.s(String(0 === t.$H ? 24 : t.$H), "k" === e ? 1 : 2, "0");
case "X": return Math.floor(t.$d.getTime() / 1e3);
case "x": return t.$d.getTime();
case "z": return "[" + t.offsetName() + "]";
case "zzz": return "[" + t.offsetName("long") + "]";
default: return e;
}
}));
return n.bind(this)(a);
};
};
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/weekOfYear.js
var require_weekOfYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekOfYear = t();
})(exports, (function() {
"use strict";
var e = "week", t = "year";
return function(i, n, r) {
var f = n.prototype;
f.week = function(i) {
if (void 0 === i && (i = null), null !== i) return this.add(7 * (i - this.week()), "day");
var n = this.$locale().yearStart || 1;
if (11 === this.month() && this.date() > 25) {
var f = r(this).startOf(t).add(1, t).date(n), s = r(this).endOf(e);
if (f.isBefore(s)) return 1;
}
var a = r(this).startOf(t).date(n).startOf(e).subtract(1, "millisecond"), o = this.diff(a, e, !0);
return o < 0 ? r(this).startOf("week").week() : Math.ceil(o);
}, f.weeks = function(e) {
return void 0 === e && (e = null), this.week(e);
};
};
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/weekYear.js
var require_weekYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekYear = t();
})(exports, (function() {
"use strict";
return function(e, t) {
t.prototype.weekYear = function() {
var e = this.month(), t = this.week(), n = this.year();
return 1 === t && 11 === e ? n + 1 : 0 === e && t >= 52 ? n - 1 : n;
};
};
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/dayOfYear.js
var require_dayOfYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_dayOfYear = t();
})(exports, (function() {
"use strict";
return function(e, t, n) {
t.prototype.dayOfYear = function(e) {
var t = Math.round((n(this).startOf("day") - n(this).startOf("year")) / 864e5) + 1;
return null == e ? t : this.add(e - t, "day");
};
};
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/isSameOrAfter.js
var require_isSameOrAfter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_isSameOrAfter = t();
})(exports, (function() {
"use strict";
return function(e, t) {
t.prototype.isSameOrAfter = function(e, t) {
return this.isSame(e, t) || this.isAfter(e, t);
};
};
}));
}));
//#endregion
//#region ../../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/isSameOrBefore.js
var require_isSameOrBefore = /* @__PURE__ */ __commonJSMin(((exports, module) => {
(function(e, i) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_isSameOrBefore = i();
})(exports, (function() {
"use strict";
return function(e, i) {
i.prototype.isSameOrBefore = function(e, i) {
return this.isSame(e, i) || this.isBefore(e, i);
};
};
}));
}));
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/date-picker-panel.ts
var import_isSameOrBefore = /* @__PURE__ */ __toESM(require_isSameOrBefore());
var import_isSameOrAfter = /* @__PURE__ */ __toESM(require_isSameOrAfter());
var import_dayOfYear = /* @__PURE__ */ __toESM(require_dayOfYear());
var import_weekYear = /* @__PURE__ */ __toESM(require_weekYear());
var import_weekOfYear = /* @__PURE__ */ __toESM(require_weekOfYear());
var import_advancedFormat = /* @__PURE__ */ __toESM(require_advancedFormat());
const datePickerPanelProps = buildProps({
valueFormat: String,
dateFormat: String,
timeFormat: String,
disabled: {
type: Boolean,
default: void 0
},
modelValue: {
type: definePropType([
Date,
Array,
String,
Number
]),
default: ""
},
defaultValue: { type: definePropType([Date, Array]) },
defaultTime: { type: definePropType([Date, Array]) },
isRange: Boolean,
...disabledTimeListsProps,
disabledDate: { type: Function },
cellClassName: { type: Function },
shortcuts: {
type: Array,
default: () => []
},
arrowControl: Boolean,
unlinkPanels: Boolean,
showNow: {
type: Boolean,
default: true
},
showConfirm: Boolean,
showFooter: Boolean,
showWeekNumber: Boolean,
type: {
type: definePropType(String),
default: "date"
},
clearable: {
type: Boolean,
default: true
},
border: {
type: Boolean,
default: true
},
editable: {
type: Boolean,
default: true
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/constants.ts
const ROOT_PICKER_INJECTION_KEY = Symbol("rootPickerContextKey");
const ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY = "ElIsDefaultFormat";
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/shared.ts
const selectionModes = [
"date",
"dates",
"year",
"years",
"month",
"months",
"week",
"range"
];
const datePickerSharedProps = buildProps({
cellClassName: { type: definePropType(Function) },
disabledDate: { type: definePropType(Function) },
date: {
type: definePropType(Object),
required: true
},
minDate: { type: definePropType(Object) },
maxDate: { type: definePropType(Object) },
parsedValue: { type: definePropType([Object, Array]) },
rangeState: {
type: definePropType(Object),
default: () => ({
endDate: null,
selecting: false
})
},
disabled: Boolean
});
const panelSharedProps = buildProps({
type: {
type: definePropType(String),
required: true,
values: datePickTypes
},
dateFormat: String,
timeFormat: String,
showNow: {
type: Boolean,
default: true
},
showConfirm: Boolean,
showFooter: {
type: Boolean,
default: true
},
showWeekNumber: Boolean,
border: Boolean,
disabled: Boolean,
editable: {
type: Boolean,
default: true
}
});
const panelRangeSharedProps = buildProps({
unlinkPanels: Boolean,
visible: {
type: Boolean,
default: true
},
showConfirm: Boolean,
showFooter: {
type: Boolean,
default: true
},
border: Boolean,
disabled: Boolean,
parsedValue: { type: definePropType(Array) }
});
const selectionModeWithDefault = (mode) => {
return {
type: String,
values: selectionModes,
default: mode
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/panel-date-pick.ts
const panelDatePickProps = buildProps({
...panelSharedProps,
parsedValue: { type: definePropType([Object, Array]) },
visible: {
type: Boolean,
default: true
},
format: {
type: String,
default: ""
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/utils.ts
const isValidRange = (range) => {
if (!isArray$1(range)) return false;
const [left, right] = range;
return import_dayjs_min.default.isDayjs(left) && import_dayjs_min.default.isDayjs(right) && (0, import_dayjs_min.default)(left).isValid() && (0, import_dayjs_min.default)(right).isValid() && left.isSameOrBefore(right);
};
const getDefaultValue = (defaultValue, { lang, step = 1, unit, unlinkPanels }) => {
let start;
if (isArray$1(defaultValue)) {
let [left, right] = defaultValue.map((d) => (0, import_dayjs_min.default)(d).locale(lang));
if (!unlinkPanels) right = left.add(step, unit);
return [left, right];
} else if (defaultValue) start = (0, import_dayjs_min.default)(defaultValue);
else start = (0, import_dayjs_min.default)();
start = start.locale(lang);
return [start, start.add(step, unit)];
};
const buildPickerTable = (dimension, rows, { columnIndexOffset, startDate, nextEndDate, now, unit, relativeDateGetter, setCellMetadata, setRowMetadata }) => {
for (let rowIndex = 0; rowIndex < dimension.row; rowIndex++) {
const row = rows[rowIndex];
for (let columnIndex = 0; columnIndex < dimension.column; columnIndex++) {
let cell = row[columnIndex + columnIndexOffset];
if (!cell) cell = {
row: rowIndex,
column: columnIndex,
type: "normal",
inRange: false,
start: false,
end: false
};
const nextStartDate = relativeDateGetter(rowIndex * dimension.column + columnIndex);
cell.dayjs = nextStartDate;
cell.date = nextStartDate.toDate();
cell.timestamp = nextStartDate.valueOf();
cell.type = "normal";
cell.inRange = !!(startDate && nextStartDate.isSameOrAfter(startDate, unit) && nextEndDate && nextStartDate.isSameOrBefore(nextEndDate, unit)) || !!(startDate && nextStartDate.isSameOrBefore(startDate, unit) && nextEndDate && nextStartDate.isSameOrAfter(nextEndDate, unit));
if (startDate?.isSameOrAfter(nextEndDate)) {
cell.start = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
cell.end = startDate && nextStartDate.isSame(startDate, unit);
} else {
cell.start = !!startDate && nextStartDate.isSame(startDate, unit);
cell.end = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
}
if (nextStartDate.isSame(now, unit)) cell.type = "today";
setCellMetadata?.(cell, {
rowIndex,
columnIndex
});
row[columnIndex + columnIndexOffset] = cell;
}
setRowMetadata?.(row);
}
};
const datesInMonth = (date, year, month, lang) => {
const firstDay = (0, import_dayjs_min.default)().locale(lang).startOf("month").month(month).year(year).hour(date.hour()).minute(date.minute()).second(date.second());
return rangeArr(firstDay.daysInMonth()).map((n) => firstDay.add(n, "day").toDate());
};
const getValidDateOfMonth = (date, year, month, lang, disabledDate) => {
const _value = (0, import_dayjs_min.default)().year(year).month(month).startOf("month").hour(date.hour()).minute(date.minute()).second(date.second());
const _date = datesInMonth(date, year, month, lang).find((date) => {
return !disabledDate?.(date);
});
if (_date) return (0, import_dayjs_min.default)(_date).locale(lang);
return _value.locale(lang);
};
const getValidDateOfYear = (value, lang, disabledDate) => {
const year = value.year();
if (!disabledDate?.(value.toDate())) return value.locale(lang);
const month = value.month();
if (!datesInMonth(value, year, month, lang).every(disabledDate)) return getValidDateOfMonth(value, year, month, lang, disabledDate);
for (let i = 0; i < 12; i++) if (!datesInMonth(value, year, i, lang).every(disabledDate)) return getValidDateOfMonth(value, year, i, lang, disabledDate);
return value;
};
const correctlyParseUserInput = (value, format, lang, defaultFormat) => {
if (isArray$1(value)) return value.map((v) => correctlyParseUserInput(v, format, lang, defaultFormat));
if (isString(value)) {
const dayjsValue = defaultFormat?.value ? (0, import_dayjs_min.default)(value) : (0, import_dayjs_min.default)(value, format);
if (!dayjsValue.isValid()) return dayjsValue;
}
return (0, import_dayjs_min.default)(value, format).locale(lang);
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/basic-date-table.ts
const basicDateTableProps = buildProps({
...datePickerSharedProps,
showWeekNumber: Boolean,
selectionMode: selectionModeWithDefault("date")
});
const basicDateTableEmits = [
"changerange",
"pick",
"select"
];
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-basic-date-table.ts
const isNormalDay = (type = "") => {
return ["normal", "today"].includes(type);
};
const useBasicDateTable = (props, emit) => {
const { lang } = useLocale();
const tbodyRef = (0, vue.ref)();
const currentCellRef = (0, vue.ref)();
const lastRow = (0, vue.ref)();
const lastColumn = (0, vue.ref)();
const tableRows = (0, vue.ref)([
[],
[],
[],
[],
[],
[]
]);
let focusWithClick = false;
const firstDayOfWeek = props.date.$locale().weekStart || 7;
const WEEKS_CONSTANT = props.date.locale("en").localeData().weekdaysShort().map((_) => _.toLowerCase());
const offsetDay = (0, vue.computed)(() => {
return firstDayOfWeek > 3 ? 7 - firstDayOfWeek : -firstDayOfWeek;
});
const startDate = (0, vue.computed)(() => {
const startDayOfMonth = props.date.startOf("month");
return startDayOfMonth.subtract(startDayOfMonth.day() || 7, "day");
});
const WEEKS = (0, vue.computed)(() => {
return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(firstDayOfWeek, firstDayOfWeek + 7);
});
const hasCurrent = (0, vue.computed)(() => {
return flatten((0, vue.unref)(rows)).some((row) => {
return row.isCurrent;
});
});
const days = (0, vue.computed)(() => {
const startOfMonth = props.date.startOf("month");
return {
startOfMonthDay: startOfMonth.day() || 7,
dateCountOfMonth: startOfMonth.daysInMonth(),
dateCountOfLastMonth: startOfMonth.subtract(1, "month").daysInMonth()
};
});
const selectedDate = (0, vue.computed)(() => {
return props.selectionMode === "dates" ? castArray(props.parsedValue) : [];
});
const setDateText = (cell, { count, rowIndex, columnIndex }) => {
const { startOfMonthDay, dateCountOfMonth, dateCountOfLastMonth } = (0, vue.unref)(days);
const offset = (0, vue.unref)(offsetDay);
if (rowIndex >= 0 && rowIndex <= 1) {
const numberOfDaysFromPreviousMonth = startOfMonthDay + offset < 0 ? 7 + startOfMonthDay + offset : startOfMonthDay + offset;
if (columnIndex + rowIndex * 7 >= numberOfDaysFromPreviousMonth) {
cell.text = count;
return true;
} else {
cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - columnIndex % 7) + 1 + rowIndex * 7;
cell.type = "prev-month";
}
} else {
if (count <= dateCountOfMonth) cell.text = count;
else {
cell.text = count - dateCountOfMonth;
cell.type = "next-month";
}
return true;
}
return false;
};
const setCellMetadata = (cell, { columnIndex, rowIndex }, count) => {
const { disabledDate, cellClassName } = props;
const _selectedDate = (0, vue.unref)(selectedDate);
const shouldIncrement = setDateText(cell, {
count,
rowIndex,
columnIndex
});
const cellDate = cell.dayjs.toDate();
cell.selected = _selectedDate.find((d) => d.isSame(cell.dayjs, "day"));
cell.isSelected = !!cell.selected;
cell.isCurrent = isCurrent(cell);
cell.disabled = disabledDate?.(cellDate);
cell.customClass = cellClassName?.(cellDate);
return shouldIncrement;
};
const setRowMetadata = (row) => {
if (props.selectionMode === "week") {
const [start, end] = props.showWeekNumber ? [1, 7] : [0, 6];
const isActive = isWeekActive(row[start + 1]);
row[start].inRange = isActive;
row[start].start = isActive;
row[end].inRange = isActive;
row[end].end = isActive;
}
};
const rows = (0, vue.computed)(() => {
const { minDate, maxDate, rangeState, showWeekNumber } = props;
const offset = (0, vue.unref)(offsetDay);
const rows_ = (0, vue.unref)(tableRows);
const dateUnit = "day";
let count = 1;
buildPickerTable({
row: 6,
column: 7
}, rows_, {
startDate: minDate,
columnIndexOffset: showWeekNumber ? 1 : 0,
nextEndDate: rangeState.endDate || maxDate || rangeState.selecting && minDate || null,
now: (0, import_dayjs_min.default)().locale((0, vue.unref)(lang)).startOf(dateUnit),
unit: dateUnit,
relativeDateGetter: (idx) => (0, vue.unref)(startDate).add(idx - offset, dateUnit),
setCellMetadata: (...args) => {
if (setCellMetadata(...args, count)) count += 1;
},
setRowMetadata
});
if (showWeekNumber) {
for (let rowIndex = 0; rowIndex < 6; rowIndex++) if (rows_[rowIndex][1].dayjs) rows_[rowIndex][0] = {
type: "week",
text: rows_[rowIndex][1].dayjs.week()
};
}
return rows_;
});
(0, vue.watch)(() => props.date, async () => {
if ((0, vue.unref)(tbodyRef)?.contains(document.activeElement)) {
await (0, vue.nextTick)();
await focus();
}
});
const focus = async () => (0, vue.unref)(currentCellRef)?.focus();
const isCurrent = (cell) => {
return props.selectionMode === "date" && isNormalDay(cell.type) && cellMatchesDate(cell, props.parsedValue);
};
const cellMatchesDate = (cell, date) => {
if (!date) return false;
return (0, import_dayjs_min.default)(date).locale((0, vue.unref)(lang)).isSame(props.date.date(Number(cell.text)), "day");
};
const getDateOfCell = (row, column) => {
const startOfMonthDay = (0, vue.unref)(days).startOfMonthDay;
const offset = (0, vue.unref)(offsetDay);
const numberOfDaysFromPreviousMonth = startOfMonthDay + offset < 0 ? 7 + startOfMonthDay + offset : startOfMonthDay + offset;
const offsetFromStart = row * 7 + (column - (props.showWeekNumber ? 1 : 0));
return props.date.startOf("month").subtract(numberOfDaysFromPreviousMonth, "day").add(offsetFromStart, "day");
};
const handleMouseMove = (event) => {
if (!props.rangeState.selecting) return;
let target = event.target;
if (target.tagName === "SPAN") target = target.parentNode?.parentNode;
if (target.tagName === "DIV") target = target.parentNode;
if (target.tagName !== "TD") return;
const row = target.parentNode.rowIndex - 1;
const column = target.cellIndex;
if ((0, vue.unref)(rows)[row][column].disabled) return;
if (row !== (0, vue.unref)(lastRow) || column !== (0, vue.unref)(lastColumn)) {
lastRow.value = row;
lastColumn.value = column;
emit("changerange", {
selecting: true,
endDate: getDateOfCell(row, column)
});
}
};
const isSelectedCell = (cell) => {
return !(0, vue.unref)(hasCurrent) && cell?.text === 1 && isNormalDay(cell.type) || cell.isCurrent;
};
const handleFocus = (event) => {
if (focusWithClick || (0, vue.unref)(hasCurrent) || props.selectionMode !== "date") return;
handlePickDate(event, true);
};
const handleMouseDown = (event) => {
if (!event.target.closest("td")) return;
focusWithClick = true;
};
const handleMouseUp = (event) => {
if (!event.target.closest("td")) return;
focusWithClick = false;
};
const handleRangePick = (newDate) => {
if (!props.rangeState.selecting || !props.minDate) {
emit("pick", {
minDate: newDate,
maxDate: null
});
emit("select", true);
} else {
if (newDate >= props.minDate) emit("pick", {
minDate: props.minDate,
maxDate: newDate
});
else emit("pick", {
minDate: newDate,
maxDate: props.minDate
});
emit("select", false);
}
};
const handleWeekPick = (newDate) => {
const weekNumber = newDate.week();
const value = `${newDate.year()}w${weekNumber}`;
emit("pick", {
year: newDate.year(),
week: weekNumber,
value,
date: newDate.startOf("week")
});
};
const handleDatesPick = (newDate, selected) => {
emit("pick", selected ? castArray(props.parsedValue).filter((d) => d?.valueOf() !== newDate.valueOf()) : castArray(props.parsedValue).concat([newDate]));
};
const handlePickDate = (event, isKeyboardMovement = false) => {
if (props.disabled) return;
const target = event.target.closest("td");
if (!target) return;
const row = target.parentNode.rowIndex - 1;
const column = target.cellIndex;
const cell = (0, vue.unref)(rows)[row][column];
if (cell.disabled || cell.type === "week") return;
const newDate = getDateOfCell(row, column);
switch (props.selectionMode) {
case "range":
handleRangePick(newDate);
break;
case "date":
emit("pick", newDate, isKeyboardMovement);
break;
case "week":
handleWeekPick(newDate);
break;
case "dates":
handleDatesPick(newDate, !!cell.selected);
break;
default: break;
}
};
const isWeekActive = (cell) => {
if (props.selectionMode !== "week") return false;
let newDate = props.date.startOf("day");
if (cell.type === "prev-month") newDate = newDate.subtract(1, "month");
if (cell.type === "next-month") newDate = newDate.add(1, "month");
newDate = newDate.date(Number.parseInt(cell.text, 10));
if (props.parsedValue && !isArray$1(props.parsedValue)) {
const dayOffset = (props.parsedValue.day() - firstDayOfWeek + 7) % 7 - 1;
return props.parsedValue.subtract(dayOffset, "day").isSame(newDate, "day");
}
return false;
};
return {
WEEKS,
rows,
tbodyRef,
currentCellRef,
focus,
isCurrent,
isWeekActive,
isSelectedCell,
handlePickDate,
handleMouseUp,
handleMouseDown,
handleMouseMove,
handleFocus
};
};
const useBasicDateTableDOM = (props, { isCurrent, isWeekActive }) => {
const ns = useNamespace("date-table");
const { t } = useLocale();
const tableKls = (0, vue.computed)(() => [ns.b(), ns.is("week-mode", props.selectionMode === "week" && !props.disabled)]);
const tableLabel = (0, vue.computed)(() => t("el.datepicker.dateTablePrompt"));
const getCellClasses = (cell) => {
const classes = [];
if (isNormalDay(cell.type) && !cell.disabled) {
classes.push("available");
if (cell.type === "today") classes.push("today");
} else classes.push(cell.type);
if (isCurrent(cell)) classes.push("current");
if (cell.inRange && (isNormalDay(cell.type) || props.selectionMode === "week")) {
classes.push("in-range");
if (cell.start) classes.push("start-date");
if (cell.end) classes.push("end-date");
}
if (cell.disabled || props.disabled) classes.push("disabled");
if (cell.selected) classes.push("selected");
if (cell.customClass) classes.push(cell.customClass);
return classes.join(" ");
};
const getRowKls = (cell) => [ns.e("row"), { current: isWeekActive(cell) }];
return {
tableKls,
tableLabel,
weekHeaderClass: ns.e("week-header"),
getCellClasses,
getRowKls,
t
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/basic-cell.ts
const basicCellProps = buildProps({ cell: { type: definePropType(Object) } });
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-cell-render.tsx
var basic_cell_render_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDatePickerCell",
props: basicCellProps,
setup(props) {
const ns = useNamespace("date-table-cell");
const { slots } = (0, vue.inject)(ROOT_PICKER_INJECTION_KEY);
return () => {
const { cell } = props;
return (0, vue.renderSlot)(slots, "default", { ...cell }, () => [(0, vue.createVNode)("div", { "class": ns.b() }, [(0, vue.createVNode)("span", { "class": ns.e("text") }, [cell?.renderText ?? cell?.text])])]);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-date-table.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$50 = ["aria-label"];
const _hoisted_2$32 = ["aria-label"];
const _hoisted_3$15 = [
"aria-current",
"aria-selected",
"tabindex",
"aria-disabled"
];
var basic_date_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "basic-date-table",
props: basicDateTableProps,
emits: basicDateTableEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const { WEEKS, rows, tbodyRef, currentCellRef, focus, isCurrent, isWeekActive, isSelectedCell, handlePickDate, handleMouseUp, handleMouseDown, handleMouseMove, handleFocus } = useBasicDateTable(props, __emit);
const { tableLabel, tableKls, getCellClasses, getRowKls, weekHeaderClass, t } = useBasicDateTableDOM(props, {
isCurrent,
isWeekActive
});
let isUnmounting = false;
(0, vue.onBeforeUnmount)(() => {
isUnmounting = true;
});
__expose({ focus });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
"aria-label": (0, vue.unref)(tableLabel),
class: (0, vue.normalizeClass)((0, vue.unref)(tableKls)),
cellspacing: "0",
cellpadding: "0",
role: "grid",
onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handlePickDate) && (0, vue.unref)(handlePickDate)(...args)),
onMousemove: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleMouseMove) && (0, vue.unref)(handleMouseMove)(...args)),
onMousedown: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleMouseDown) && (0, vue.unref)(handleMouseDown)(...args)),
onMouseup: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleMouseUp) && (0, vue.unref)(handleMouseUp)(...args))
}, [(0, vue.createElementVNode)("tbody", {
ref_key: "tbodyRef",
ref: tbodyRef
}, [(0, vue.createElementVNode)("tr", null, [_ctx.showWeekNumber ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
key: 0,
scope: "col",
class: (0, vue.normalizeClass)((0, vue.unref)(weekHeaderClass))
}, null, 2)) : (0, vue.createCommentVNode)("v-if", true), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(WEEKS), (week, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
key,
"aria-label": (0, vue.unref)(t)("el.datepicker.weeksFull." + week),
scope: "col"
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.weeks." + week)), 9, _hoisted_2$32);
}), 128))]), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rows), (row, rowKey) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
key: rowKey,
class: (0, vue.normalizeClass)((0, vue.unref)(getRowKls)(_ctx.showWeekNumber ? row[2] : row[1]))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, columnKey) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
key: `${rowKey}.${columnKey}`,
ref_for: true,
ref: (el) => !(0, vue.unref)(isUnmounting) && (0, vue.unref)(isSelectedCell)(cell) && (currentCellRef.value = el),
class: (0, vue.normalizeClass)((0, vue.unref)(getCellClasses)(cell)),
"aria-current": cell.isCurrent ? "date" : void 0,
"aria-selected": cell.isCurrent,
tabindex: _ctx.disabled ? void 0 : (0, vue.unref)(isSelectedCell)(cell) ? 0 : -1,
"aria-disabled": _ctx.disabled,
onFocus: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args))
}, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell }, null, 8, ["cell"])], 42, _hoisted_3$15);
}), 128))], 2);
}), 128))], 512)], 42, _hoisted_1$50);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-date-table.vue
var basic_date_table_default = basic_date_table_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/basic-month-table.ts
const basicMonthTableProps = buildProps({
...datePickerSharedProps,
selectionMode: selectionModeWithDefault("month")
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-month-table.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$49 = ["aria-label"];
const _hoisted_2$31 = [
"aria-selected",
"aria-label",
"tabindex",
"onKeydown"
];
var basic_month_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "basic-month-table",
props: basicMonthTableProps,
emits: [
"changerange",
"pick",
"select"
],
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("month-table");
const { t, lang } = useLocale();
const tbodyRef = (0, vue.ref)();
const currentCellRef = (0, vue.ref)();
const months = (0, vue.ref)(props.date.locale("en").localeData().monthsShort().map((_) => _.toLowerCase()));
const tableRows = (0, vue.ref)([
[],
[],
[]
]);
const lastRow = (0, vue.ref)();
const lastColumn = (0, vue.ref)();
const rows = (0, vue.computed)(() => {
const rows = tableRows.value;
const now = (0, import_dayjs_min.default)().locale(lang.value).startOf("month");
for (let i = 0; i < 3; i++) {
const row = rows[i];
for (let j = 0; j < 4; j++) {
const cell = row[j] ||= {
row: i,
column: j,
type: "normal",
inRange: false,
start: false,
end: false,
text: -1,
disabled: false,
isSelected: false,
customClass: void 0,
date: void 0,
dayjs: void 0,
isCurrent: void 0,
selected: void 0,
renderText: void 0,
timestamp: void 0
};
cell.type = "normal";
const index = i * 4 + j;
const calTime = props.date.startOf("year").month(index);
const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null;
cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "month") && calEndDate && calTime.isSameOrBefore(calEndDate, "month")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "month") && calEndDate && calTime.isSameOrAfter(calEndDate, "month"));
if (props.minDate?.isSameOrAfter(calEndDate)) {
cell.start = !!(calEndDate && calTime.isSame(calEndDate, "month"));
cell.end = props.minDate && calTime.isSame(props.minDate, "month");
} else {
cell.start = !!(props.minDate && calTime.isSame(props.minDate, "month"));
cell.end = !!(calEndDate && calTime.isSame(calEndDate, "month"));
}
if (now.isSame(calTime)) cell.type = "today";
const cellDate = calTime.toDate();
cell.text = index;
cell.disabled = props.disabledDate?.(cellDate) || false;
cell.date = cellDate;
cell.customClass = props.cellClassName?.(cellDate);
cell.dayjs = calTime;
cell.timestamp = calTime.valueOf();
cell.isSelected = isSelectedCell(cell);
}
}
return rows;
});
const focus = () => {
currentCellRef.value?.focus();
};
const getCellStyle = (cell) => {
const style = {};
const year = props.date.year();
const today = /* @__PURE__ */ new Date();
const month = cell.text;
style.disabled = props.disabled || (props.disabledDate ? datesInMonth(props.date, year, month, lang.value).every(props.disabledDate) : false);
style.current = castArray(props.parsedValue).some((date) => import_dayjs_min.default.isDayjs(date) && date.year() === year && date.month() === month);
style.today = today.getFullYear() === year && today.getMonth() === month;
if (cell.customClass) style[cell.customClass] = true;
if (cell.inRange) {
style["in-range"] = true;
if (cell.start) style["start-date"] = true;
if (cell.end) style["end-date"] = true;
}
return style;
};
const isSelectedCell = (cell) => {
const year = props.date.year();
const month = cell.text;
return castArray(props.date).some((date) => date.year() === year && date.month() === month);
};
const handleMouseMove = (event) => {
if (!props.rangeState.selecting) return;
let target = event.target;
if (target.tagName === "SPAN") target = target.parentNode?.parentNode;
if (target.tagName === "DIV") target = target.parentNode;
if (target.tagName !== "TD") return;
const row = target.parentNode.rowIndex;
const column = target.cellIndex;
if (rows.value[row][column].disabled) return;
if (row !== lastRow.value || column !== lastColumn.value) {
lastRow.value = row;
lastColumn.value = column;
emit("changerange", {
selecting: true,
endDate: props.date.startOf("year").month(row * 4 + column)
});
}
};
const handleMonthTableClick = (event) => {
if (props.disabled) return;
const target = event.target?.closest("td");
if (target?.tagName !== "TD") return;
if (hasClass(target, "disabled")) return;
const column = target.cellIndex;
const month = target.parentNode.rowIndex * 4 + column;
const newDate = props.date.startOf("year").month(month);
if (props.selectionMode === "months") {
if (event.type === "keydown") {
emit("pick", castArray(props.parsedValue), false);
return;
}
const newMonth = getValidDateOfMonth(props.date, props.date.year(), month, lang.value, props.disabledDate);
emit("pick", hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => d?.year() !== newMonth.year() || d?.month() !== newMonth.month()) : castArray(props.parsedValue).concat([(0, import_dayjs_min.default)(newMonth)]));
} else if (props.selectionMode === "range") if (!props.rangeState.selecting) {
emit("pick", {
minDate: newDate,
maxDate: null
});
emit("select", true);
} else {
if (props.minDate && newDate >= props.minDate) emit("pick", {
minDate: props.minDate,
maxDate: newDate
});
else emit("pick", {
minDate: newDate,
maxDate: props.minDate
});
emit("select", false);
}
else emit("pick", month);
};
(0, vue.watch)(() => props.date, async () => {
if (tbodyRef.value?.contains(document.activeElement)) {
await (0, vue.nextTick)();
currentCellRef.value?.focus();
}
});
__expose({ focus });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
role: "grid",
"aria-label": (0, vue.unref)(t)("el.datepicker.monthTablePrompt"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
onClick: handleMonthTableClick,
onMousemove: handleMouseMove
}, [(0, vue.createElementVNode)("tbody", {
ref_key: "tbodyRef",
ref: tbodyRef
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(rows.value, (row, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", { key }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, key_) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
key: key_,
ref_for: true,
ref: (el) => cell.isSelected && (currentCellRef.value = el),
class: (0, vue.normalizeClass)(getCellStyle(cell)),
"aria-selected": !!cell.isSelected,
"aria-label": (0, vue.unref)(t)(`el.datepicker.month${+cell.text + 1}`),
tabindex: cell.isSelected ? 0 : -1,
onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(handleMonthTableClick, ["prevent", "stop"]), ["space"]), (0, vue.withKeys)((0, vue.withModifiers)(handleMonthTableClick, ["prevent", "stop"]), ["enter"])]
}, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell: {
...cell,
renderText: (0, vue.unref)(t)("el.datepicker.months." + months.value[cell.text])
} }, null, 8, ["cell"])], 42, _hoisted_2$31);
}), 128))]);
}), 128))], 512)], 42, _hoisted_1$49);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-month-table.vue
var basic_month_table_default = basic_month_table_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/basic-year-table.ts
const basicYearTableProps = buildProps({
...datePickerSharedProps,
selectionMode: selectionModeWithDefault("year")
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-year-table.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$48 = ["aria-label"];
const _hoisted_2$30 = [
"aria-selected",
"aria-label",
"tabindex",
"onKeydown"
];
var basic_year_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "basic-year-table",
props: basicYearTableProps,
emits: [
"changerange",
"pick",
"select"
],
setup(__props, { expose: __expose, emit: __emit }) {
const datesInYear = (year, lang) => {
const firstDay = (0, import_dayjs_min.default)(String(year)).locale(lang).startOf("year");
return rangeArr(firstDay.endOf("year").dayOfYear()).map((n) => firstDay.add(n, "day").toDate());
};
const props = __props;
const emit = __emit;
const ns = useNamespace("year-table");
const { t, lang } = useLocale();
const tbodyRef = (0, vue.ref)();
const currentCellRef = (0, vue.ref)();
const startYear = (0, vue.computed)(() => {
return Math.floor(props.date.year() / 10) * 10;
});
const tableRows = (0, vue.ref)([
[],
[],
[]
]);
const lastRow = (0, vue.ref)();
const lastColumn = (0, vue.ref)();
const rows = (0, vue.computed)(() => {
const rows = tableRows.value;
const now = (0, import_dayjs_min.default)().locale(lang.value).startOf("year");
for (let i = 0; i < 3; i++) {
const row = rows[i];
for (let j = 0; j < 4; j++) {
if (i * 4 + j >= 10) break;
let cell = row[j];
if (!cell) cell = {
row: i,
column: j,
type: "normal",
inRange: false,
start: false,
end: false,
text: -1,
disabled: false,
isSelected: false,
customClass: void 0,
date: void 0,
dayjs: void 0,
isCurrent: void 0,
selected: void 0,
renderText: void 0,
timestamp: void 0
};
cell.type = "normal";
const index = i * 4 + j + startYear.value;
const calTime = (0, import_dayjs_min.default)().year(index);
const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null;
cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "year") && calEndDate && calTime.isSameOrBefore(calEndDate, "year")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "year") && calEndDate && calTime.isSameOrAfter(calEndDate, "year"));
if (props.minDate?.isSameOrAfter(calEndDate)) {
cell.start = !!(calEndDate && calTime.isSame(calEndDate, "year"));
cell.end = !!(props.minDate && calTime.isSame(props.minDate, "year"));
} else {
cell.start = !!(props.minDate && calTime.isSame(props.minDate, "year"));
cell.end = !!(calEndDate && calTime.isSame(calEndDate, "year"));
}
if (now.isSame(calTime)) cell.type = "today";
cell.text = index;
const cellDate = calTime.toDate();
cell.disabled = props.disabledDate?.(cellDate) || false;
cell.date = cellDate;
cell.customClass = props.cellClassName?.(cellDate);
cell.dayjs = calTime;
cell.timestamp = calTime.valueOf();
cell.isSelected = isSelectedCell(cell);
row[j] = cell;
}
}
return rows;
});
const focus = () => {
currentCellRef.value?.focus();
};
const getCellKls = (cell) => {
const kls = {};
const today = (0, import_dayjs_min.default)().locale(lang.value);
const year = cell.text;
kls.disabled = props.disabled || (props.disabledDate ? datesInYear(year, lang.value).every(props.disabledDate) : false);
kls.today = today.year() === year;
kls.current = castArray(props.parsedValue).some((d) => d.year() === year);
if (cell.customClass) kls[cell.customClass] = true;
if (cell.inRange) {
kls["in-range"] = true;
if (cell.start) kls["start-date"] = true;
if (cell.end) kls["end-date"] = true;
}
return kls;
};
const isSelectedCell = (cell) => {
const year = cell.text;
return castArray(props.date).some((date) => date.year() === year);
};
const handleYearTableClick = (event) => {
if (props.disabled) return;
const target = event.target?.closest("td");
if (!target || !target.textContent || hasClass(target, "disabled")) return;
const column = target.cellIndex;
const selectedYear = target.parentNode.rowIndex * 4 + column + startYear.value;
const newDate = (0, import_dayjs_min.default)().year(selectedYear);
if (props.selectionMode === "range") if (!props.rangeState.selecting) {
emit("pick", {
minDate: newDate,
maxDate: null
});
emit("select", true);
} else {
if (props.minDate && newDate >= props.minDate) emit("pick", {
minDate: props.minDate,
maxDate: newDate
});
else emit("pick", {
minDate: newDate,
maxDate: props.minDate
});
emit("select", false);
}
else if (props.selectionMode === "years") {
if (event.type === "keydown") {
emit("pick", castArray(props.parsedValue), false);
return;
}
const vaildYear = getValidDateOfYear(newDate.startOf("year"), lang.value, props.disabledDate);
emit("pick", hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => d?.year() !== selectedYear) : castArray(props.parsedValue).concat([vaildYear]));
} else emit("pick", selectedYear);
};
const handleMouseMove = (event) => {
if (!props.rangeState.selecting) return;
const target = event.target?.closest("td");
if (!target) return;
const row = target.parentNode.rowIndex;
const column = target.cellIndex;
if (rows.value[row][column].disabled) return;
if (row !== lastRow.value || column !== lastColumn.value) {
lastRow.value = row;
lastColumn.value = column;
emit("changerange", {
selecting: true,
endDate: (0, import_dayjs_min.default)().year(startYear.value).add(row * 4 + column, "year")
});
}
};
(0, vue.watch)(() => props.date, async () => {
if (tbodyRef.value?.contains(document.activeElement)) {
await (0, vue.nextTick)();
currentCellRef.value?.focus();
}
});
__expose({ focus });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
role: "grid",
"aria-label": (0, vue.unref)(t)("el.datepicker.yearTablePrompt"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
onClick: handleYearTableClick,
onMousemove: handleMouseMove
}, [(0, vue.createElementVNode)("tbody", {
ref_key: "tbodyRef",
ref: tbodyRef
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(rows.value, (row, rowKey) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", { key: rowKey }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, cellKey) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
key: `${rowKey}_${cellKey}`,
ref_for: true,
ref: (el) => cell.isSelected && (currentCellRef.value = el),
class: (0, vue.normalizeClass)(["available", getCellKls(cell)]),
"aria-selected": cell.isSelected,
"aria-label": String(cell.text),
tabindex: cell.isSelected ? 0 : -1,
onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(handleYearTableClick, ["prevent", "stop"]), ["space"]), (0, vue.withKeys)((0, vue.withModifiers)(handleYearTableClick, ["prevent", "stop"]), ["enter"])]
}, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell }, null, 8, ["cell"])], 42, _hoisted_2$30);
}), 128))]);
}), 128))], 512)], 42, _hoisted_1$48);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-year-table.vue
var basic_year_table_default = basic_year_table_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$47 = ["disabled", "onClick"];
const _hoisted_2$29 = ["aria-label", "disabled"];
const _hoisted_3$14 = ["aria-label", "disabled"];
const _hoisted_4$11 = ["tabindex", "aria-disabled"];
const _hoisted_5$8 = ["tabindex", "aria-disabled"];
const _hoisted_6$3 = ["aria-label", "disabled"];
const _hoisted_7$2 = ["aria-label", "disabled"];
var panel_date_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "panel-date-pick",
props: panelDatePickProps,
emits: [
"pick",
"set-picker-option",
"panel-change"
],
setup(__props, { emit: __emit }) {
const timeWithinRange = (_, __, ___) => true;
const props = __props;
const contextEmit = __emit;
const ppNs = useNamespace("picker-panel");
const dpNs = useNamespace("date-picker");
const attrs = (0, vue.useAttrs)();
const slots = (0, vue.useSlots)();
const { t, lang } = useLocale();
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
const { shortcuts, disabledDate, cellClassName, defaultTime } = pickerBase.props;
const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
const currentViewRef = (0, vue.ref)();
const innerDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
const isChangeToNow = (0, vue.ref)(false);
let isShortcut = false;
const defaultTimeD = (0, vue.computed)(() => {
return (0, import_dayjs_min.default)(defaultTime).locale(lang.value);
});
const month = (0, vue.computed)(() => {
return innerDate.value.month();
});
const year = (0, vue.computed)(() => {
return innerDate.value.year();
});
const selectableRange = (0, vue.ref)([]);
const userInputDate = (0, vue.ref)(null);
const userInputTime = (0, vue.ref)(null);
const checkDateWithinRange = (date) => {
return selectableRange.value.length > 0 ? timeWithinRange(date, selectableRange.value, props.format || DEFAULT_FORMATS_TIME) : true;
};
const formatEmit = (emitDayjs) => {
if (defaultTime && !visibleTime.value && !isChangeToNow.value && !isShortcut) return defaultTimeD.value.year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date());
if (showTime.value) return emitDayjs.millisecond(0);
return emitDayjs.startOf("day");
};
const emit = (value, ...args) => {
if (!value) contextEmit("pick", value, ...args);
else if (isArray$1(value)) contextEmit("pick", value.map(formatEmit), ...args);
else contextEmit("pick", formatEmit(value), ...args);
userInputDate.value = null;
userInputTime.value = null;
isChangeToNow.value = false;
isShortcut = false;
};
const handleDatePick = async (value, keepOpen) => {
if (selectionMode.value === "date" && import_dayjs_min.default.isDayjs(value)) {
const parsedDateValue = extractFirst(props.parsedValue);
let newDate = parsedDateValue ? parsedDateValue.year(value.year()).month(value.month()).date(value.date()) : value;
if (!checkDateWithinRange(newDate)) newDate = selectableRange.value[0][0].year(value.year()).month(value.month()).date(value.date());
innerDate.value = newDate;
emit(newDate, showTime.value || keepOpen);
} else if (selectionMode.value === "week") emit(value.date);
else if (selectionMode.value === "dates") emit(value, true);
};
const moveByMonth = (forward) => {
const action = forward ? "add" : "subtract";
innerDate.value = innerDate.value[action](1, "month");
handlePanelChange("month");
};
const moveByYear = (forward) => {
const currentDate = innerDate.value;
const action = forward ? "add" : "subtract";
innerDate.value = currentView.value === "year" ? currentDate[action](10, "year") : currentDate[action](1, "year");
handlePanelChange("year");
};
const currentView = (0, vue.ref)("date");
const yearLabel = (0, vue.computed)(() => {
const yearTranslation = t("el.datepicker.year");
if (currentView.value === "year") {
const startYear = Math.floor(year.value / 10) * 10;
if (yearTranslation) return `${startYear} ${yearTranslation} - ${startYear + 9} ${yearTranslation}`;
return `${startYear} - ${startYear + 9}`;
}
return `${year.value} ${yearTranslation}`;
});
const handleShortcutClick = (shortcut) => {
const shortcutValue = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value;
if (shortcutValue) {
isShortcut = true;
emit((0, import_dayjs_min.default)(shortcutValue).locale(lang.value));
return;
}
if (shortcut.onClick) shortcut.onClick({
attrs,
slots,
emit: contextEmit
});
};
const selectionMode = (0, vue.computed)(() => {
const { type } = props;
if ([
"week",
"month",
"months",
"year",
"years",
"dates"
].includes(type)) return type;
return "date";
});
const isMultipleType = (0, vue.computed)(() => {
return selectionMode.value === "dates" || selectionMode.value === "months" || selectionMode.value === "years";
});
const keyboardMode = (0, vue.computed)(() => {
return selectionMode.value === "date" ? currentView.value : selectionMode.value;
});
const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
const handleMonthPick = async (month, keepOpen) => {
if (selectionMode.value === "month") {
innerDate.value = getValidDateOfMonth(innerDate.value, innerDate.value.year(), month, lang.value, disabledDate);
emit(innerDate.value, false);
} else if (selectionMode.value === "months") emit(month, keepOpen ?? true);
else {
innerDate.value = getValidDateOfMonth(innerDate.value, innerDate.value.year(), month, lang.value, disabledDate);
currentView.value = "date";
if ([
"month",
"year",
"date",
"week"
].includes(selectionMode.value)) {
emit(innerDate.value, true);
await (0, vue.nextTick)();
handleFocusPicker();
}
}
handlePanelChange("month");
};
const handleYearPick = async (year, keepOpen) => {
if (selectionMode.value === "year") {
innerDate.value = getValidDateOfYear(innerDate.value.startOf("year").year(year), lang.value, disabledDate);
emit(innerDate.value, false);
} else if (selectionMode.value === "years") emit(year, keepOpen ?? true);
else {
innerDate.value = getValidDateOfYear(innerDate.value.year(year), lang.value, disabledDate);
currentView.value = "month";
if ([
"month",
"year",
"date",
"week"
].includes(selectionMode.value)) {
emit(innerDate.value, true);
await (0, vue.nextTick)();
handleFocusPicker();
}
}
handlePanelChange("year");
};
const dateDisabled = useFormDisabled();
const showPicker = async (view) => {
if (dateDisabled.value) return;
currentView.value = view;
await (0, vue.nextTick)();
handleFocusPicker();
};
const showTime = (0, vue.computed)(() => props.type === "datetime" || props.type === "datetimerange");
const footerVisible = (0, vue.computed)(() => {
const showDateFooter = showTime.value || selectionMode.value === "dates";
const showYearFooter = selectionMode.value === "years";
const showMonthFooter = selectionMode.value === "months";
const isDateView = currentView.value === "date";
const isYearView = currentView.value === "year";
const isMonthView = currentView.value === "month";
return showDateFooter && isDateView || showYearFooter && isYearView || showMonthFooter && isMonthView;
});
const footerFilled = (0, vue.computed)(() => !isMultipleType.value && props.showNow || props.showConfirm);
const disabledConfirm = (0, vue.computed)(() => {
if (!disabledDate) return false;
if (!props.parsedValue) return true;
if (isArray$1(props.parsedValue)) return disabledDate(props.parsedValue[0].toDate());
return disabledDate(props.parsedValue.toDate());
});
const onConfirm = () => {
if (isMultipleType.value) emit(props.parsedValue);
else {
let result = extractFirst(props.parsedValue);
if (!result) {
const defaultTimeD = (0, import_dayjs_min.default)(defaultTime).locale(lang.value);
const defaultValueD = getDefaultValue();
result = defaultTimeD.year(defaultValueD.year()).month(defaultValueD.month()).date(defaultValueD.date());
}
innerDate.value = result;
emit(result);
}
};
const disabledNow = (0, vue.computed)(() => {
if (!disabledDate) return false;
return disabledDate((0, import_dayjs_min.default)().locale(lang.value).toDate());
});
const changeToNow = () => {
const nowDate = (0, import_dayjs_min.default)().locale(lang.value).toDate();
isChangeToNow.value = true;
if ((!disabledDate || !disabledDate(nowDate)) && checkDateWithinRange(nowDate)) {
innerDate.value = (0, import_dayjs_min.default)().locale(lang.value);
emit(innerDate.value);
}
};
const timeFormat = (0, vue.computed)(() => {
return props.timeFormat || extractTimeFormat(props.format) || DEFAULT_FORMATS_TIME;
});
const dateFormat = (0, vue.computed)(() => {
return props.dateFormat || extractDateFormat(props.format) || DEFAULT_FORMATS_DATE;
});
const visibleTime = (0, vue.computed)(() => {
if (userInputTime.value) return userInputTime.value;
if (!props.parsedValue && !defaultValue.value) return;
return (extractFirst(props.parsedValue) || innerDate.value).format(timeFormat.value);
});
const visibleDate = (0, vue.computed)(() => {
if (userInputDate.value) return userInputDate.value;
if (!props.parsedValue && !defaultValue.value) return;
return (extractFirst(props.parsedValue) || innerDate.value).format(dateFormat.value);
});
const timePickerVisible = (0, vue.ref)(false);
const onTimePickerInputFocus = () => {
timePickerVisible.value = true;
};
const handleTimePickClose = () => {
timePickerVisible.value = false;
};
const getUnits = (date) => {
return {
hour: date.hour(),
minute: date.minute(),
second: date.second(),
year: date.year(),
month: date.month(),
date: date.date()
};
};
const handleTimePick = (value, visible, first) => {
const { hour, minute, second } = getUnits(value);
const parsedDateValue = extractFirst(props.parsedValue);
innerDate.value = parsedDateValue ? parsedDateValue.hour(hour).minute(minute).second(second) : value;
emit(innerDate.value, true);
if (!first) timePickerVisible.value = visible;
};
const handleVisibleTimeChange = (value) => {
const newDate = (0, import_dayjs_min.default)(value, timeFormat.value).locale(lang.value);
if (newDate.isValid() && checkDateWithinRange(newDate)) {
const { year, month, date } = getUnits(innerDate.value);
innerDate.value = newDate.year(year).month(month).date(date);
userInputTime.value = null;
timePickerVisible.value = false;
emit(innerDate.value, true);
}
};
const handleVisibleDateChange = (value) => {
const newDate = correctlyParseUserInput(value, dateFormat.value, lang.value, isDefaultFormat);
if (newDate.isValid()) {
if (disabledDate && disabledDate(newDate.toDate())) return;
const { hour, minute, second } = getUnits(innerDate.value);
innerDate.value = newDate.hour(hour).minute(minute).second(second);
userInputDate.value = null;
emit(innerDate.value, true);
}
};
const isValidValue = (date) => {
return import_dayjs_min.default.isDayjs(date) && date.isValid() && (disabledDate ? !disabledDate(date.toDate()) : true);
};
const parseUserInput = (value) => {
return correctlyParseUserInput(value, props.format, lang.value, isDefaultFormat);
};
const getDefaultValue = () => {
const parseDate = (0, import_dayjs_min.default)(defaultValue.value).locale(lang.value);
if (!defaultValue.value) {
const defaultTimeDValue = defaultTimeD.value;
return (0, import_dayjs_min.default)().hour(defaultTimeDValue.hour()).minute(defaultTimeDValue.minute()).second(defaultTimeDValue.second()).locale(lang.value);
}
return parseDate;
};
const handleFocusPicker = () => {
if ([
"week",
"month",
"year",
"date"
].includes(selectionMode.value)) currentViewRef.value?.focus();
};
const _handleFocusPicker = () => {
handleFocusPicker();
if (selectionMode.value === "week") handleKeyControl(EVENT_CODE.down);
};
const handleKeydownTable = (event) => {
const code = getEventCode(event);
if ([
EVENT_CODE.up,
EVENT_CODE.down,
EVENT_CODE.left,
EVENT_CODE.right,
EVENT_CODE.home,
EVENT_CODE.end,
EVENT_CODE.pageUp,
EVENT_CODE.pageDown
].includes(code)) {
handleKeyControl(code);
event.stopPropagation();
event.preventDefault();
}
if ([
EVENT_CODE.enter,
EVENT_CODE.space,
EVENT_CODE.numpadEnter
].includes(code) && userInputDate.value === null && userInputTime.value === null) {
event.preventDefault();
emit(innerDate.value, false);
}
};
const handleKeyControl = (code) => {
const { up, down, left, right, home, end, pageUp, pageDown } = EVENT_CODE;
const mapping = {
year: {
[up]: -4,
[down]: 4,
[left]: -1,
[right]: 1,
offset: (date, step) => date.setFullYear(date.getFullYear() + step)
},
month: {
[up]: -4,
[down]: 4,
[left]: -1,
[right]: 1,
offset: (date, step) => date.setMonth(date.getMonth() + step)
},
week: {
[up]: -1,
[down]: 1,
[left]: -1,
[right]: 1,
offset: (date, step) => date.setDate(date.getDate() + step * 7)
},
date: {
[up]: -7,
[down]: 7,
[left]: -1,
[right]: 1,
[home]: (date) => -date.getDay(),
[end]: (date) => -date.getDay() + 6,
[pageUp]: (date) => -new Date(date.getFullYear(), date.getMonth(), 0).getDate(),
[pageDown]: (date) => new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(),
offset: (date, step) => date.setDate(date.getDate() + step)
}
};
const newDate = innerDate.value.toDate();
while (Math.abs(innerDate.value.diff(newDate, "year", true)) < 1) {
const map = mapping[keyboardMode.value];
if (!map) return;
map.offset(newDate, isFunction$1(map[code]) ? map[code](newDate) : map[code] ?? 0);
if (disabledDate && disabledDate(newDate)) break;
const result = (0, import_dayjs_min.default)(newDate).locale(lang.value);
innerDate.value = result;
contextEmit("pick", result, true);
break;
}
};
const handlePanelChange = (mode) => {
contextEmit("panel-change", innerDate.value.toDate(), mode, currentView.value);
};
(0, vue.watch)(() => selectionMode.value, (val) => {
if (["month", "year"].includes(val)) {
currentView.value = val;
return;
} else if (val === "years") {
currentView.value = "year";
return;
} else if (val === "months") {
currentView.value = "month";
return;
}
currentView.value = "date";
}, { immediate: true });
(0, vue.watch)(() => defaultValue.value, (val) => {
if (val) innerDate.value = getDefaultValue();
}, { immediate: true });
(0, vue.watch)(() => props.parsedValue, (val) => {
if (val) {
if (isMultipleType.value) return;
if (isArray$1(val)) return;
innerDate.value = val;
} else innerDate.value = getDefaultValue();
}, { immediate: true });
contextEmit("set-picker-option", ["isValidValue", isValidValue]);
contextEmit("set-picker-option", ["parseUserInput", parseUserInput]);
contextEmit("set-picker-option", ["handleFocusPicker", _handleFocusPicker]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ppNs).b(),
(0, vue.unref)(dpNs).b(),
(0, vue.unref)(ppNs).is("border", _ctx.border),
(0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(dateDisabled)),
{
"has-sidebar": _ctx.$slots.sidebar || hasShortcuts.value,
"has-time": showTime.value
}
]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
(0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key,
type: "button",
disabled: (0, vue.unref)(dateDisabled),
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
onClick: ($event) => handleShortcutClick(shortcut)
}, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$47);
}), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [
showTime.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("time-header"))
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("editor-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
placeholder: (0, vue.unref)(t)("el.datepicker.selectDate"),
"model-value": visibleDate.value,
size: "small",
"validate-event": false,
disabled: (0, vue.unref)(dateDisabled),
readonly: !_ctx.editable,
onInput: _cache[0] || (_cache[0] = (val) => userInputDate.value = val),
onChange: handleVisibleDateChange
}, null, 8, [
"placeholder",
"model-value",
"disabled",
"readonly"
])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("editor-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
placeholder: (0, vue.unref)(t)("el.datepicker.selectTime"),
"model-value": visibleTime.value,
size: "small",
"validate-event": false,
disabled: (0, vue.unref)(dateDisabled),
readonly: !_ctx.editable,
onFocus: onTimePickerInputFocus,
onInput: _cache[1] || (_cache[1] = (val) => userInputTime.value = val),
onChange: handleVisibleTimeChange
}, null, 8, [
"placeholder",
"model-value",
"disabled",
"readonly"
]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
visible: timePickerVisible.value,
format: timeFormat.value,
"parsed-value": innerDate.value,
onPick: handleTimePick
}, null, 8, [
"visible",
"format",
"parsed-value"
])], 2)), [[(0, vue.unref)(ClickOutside), handleTimePickClose]])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(dpNs).e("header"), (currentView.value === "year" || currentView.value === "month") && (0, vue.unref)(dpNs).em("header", "bordered")]) }, [
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("prev-btn")) }, [(0, vue.createElementVNode)("button", {
type: "button",
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
class: (0, vue.normalizeClass)(["d-arrow-left", (0, vue.unref)(ppNs).e("icon-btn")]),
disabled: (0, vue.unref)(dateDisabled),
onClick: _cache[2] || (_cache[2] = ($event) => moveByYear(false))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_2$29), (0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-left"]),
disabled: (0, vue.unref)(dateDisabled),
onClick: _cache[3] || (_cache[3] = ($event) => moveByMonth(false))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
})])], 10, _hoisted_3$14), [[vue.vShow, currentView.value === "date"]])], 2),
(0, vue.createElementVNode)("span", {
role: "button",
class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("header-label")),
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
onKeydown: _cache[4] || (_cache[4] = (0, vue.withKeys)(($event) => showPicker("year"), ["enter"])),
onClick: _cache[5] || (_cache[5] = ($event) => showPicker("year"))
}, (0, vue.toDisplayString)(yearLabel.value), 43, _hoisted_4$11),
(0, vue.withDirectives)((0, vue.createElementVNode)("span", {
role: "button",
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
class: (0, vue.normalizeClass)([(0, vue.unref)(dpNs).e("header-label"), { active: currentView.value === "month" }]),
onKeydown: _cache[6] || (_cache[6] = (0, vue.withKeys)(($event) => showPicker("month"), ["enter"])),
onClick: _cache[7] || (_cache[7] = ($event) => showPicker("month"))
}, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${month.value + 1}`)), 43, _hoisted_5$8), [[vue.vShow, currentView.value === "date"]]),
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("next-btn")) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-right"]),
disabled: (0, vue.unref)(dateDisabled),
onClick: _cache[8] || (_cache[8] = ($event) => moveByMonth(true))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})])], 10, _hoisted_6$3), [[vue.vShow, currentView.value === "date"]]), (0, vue.createElementVNode)("button", {
type: "button",
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
disabled: (0, vue.unref)(dateDisabled),
onClick: _cache[9] || (_cache[9] = ($event) => moveByYear(true))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_7$2)], 2)
], 2), [[vue.vShow, currentView.value !== "time"]]),
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("content")),
onKeydown: handleKeydownTable
}, [
currentView.value === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
key: 0,
ref_key: "currentViewRef",
ref: currentViewRef,
"selection-mode": selectionMode.value,
date: innerDate.value,
"parsed-value": _ctx.parsedValue,
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(dateDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
"show-week-number": _ctx.showWeekNumber,
onPick: handleDatePick
}, null, 8, [
"selection-mode",
"date",
"parsed-value",
"disabled-date",
"disabled",
"cell-class-name",
"show-week-number"
])) : (0, vue.createCommentVNode)("v-if", true),
currentView.value === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
key: 1,
ref_key: "currentViewRef",
ref: currentViewRef,
"selection-mode": selectionMode.value,
date: innerDate.value,
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(dateDisabled),
"parsed-value": _ctx.parsedValue,
"cell-class-name": (0, vue.unref)(cellClassName),
onPick: handleYearPick
}, null, 8, [
"selection-mode",
"date",
"disabled-date",
"disabled",
"parsed-value",
"cell-class-name"
])) : (0, vue.createCommentVNode)("v-if", true),
currentView.value === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
key: 2,
ref_key: "currentViewRef",
ref: currentViewRef,
"selection-mode": selectionMode.value,
date: innerDate.value,
"parsed-value": _ctx.parsedValue,
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(dateDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
onPick: handleMonthPick
}, null, 8, [
"selection-mode",
"date",
"parsed-value",
"disabled-date",
"disabled",
"cell-class-name"
])) : (0, vue.createCommentVNode)("v-if", true)
], 34)
], 2)
], 2), _ctx.showFooter && footerVisible.value && footerFilled.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("footer"))
}, [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElButton), {
text: "",
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
disabled: disabledNow.value,
onClick: changeToNow
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.now")), 1)]),
_: 1
}, 8, ["class", "disabled"]), [[vue.vShow, !isMultipleType.value && _ctx.showNow]]), _ctx.showConfirm ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
key: 0,
plain: "",
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
disabled: disabledConfirm.value,
onClick: onConfirm
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 1)]),
_: 1
}, 8, ["class", "disabled"])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue
var panel_date_pick_default = panel_date_pick_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/panel-date-range.ts
const panelDateRangeProps = buildProps({
...panelSharedProps,
...panelRangeSharedProps
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-shortcut.ts
const useShortcut = (lang) => {
const { emit } = (0, vue.getCurrentInstance)();
const attrs = (0, vue.useAttrs)();
const slots = (0, vue.useSlots)();
const handleShortcutClick = (shortcut) => {
const shortcutValues = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value;
if (shortcutValues) {
emit("pick", [(0, import_dayjs_min.default)(shortcutValues[0]).locale(lang.value), (0, import_dayjs_min.default)(shortcutValues[1]).locale(lang.value)]);
return;
}
if (shortcut.onClick) shortcut.onClick({
attrs,
slots,
emit
});
};
return handleShortcutClick;
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-range-picker.ts
const useRangePicker = (props, { defaultValue, defaultTime, leftDate, rightDate, step, unit, sortDates }) => {
const { emit } = (0, vue.getCurrentInstance)();
const { pickerNs } = (0, vue.inject)(ROOT_PICKER_INJECTION_KEY);
const drpNs = useNamespace("date-range-picker");
const { t, lang } = useLocale();
const handleShortcutClick = useShortcut(lang);
const minDate = (0, vue.ref)();
const maxDate = (0, vue.ref)();
const rangeState = (0, vue.ref)({
endDate: null,
selecting: false
});
const handleChangeRange = (val) => {
rangeState.value = val;
};
const handleRangeConfirm = (visible = false) => {
const _minDate = (0, vue.unref)(minDate);
const _maxDate = (0, vue.unref)(maxDate);
if (isValidRange([_minDate, _maxDate])) emit("pick", [_minDate, _maxDate], visible);
};
const onSelect = (selecting) => {
rangeState.value.selecting = selecting;
if (!selecting) rangeState.value.endDate = null;
};
const parseValue = (parsedValue) => {
if (isArray$1(parsedValue) && parsedValue.length === 2) {
const [start, end] = parsedValue;
minDate.value = start;
leftDate.value = start;
maxDate.value = end;
sortDates((0, vue.unref)(minDate), (0, vue.unref)(maxDate));
} else restoreDefault();
};
const restoreDefault = () => {
let [start, end] = getDefaultValue((0, vue.unref)(defaultValue), {
lang: (0, vue.unref)(lang),
step,
unit,
unlinkPanels: props.unlinkPanels
});
const getShift = (day) => {
return day.diff(day.startOf("d"), "ms");
};
const maybeTimes = (0, vue.unref)(defaultTime);
if (maybeTimes) {
let leftShift = 0;
let rightShift = 0;
if (isArray$1(maybeTimes)) {
const [timeStart, timeEnd] = maybeTimes.map(import_dayjs_min.default);
leftShift = getShift(timeStart);
rightShift = getShift(timeEnd);
} else {
const shift = getShift((0, import_dayjs_min.default)(maybeTimes));
leftShift = shift;
rightShift = shift;
}
start = start.startOf("d").add(leftShift, "ms");
end = end.startOf("d").add(rightShift, "ms");
}
minDate.value = void 0;
maxDate.value = void 0;
leftDate.value = start;
rightDate.value = end;
};
(0, vue.watch)(defaultValue, (val) => {
if (val) restoreDefault();
}, { immediate: true });
(0, vue.watch)(() => props.parsedValue, (parsedValue) => {
if (!parsedValue?.length || !isEqual$1(parsedValue, [minDate.value, maxDate.value])) parseValue(parsedValue);
}, { immediate: true });
(0, vue.watch)(() => props.visible, () => {
if (props.visible) parseValue(props.parsedValue);
}, { immediate: true });
return {
minDate,
maxDate,
rangeState,
lang,
ppNs: pickerNs,
drpNs,
handleChangeRange,
handleRangeConfirm,
handleShortcutClick,
onSelect,
parseValue,
t
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-panel-date-range.ts
const usePanelDateRange = (props, emit, leftDate, rightDate) => {
const leftCurrentView = (0, vue.ref)("date");
const leftCurrentViewRef = (0, vue.ref)();
const rightCurrentView = (0, vue.ref)("date");
const rightCurrentViewRef = (0, vue.ref)();
const { disabledDate } = (0, vue.inject)(PICKER_BASE_INJECTION_KEY).props;
const { t, lang } = useLocale();
const leftYear = (0, vue.computed)(() => {
return leftDate.value.year();
});
const leftMonth = (0, vue.computed)(() => {
return leftDate.value.month();
});
const rightYear = (0, vue.computed)(() => {
return rightDate.value.year();
});
const rightMonth = (0, vue.computed)(() => {
return rightDate.value.month();
});
function computedYearLabel(currentView, yearValue) {
const yearTranslation = t("el.datepicker.year");
if (currentView.value === "year") {
const startYear = Math.floor(yearValue.value / 10) * 10;
return yearTranslation ? `${startYear} ${yearTranslation} - ${startYear + 9} ${yearTranslation}` : `${startYear} - ${startYear + 9}`;
}
return `${yearValue.value} ${yearTranslation}`;
}
function focusPicker(currentViewRef) {
currentViewRef?.focus();
}
async function showPicker(pickerType, view) {
if (props.disabled) return;
const currentView = pickerType === "left" ? leftCurrentView : rightCurrentView;
const currentViewRef = pickerType === "left" ? leftCurrentViewRef : rightCurrentViewRef;
currentView.value = view;
await (0, vue.nextTick)();
focusPicker(currentViewRef.value);
}
async function handlePick(mode, pickerType, value) {
if (props.disabled) return;
const isLeftPicker = pickerType === "left";
const startDate = isLeftPicker ? leftDate : rightDate;
const endDate = isLeftPicker ? rightDate : leftDate;
const currentView = isLeftPicker ? leftCurrentView : rightCurrentView;
const currentViewRef = isLeftPicker ? leftCurrentViewRef : rightCurrentViewRef;
if (mode === "year") startDate.value = getValidDateOfYear(startDate.value.year(value), lang.value, disabledDate);
if (mode === "month") startDate.value = getValidDateOfMonth(startDate.value, startDate.value.year(), value, lang.value, disabledDate);
if (!props.unlinkPanels) endDate.value = pickerType === "left" ? startDate.value.add(1, "month") : startDate.value.subtract(1, "month");
currentView.value = mode === "year" ? "month" : "date";
await (0, vue.nextTick)();
focusPicker(currentViewRef.value);
handlePanelChange(mode);
}
function handlePanelChange(mode) {
emit("panel-change", [leftDate.value.toDate(), rightDate.value.toDate()], mode);
}
function adjustDateByView(currentView, date, forward) {
const action = forward ? "add" : "subtract";
return currentView === "year" ? date[action](10, "year") : date[action](1, "year");
}
return {
leftCurrentView,
rightCurrentView,
leftCurrentViewRef,
rightCurrentViewRef,
leftYear,
rightYear,
leftMonth,
rightMonth,
leftYearLabel: (0, vue.computed)(() => computedYearLabel(leftCurrentView, leftYear)),
rightYearLabel: (0, vue.computed)(() => computedYearLabel(rightCurrentView, rightYear)),
showLeftPicker: (view) => showPicker("left", view),
showRightPicker: (view) => showPicker("right", view),
handleLeftYearPick: (year) => handlePick("year", "left", year),
handleRightYearPick: (year) => handlePick("year", "right", year),
handleLeftMonthPick: (month) => handlePick("month", "left", month),
handleRightMonthPick: (month) => handlePick("month", "right", month),
handlePanelChange,
adjustDateByView
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-range.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$46 = ["disabled", "onClick"];
const _hoisted_2$28 = ["aria-label", "disabled"];
const _hoisted_3$13 = ["aria-label", "disabled"];
const _hoisted_4$10 = ["disabled", "aria-label"];
const _hoisted_5$7 = ["disabled", "aria-label"];
const _hoisted_6$2 = ["tabindex", "aria-disabled"];
const _hoisted_7$1 = ["tabindex", "aria-disabled"];
const _hoisted_8$1 = ["disabled", "aria-label"];
const _hoisted_9$1 = ["disabled", "aria-label"];
const _hoisted_10$1 = ["aria-label", "disabled"];
const _hoisted_11$1 = ["disabled", "aria-label"];
const _hoisted_12$1 = ["tabindex", "aria-disabled"];
const _hoisted_13$1 = ["tabindex", "aria-disabled"];
const unit$2 = "month";
var panel_date_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "panel-date-range",
props: panelDateRangeProps,
emits: [
"pick",
"set-picker-option",
"calendar-change",
"panel-change",
"clear"
],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
const { disabledDate, cellClassName, defaultTime, clearable } = pickerBase.props;
const format = (0, vue.toRef)(pickerBase.props, "format");
const shortcuts = (0, vue.toRef)(pickerBase.props, "shortcuts");
const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
const { lang } = useLocale();
const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(1, unit$2));
const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue, t } = useRangePicker(props, {
defaultValue,
defaultTime,
leftDate,
rightDate,
unit: unit$2,
sortDates
});
(0, vue.watch)(() => props.visible, (visible) => {
if (!visible && rangeState.value.selecting) {
parseValue(props.parsedValue);
onSelect(false);
}
});
const dateUserInput = (0, vue.ref)({
min: null,
max: null
});
const timeUserInput = (0, vue.ref)({
min: null,
max: null
});
const { leftCurrentView, rightCurrentView, leftCurrentViewRef, rightCurrentViewRef, leftYear, rightYear, leftMonth, rightMonth, leftYearLabel, rightYearLabel, showLeftPicker, showRightPicker, handleLeftYearPick, handleRightYearPick, handleLeftMonthPick, handleRightMonthPick, handlePanelChange, adjustDateByView } = usePanelDateRange(props, emit, leftDate, rightDate);
const hasShortcuts = (0, vue.computed)(() => !!shortcuts.value.length);
const minVisibleDate = (0, vue.computed)(() => {
if (dateUserInput.value.min !== null) return dateUserInput.value.min;
if (minDate.value) return minDate.value.format(dateFormat.value);
return "";
});
const maxVisibleDate = (0, vue.computed)(() => {
if (dateUserInput.value.max !== null) return dateUserInput.value.max;
if (maxDate.value || minDate.value) return (maxDate.value || minDate.value).format(dateFormat.value);
return "";
});
const minVisibleTime = (0, vue.computed)(() => {
if (timeUserInput.value.min !== null) return timeUserInput.value.min;
if (minDate.value) return minDate.value.format(timeFormat.value);
return "";
});
const maxVisibleTime = (0, vue.computed)(() => {
if (timeUserInput.value.max !== null) return timeUserInput.value.max;
if (maxDate.value || minDate.value) return (maxDate.value || minDate.value).format(timeFormat.value);
return "";
});
const timeFormat = (0, vue.computed)(() => {
return props.timeFormat || extractTimeFormat(format.value || "") || DEFAULT_FORMATS_TIME;
});
const dateFormat = (0, vue.computed)(() => {
return props.dateFormat || extractDateFormat(format.value || "") || DEFAULT_FORMATS_DATE;
});
const isValidValue = (date) => {
return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true);
};
const leftPrevYear = () => {
leftDate.value = adjustDateByView(leftCurrentView.value, leftDate.value, false);
if (!props.unlinkPanels) rightDate.value = leftDate.value.add(1, "month");
handlePanelChange("year");
};
const leftPrevMonth = () => {
leftDate.value = leftDate.value.subtract(1, "month");
if (!props.unlinkPanels) rightDate.value = leftDate.value.add(1, "month");
handlePanelChange("month");
};
const rightNextYear = () => {
if (!props.unlinkPanels) {
leftDate.value = adjustDateByView(rightCurrentView.value, leftDate.value, true);
rightDate.value = leftDate.value.add(1, "month");
} else rightDate.value = adjustDateByView(rightCurrentView.value, rightDate.value, true);
handlePanelChange("year");
};
const rightNextMonth = () => {
if (!props.unlinkPanels) {
leftDate.value = leftDate.value.add(1, "month");
rightDate.value = leftDate.value.add(1, "month");
} else rightDate.value = rightDate.value.add(1, "month");
handlePanelChange("month");
};
const leftNextYear = () => {
leftDate.value = adjustDateByView(leftCurrentView.value, leftDate.value, true);
handlePanelChange("year");
};
const leftNextMonth = () => {
leftDate.value = leftDate.value.add(1, "month");
handlePanelChange("month");
};
const rightPrevYear = () => {
rightDate.value = adjustDateByView(rightCurrentView.value, rightDate.value, false);
handlePanelChange("year");
};
const rightPrevMonth = () => {
rightDate.value = rightDate.value.subtract(1, "month");
handlePanelChange("month");
};
const enableMonthArrow = (0, vue.computed)(() => {
const nextMonth = (leftMonth.value + 1) % 12;
const yearOffset = leftMonth.value + 1 >= 12 ? 1 : 0;
return props.unlinkPanels && new Date(leftYear.value + yearOffset, nextMonth) < new Date(rightYear.value, rightMonth.value);
});
const enableYearArrow = (0, vue.computed)(() => {
return props.unlinkPanels && rightYear.value * 12 + rightMonth.value - (leftYear.value * 12 + leftMonth.value + 1) >= 12;
});
const dateRangeDisabled = useFormDisabled();
const btnDisabled = (0, vue.computed)(() => {
return !(minDate.value && maxDate.value && !rangeState.value.selecting && isValidRange([minDate.value, maxDate.value]) && !dateRangeDisabled.value);
});
const showTime = (0, vue.computed)(() => props.type === "datetime" || props.type === "datetimerange");
const formatEmit = (emitDayjs, index) => {
if (!emitDayjs) return;
if (defaultTime) return (0, import_dayjs_min.default)(defaultTime[index] || defaultTime).locale(lang.value).year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date());
return emitDayjs;
};
const handleRangePick = (val, close = true) => {
const min_ = val.minDate;
const max_ = val.maxDate;
const minDate_ = formatEmit(min_, 0);
const maxDate_ = formatEmit(max_, 1);
if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
emit("calendar-change", [min_.toDate(), max_ && max_.toDate()]);
maxDate.value = maxDate_;
minDate.value = minDate_;
if (!showTime.value && close) close = !minDate_ || !maxDate_;
handleRangeConfirm(close);
};
const minTimePickerVisible = (0, vue.ref)(false);
const maxTimePickerVisible = (0, vue.ref)(false);
const handleMinTimeClose = () => {
minTimePickerVisible.value = false;
};
const handleMaxTimeClose = () => {
maxTimePickerVisible.value = false;
};
const handleDateInput = (value, type) => {
dateUserInput.value[type] = value;
const parsedValueD = (0, import_dayjs_min.default)(value, dateFormat.value).locale(lang.value);
if (parsedValueD.isValid()) {
if (disabledDate && disabledDate(parsedValueD.toDate())) return;
if (type === "min") {
leftDate.value = parsedValueD;
minDate.value = (minDate.value || leftDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date());
if (!props.unlinkPanels && (!maxDate.value || maxDate.value.isBefore(minDate.value))) {
rightDate.value = parsedValueD.add(1, "month");
maxDate.value = minDate.value.add(1, "month");
}
} else {
rightDate.value = parsedValueD;
maxDate.value = (maxDate.value || rightDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date());
if (!props.unlinkPanels && (!minDate.value || minDate.value.isAfter(maxDate.value))) {
leftDate.value = parsedValueD.subtract(1, "month");
minDate.value = maxDate.value.subtract(1, "month");
}
}
sortDates(minDate.value, maxDate.value);
handleRangeConfirm(true);
}
};
const handleDateChange = (_, type) => {
dateUserInput.value[type] = null;
};
const handleTimeInput = (value, type) => {
timeUserInput.value[type] = value;
const parsedValueD = (0, import_dayjs_min.default)(value, timeFormat.value).locale(lang.value);
if (parsedValueD.isValid()) if (type === "min") {
minTimePickerVisible.value = true;
minDate.value = (minDate.value || leftDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second());
leftDate.value = minDate.value;
} else {
maxTimePickerVisible.value = true;
maxDate.value = (maxDate.value || rightDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second());
rightDate.value = maxDate.value;
}
};
const handleTimeChange = (_value, type) => {
timeUserInput.value[type] = null;
if (type === "min") {
leftDate.value = minDate.value;
minTimePickerVisible.value = false;
if (!maxDate.value || maxDate.value.isBefore(minDate.value)) maxDate.value = minDate.value;
} else {
rightDate.value = maxDate.value;
maxTimePickerVisible.value = false;
if (maxDate.value && maxDate.value.isBefore(minDate.value)) minDate.value = maxDate.value;
}
handleRangeConfirm(true);
};
const handleMinTimePick = (value, visible, first) => {
if (timeUserInput.value.min) return;
if (value) minDate.value = (minDate.value || leftDate.value).hour(value.hour()).minute(value.minute()).second(value.second());
if (!first) minTimePickerVisible.value = visible;
if (!maxDate.value || maxDate.value.isBefore(minDate.value)) {
maxDate.value = minDate.value;
rightDate.value = value;
(0, vue.nextTick)(() => {
parseValue(props.parsedValue);
});
}
handleRangeConfirm(true);
};
const handleMaxTimePick = (value, visible, first) => {
if (timeUserInput.value.max) return;
if (value) maxDate.value = (maxDate.value || rightDate.value).hour(value.hour()).minute(value.minute()).second(value.second());
if (!first) maxTimePickerVisible.value = visible;
if (maxDate.value && maxDate.value.isBefore(minDate.value)) minDate.value = maxDate.value;
handleRangeConfirm(true);
};
const onClear = () => {
handleClear();
emit("clear");
};
const handleClear = () => {
let valueOnClear = null;
if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
leftDate.value = getDefaultValue((0, vue.unref)(defaultValue), {
lang: (0, vue.unref)(lang),
unit: "month",
unlinkPanels: props.unlinkPanels
})[0];
rightDate.value = leftDate.value.add(1, "month");
maxDate.value = void 0;
minDate.value = void 0;
handleRangeConfirm(true);
emit("pick", valueOnClear);
};
const parseUserInput = (value) => {
return correctlyParseUserInput(value, format.value || "", lang.value, isDefaultFormat);
};
function sortDates(minDate, maxDate) {
if (props.unlinkPanels && maxDate) {
const minDateYear = minDate?.year() || 0;
const minDateMonth = minDate?.month() || 0;
const maxDateYear = maxDate.year();
const maxDateMonth = maxDate.month();
rightDate.value = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? maxDate.add(1, unit$2) : maxDate;
} else {
rightDate.value = leftDate.value.add(1, unit$2);
if (maxDate) rightDate.value = rightDate.value.hour(maxDate.hour()).minute(maxDate.minute()).second(maxDate.second());
}
}
emit("set-picker-option", ["isValidValue", isValidValue]);
emit("set-picker-option", ["parseUserInput", parseUserInput]);
emit("set-picker-option", ["handleClear", handleClear]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ppNs).b(),
(0, vue.unref)(drpNs).b(),
(0, vue.unref)(ppNs).is("border", _ctx.border),
(0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(dateRangeDisabled)),
{
"has-sidebar": _ctx.$slots.sidebar || hasShortcuts.value,
"has-time": showTime.value
}
]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
(0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(shortcuts.value, (shortcut, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key,
type: "button",
disabled: (0, vue.unref)(dateRangeDisabled),
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
}, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$46);
}), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [
showTime.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-header"))
}, [
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editors-wrap")) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
size: "small",
disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
placeholder: (0, vue.unref)(t)("el.datepicker.startDate"),
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
"model-value": minVisibleDate.value,
"validate-event": false,
readonly: !_ctx.editable,
onInput: _cache[0] || (_cache[0] = (val) => handleDateInput(val, "min")),
onChange: _cache[1] || (_cache[1] = (val) => handleDateChange(val, "min"))
}, null, 8, [
"disabled",
"placeholder",
"class",
"model-value",
"readonly"
])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
placeholder: (0, vue.unref)(t)("el.datepicker.startTime"),
"model-value": minVisibleTime.value,
"validate-event": false,
readonly: !_ctx.editable,
onFocus: _cache[2] || (_cache[2] = ($event) => minTimePickerVisible.value = true),
onInput: _cache[3] || (_cache[3] = (val) => handleTimeInput(val, "min")),
onChange: _cache[4] || (_cache[4] = (val) => handleTimeChange(val, "min"))
}, null, 8, [
"class",
"disabled",
"placeholder",
"model-value",
"readonly"
]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
visible: minTimePickerVisible.value,
format: timeFormat.value,
"datetime-role": "start",
"parsed-value": (0, vue.unref)(minDate) || leftDate.value,
onPick: handleMinTimePick
}, null, 8, [
"visible",
"format",
"parsed-value"
])], 2)), [[(0, vue.unref)(ClickOutside), handleMinTimeClose]])], 2),
(0, vue.createElementVNode)("span", null, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})]),
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("editors-wrap"), "is-right"]) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
placeholder: (0, vue.unref)(t)("el.datepicker.endDate"),
"model-value": maxVisibleDate.value,
readonly: !(0, vue.unref)(minDate) || !_ctx.editable,
"validate-event": false,
onInput: _cache[5] || (_cache[5] = (val) => handleDateInput(val, "max")),
onChange: _cache[6] || (_cache[6] = (val) => handleDateChange(val, "max"))
}, null, 8, [
"class",
"disabled",
"placeholder",
"model-value",
"readonly"
])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
placeholder: (0, vue.unref)(t)("el.datepicker.endTime"),
"model-value": maxVisibleTime.value,
readonly: !(0, vue.unref)(minDate) || !_ctx.editable,
"validate-event": false,
onFocus: _cache[7] || (_cache[7] = ($event) => (0, vue.unref)(minDate) && (maxTimePickerVisible.value = true)),
onInput: _cache[8] || (_cache[8] = (val) => handleTimeInput(val, "max")),
onChange: _cache[9] || (_cache[9] = (val) => handleTimeChange(val, "max"))
}, null, 8, [
"class",
"disabled",
"placeholder",
"model-value",
"readonly"
]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
"datetime-role": "end",
visible: maxTimePickerVisible.value,
format: timeFormat.value,
"parsed-value": (0, vue.unref)(maxDate) || rightDate.value,
onPick: handleMaxTimePick
}, null, 8, [
"visible",
"format",
"parsed-value"
])], 2)), [[(0, vue.unref)(ClickOutside), handleMaxTimeClose]])], 2)
], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-left"]) }, [
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-left"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
disabled: (0, vue.unref)(dateRangeDisabled),
onClick: leftPrevYear
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_2$28),
(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-left"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
disabled: (0, vue.unref)(dateRangeDisabled),
onClick: leftPrevMonth
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
})])], 10, _hoisted_3$13), [[vue.vShow, (0, vue.unref)(leftCurrentView) === "date"]]),
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled))], "d-arrow-right"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
onClick: leftNextYear
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_4$10)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.unlinkPanels && (0, vue.unref)(leftCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 1,
type: "button",
disabled: !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled))], "arrow-right"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
onClick: leftNextMonth
}, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})])], 10, _hoisted_5$7)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("span", {
role: "button",
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header-label")),
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
onKeydown: _cache[10] || (_cache[10] = (0, vue.withKeys)(($event) => (0, vue.unref)(showLeftPicker)("year"), ["enter"])),
onClick: _cache[11] || (_cache[11] = ($event) => (0, vue.unref)(showLeftPicker)("year"))
}, (0, vue.toDisplayString)((0, vue.unref)(leftYearLabel)), 43, _hoisted_6$2), (0, vue.withDirectives)((0, vue.createElementVNode)("span", {
role: "button",
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("header-label"), { active: (0, vue.unref)(leftCurrentView) === "month" }]),
onKeydown: _cache[12] || (_cache[12] = (0, vue.withKeys)(($event) => (0, vue.unref)(showLeftPicker)("month"), ["enter"])),
onClick: _cache[13] || (_cache[13] = ($event) => (0, vue.unref)(showLeftPicker)("month"))
}, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${leftDate.value.month() + 1}`)), 43, _hoisted_7$1), [[vue.vShow, (0, vue.unref)(leftCurrentView) === "date"]])])
], 2),
(0, vue.unref)(leftCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
key: 0,
ref_key: "leftCurrentViewRef",
ref: leftCurrentViewRef,
"selection-mode": "range",
date: leftDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
"cell-class-name": (0, vue.unref)(cellClassName),
"show-week-number": _ctx.showWeekNumber,
disabled: (0, vue.unref)(dateRangeDisabled),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"cell-class-name",
"show-week-number",
"disabled",
"onChangerange",
"onSelect"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(leftCurrentView) === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
key: 1,
ref_key: "leftCurrentViewRef",
ref: leftCurrentViewRef,
"selection-mode": "year",
date: leftDate.value,
"disabled-date": (0, vue.unref)(disabledDate),
"parsed-value": _ctx.parsedValue,
disabled: (0, vue.unref)(dateRangeDisabled),
onPick: (0, vue.unref)(handleLeftYearPick)
}, null, 8, [
"date",
"disabled-date",
"parsed-value",
"disabled",
"onPick"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(leftCurrentView) === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
key: 2,
ref_key: "leftCurrentViewRef",
ref: leftCurrentViewRef,
"selection-mode": "month",
date: leftDate.value,
"parsed-value": _ctx.parsedValue,
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(dateRangeDisabled),
onPick: (0, vue.unref)(handleLeftMonthPick)
}, null, 8, [
"date",
"parsed-value",
"disabled-date",
"disabled",
"onPick"
])) : (0, vue.createCommentVNode)("v-if", true)
], 2),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-right"]) }, [
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled))], "d-arrow-left"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
onClick: rightPrevYear
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_8$1)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.unlinkPanels && (0, vue.unref)(rightCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 1,
type: "button",
disabled: !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled))], "arrow-left"]),
"aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
onClick: rightPrevMonth
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
})])], 10, _hoisted_9$1)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("button", {
type: "button",
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
disabled: (0, vue.unref)(dateRangeDisabled),
onClick: rightNextYear
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_10$1),
(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-right"]),
disabled: (0, vue.unref)(dateRangeDisabled),
"aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
onClick: rightNextMonth
}, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})])], 10, _hoisted_11$1), [[vue.vShow, (0, vue.unref)(rightCurrentView) === "date"]]),
(0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("span", {
role: "button",
class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header-label")),
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
onKeydown: _cache[14] || (_cache[14] = (0, vue.withKeys)(($event) => (0, vue.unref)(showRightPicker)("year"), ["enter"])),
onClick: _cache[15] || (_cache[15] = ($event) => (0, vue.unref)(showRightPicker)("year"))
}, (0, vue.toDisplayString)((0, vue.unref)(rightYearLabel)), 43, _hoisted_12$1), (0, vue.withDirectives)((0, vue.createElementVNode)("span", {
role: "button",
"aria-live": "polite",
tabindex: _ctx.disabled ? void 0 : 0,
"aria-disabled": _ctx.disabled,
class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("header-label"), { active: (0, vue.unref)(rightCurrentView) === "month" }]),
onKeydown: _cache[16] || (_cache[16] = (0, vue.withKeys)(($event) => (0, vue.unref)(showRightPicker)("month"), ["enter"])),
onClick: _cache[17] || (_cache[17] = ($event) => (0, vue.unref)(showRightPicker)("month"))
}, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${rightDate.value.month() + 1}`)), 43, _hoisted_13$1), [[vue.vShow, (0, vue.unref)(rightCurrentView) === "date"]])])
], 2),
(0, vue.unref)(rightCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
key: 0,
ref_key: "rightCurrentViewRef",
ref: rightCurrentViewRef,
"selection-mode": "range",
date: rightDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
"cell-class-name": (0, vue.unref)(cellClassName),
"show-week-number": _ctx.showWeekNumber,
disabled: (0, vue.unref)(dateRangeDisabled),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"cell-class-name",
"show-week-number",
"disabled",
"onChangerange",
"onSelect"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(rightCurrentView) === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
key: 1,
ref_key: "rightCurrentViewRef",
ref: rightCurrentViewRef,
"selection-mode": "year",
date: rightDate.value,
"disabled-date": (0, vue.unref)(disabledDate),
"parsed-value": _ctx.parsedValue,
disabled: (0, vue.unref)(dateRangeDisabled),
onPick: (0, vue.unref)(handleRightYearPick)
}, null, 8, [
"date",
"disabled-date",
"parsed-value",
"disabled",
"onPick"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(rightCurrentView) === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
key: 2,
ref_key: "rightCurrentViewRef",
ref: rightCurrentViewRef,
"selection-mode": "month",
date: rightDate.value,
"parsed-value": _ctx.parsedValue,
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(dateRangeDisabled),
onPick: (0, vue.unref)(handleRightMonthPick)
}, null, 8, [
"date",
"parsed-value",
"disabled-date",
"disabled",
"onPick"
])) : (0, vue.createCommentVNode)("v-if", true)
], 2)
], 2)
], 2), _ctx.showFooter && showTime.value && (_ctx.showConfirm || (0, vue.unref)(clearable)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("footer"))
}, [(0, vue.unref)(clearable) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
key: 0,
text: "",
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
onClick: onClear
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.clear")), 1)]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), _ctx.showConfirm ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
key: 1,
plain: "",
size: "small",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
disabled: btnDisabled.value,
onClick: _cache[18] || (_cache[18] = ($event) => (0, vue.unref)(handleRangeConfirm)(false))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 1)]),
_: 1
}, 8, ["class", "disabled"])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-range.vue
var panel_date_range_default = panel_date_range_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/panel-month-range.ts
const panelMonthRangeProps = buildProps({ ...panelRangeSharedProps });
const panelMonthRangeEmits = [
"pick",
"set-picker-option",
"calendar-change"
];
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-month-range-header.ts
const useMonthRangeHeader = ({ unlinkPanels, leftDate, rightDate }) => {
const { t } = useLocale();
const leftPrevYear = () => {
leftDate.value = leftDate.value.subtract(1, "year");
if (!unlinkPanels.value) rightDate.value = rightDate.value.subtract(1, "year");
};
const rightNextYear = () => {
if (!unlinkPanels.value) leftDate.value = leftDate.value.add(1, "year");
rightDate.value = rightDate.value.add(1, "year");
};
const leftNextYear = () => {
leftDate.value = leftDate.value.add(1, "year");
};
const rightPrevYear = () => {
rightDate.value = rightDate.value.subtract(1, "year");
};
return {
leftPrevYear,
rightNextYear,
leftNextYear,
rightPrevYear,
leftLabel: (0, vue.computed)(() => {
return `${leftDate.value.year()} ${t("el.datepicker.year")}`;
}),
rightLabel: (0, vue.computed)(() => {
return `${rightDate.value.year()} ${t("el.datepicker.year")}`;
}),
leftYear: (0, vue.computed)(() => {
return leftDate.value.year();
}),
rightYear: (0, vue.computed)(() => {
return rightDate.value.year() === leftDate.value.year() ? leftDate.value.year() + 1 : rightDate.value.year();
})
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-month-range.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$45 = ["disabled", "onClick"];
const _hoisted_2$27 = ["disabled"];
const _hoisted_3$12 = ["disabled"];
const _hoisted_4$9 = ["disabled"];
const _hoisted_5$6 = ["disabled"];
const unit$1 = "year";
var panel_month_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "DatePickerMonthRange",
__name: "panel-month-range",
props: panelMonthRangeProps,
emits: panelMonthRangeEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { lang } = useLocale();
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
const { shortcuts, disabledDate, cellClassName } = pickerBase.props;
const format = (0, vue.toRef)(pickerBase.props, "format");
const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(1, unit$1));
const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue } = useRangePicker(props, {
defaultValue,
leftDate,
rightDate,
unit: unit$1,
sortDates
});
const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
const { leftPrevYear, rightNextYear, leftNextYear, rightPrevYear, leftLabel, rightLabel, leftYear, rightYear } = useMonthRangeHeader({
unlinkPanels: (0, vue.toRef)(props, "unlinkPanels"),
leftDate,
rightDate
});
const enableYearArrow = (0, vue.computed)(() => {
return props.unlinkPanels && rightYear.value > leftYear.value + 1;
});
const handleRangePick = (val, close = true) => {
const minDate_ = val.minDate;
const maxDate_ = val.maxDate;
if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]);
maxDate.value = maxDate_;
minDate.value = minDate_;
if (!close) return;
handleRangeConfirm();
};
const handleClear = () => {
let valueOnClear = null;
if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
leftDate.value = getDefaultValue((0, vue.unref)(defaultValue), {
lang: (0, vue.unref)(lang),
unit: "year",
unlinkPanels: props.unlinkPanels
})[0];
rightDate.value = leftDate.value.add(1, "year");
emit("pick", valueOnClear);
};
const parseUserInput = (value) => {
return correctlyParseUserInput(value, format.value, lang.value, isDefaultFormat);
};
function sortDates(minDate, maxDate) {
if (props.unlinkPanels && maxDate) rightDate.value = (minDate?.year() || 0) === maxDate.year() ? maxDate.add(1, unit$1) : maxDate;
else rightDate.value = leftDate.value.add(1, unit$1);
}
const monthRangeDisabled = useFormDisabled();
(0, vue.watch)(() => props.visible, (visible) => {
if (!visible && rangeState.value.selecting) {
parseValue(props.parsedValue);
onSelect(false);
}
});
emit("set-picker-option", ["isValidValue", isValidRange]);
emit("set-picker-option", ["parseUserInput", parseUserInput]);
emit("set-picker-option", ["handleClear", handleClear]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ppNs).b(),
(0, vue.unref)(drpNs).b(),
(0, vue.unref)(ppNs).is("border", _ctx.border),
(0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(monthRangeDisabled)),
{ "has-sidebar": Boolean(_ctx.$slots.sidebar) || hasShortcuts.value }
]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
(0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key,
type: "button",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
disabled: (0, vue.unref)(monthRangeDisabled),
onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
}, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$45);
}), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-left"]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-left"]),
disabled: (0, vue.unref)(monthRangeDisabled),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(leftPrevYear) && (0, vue.unref)(leftPrevYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_2$27),
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled))], "d-arrow-right"]),
onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(leftNextYear) && (0, vue.unref)(leftNextYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_3$12)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(leftLabel)), 1)
], 2), (0, vue.createVNode)(basic_month_table_default, {
"selection-mode": "range",
date: leftDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(monthRangeDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"disabled",
"cell-class-name",
"onChangerange",
"onSelect"
])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-right"]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled),
class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled))], "d-arrow-left"]),
onClick: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(rightPrevYear) && (0, vue.unref)(rightPrevYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_4$9)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
disabled: (0, vue.unref)(monthRangeDisabled),
onClick: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(rightNextYear) && (0, vue.unref)(rightNextYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_5$6),
(0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(rightLabel)), 1)
], 2), (0, vue.createVNode)(basic_month_table_default, {
"selection-mode": "range",
date: rightDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(monthRangeDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"disabled",
"cell-class-name",
"onChangerange",
"onSelect"
])], 2)], 2)
], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-month-range.vue
var panel_month_range_default = panel_month_range_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/props/panel-year-range.ts
const panelYearRangeProps = buildProps({ ...panelRangeSharedProps });
const panelYearRangeEmits = [
"pick",
"set-picker-option",
"calendar-change"
];
//#endregion
//#region ../../packages/components/date-picker-panel/src/composables/use-year-range-header.ts
const useYearRangeHeader = ({ unlinkPanels, leftDate, rightDate }) => {
const leftPrevYear = () => {
leftDate.value = leftDate.value.subtract(10, "year");
if (!unlinkPanels.value) rightDate.value = rightDate.value.subtract(10, "year");
};
const rightNextYear = () => {
if (!unlinkPanels.value) leftDate.value = leftDate.value.add(10, "year");
rightDate.value = rightDate.value.add(10, "year");
};
const leftNextYear = () => {
leftDate.value = leftDate.value.add(10, "year");
};
const rightPrevYear = () => {
rightDate.value = rightDate.value.subtract(10, "year");
};
return {
leftPrevYear,
rightNextYear,
leftNextYear,
rightPrevYear,
leftLabel: (0, vue.computed)(() => {
const leftStartDate = Math.floor(leftDate.value.year() / 10) * 10;
return `${leftStartDate}-${leftStartDate + 9}`;
}),
rightLabel: (0, vue.computed)(() => {
const rightStartDate = Math.floor(rightDate.value.year() / 10) * 10;
return `${rightStartDate}-${rightStartDate + 9}`;
}),
leftYear: (0, vue.computed)(() => {
return Math.floor(leftDate.value.year() / 10) * 10 + 9;
}),
rightYear: (0, vue.computed)(() => {
return Math.floor(rightDate.value.year() / 10) * 10;
})
};
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-year-range.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$44 = ["disabled", "onClick"];
const _hoisted_2$26 = ["disabled"];
const _hoisted_3$11 = ["disabled"];
const _hoisted_4$8 = ["disabled"];
const _hoisted_5$5 = ["disabled"];
const step = 10;
const unit = "year";
var panel_year_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "DatePickerYearRange",
__name: "panel-year-range",
props: panelYearRangeProps,
emits: panelYearRangeEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { lang } = useLocale();
const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(step, unit));
const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
const { shortcuts, disabledDate, cellClassName } = pickerBase.props;
const format = (0, vue.toRef)(pickerBase.props, "format");
const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue } = useRangePicker(props, {
defaultValue,
leftDate,
rightDate,
step,
unit,
sortDates
});
const { leftPrevYear, rightNextYear, leftNextYear, rightPrevYear, leftLabel, rightLabel, leftYear, rightYear } = useYearRangeHeader({
unlinkPanels: (0, vue.toRef)(props, "unlinkPanels"),
leftDate,
rightDate
});
const yearRangeDisabled = useFormDisabled();
const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
const panelKls = (0, vue.computed)(() => [
ppNs.b(),
drpNs.b(),
ppNs.is("border", props.border),
ppNs.is("disabled", yearRangeDisabled.value),
{ "has-sidebar": Boolean((0, vue.useSlots)().sidebar) || hasShortcuts.value }
]);
const leftPanelKls = (0, vue.computed)(() => {
return {
content: [
ppNs.e("content"),
drpNs.e("content"),
"is-left"
],
arrowLeftBtn: [ppNs.e("icon-btn"), "d-arrow-left"],
arrowRightBtn: [
ppNs.e("icon-btn"),
ppNs.is("disabled", !enableYearArrow.value || yearRangeDisabled.value),
"d-arrow-right"
]
};
});
const rightPanelKls = (0, vue.computed)(() => {
return {
content: [
ppNs.e("content"),
drpNs.e("content"),
"is-right"
],
arrowLeftBtn: [
ppNs.e("icon-btn"),
ppNs.is("disabled", !enableYearArrow.value || yearRangeDisabled.value),
"d-arrow-left"
],
arrowRightBtn: [ppNs.e("icon-btn"), "d-arrow-right"]
};
});
const enableYearArrow = (0, vue.computed)(() => {
return props.unlinkPanels && rightYear.value > leftYear.value + 1;
});
const handleRangePick = (val, close = true) => {
const minDate_ = val.minDate;
const maxDate_ = val.maxDate;
if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]);
maxDate.value = maxDate_;
minDate.value = minDate_;
if (!close) return;
handleRangeConfirm();
};
const parseUserInput = (value) => {
return correctlyParseUserInput(value, format.value, lang.value, isDefaultFormat);
};
const isValidValue = (date) => {
return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true);
};
const handleClear = () => {
let valueOnClear = null;
if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
const defaultArr = getDefaultValue((0, vue.unref)(defaultValue), {
lang: (0, vue.unref)(lang),
step,
unit,
unlinkPanels: props.unlinkPanels
});
leftDate.value = defaultArr[0];
rightDate.value = defaultArr[1];
emit("pick", valueOnClear);
};
function sortDates(minDate, maxDate) {
if (props.unlinkPanels && maxDate) {
const minDateYear = minDate?.year() || 0;
const maxDateYear = maxDate.year();
rightDate.value = minDateYear + step > maxDateYear ? maxDate.add(step, unit) : maxDate;
} else rightDate.value = leftDate.value.add(step, unit);
}
(0, vue.watch)(() => props.visible, (visible) => {
if (!visible && rangeState.value.selecting) {
parseValue(props.parsedValue);
onSelect(false);
}
});
emit("set-picker-option", ["isValidValue", isValidValue]);
emit("set-picker-option", ["parseUserInput", parseUserInput]);
emit("set-picker-option", ["handleClear", handleClear]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(panelKls.value) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
(0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key,
type: "button",
class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
disabled: (0, vue.unref)(yearRangeDisabled),
onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
}, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$44);
}), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(leftPanelKls.value.content) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)(leftPanelKls.value.arrowLeftBtn),
disabled: (0, vue.unref)(yearRangeDisabled),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(leftPrevYear) && (0, vue.unref)(leftPrevYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_2$26),
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(yearRangeDisabled),
class: (0, vue.normalizeClass)(leftPanelKls.value.arrowRightBtn),
onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(leftNextYear) && (0, vue.unref)(leftNextYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_3$11)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(leftLabel)), 1)
], 2), (0, vue.createVNode)(basic_year_table_default, {
"selection-mode": "range",
date: leftDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(yearRangeDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"disabled",
"cell-class-name",
"onChangerange",
"onSelect"
])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(rightPanelKls.value.content) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
_ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
disabled: !enableYearArrow.value || (0, vue.unref)(yearRangeDisabled),
class: (0, vue.normalizeClass)(rightPanelKls.value.arrowLeftBtn),
onClick: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(rightPrevYear) && (0, vue.unref)(rightPrevYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
_: 1
})])], 10, _hoisted_4$8)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)(rightPanelKls.value.arrowRightBtn),
disabled: (0, vue.unref)(yearRangeDisabled),
onClick: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(rightNextYear) && (0, vue.unref)(rightNextYear)(...args))
}, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
_: 1
})])], 10, _hoisted_5$5),
(0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(rightLabel)), 1)
], 2), (0, vue.createVNode)(basic_year_table_default, {
"selection-mode": "range",
date: rightDate.value,
"min-date": (0, vue.unref)(minDate),
"max-date": (0, vue.unref)(maxDate),
"range-state": (0, vue.unref)(rangeState),
"disabled-date": (0, vue.unref)(disabledDate),
disabled: (0, vue.unref)(yearRangeDisabled),
"cell-class-name": (0, vue.unref)(cellClassName),
onChangerange: (0, vue.unref)(handleChangeRange),
onPick: handleRangePick,
onSelect: (0, vue.unref)(onSelect)
}, null, 8, [
"date",
"min-date",
"max-date",
"range-state",
"disabled-date",
"disabled",
"cell-class-name",
"onChangerange",
"onSelect"
])], 2)], 2)
], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-year-range.vue
var panel_year_range_default = panel_year_range_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/date-picker-panel/src/panel-utils.ts
const getPanel = function(type) {
switch (type) {
case "daterange":
case "datetimerange": return panel_date_range_default;
case "monthrange": return panel_month_range_default;
case "yearrange": return panel_year_range_default;
default: return panel_date_pick_default;
}
};
//#endregion
//#region ../../packages/components/date-picker-panel/src/date-picker-panel.tsx
function _isSlot$7(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
import_dayjs_min.default.extend(import_localeData.default);
import_dayjs_min.default.extend(import_advancedFormat.default);
import_dayjs_min.default.extend(import_customParseFormat.default);
import_dayjs_min.default.extend(import_weekOfYear.default);
import_dayjs_min.default.extend(import_weekYear.default);
import_dayjs_min.default.extend(import_dayOfYear.default);
import_dayjs_min.default.extend(import_isSameOrAfter.default);
import_dayjs_min.default.extend(import_isSameOrBefore.default);
var date_picker_panel_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDatePickerPanel",
install: null,
inheritAttrs: false,
props: datePickerPanelProps,
emits: [
UPDATE_MODEL_EVENT,
"calendar-change",
"panel-change",
"visible-change",
"clear"
],
setup(props, { slots, emit, attrs }) {
const ns = useNamespace("picker-panel");
if (isUndefined((0, vue.inject)(PICKER_BASE_INJECTION_KEY, void 0))) (0, vue.provide)(PICKER_BASE_INJECTION_KEY, { props: (0, vue.reactive)({ ...(0, vue.toRefs)(props) }) });
(0, vue.provide)(ROOT_PICKER_INJECTION_KEY, {
slots,
pickerNs: ns
});
const { parsedValue, onCalendarChange, onPanelChange, onSetPickerOption, onPick } = (0, vue.inject)(ROOT_COMMON_PICKER_INJECTION_KEY, () => useCommonPicker(props, emit), true);
return () => {
return (0, vue.createVNode)(getPanel(props.type), (0, vue.mergeProps)(omit(attrs, "onPick"), props, {
"parsedValue": parsedValue.value,
"onSet-picker-option": onSetPickerOption,
"onCalendar-change": onCalendarChange,
"onPanel-change": onPanelChange,
"onClear": () => emit("clear"),
"onPick": onPick
}), _isSlot$7(slots) ? slots : { default: () => [slots] });
};
}
});
//#endregion
//#region ../../packages/components/date-picker-panel/index.ts
const ElDatePickerPanel = withInstall(date_picker_panel_default);
//#endregion
//#region ../../packages/components/date-picker/src/props.ts
const datePickerProps = buildProps({
...timePickerDefaultProps,
type: {
type: definePropType(String),
default: "date"
}
});
//#endregion
//#region ../../packages/components/date-picker/src/date-picker.tsx
function _isSlot$6(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
var date_picker_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDatePicker",
install: null,
props: datePickerProps,
emits: [UPDATE_MODEL_EVENT],
setup(props, { expose, emit, slots }) {
(0, vue.provide)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, (0, vue.computed)(() => {
return !props.format;
}));
(0, vue.provide)(PICKER_POPPER_OPTIONS_INJECTION_KEY, (0, vue.reactive)((0, vue.toRef)(props, "popperOptions")));
const commonPicker = (0, vue.ref)();
expose({
focus: () => {
commonPicker.value?.focus();
},
blur: () => {
commonPicker.value?.blur();
},
handleOpen: () => {
commonPicker.value?.handleOpen();
},
handleClose: () => {
commonPicker.value?.handleClose();
}
});
const onModelValueUpdated = (val) => {
emit(UPDATE_MODEL_EVENT, val);
};
return () => {
const format = props.format ?? (DEFAULT_FORMATS_DATEPICKER[props.type] || DEFAULT_FORMATS_DATE);
return (0, vue.createVNode)(picker_default, (0, vue.mergeProps)(props, {
"format": format,
"type": props.type,
"ref": commonPicker,
"onUpdate:modelValue": onModelValueUpdated
}), {
default: (scopedProps) => (0, vue.createVNode)(ElDatePickerPanel, (0, vue.mergeProps)({
"disabled": props.disabled,
"editable": props.editable,
"border": false
}, scopedProps), _isSlot$6(slots) ? slots : { default: () => [slots] }),
"range-separator": slots["range-separator"]
});
};
}
});
//#endregion
//#region ../../packages/components/date-picker/index.ts
const ElDatePicker = withInstall(date_picker_default);
//#endregion
//#region ../../packages/components/descriptions/src/description.ts
/**
* @deprecated Removed after 3.0.0, Use `DescriptionProps` instead.
*/
const descriptionProps = buildProps({
border: Boolean,
column: {
type: Number,
default: 3
},
direction: {
type: String,
values: ["horizontal", "vertical"],
default: "horizontal"
},
size: useSizeProp,
title: {
type: String,
default: ""
},
extra: {
type: String,
default: ""
},
labelWidth: { type: [String, Number] }
});
//#endregion
//#region ../../packages/components/descriptions/src/descriptions-row.ts
/**
* @deprecated Removed after 3.0.0, Use `DescriptionsRowProps` instead.
*/
const descriptionsRowProps = buildProps({ row: {
type: definePropType(Array),
default: () => []
} });
//#endregion
//#region ../../packages/components/descriptions/src/token.ts
const descriptionsKey = Symbol("elDescriptions");
//#endregion
//#region ../../packages/components/descriptions/src/descriptions-cell.ts
var descriptions_cell_default = (0, vue.defineComponent)({
name: "ElDescriptionsCell",
props: {
cell: { type: Object },
tag: {
type: String,
default: "td"
},
type: { type: String }
},
setup() {
return { descriptions: (0, vue.inject)(descriptionsKey, {}) };
},
render() {
const item = getNormalizedProps(this.cell);
const directives = (this.cell?.dirs || []).map((dire) => {
const { dir, arg, modifiers, value } = dire;
return [
dir,
value,
arg,
modifiers
];
});
const { border, direction } = this.descriptions;
const isVertical = direction === "vertical";
const renderLabel = () => this.cell?.children?.label?.() || item.label;
const renderContent = () => this.cell?.children?.default?.();
const span = item.span;
const rowspan = item.rowspan;
const align = item.align ? `is-${item.align}` : "";
const labelAlign = item.labelAlign ? `is-${item.labelAlign}` : align;
const className = item.className;
const labelClassName = item.labelClassName;
const style = {
width: addUnit(this.type === "label" ? item.labelWidth ?? this.descriptions.labelWidth ?? item.width : item.width),
minWidth: addUnit(item.minWidth)
};
const ns = useNamespace("descriptions");
switch (this.type) {
case "label": return (0, vue.withDirectives)((0, vue.h)(this.tag, {
style,
class: [
ns.e("cell"),
ns.e("label"),
ns.is("bordered-label", border),
ns.is("vertical-label", isVertical),
labelAlign,
labelClassName
],
colSpan: isVertical ? span : 1,
rowspan: isVertical ? 1 : rowspan
}, renderLabel()), directives);
case "content": return (0, vue.withDirectives)((0, vue.h)(this.tag, {
style,
class: [
ns.e("cell"),
ns.e("content"),
ns.is("bordered-content", border),
ns.is("vertical-content", isVertical),
align,
className
],
colSpan: isVertical ? span : span * 2 - 1,
rowspan: isVertical ? rowspan * 2 - 1 : rowspan
}, renderContent()), directives);
default: {
const label = renderLabel();
const labelStyle = {};
const width = addUnit(item.labelWidth ?? this.descriptions.labelWidth);
if (width) {
labelStyle.width = width;
labelStyle.display = "inline-block";
}
return (0, vue.withDirectives)((0, vue.h)("td", {
style,
class: [ns.e("cell"), align],
colSpan: span,
rowspan
}, [!isNil(label) ? (0, vue.h)("span", {
style: labelStyle,
class: [ns.e("label"), labelClassName]
}, label) : void 0, (0, vue.h)("span", { class: [ns.e("content"), className] }, renderContent())]), directives);
}
}
}
});
//#endregion
//#region ../../packages/components/descriptions/src/descriptions-row.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$43 = { key: 1 };
var descriptions_row_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDescriptionsRow",
__name: "descriptions-row",
props: descriptionsRowProps,
setup(__props) {
const descriptions = (0, vue.inject)(descriptionsKey, {});
return (_ctx, _cache) => {
return (0, vue.unref)(descriptions).direction === "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
key: `tr1-${_index}`,
cell,
tag: "th",
type: "label"
}, null, 8, ["cell"]);
}), 128))]), (0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
key: `tr2-${_index}`,
cell,
tag: "td",
type: "content"
}, null, 8, ["cell"]);
}), 128))])], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("tr", _hoisted_1$43, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: `tr3-${_index}` }, [(0, vue.unref)(descriptions).border ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createVNode)((0, vue.unref)(descriptions_cell_default), {
cell,
tag: "td",
type: "label"
}, null, 8, ["cell"]), (0, vue.createVNode)((0, vue.unref)(descriptions_cell_default), {
cell,
tag: "td",
type: "content"
}, null, 8, ["cell"])], 64)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
key: 1,
cell,
tag: "td",
type: "both"
}, null, 8, ["cell"]))], 64);
}), 128))]));
};
}
});
//#endregion
//#region ../../packages/components/descriptions/src/descriptions-row.vue
var descriptions_row_default = descriptions_row_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/descriptions/src/constants.ts
const COMPONENT_NAME$10 = "ElDescriptionsItem";
//#endregion
//#region ../../packages/components/descriptions/src/description.vue?vue&type=script&setup=true&lang.ts
var description_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDescriptions",
__name: "description",
props: descriptionProps,
setup(__props) {
const props = __props;
const ns = useNamespace("descriptions");
const descriptionsSize = useFormSize();
const slots = (0, vue.useSlots)();
(0, vue.provide)(descriptionsKey, props);
const descriptionKls = (0, vue.computed)(() => [ns.b(), ns.m(descriptionsSize.value)]);
const filledNode = (node, span, count, isLast = false) => {
if (!node.props) node.props = {};
if (span > count) node.props.span = count;
if (isLast) node.props.span = span;
return node;
};
const getRows = () => {
if (!slots.default) return [];
const children = flattedChildren(slots.default()).filter((node) => node?.type?.name === COMPONENT_NAME$10);
const rows = [];
let temp = [];
let count = props.column;
let totalSpan = 0;
const rowspanTemp = [];
children.forEach((node, index) => {
const span = node.props?.span || 1;
const rowspan = node.props?.rowspan || 1;
const rowNo = rows.length;
rowspanTemp[rowNo] ||= 0;
if (rowspan > 1) for (let i = 1; i < rowspan; i++) {
rowspanTemp[rowNo + i] ||= 0;
rowspanTemp[rowNo + i]++;
totalSpan++;
}
if (rowspanTemp[rowNo] > 0) {
count -= rowspanTemp[rowNo];
rowspanTemp[rowNo] = 0;
}
if (index < children.length - 1) totalSpan += span > count ? count : span;
if (index === children.length - 1) {
const lastSpan = props.column - totalSpan % props.column;
temp.push(filledNode(node, lastSpan, count, true));
rows.push(temp);
return;
}
if (span < count) {
count -= span;
temp.push(node);
} else {
temp.push(filledNode(node, span, count));
rows.push(temp);
count = props.column;
temp = [];
}
});
return rows;
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(descriptionKls.value) }, [__props.title || __props.extra || _ctx.$slots.title || _ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header"))
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra")) }, [(0, vue.renderSlot)(_ctx.$slots, "extra", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.extra), 1)])], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body")) }, [(0, vue.createElementVNode)("table", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("table"), (0, vue.unref)(ns).is("bordered", __props.border)]) }, [(0, vue.createElementVNode)("tbody", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(getRows(), (row, _index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(descriptions_row_default, {
key: _index,
row
}, null, 8, ["row"]);
}), 128))])], 2)], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/descriptions/src/description.vue
var description_default = description_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/descriptions/src/description-item.ts
const descriptionItemProps = buildProps({
label: {
type: String,
default: ""
},
span: {
type: Number,
default: 1
},
rowspan: {
type: Number,
default: 1
},
width: {
type: [String, Number],
default: ""
},
minWidth: {
type: [String, Number],
default: ""
},
labelWidth: { type: [String, Number] },
align: {
type: String,
values: columnAlignment,
default: "left"
},
labelAlign: {
type: String,
values: columnAlignment
},
className: {
type: String,
default: ""
},
labelClassName: {
type: String,
default: ""
}
});
const DescriptionItem = (0, vue.defineComponent)({
name: COMPONENT_NAME$10,
props: descriptionItemProps
});
//#endregion
//#region ../../packages/components/descriptions/index.ts
const ElDescriptions = withInstall(description_default, { DescriptionsItem: DescriptionItem });
const ElDescriptionsItem = withNoopInstall(DescriptionItem);
//#endregion
//#region ../../packages/components/dialog/src/dialog-content.ts
/**
* @deprecated Removed after 3.0.0, Use `DialogContentProps` instead.
*/
const dialogContentProps = buildProps({
center: Boolean,
alignCenter: {
type: Boolean,
default: void 0
},
closeIcon: { type: iconPropType },
draggable: {
type: Boolean,
default: void 0
},
overflow: {
type: Boolean,
default: void 0
},
fullscreen: Boolean,
headerClass: String,
bodyClass: String,
footerClass: String,
showClose: {
type: Boolean,
default: true
},
title: {
type: String,
default: ""
},
ariaLevel: {
type: String,
default: "2"
}
});
const dialogContentEmits = { close: () => true };
const dialogContentPropsDefaults = {
alignCenter: void 0,
draggable: void 0,
overflow: void 0,
showClose: true,
title: "",
ariaLevel: "2"
};
//#endregion
//#region ../../packages/components/dialog/src/dialog.ts
/**
* @deprecated Removed after 3.0.0, Use `DialogProps` instead.
*/
const dialogProps = buildProps({
...dialogContentProps,
appendToBody: Boolean,
appendTo: {
type: teleportProps.to.type,
default: "body"
},
beforeClose: { type: definePropType(Function) },
destroyOnClose: Boolean,
closeOnClickModal: {
type: Boolean,
default: true
},
closeOnPressEscape: {
type: Boolean,
default: true
},
lockScroll: {
type: Boolean,
default: true
},
modal: {
type: Boolean,
default: true
},
modalPenetrable: Boolean,
openDelay: {
type: Number,
default: 0
},
closeDelay: {
type: Number,
default: 0
},
top: { type: String },
modelValue: Boolean,
modalClass: String,
headerClass: String,
bodyClass: String,
footerClass: String,
width: { type: [String, Number] },
zIndex: { type: Number },
trapFocus: Boolean,
headerAriaLevel: {
type: String,
default: "2"
},
transition: {
type: definePropType([String, Object]),
default: void 0
}
});
const dialogEmits = {
open: () => true,
opened: () => true,
close: () => true,
closed: () => true,
[UPDATE_MODEL_EVENT]: (value) => isBoolean(value),
openAutoFocus: () => true,
closeAutoFocus: () => true
};
const dialogContextKey = Symbol("dialogContextKey");
const dialogPropsDefaults = {
...dialogContentPropsDefaults,
appendTo: "body",
closeOnClickModal: true,
closeOnPressEscape: true,
lockScroll: true,
modal: true,
openDelay: 0,
closeDelay: 0,
headerAriaLevel: "2",
transition: void 0
};
//#endregion
//#region ../../packages/components/overlay/src/overlay.ts
const overlayProps = buildProps({
mask: {
type: Boolean,
default: true
},
customMaskEvent: Boolean,
overlayClass: { type: definePropType([
String,
Array,
Object
]) },
zIndex: { type: definePropType([String, Number]) }
});
const overlayEmits = { click: (evt) => evt instanceof MouseEvent };
const BLOCK = "overlay";
var overlay_default = (0, vue.defineComponent)({
name: "ElOverlay",
props: overlayProps,
emits: overlayEmits,
setup(props, { slots, emit }) {
const ns = useNamespace(BLOCK);
const onMaskClick = (e) => {
emit("click", e);
};
const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick);
return () => {
return props.mask ? (0, vue.createVNode)("div", {
class: [ns.b(), props.overlayClass],
style: { zIndex: props.zIndex },
onClick,
onMousedown,
onMouseup
}, [(0, vue.renderSlot)(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, [
"onClick",
"onMouseup",
"onMousedown"
]) : (0, vue.h)("div", {
class: props.overlayClass,
style: {
zIndex: props.zIndex,
position: "fixed",
top: "0px",
right: "0px",
bottom: "0px",
left: "0px"
}
}, [(0, vue.renderSlot)(slots, "default")]);
};
}
});
//#endregion
//#region ../../packages/components/overlay/index.ts
const ElOverlay = overlay_default;
//#endregion
//#region ../../packages/components/dialog/src/constants.ts
const dialogInjectionKey = Symbol("dialogInjectionKey");
const DEFAULT_DIALOG_TRANSITION = "dialog-fade";
//#endregion
//#region ../../packages/components/dialog/src/dialog-content.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$42 = ["aria-level"];
const _hoisted_2$25 = ["aria-label"];
const _hoisted_3$10 = ["id"];
var dialog_content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDialogContent",
__name: "dialog-content",
props: dialogContentProps,
emits: dialogContentEmits,
setup(__props, { expose: __expose }) {
const { t } = useLocale();
const { Close } = CloseComponents;
const props = __props;
const { dialogRef, headerRef, bodyId, ns, style } = (0, vue.inject)(dialogInjectionKey);
const { focusTrapRef } = (0, vue.inject)(FOCUS_TRAP_INJECTION_KEY);
const composedDialogRef = composeRefs(focusTrapRef, dialogRef);
const draggable = (0, vue.computed)(() => !!props.draggable);
const { resetPosition, updatePosition, isDragging } = useDraggable(dialogRef, headerRef, draggable, (0, vue.computed)(() => !!props.overflow));
const dialogKls = (0, vue.computed)(() => [
ns.b(),
ns.is("fullscreen", props.fullscreen),
ns.is("draggable", draggable.value),
ns.is("dragging", isDragging.value),
ns.is("align-center", !!props.alignCenter),
{ [ns.m("center")]: props.center }
]);
__expose({
resetPosition,
updatePosition
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: (0, vue.unref)(composedDialogRef),
class: (0, vue.normalizeClass)(dialogKls.value),
style: (0, vue.normalizeStyle)((0, vue.unref)(style)),
tabindex: "-1"
}, [
(0, vue.createElementVNode)("header", {
ref_key: "headerRef",
ref: headerRef,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("header"),
__props.headerClass,
{ "show-close": __props.showClose }
])
}, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createElementVNode)("span", {
role: "heading",
"aria-level": __props.ariaLevel,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
}, (0, vue.toDisplayString)(__props.title), 11, _hoisted_1$42)]), __props.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
"aria-label": (0, vue.unref)(t)("el.dialog.close"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("headerbtn")),
type: "button",
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close"))
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.closeIcon || (0, vue.unref)(Close))))]),
_: 1
}, 8, ["class"])], 10, _hoisted_2$25)) : (0, vue.createCommentVNode)("v-if", true)], 2),
(0, vue.createElementVNode)("div", {
id: (0, vue.unref)(bodyId),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_3$10),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("footer", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 6);
};
}
});
//#endregion
//#region ../../packages/components/dialog/src/dialog-content.vue
var dialog_content_default = dialog_content_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/dialog/src/use-dialog.ts
const COMPONENT_NAME$9 = "ElDialog";
const useDialog = (props, targetRef) => {
const emit = (0, vue.getCurrentInstance)().emit;
const { nextZIndex } = useZIndex();
let lastPosition = "";
const titleId = useId();
const bodyId = useId();
const visible = (0, vue.ref)(false);
const closed = (0, vue.ref)(false);
const rendered = (0, vue.ref)(false);
const zIndex = (0, vue.ref)(props.zIndex ?? nextZIndex());
const closing = (0, vue.ref)(false);
let openTimer = void 0;
let closeTimer = void 0;
const config = useGlobalConfig();
const namespace = (0, vue.computed)(() => config.value?.namespace ?? defaultNamespace);
const globalConfig = (0, vue.computed)(() => config.value?.dialog);
const style = (0, vue.computed)(() => {
const style = {};
const varPrefix = `--${namespace.value}-dialog`;
if (!props.fullscreen) {
if (props.top) style[`${varPrefix}-margin-top`] = props.top;
const width = addUnit(props.width);
if (width) style[`${varPrefix}-width`] = width;
}
return style;
});
const _draggable = (0, vue.computed)(() => (props.draggable ?? globalConfig.value?.draggable ?? false) && !props.fullscreen);
const _alignCenter = (0, vue.computed)(() => props.alignCenter ?? globalConfig.value?.alignCenter ?? false);
const _overflow = (0, vue.computed)(() => props.overflow ?? globalConfig.value?.overflow ?? false);
const penetrable = (0, vue.computed)(() => props.modalPenetrable && !props.modal && !props.fullscreen);
const overlayDialogStyle = (0, vue.computed)(() => {
if (_alignCenter.value) return { display: "flex" };
return {};
});
const transitionConfig = (0, vue.computed)(() => {
const transition = props.transition ?? globalConfig.value?.transition ?? DEFAULT_DIALOG_TRANSITION;
const baseConfig = {
name: transition,
onAfterEnter: afterEnter,
onBeforeLeave: beforeLeave,
onAfterLeave: afterLeave
};
if (isObject$1(transition)) {
const config = { ...transition };
const _mergeHook = (userHook, defaultHook) => {
return (el) => {
if (isArray$1(userHook)) userHook.forEach((fn) => {
if (isFunction$1(fn)) fn(el);
});
else if (isFunction$1(userHook)) userHook(el);
defaultHook();
};
};
config.onAfterEnter = _mergeHook(config.onAfterEnter, afterEnter);
config.onBeforeLeave = _mergeHook(config.onBeforeLeave, beforeLeave);
config.onAfterLeave = _mergeHook(config.onAfterLeave, afterLeave);
if (!config.name) {
config.name = DEFAULT_DIALOG_TRANSITION;
/* @__PURE__ */ debugWarn(COMPONENT_NAME$9, `transition.name is missing when using object syntax, fallback to '${DEFAULT_DIALOG_TRANSITION}'`);
}
return config;
}
return baseConfig;
});
function afterEnter() {
emit("opened");
}
function afterLeave() {
emit("closed");
emit(UPDATE_MODEL_EVENT, false);
if (props.destroyOnClose) rendered.value = false;
closing.value = false;
}
function beforeLeave() {
closing.value = true;
emit("close");
}
function open() {
closeTimer?.();
openTimer?.();
if (props.openDelay && props.openDelay > 0) ({stop: openTimer} = useTimeoutFn(() => doOpen(), props.openDelay));
else doOpen();
}
function close() {
openTimer?.();
closeTimer?.();
if (props.closeDelay && props.closeDelay > 0) ({stop: closeTimer} = useTimeoutFn(() => doClose(), props.closeDelay));
else doClose();
}
function handleClose() {
function hide(shouldCancel) {
if (shouldCancel) return;
closed.value = true;
visible.value = false;
}
if (props.beforeClose) props.beforeClose(hide);
else close();
}
function onModalClick() {
if (props.closeOnClickModal) handleClose();
}
function doOpen() {
if (!isClient) return;
visible.value = true;
}
function doClose() {
visible.value = false;
}
function onOpenAutoFocus() {
emit("openAutoFocus");
}
function onCloseAutoFocus() {
emit("closeAutoFocus");
}
function onFocusoutPrevented(event) {
if (event.detail?.focusReason === "pointer") event.preventDefault();
}
if (props.lockScroll) useLockscreen(visible);
function onCloseRequested() {
if (props.closeOnPressEscape) handleClose();
}
function bringToFront() {
if (!visible.value || !penetrable.value || props.zIndex !== void 0) return;
zIndex.value = nextZIndex();
}
(0, vue.watch)(() => props.zIndex, () => {
zIndex.value = props.zIndex ?? nextZIndex();
});
(0, vue.watch)(() => props.modelValue, (val) => {
if (val) {
closed.value = false;
closing.value = false;
open();
rendered.value = true;
zIndex.value = props.zIndex ?? nextZIndex();
(0, vue.nextTick)(() => {
emit("open");
if (targetRef.value) {
targetRef.value.parentElement.scrollTop = 0;
targetRef.value.parentElement.scrollLeft = 0;
targetRef.value.scrollTop = 0;
}
});
} else if (visible.value) close();
});
(0, vue.watch)(() => props.fullscreen, (val) => {
if (!targetRef.value) return;
if (val) {
lastPosition = targetRef.value.style.transform;
targetRef.value.style.transform = "";
} else targetRef.value.style.transform = lastPosition;
});
(0, vue.onMounted)(() => {
if (props.modelValue) {
visible.value = true;
rendered.value = true;
open();
}
});
return {
afterEnter,
afterLeave,
beforeLeave,
handleClose,
onModalClick,
close,
doClose,
onOpenAutoFocus,
onCloseAutoFocus,
onCloseRequested,
onFocusoutPrevented,
bringToFront,
titleId,
bodyId,
closed,
style,
overlayDialogStyle,
rendered,
visible,
zIndex,
transitionConfig,
_draggable,
_alignCenter,
_overflow,
closing,
penetrable
};
};
//#endregion
//#region ../../packages/components/dialog/src/dialog.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$41 = [
"aria-label",
"aria-labelledby",
"aria-describedby"
];
var dialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDialog",
inheritAttrs: false,
__name: "dialog",
props: dialogProps,
emits: dialogEmits,
setup(__props, { expose: __expose }) {
const props = __props;
const slots = (0, vue.useSlots)();
useDeprecated({
scope: "el-dialog",
from: "the title slot",
replacement: "the header slot",
version: "3.0.0",
ref: "https://element-plus.org/en-US/component/dialog.html#slots"
}, (0, vue.computed)(() => !!slots.title));
const ns = useNamespace("dialog");
const dialogRef = (0, vue.ref)();
const headerRef = (0, vue.ref)();
const dialogContentRef = (0, vue.ref)();
const { visible, titleId, bodyId, style, overlayDialogStyle, rendered, transitionConfig, zIndex, _draggable, _alignCenter, _overflow, penetrable, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented, bringToFront, closing } = useDialog(props, dialogRef);
(0, vue.provide)(dialogInjectionKey, {
dialogRef,
headerRef,
bodyId,
ns,
rendered,
style
});
const overlayEvent = useSameTarget(onModalClick);
const resetPosition = () => {
dialogContentRef.value?.resetPosition();
};
__expose({
visible,
dialogContentRef,
resetPosition,
handleClose
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTeleport), {
to: __props.appendTo,
disabled: __props.appendTo !== "body" ? false : !__props.appendToBody
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(vue.Transition, (0, vue.mergeProps)((0, vue.unref)(transitionConfig), { persisted: "" }), {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElOverlay), {
"custom-mask-event": "",
mask: __props.modal,
"overlay-class": [
__props.modalClass ?? "",
`${(0, vue.unref)(ns).namespace.value}-modal-dialog`,
(0, vue.unref)(ns).is("penetrable", (0, vue.unref)(penetrable))
],
"z-index": (0, vue.unref)(zIndex)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
role: "dialog",
"aria-modal": "true",
"aria-label": __props.title || void 0,
"aria-labelledby": !__props.title ? (0, vue.unref)(titleId) : void 0,
"aria-describedby": (0, vue.unref)(bodyId),
class: (0, vue.normalizeClass)([`${(0, vue.unref)(ns).namespace.value}-overlay-dialog`, (0, vue.unref)(ns).is("closing", (0, vue.unref)(closing))]),
style: (0, vue.normalizeStyle)((0, vue.unref)(overlayDialogStyle)),
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(overlayEvent).onClick && (0, vue.unref)(overlayEvent).onClick(...args)),
onMousedown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(overlayEvent).onMousedown && (0, vue.unref)(overlayEvent).onMousedown(...args)),
onMouseup: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(overlayEvent).onMouseup && (0, vue.unref)(overlayEvent).onMouseup(...args))
}, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
loop: "",
trapped: (0, vue.unref)(visible),
"focus-start-el": "container",
onFocusAfterTrapped: (0, vue.unref)(onOpenAutoFocus),
onFocusAfterReleased: (0, vue.unref)(onCloseAutoFocus),
onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
onReleaseRequested: (0, vue.unref)(onCloseRequested)
}, {
default: (0, vue.withCtx)(() => [(0, vue.unref)(rendered) ? ((0, vue.openBlock)(), (0, vue.createBlock)(dialog_content_default, (0, vue.mergeProps)({
key: 0,
ref_key: "dialogContentRef",
ref: dialogContentRef
}, _ctx.$attrs, {
center: __props.center,
"align-center": (0, vue.unref)(_alignCenter),
"close-icon": __props.closeIcon,
draggable: (0, vue.unref)(_draggable),
overflow: (0, vue.unref)(_overflow),
fullscreen: __props.fullscreen,
"header-class": __props.headerClass,
"body-class": __props.bodyClass,
"footer-class": __props.footerClass,
"show-close": __props.showClose,
title: __props.title,
"aria-level": __props.headerAriaLevel,
onClose: (0, vue.unref)(handleClose),
onMousedown: (0, vue.unref)(bringToFront)
}), (0, vue.createSlots)({
header: (0, vue.withCtx)(() => [!_ctx.$slots.title ? (0, vue.renderSlot)(_ctx.$slots, "header", {
key: 0,
close: (0, vue.unref)(handleClose),
titleId: (0, vue.unref)(titleId),
titleClass: (0, vue.unref)(ns).e("title")
}) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 })]),
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 2
}, [_ctx.$slots.footer ? {
name: "footer",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "footer")]),
key: "0"
} : void 0]), 1040, [
"center",
"align-center",
"close-icon",
"draggable",
"overflow",
"fullscreen",
"header-class",
"body-class",
"footer-class",
"show-close",
"title",
"aria-level",
"onClose",
"onMousedown"
])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 8, [
"trapped",
"onFocusAfterTrapped",
"onFocusAfterReleased",
"onFocusoutPrevented",
"onReleaseRequested"
])], 46, _hoisted_1$41)]),
_: 3
}, 8, [
"mask",
"overlay-class",
"z-index"
]), [[vue.vShow, (0, vue.unref)(visible)]])]),
_: 3
}, 16)]),
_: 3
}, 8, ["to", "disabled"]);
};
}
});
//#endregion
//#region ../../packages/components/dialog/src/dialog.vue
var dialog_default = dialog_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/dialog/index.ts
const ElDialog = withInstall(dialog_default);
//#endregion
//#region ../../packages/components/divider/src/divider.ts
/**
* @deprecated Removed after 3.0.0, Use `DividerProps` instead.
*/
const dividerProps = buildProps({
direction: {
type: String,
values: ["horizontal", "vertical"],
default: "horizontal"
},
contentPosition: {
type: String,
values: [
"left",
"center",
"right"
],
default: "center"
},
borderStyle: {
type: definePropType(String),
default: "solid"
}
});
//#endregion
//#region ../../packages/components/divider/src/divider.vue?vue&type=script&setup=true&lang.ts
var divider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDivider",
__name: "divider",
props: dividerProps,
setup(__props) {
const props = __props;
const ns = useNamespace("divider");
const dividerStyle = (0, vue.computed)(() => {
return ns.cssVar({ "border-style": props.borderStyle });
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).m(__props.direction)]),
style: (0, vue.normalizeStyle)(dividerStyle.value),
role: "separator"
}, [_ctx.$slots.default && __props.direction !== "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("text"), (0, vue.unref)(ns).is(__props.contentPosition)])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 6);
};
}
});
//#endregion
//#region ../../packages/components/divider/src/divider.vue
var divider_default = divider_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/divider/index.ts
const ElDivider = withInstall(divider_default);
//#endregion
//#region ../../packages/components/drawer/src/drawer.ts
/**
* @deprecated Removed after 3.0.0, Use `DrawerProps` instead.
*/
const drawerProps = buildProps({
...dialogProps,
direction: {
type: String,
default: "rtl",
values: [
"ltr",
"rtl",
"ttb",
"btt"
]
},
resizable: Boolean,
size: {
type: [String, Number],
default: "30%"
},
withHeader: {
type: Boolean,
default: true
},
modalFade: {
type: Boolean,
default: true
},
headerAriaLevel: {
type: String,
default: "2"
}
});
const drawerEmits = {
...dialogEmits,
"resize-start": (evt, size) => evt instanceof MouseEvent && typeof size === "number",
resize: (evt, size) => evt instanceof MouseEvent && typeof size === "number",
"resize-end": (evt, size) => evt instanceof MouseEvent && typeof size === "number"
};
//#endregion
//#region ../../packages/components/drawer/src/composables/useResizable.ts
function useResizable(props, target, emit) {
const { width, height } = useWindowSize();
const isHorizontal = (0, vue.computed)(() => ["ltr", "rtl"].includes(props.direction));
const sign = (0, vue.computed)(() => ["ltr", "ttb"].includes(props.direction) ? 1 : -1);
const windowSize = (0, vue.computed)(() => isHorizontal.value ? width.value : height.value);
const getSize = (0, vue.computed)(() => {
return clamp$2(startSize.value + sign.value * offset.value, 4, windowSize.value);
});
const startSize = (0, vue.ref)(0);
const offset = (0, vue.ref)(0);
const isResizing = (0, vue.ref)(false);
const hasStartedDragging = (0, vue.ref)(false);
let startPos = [];
let cleanups = [];
const getActualSize = () => {
const drawerEl = target.value?.closest("[aria-modal=\"true\"]");
if (drawerEl) return isHorizontal.value ? drawerEl.offsetWidth : drawerEl.offsetHeight;
return 100;
};
(0, vue.watch)(() => [props.size, props.resizable], () => {
hasStartedDragging.value = false;
startSize.value = 0;
offset.value = 0;
onMouseUp();
});
const onMousedown = (e) => {
if (!props.resizable) return;
if (!hasStartedDragging.value) {
startSize.value = getActualSize();
hasStartedDragging.value = true;
}
startPos = [e.pageX, e.pageY];
isResizing.value = true;
emit("resize-start", e, startSize.value);
cleanups.push(useEventListener(window, "mouseup", onMouseUp), useEventListener(window, "mousemove", onMouseMove));
};
const onMouseMove = (e) => {
const { pageX, pageY } = e;
const offsetX = pageX - startPos[0];
const offsetY = pageY - startPos[1];
offset.value = isHorizontal.value ? offsetX : offsetY;
emit("resize", e, getSize.value);
};
const onMouseUp = (e) => {
if (!isResizing.value) return;
startPos = [];
startSize.value = getSize.value;
offset.value = 0;
isResizing.value = false;
cleanups.forEach((cleanup) => cleanup?.());
cleanups = [];
if (e) emit("resize-end", e, startSize.value);
};
const cleanup = useEventListener(target, "mousedown", onMousedown);
(0, vue.onBeforeUnmount)(() => {
cleanup();
onMouseUp();
});
return {
size: (0, vue.computed)(() => {
return hasStartedDragging.value ? `${getSize.value}px` : addUnit(props.size);
}),
isResizing,
isHorizontal
};
}
//#endregion
//#region ../../packages/components/drawer/src/drawer.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$40 = [
"aria-label",
"aria-labelledby",
"aria-describedby"
];
const _hoisted_2$24 = ["id", "aria-level"];
const _hoisted_3$9 = ["aria-label"];
const _hoisted_4$7 = ["id"];
var drawer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElDrawer",
inheritAttrs: false,
__name: "drawer",
props: drawerProps,
emits: drawerEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
useDeprecated({
scope: "el-drawer",
from: "the title slot",
replacement: "the header slot",
version: "3.0.0",
ref: "https://element-plus.org/en-US/component/drawer.html#slots"
}, (0, vue.computed)(() => !!slots.title));
const drawerRef = (0, vue.ref)();
const focusStartRef = (0, vue.ref)();
const draggerRef = (0, vue.ref)();
const ns = useNamespace("drawer");
const { t } = useLocale();
const { afterEnter, afterLeave, beforeLeave, visible, rendered, titleId, bodyId, zIndex, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onFocusoutPrevented, onCloseRequested, handleClose } = useDialog(props, drawerRef);
const { isHorizontal, size, isResizing } = useResizable(props, draggerRef, emit);
const penetrable = (0, vue.computed)(() => props.modalPenetrable && !props.modal);
__expose({
handleClose,
afterEnter,
afterLeave
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTeleport), {
to: __props.appendTo,
disabled: __props.appendTo !== "body" ? false : !__props.appendToBody
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(vue.Transition, {
name: (0, vue.unref)(ns).b("fade"),
onAfterEnter: (0, vue.unref)(afterEnter),
onAfterLeave: (0, vue.unref)(afterLeave),
onBeforeLeave: (0, vue.unref)(beforeLeave),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElOverlay), {
mask: __props.modal,
"overlay-class": [
(0, vue.unref)(ns).is("drawer"),
__props.modalClass ?? "",
`${(0, vue.unref)(ns).namespace.value}-modal-drawer`,
(0, vue.unref)(ns).is("penetrable", penetrable.value)
],
"z-index": (0, vue.unref)(zIndex),
onClick: (0, vue.unref)(onModalClick)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
loop: "",
trapped: (0, vue.unref)(visible),
"focus-trap-el": drawerRef.value,
"focus-start-el": focusStartRef.value,
onFocusAfterTrapped: (0, vue.unref)(onOpenAutoFocus),
onFocusAfterReleased: (0, vue.unref)(onCloseAutoFocus),
onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
onReleaseRequested: (0, vue.unref)(onCloseRequested)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
ref_key: "drawerRef",
ref: drawerRef,
"aria-modal": "true",
"aria-label": __props.title || void 0,
"aria-labelledby": !__props.title ? (0, vue.unref)(titleId) : void 0,
"aria-describedby": (0, vue.unref)(bodyId)
}, _ctx.$attrs, {
class: [
(0, vue.unref)(ns).b(),
__props.direction,
(0, vue.unref)(visible) && "open",
(0, vue.unref)(ns).is("dragging", (0, vue.unref)(isResizing))
],
style: { [(0, vue.unref)(isHorizontal) ? "width" : "height"]: (0, vue.unref)(size) },
role: "dialog",
onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
}), [
(0, vue.createElementVNode)("span", {
ref_key: "focusStartRef",
ref: focusStartRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("sr-focus")),
tabindex: "-1"
}, null, 2),
__props.withHeader ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("header", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), __props.headerClass])
}, [!_ctx.$slots.title ? (0, vue.renderSlot)(_ctx.$slots, "header", {
key: 0,
close: (0, vue.unref)(handleClose),
titleId: (0, vue.unref)(titleId),
titleClass: (0, vue.unref)(ns).e("title")
}, () => [(0, vue.createElementVNode)("span", {
id: (0, vue.unref)(titleId),
role: "heading",
"aria-level": __props.headerAriaLevel,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
}, (0, vue.toDisplayString)(__props.title), 11, _hoisted_2$24)]) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 }, () => [(0, vue.createCommentVNode)(" DEPRECATED SLOT ")]), __props.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 2,
"aria-label": (0, vue.unref)(t)("el.drawer.close"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close-btn")),
type: "button",
onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClose) && (0, vue.unref)(handleClose)(...args))
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
}, 8, ["class"])], 10, _hoisted_3$9)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(rendered) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
id: (0, vue.unref)(bodyId),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_4$7)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true),
__props.resizable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 3,
ref_key: "draggerRef",
ref: draggerRef,
style: (0, vue.normalizeStyle)({ zIndex: (0, vue.unref)(zIndex) }),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("dragger"))
}, null, 6)) : (0, vue.createCommentVNode)("v-if", true)
], 16, _hoisted_1$40)]),
_: 3
}, 8, [
"trapped",
"focus-trap-el",
"focus-start-el",
"onFocusAfterTrapped",
"onFocusAfterReleased",
"onFocusoutPrevented",
"onReleaseRequested"
])]),
_: 3
}, 8, [
"mask",
"overlay-class",
"z-index",
"onClick"
]), [[vue.vShow, (0, vue.unref)(visible)]])]),
_: 3
}, 8, [
"name",
"onAfterEnter",
"onAfterLeave",
"onBeforeLeave"
])]),
_: 3
}, 8, ["to", "disabled"]);
};
}
});
//#endregion
//#region ../../packages/components/drawer/src/drawer.vue
var drawer_default = drawer_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/drawer/index.ts
const ElDrawer = withInstall(drawer_default);
//#endregion
//#region ../../packages/components/collection/src/collection.vue?vue&type=script&lang.ts
var collection_vue_vue_type_script_lang_default = (0, vue.defineComponent)({ inheritAttrs: false });
//#endregion
//#region ../../packages/components/collection/src/collection.vue
function _sfc_render$16(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.renderSlot)(_ctx.$slots, "default");
}
var collection_default = /* @__PURE__ */ _plugin_vue_export_helper_default(collection_vue_vue_type_script_lang_default, [["render", _sfc_render$16]]);
//#endregion
//#region ../../packages/components/collection/src/collection-item.vue?vue&type=script&lang.ts
var collection_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElCollectionItem",
inheritAttrs: false
});
//#endregion
//#region ../../packages/components/collection/src/collection-item.vue
function _sfc_render$15(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.renderSlot)(_ctx.$slots, "default");
}
var collection_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(collection_item_vue_vue_type_script_lang_default, [["render", _sfc_render$15]]);
//#endregion
//#region ../../packages/components/collection/src/collection.ts
const COLLECTION_ITEM_SIGN = `data-el-collection-item`;
const createCollectionWithScope = (name) => {
const COLLECTION_NAME = `El${name}Collection`;
const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`;
const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME);
const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME);
return {
COLLECTION_INJECTION_KEY,
COLLECTION_ITEM_INJECTION_KEY,
ElCollection: Object.assign({}, collection_default, {
name: COLLECTION_NAME,
setup() {
const collectionRef = (0, vue.ref)();
const itemMap = /* @__PURE__ */ new Map();
const getItems = (() => {
const collectionEl = (0, vue.unref)(collectionRef);
if (!collectionEl) return [];
const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`));
return [...itemMap.values()].sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref));
});
(0, vue.provide)(COLLECTION_INJECTION_KEY, {
itemMap,
getItems,
collectionRef
});
}
}),
ElCollectionItem: Object.assign({}, collection_item_default, {
name: COLLECTION_ITEM_NAME,
setup(_, { attrs }) {
const collectionItemRef = (0, vue.ref)();
const collectionInjection = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
(0, vue.provide)(COLLECTION_ITEM_INJECTION_KEY, { collectionItemRef });
(0, vue.onMounted)(() => {
const collectionItemEl = (0, vue.unref)(collectionItemRef);
if (collectionItemEl) collectionInjection.itemMap.set(collectionItemEl, {
ref: collectionItemEl,
...attrs
});
});
(0, vue.onBeforeUnmount)(() => {
const collectionItemEl = (0, vue.unref)(collectionItemRef);
collectionInjection.itemMap.delete(collectionItemEl);
});
}
})
};
};
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-group.ts
const rovingFocusGroupProps = buildProps({
style: { type: definePropType([
String,
Array,
Object
]) },
currentTabId: { type: definePropType(String) },
defaultCurrentTabId: String,
loop: Boolean,
dir: {
type: String,
values: ["ltr", "rtl"],
default: "ltr"
},
orientation: { type: definePropType(String) },
onBlur: Function,
onFocus: Function,
onMousedown: Function
});
const { ElCollection, ElCollectionItem, COLLECTION_INJECTION_KEY, COLLECTION_ITEM_INJECTION_KEY } = createCollectionWithScope("RovingFocusGroup");
//#endregion
//#region ../../packages/components/roving-focus-group/src/tokens.ts
const ROVING_FOCUS_GROUP_INJECTION_KEY = Symbol("elRovingFocusGroup");
const ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY = Symbol("elRovingFocusGroupItem");
//#endregion
//#region ../../packages/components/roving-focus-group/src/utils.ts
const MAP_KEY_TO_FOCUS_INTENT = {
ArrowLeft: "prev",
ArrowUp: "prev",
ArrowRight: "next",
ArrowDown: "next",
PageUp: "first",
Home: "first",
PageDown: "last",
End: "last"
};
const getDirectionAwareKey = (key, dir) => {
if (dir !== "rtl") return key;
switch (key) {
case EVENT_CODE.right: return EVENT_CODE.left;
case EVENT_CODE.left: return EVENT_CODE.right;
default: return key;
}
};
const getFocusIntent = (event, orientation, dir) => {
const key = getDirectionAwareKey(getEventCode(event), dir);
if (orientation === "vertical" && [EVENT_CODE.left, EVENT_CODE.right].includes(key)) return void 0;
if (orientation === "horizontal" && [EVENT_CODE.up, EVENT_CODE.down].includes(key)) return void 0;
return MAP_KEY_TO_FOCUS_INTENT[key];
};
const reorderArray = (array, atIdx) => {
return array.map((_, idx) => array[(idx + atIdx) % array.length]);
};
const focusFirst = (elements) => {
const { activeElement: prevActive } = document;
for (const element of elements) {
if (element === prevActive) return;
element.focus();
if (prevActive !== document.activeElement) return;
}
};
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-group-impl.vue?vue&type=script&lang.ts
const CURRENT_TAB_ID_CHANGE_EVT = "currentTabIdChange";
const ENTRY_FOCUS_EVT = "rovingFocusGroup.entryFocus";
const EVT_OPTS = {
bubbles: false,
cancelable: true
};
var roving_focus_group_impl_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElRovingFocusGroupImpl",
inheritAttrs: false,
props: rovingFocusGroupProps,
emits: [CURRENT_TAB_ID_CHANGE_EVT, "entryFocus"],
setup(props, { emit }) {
const currentTabbedId = (0, vue.ref)((props.currentTabId || props.defaultCurrentTabId) ?? null);
const isBackingOut = (0, vue.ref)(false);
const isClickFocus = (0, vue.ref)(false);
const rovingFocusGroupRef = (0, vue.ref)();
const { getItems } = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
const rovingFocusGroupRootStyle = (0, vue.computed)(() => {
return [{ outline: "none" }, props.style];
});
const onItemFocus = (tabbedId) => {
emit(CURRENT_TAB_ID_CHANGE_EVT, tabbedId);
};
const onItemShiftTab = () => {
isBackingOut.value = true;
};
const onMousedown = composeEventHandlers((e) => {
props.onMousedown?.(e);
}, () => {
isClickFocus.value = true;
});
const onFocus = composeEventHandlers((e) => {
props.onFocus?.(e);
}, (e) => {
const isKeyboardFocus = !(0, vue.unref)(isClickFocus);
const { target, currentTarget } = e;
if (target === currentTarget && isKeyboardFocus && !(0, vue.unref)(isBackingOut)) {
const entryFocusEvt = new Event(ENTRY_FOCUS_EVT, EVT_OPTS);
currentTarget?.dispatchEvent(entryFocusEvt);
if (!entryFocusEvt.defaultPrevented) {
const items = getItems().filter((item) => item.focusable);
focusFirst([
items.find((item) => item.active),
items.find((item) => item.id === (0, vue.unref)(currentTabbedId)),
...items
].filter(Boolean).map((item) => item.ref));
}
}
isClickFocus.value = false;
});
const onBlur = composeEventHandlers((e) => {
props.onBlur?.(e);
}, () => {
isBackingOut.value = false;
});
const handleEntryFocus = (...args) => {
emit("entryFocus", ...args);
};
const onKeydown = (e) => {
const focusIntent = getFocusIntent(e);
if (focusIntent) {
e.preventDefault();
let elements = getItems().filter((item) => item.focusable).map((item) => item.ref);
switch (focusIntent) {
case "last":
elements.reverse();
break;
case "prev":
case "next": {
if (focusIntent === "prev") elements.reverse();
const currentIdx = elements.indexOf(e.currentTarget);
elements = props.loop ? reorderArray(elements, currentIdx + 1) : elements.slice(currentIdx + 1);
break;
}
default: break;
}
(0, vue.nextTick)(() => {
focusFirst(elements);
});
}
};
(0, vue.provide)(ROVING_FOCUS_GROUP_INJECTION_KEY, {
currentTabbedId: (0, vue.readonly)(currentTabbedId),
loop: (0, vue.toRef)(props, "loop"),
tabIndex: (0, vue.computed)(() => {
return (0, vue.unref)(isBackingOut) ? -1 : 0;
}),
rovingFocusGroupRef,
rovingFocusGroupRootStyle,
orientation: (0, vue.toRef)(props, "orientation"),
dir: (0, vue.toRef)(props, "dir"),
onItemFocus,
onItemShiftTab,
onBlur,
onFocus,
onMousedown,
onKeydown
});
(0, vue.watch)(() => props.currentTabId, (val) => {
currentTabbedId.value = val ?? null;
});
useEventListener(rovingFocusGroupRef, ENTRY_FOCUS_EVT, handleEntryFocus);
}
});
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-group-impl.vue
function _sfc_render$14(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.renderSlot)(_ctx.$slots, "default");
}
var roving_focus_group_impl_default = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_group_impl_vue_vue_type_script_lang_default, [["render", _sfc_render$14]]);
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-group.vue?vue&type=script&lang.ts
var roving_focus_group_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElRovingFocusGroup",
components: {
ElFocusGroupCollection: ElCollection,
ElRovingFocusGroupImpl: roving_focus_group_impl_default
}
});
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-group.vue
function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_roving_focus_group_impl = (0, vue.resolveComponent)("el-roving-focus-group-impl");
const _component_el_focus_group_collection = (0, vue.resolveComponent)("el-focus-group-collection");
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_focus_group_collection, null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_roving_focus_group_impl, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(_ctx.$attrs)), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16)]),
_: 3
});
}
var roving_focus_group_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_group_vue_vue_type_script_lang_default, [["render", _sfc_render$13]]);
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-item.vue?vue&type=script&lang.ts
var roving_focus_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
components: { ElRovingFocusCollectionItem: ElCollectionItem },
props: {
focusable: {
type: Boolean,
default: true
},
active: Boolean
},
emits: [
"mousedown",
"focus",
"keydown"
],
setup(props, { emit }) {
const { currentTabbedId, onItemFocus, onItemShiftTab, onKeydown } = (0, vue.inject)(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0);
const id = useId();
const rovingFocusGroupItemRef = (0, vue.ref)();
const handleMousedown = composeEventHandlers((e) => {
emit("mousedown", e);
}, (e) => {
if (!props.focusable) e.preventDefault();
else onItemFocus((0, vue.unref)(id));
});
const handleFocus = composeEventHandlers((e) => {
emit("focus", e);
}, () => {
onItemFocus((0, vue.unref)(id));
});
const handleKeydown = composeEventHandlers((e) => {
emit("keydown", e);
}, (e) => {
const { shiftKey, target, currentTarget } = e;
if (getEventCode(e) === EVENT_CODE.tab && shiftKey) {
onItemShiftTab();
return;
}
if (target !== currentTarget) return;
onKeydown(e);
});
const isCurrentTab = (0, vue.computed)(() => currentTabbedId.value === (0, vue.unref)(id));
(0, vue.provide)(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, {
rovingFocusGroupItemRef,
tabIndex: (0, vue.computed)(() => (0, vue.unref)(isCurrentTab) ? 0 : -1),
handleMousedown,
handleFocus,
handleKeydown
});
return {
id,
handleKeydown,
handleFocus,
handleMousedown
};
}
});
//#endregion
//#region ../../packages/components/roving-focus-group/src/roving-focus-item.vue
function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_roving_focus_collection_item = (0, vue.resolveComponent)("el-roving-focus-collection-item");
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_roving_focus_collection_item, {
id: _ctx.id,
focusable: _ctx.focusable,
active: _ctx.active
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, [
"id",
"focusable",
"active"
]);
}
var roving_focus_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_item_vue_vue_type_script_lang_default, [["render", _sfc_render$12]]);
//#endregion
//#region ../../packages/components/roving-focus-group/index.ts
var roving_focus_group_default = roving_focus_group_default$1;
//#endregion
//#region ../../packages/components/dropdown/src/dropdown.ts
const dropdownProps = buildProps({
trigger: {
...useTooltipTriggerProps.trigger,
type: definePropType([String, Array])
},
triggerKeys: {
type: definePropType(Array),
default: () => [
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space,
EVENT_CODE.down
]
},
virtualTriggering: useTooltipTriggerProps.virtualTriggering,
virtualRef: useTooltipTriggerProps.virtualRef,
effect: {
...useTooltipContentProps.effect,
default: "light"
},
type: { type: definePropType(String) },
placement: {
type: definePropType(String),
default: "bottom"
},
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
id: String,
size: {
type: String,
default: ""
},
splitButton: Boolean,
hideOnClick: {
type: Boolean,
default: true
},
loop: {
type: Boolean,
default: true
},
showArrow: {
type: Boolean,
default: true
},
showTimeout: {
type: Number,
default: 150
},
hideTimeout: {
type: Number,
default: 150
},
tabindex: {
type: definePropType([Number, String]),
default: 0
},
maxHeight: {
type: definePropType([Number, String]),
default: ""
},
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
disabled: Boolean,
role: {
type: String,
values: roleTypes,
default: "menu"
},
buttonProps: { type: definePropType(Object) },
teleported: useTooltipContentProps.teleported,
appendTo: useTooltipContentProps.appendTo,
persistent: {
type: Boolean,
default: true
}
});
const dropdownItemProps = buildProps({
command: {
type: [
Object,
String,
Number
],
default: () => ({})
},
disabled: Boolean,
divided: Boolean,
textValue: String,
icon: { type: iconPropType }
});
const dropdownMenuProps = buildProps({ onKeydown: { type: definePropType(Function) } });
const FIRST_KEYS = [
EVENT_CODE.down,
EVENT_CODE.pageDown,
EVENT_CODE.home
];
const LAST_KEYS = [
EVENT_CODE.up,
EVENT_CODE.pageUp,
EVENT_CODE.end
];
const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];
//#endregion
//#region ../../packages/components/dropdown/src/tokens.ts
const DROPDOWN_INJECTION_KEY = Symbol("elDropdown");
const DROPDOWN_INSTANCE_INJECTION_KEY = "elDropdown";
//#endregion
//#region ../../packages/components/dropdown/src/dropdown.vue?vue&type=script&lang.ts
const { ButtonGroup: ElButtonGroup$1 } = ElButton;
var dropdown_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElDropdown",
components: {
ElButton,
ElButtonGroup: ElButtonGroup$1,
ElScrollbar,
ElTooltip,
ElRovingFocusGroup: roving_focus_group_default,
ElOnlyChild: OnlyChild,
ElIcon,
ArrowDown: arrow_down_default
},
props: dropdownProps,
emits: [
"visible-change",
"click",
"command"
],
setup(props, { emit }) {
const _instance = (0, vue.getCurrentInstance)();
const ns = useNamespace("dropdown");
const { t } = useLocale();
const triggeringElementRef = (0, vue.ref)();
const referenceElementRef = (0, vue.ref)();
const popperRef = (0, vue.ref)();
const contentRef = (0, vue.ref)();
const scrollbar = (0, vue.ref)(null);
const currentTabId = (0, vue.ref)(null);
const isUsingKeyboard = (0, vue.ref)(false);
const wrapStyle = (0, vue.computed)(() => ({ maxHeight: addUnit(props.maxHeight) }));
const dropdownTriggerKls = (0, vue.computed)(() => [ns.m(dropdownSize.value)]);
const trigger = (0, vue.computed)(() => castArray$1(props.trigger));
const defaultTriggerId = useId().value;
const triggerId = (0, vue.computed)(() => props.id || defaultTriggerId);
function handleClick() {
popperRef.value?.onClose(void 0, 0);
}
function handleClose() {
popperRef.value?.onClose();
}
function handleOpen() {
popperRef.value?.onOpen();
}
const dropdownSize = useFormSize();
function commandHandler(...args) {
emit("command", ...args);
}
function onItemEnter() {}
function onItemLeave() {
const contentEl = (0, vue.unref)(contentRef);
trigger.value.includes("hover") && contentEl?.focus({ preventScroll: true });
currentTabId.value = null;
}
function handleCurrentTabIdChange(id) {
currentTabId.value = id;
}
function handleBeforeShowTooltip() {
emit("visible-change", true);
}
function handleShowTooltip(event) {
isUsingKeyboard.value = event?.type === "keydown";
contentRef.value?.focus();
}
function handleBeforeHideTooltip() {
emit("visible-change", false);
}
(0, vue.provide)(DROPDOWN_INJECTION_KEY, {
contentRef,
role: (0, vue.computed)(() => props.role),
triggerId,
isUsingKeyboard,
onItemEnter,
onItemLeave,
handleClose
});
(0, vue.provide)(DROPDOWN_INSTANCE_INJECTION_KEY, {
instance: _instance,
dropdownSize,
handleClick,
commandHandler,
trigger: (0, vue.toRef)(props, "trigger"),
hideOnClick: (0, vue.toRef)(props, "hideOnClick")
});
const handlerMainButtonClick = (event) => {
emit("click", event);
};
return {
t,
ns,
scrollbar,
wrapStyle,
dropdownTriggerKls,
dropdownSize,
triggerId,
currentTabId,
handleCurrentTabIdChange,
handlerMainButtonClick,
handleClose,
handleOpen,
handleBeforeShowTooltip,
handleShowTooltip,
handleBeforeHideTooltip,
popperRef,
contentRef,
triggeringElementRef,
referenceElementRef
};
}
});
//#endregion
//#region ../../packages/components/dropdown/src/dropdown.vue
function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_roving_focus_group = (0, vue.resolveComponent)("el-roving-focus-group");
const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
const _component_el_only_child = (0, vue.resolveComponent)("el-only-child");
const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
const _component_el_button = (0, vue.resolveComponent)("el-button");
const _component_arrow_down = (0, vue.resolveComponent)("arrow-down");
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_button_group = (0, vue.resolveComponent)("el-button-group");
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([_ctx.ns.b(), _ctx.ns.is("disabled", _ctx.disabled)]) }, [(0, vue.createVNode)(_component_el_tooltip, {
ref: "popperRef",
role: _ctx.role,
effect: _ctx.effect,
"fallback-placements": ["bottom", "top"],
"popper-options": _ctx.popperOptions,
"gpu-acceleration": false,
placement: _ctx.placement,
"popper-class": [_ctx.ns.e("popper"), _ctx.popperClass],
"popper-style": _ctx.popperStyle,
trigger: _ctx.trigger,
"trigger-keys": _ctx.triggerKeys,
"trigger-target-el": _ctx.contentRef,
"show-arrow": _ctx.showArrow,
"show-after": _ctx.trigger === "hover" ? _ctx.showTimeout : 0,
"hide-after": _ctx.trigger === "hover" ? _ctx.hideTimeout : 0,
"virtual-ref": _ctx.virtualRef ?? _ctx.triggeringElementRef,
"virtual-triggering": _ctx.virtualTriggering || _ctx.splitButton,
disabled: _ctx.disabled,
transition: `${_ctx.ns.namespace.value}-zoom-in-top`,
teleported: _ctx.teleported,
"append-to": _ctx.appendTo,
pure: "",
"focus-on-target": "",
persistent: _ctx.persistent,
onBeforeShow: _ctx.handleBeforeShowTooltip,
onShow: _ctx.handleShowTooltip,
onBeforeHide: _ctx.handleBeforeHideTooltip
}, (0, vue.createSlots)({
content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_scrollbar, {
ref: "scrollbar",
"wrap-style": _ctx.wrapStyle,
tag: "div",
"view-class": _ctx.ns.e("list")
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_roving_focus_group, {
loop: _ctx.loop,
"current-tab-id": _ctx.currentTabId,
orientation: "horizontal",
onCurrentTabIdChange: _ctx.handleCurrentTabIdChange
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "dropdown")]),
_: 3
}, 8, [
"loop",
"current-tab-id",
"onCurrentTabIdChange"
])]),
_: 3
}, 8, ["wrap-style", "view-class"])]),
_: 2
}, [!_ctx.splitButton ? {
name: "default",
fn: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_only_child, {
id: _ctx.triggerId,
ref: "triggeringElementRef",
role: "button",
tabindex: _ctx.tabindex
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["id", "tabindex"])]),
key: "0"
} : void 0]), 1032, [
"role",
"effect",
"popper-options",
"placement",
"popper-class",
"popper-style",
"trigger",
"trigger-keys",
"trigger-target-el",
"show-arrow",
"show-after",
"hide-after",
"virtual-ref",
"virtual-triggering",
"disabled",
"transition",
"teleported",
"append-to",
"persistent",
"onBeforeShow",
"onShow",
"onBeforeHide"
]), _ctx.splitButton ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_button_group, { key: 0 }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_button, (0, vue.mergeProps)({ ref: "referenceElementRef" }, _ctx.buttonProps, {
size: _ctx.dropdownSize,
type: _ctx.type,
disabled: _ctx.disabled,
tabindex: _ctx.tabindex,
onClick: _ctx.handlerMainButtonClick
}), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16, [
"size",
"type",
"disabled",
"tabindex",
"onClick"
]), (0, vue.createVNode)(_component_el_button, (0, vue.mergeProps)({
id: _ctx.triggerId,
ref: "triggeringElementRef"
}, _ctx.buttonProps, {
role: "button",
size: _ctx.dropdownSize,
type: _ctx.type,
class: _ctx.ns.e("caret-button"),
disabled: _ctx.disabled,
tabindex: _ctx.tabindex,
"aria-label": _ctx.t("el.dropdown.toggleDropdown")
}), {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_icon, { class: (0, vue.normalizeClass)(_ctx.ns.e("icon")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_arrow_down)]),
_: 1
}, 8, ["class"])]),
_: 1
}, 16, [
"id",
"size",
"type",
"class",
"disabled",
"tabindex",
"aria-label"
])]),
_: 3
})) : (0, vue.createCommentVNode)("v-if", true)], 2);
}
var dropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_vue_vue_type_script_lang_default, [["render", _sfc_render$11]]);
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-item-impl.vue?vue&type=script&lang.ts
var dropdown_item_impl_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "DropdownItemImpl",
components: { ElIcon },
props: dropdownItemProps,
emits: [
"pointermove",
"pointerleave",
"click",
"clickimpl"
],
setup(_, { emit }) {
const ns = useNamespace("dropdown");
const { role: menuRole } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
const { collectionItemRef: rovingFocusCollectionItemRef } = (0, vue.inject)(COLLECTION_ITEM_INJECTION_KEY, void 0);
const { rovingFocusGroupItemRef, tabIndex, handleFocus, handleKeydown: handleItemKeydown, handleMousedown } = (0, vue.inject)(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, void 0);
const itemRef = composeRefs(rovingFocusCollectionItemRef, rovingFocusGroupItemRef);
const role = (0, vue.computed)(() => {
if (menuRole.value === "menu") return "menuitem";
else if (menuRole.value === "navigation") return "link";
return "button";
});
const handleKeydown = composeEventHandlers((e) => {
const code = getEventCode(e);
if ([
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space
].includes(code)) {
e.preventDefault();
e.stopImmediatePropagation();
emit("clickimpl", e);
return true;
}
}, handleItemKeydown);
return {
ns,
itemRef,
dataset: { [COLLECTION_ITEM_SIGN]: "" },
role,
tabIndex,
handleFocus,
handleKeydown,
handleMousedown
};
}
});
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-item-impl.vue
const _hoisted_1$39 = [
"aria-disabled",
"tabindex",
"role"
];
function _sfc_render$10(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [_ctx.divided ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: 0,
role: "separator",
class: (0, vue.normalizeClass)(_ctx.ns.bem("menu", "item", "divided"))
}, null, 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("li", (0, vue.mergeProps)({ ref: _ctx.itemRef }, {
..._ctx.dataset,
..._ctx.$attrs
}, {
"aria-disabled": _ctx.disabled,
class: [_ctx.ns.be("menu", "item"), _ctx.ns.is("disabled", _ctx.disabled)],
tabindex: _ctx.tabIndex,
role: _ctx.role,
onClick: _cache[0] || (_cache[0] = (e) => _ctx.$emit("clickimpl", e)),
onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)),
onKeydown: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args), ["self"])),
onMousedown: _cache[3] || (_cache[3] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
onPointermove: _cache[4] || (_cache[4] = (e) => _ctx.$emit("pointermove", e)),
onPointerleave: _cache[5] || (_cache[5] = (e) => _ctx.$emit("pointerleave", e))
}), [_ctx.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, { key: 0 }, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.icon)))])]),
_: 3
})) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default")], 16, _hoisted_1$39)], 64);
}
var dropdown_item_impl_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_item_impl_vue_vue_type_script_lang_default, [["render", _sfc_render$10]]);
//#endregion
//#region ../../packages/components/dropdown/src/useDropdown.ts
const useDropdown = () => {
const elDropdown = (0, vue.inject)(DROPDOWN_INSTANCE_INJECTION_KEY, {});
return {
elDropdown,
_elDropdownSize: (0, vue.computed)(() => elDropdown?.dropdownSize)
};
};
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-item.vue?vue&type=script&lang.ts
var dropdown_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElDropdownItem",
components: {
ElRovingFocusItem: roving_focus_item_default,
ElDropdownItemImpl: dropdown_item_impl_default
},
inheritAttrs: false,
props: dropdownItemProps,
emits: [
"pointermove",
"pointerleave",
"click"
],
setup(props, { emit, attrs }) {
const { elDropdown } = useDropdown();
const _instance = (0, vue.getCurrentInstance)();
const { onItemEnter, onItemLeave } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
const handlePointerMove = composeEventHandlers((e) => {
emit("pointermove", e);
return e.defaultPrevented;
}, whenMouse((e) => {
if (props.disabled) {
onItemLeave(e);
return;
}
const target = e.currentTarget;
/**
* This handles the following scenario:
* when the item contains a form element such as input element
* when the mouse is moving over the element itself which is contained by
* the item, the default focusing logic should be prevented so that
* it won't cause weird action.
*/
if (target === document.activeElement || target.contains(document.activeElement)) return;
onItemEnter(e);
if (!e.defaultPrevented) target?.focus({ preventScroll: true });
}));
const handlePointerLeave = composeEventHandlers((e) => {
emit("pointerleave", e);
return e.defaultPrevented;
}, whenMouse(onItemLeave));
return {
handleClick: composeEventHandlers((e) => {
if (props.disabled) return;
emit("click", e);
return e.type !== "keydown" && e.defaultPrevented;
}, (e) => {
if (props.disabled) {
e.stopImmediatePropagation();
return;
}
if (elDropdown?.hideOnClick?.value) elDropdown.handleClick?.();
elDropdown.commandHandler?.(props.command, _instance, e);
}),
handlePointerMove,
handlePointerLeave,
propsAndAttrs: (0, vue.computed)(() => ({
...props,
...attrs
}))
};
}
});
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-item.vue
function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_dropdown_item_impl = (0, vue.resolveComponent)("el-dropdown-item-impl");
const _component_el_roving_focus_item = (0, vue.resolveComponent)("el-roving-focus-item");
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_roving_focus_item, { focusable: !_ctx.disabled }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_dropdown_item_impl, (0, vue.mergeProps)(_ctx.propsAndAttrs, {
onPointerleave: _ctx.handlePointerLeave,
onPointermove: _ctx.handlePointerMove,
onClickimpl: _ctx.handleClick
}), (0, vue.createSlots)({
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 2
}, [_ctx.$slots.icon ? {
name: "icon",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon")]),
key: "0"
} : void 0]), 1040, [
"onPointerleave",
"onPointermove",
"onClickimpl"
])]),
_: 3
}, 8, ["focusable"]);
}
var dropdown_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_item_vue_vue_type_script_lang_default, [["render", _sfc_render$9]]);
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-menu.vue?vue&type=script&lang.ts
var dropdown_menu_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElDropdownMenu",
props: dropdownMenuProps,
setup(props) {
const ns = useNamespace("dropdown");
const { _elDropdownSize } = useDropdown();
const size = _elDropdownSize.value;
const { contentRef, role, triggerId, isUsingKeyboard, handleClose } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
const { rovingFocusGroupRef, rovingFocusGroupRootStyle, onBlur, onFocus, onKeydown, onMousedown } = (0, vue.inject)(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0);
const { collectionRef: rovingFocusGroupCollectionRef } = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
const dropdownKls = (0, vue.computed)(() => {
return [ns.b("menu"), ns.bm("menu", size?.value)];
});
const dropdownListWrapperRef = composeRefs(contentRef, rovingFocusGroupRef, rovingFocusGroupCollectionRef);
const handleKeydown = composeEventHandlers((e) => {
props.onKeydown?.(e);
}, (e) => {
const { currentTarget, target } = e;
const code = getEventCode(e);
if (currentTarget.contains(target)) {}
if (EVENT_CODE.tab === code) return handleClose();
onKeydown(e);
});
function handleFocus(e) {
isUsingKeyboard.value && onFocus(e);
}
return {
size,
rovingFocusGroupRootStyle,
dropdownKls,
role,
triggerId,
dropdownListWrapperRef,
handleKeydown,
onBlur,
handleFocus,
onMousedown
};
}
});
//#endregion
//#region ../../packages/components/dropdown/src/dropdown-menu.vue
const _hoisted_1$38 = ["role", "aria-labelledby"];
function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
ref: _ctx.dropdownListWrapperRef,
class: (0, vue.normalizeClass)(_ctx.dropdownKls),
style: (0, vue.normalizeStyle)(_ctx.rovingFocusGroupRootStyle),
tabindex: -1,
role: _ctx.role,
"aria-labelledby": _ctx.triggerId,
onFocusin: _cache[0] || (_cache[0] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)),
onFocusout: _cache[1] || (_cache[1] = (...args) => _ctx.onBlur && _ctx.onBlur(...args)),
onKeydown: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args), ["self"])),
onMousedown: _cache[3] || (_cache[3] = (0, vue.withModifiers)((...args) => _ctx.onMousedown && _ctx.onMousedown(...args), ["self"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 46, _hoisted_1$38);
}
var dropdown_menu_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_menu_vue_vue_type_script_lang_default, [["render", _sfc_render$8]]);
//#endregion
//#region ../../packages/components/dropdown/index.ts
const ElDropdown = withInstall(dropdown_default, {
DropdownItem: dropdown_item_default,
DropdownMenu: dropdown_menu_default
});
const ElDropdownItem = withNoopInstall(dropdown_item_default);
const ElDropdownMenu = withNoopInstall(dropdown_menu_default);
//#endregion
//#region ../../packages/components/empty/src/empty.ts
/**
* @deprecated Removed after 3.0.0, Use `EmptyProps` instead.
*/
const emptyProps = buildProps({
image: {
type: String,
default: ""
},
imageSize: Number,
description: {
type: String,
default: ""
}
});
//#endregion
//#region ../../packages/components/empty/src/img-empty.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$37 = {
viewBox: "0 0 79 86",
version: "1.1",
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink"
};
const _hoisted_2$23 = ["id"];
const _hoisted_3$8 = ["stop-color"];
const _hoisted_4$6 = ["stop-color"];
const _hoisted_5$4 = ["id"];
const _hoisted_6$1 = ["stop-color"];
const _hoisted_7 = ["stop-color"];
const _hoisted_8 = ["id"];
const _hoisted_9 = {
stroke: "none",
"stroke-width": "1",
fill: "none",
"fill-rule": "evenodd"
};
const _hoisted_10 = { transform: "translate(-1268.000000, -535.000000)" };
const _hoisted_11 = { transform: "translate(1268.000000, 535.000000)" };
const _hoisted_12 = ["fill"];
const _hoisted_13 = ["fill"];
const _hoisted_14 = { transform: "translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)" };
const _hoisted_15 = ["fill"];
const _hoisted_16 = ["fill"];
const _hoisted_17 = ["fill"];
const _hoisted_18 = ["fill"];
const _hoisted_19 = ["fill"];
const _hoisted_20 = { transform: "translate(53.000000, 45.000000)" };
const _hoisted_21 = ["fill", "xlink:href"];
const _hoisted_22 = ["fill", "mask"];
const _hoisted_23 = ["fill"];
var img_empty_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ImgEmpty",
__name: "img-empty",
setup(__props) {
const ns = useNamespace("empty");
const id = useId();
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_1$37, [(0, vue.createElementVNode)("defs", null, [
(0, vue.createElementVNode)("linearGradient", {
id: `linearGradient-1-${(0, vue.unref)(id)}`,
x1: "38.8503086%",
y1: "0%",
x2: "61.1496914%",
y2: "100%"
}, [(0, vue.createElementVNode)("stop", {
"stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-1")})`,
offset: "0%"
}, null, 8, _hoisted_3$8), (0, vue.createElementVNode)("stop", {
"stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-4")})`,
offset: "100%"
}, null, 8, _hoisted_4$6)], 8, _hoisted_2$23),
(0, vue.createElementVNode)("linearGradient", {
id: `linearGradient-2-${(0, vue.unref)(id)}`,
x1: "0%",
y1: "9.5%",
x2: "100%",
y2: "90.5%"
}, [(0, vue.createElementVNode)("stop", {
"stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-1")})`,
offset: "0%"
}, null, 8, _hoisted_6$1), (0, vue.createElementVNode)("stop", {
"stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-6")})`,
offset: "100%"
}, null, 8, _hoisted_7)], 8, _hoisted_5$4),
(0, vue.createElementVNode)("rect", {
id: `path-3-${(0, vue.unref)(id)}`,
x: "0",
y: "0",
width: "17",
height: "36"
}, null, 8, _hoisted_8)
]), (0, vue.createElementVNode)("g", _hoisted_9, [(0, vue.createElementVNode)("g", _hoisted_10, [(0, vue.createElementVNode)("g", _hoisted_11, [
(0, vue.createElementVNode)("path", {
d: "M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-3")})`
}, null, 8, _hoisted_12),
(0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-7")})`,
transform: "translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",
points: "13 58 53 58 42 45 2 45"
}, null, 8, _hoisted_13),
(0, vue.createElementVNode)("g", _hoisted_14, [
(0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-7")})`,
transform: "translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",
points: "2.84078316e-14 3 18 3 23 7 5 7"
}, null, 8, _hoisted_15),
(0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-5")})`,
points: "-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"
}, null, 8, _hoisted_16),
(0, vue.createElementVNode)("rect", {
fill: `url(#linearGradient-1-${(0, vue.unref)(id)})`,
transform: "translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",
x: "38",
y: "7",
width: "17",
height: "36"
}, null, 8, _hoisted_17),
(0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-2")})`,
transform: "translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",
points: "24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"
}, null, 8, _hoisted_18)
]),
(0, vue.createElementVNode)("rect", {
fill: `url(#linearGradient-2-${(0, vue.unref)(id)})`,
x: "13",
y: "45",
width: "40",
height: "36"
}, null, 8, _hoisted_19),
(0, vue.createElementVNode)("g", _hoisted_20, [(0, vue.createElementVNode)("use", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-8")})`,
transform: "translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ",
"xlink:href": `#path-3-${(0, vue.unref)(id)}`
}, null, 8, _hoisted_21), (0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-9")})`,
mask: `url(#mask-4-${(0, vue.unref)(id)})`,
transform: "translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",
points: "7 0 24 0 20 18 7 16.5"
}, null, 8, _hoisted_22)]),
(0, vue.createElementVNode)("polygon", {
fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-2")})`,
transform: "translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",
points: "62 45 79 45 70 58 53 58"
}, null, 8, _hoisted_23)
])])])]);
};
}
});
//#endregion
//#region ../../packages/components/empty/src/img-empty.vue
var img_empty_default = img_empty_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/empty/src/empty.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$36 = ["src"];
const _hoisted_2$22 = { key: 1 };
var empty_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElEmpty",
__name: "empty",
props: emptyProps,
setup(__props) {
const props = __props;
const { t } = useLocale();
const ns = useNamespace("empty");
const emptyDescription = (0, vue.computed)(() => props.description || t("el.table.emptyText"));
const imageStyle = (0, vue.computed)(() => ({ width: addUnit(props.imageSize) }));
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("image")),
style: (0, vue.normalizeStyle)(imageStyle.value)
}, [__props.image ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
key: 0,
src: __props.image,
ondragstart: "return false"
}, null, 8, _hoisted_1$36)) : (0, vue.renderSlot)(_ctx.$slots, "image", { key: 1 }, () => [(0, vue.createVNode)(img_empty_default)])], 6),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("description")) }, [_ctx.$slots.description ? (0, vue.renderSlot)(_ctx.$slots, "description", { key: 0 }) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_2$22, (0, vue.toDisplayString)(emptyDescription.value), 1))], 2),
_ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("bottom"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/empty/src/empty.vue
var empty_default = empty_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/empty/index.ts
const ElEmpty = withInstall(empty_default);
//#endregion
//#region ../../packages/components/image/src/image.ts
/**
* @deprecated Removed after 3.0.0, Use `ImageProps` instead.
*/
const imageProps = buildProps({
hideOnClickModal: Boolean,
src: {
type: String,
default: ""
},
fit: {
type: String,
values: [
"",
"contain",
"cover",
"fill",
"none",
"scale-down"
],
default: ""
},
loading: {
type: String,
values: ["eager", "lazy"]
},
lazy: Boolean,
scrollContainer: { type: definePropType([String, Object]) },
previewSrcList: {
type: definePropType(Array),
default: () => mutable([])
},
previewTeleported: Boolean,
zIndex: { type: Number },
initialIndex: {
type: Number,
default: 0
},
infinite: {
type: Boolean,
default: true
},
closeOnPressEscape: {
type: Boolean,
default: true
},
zoomRate: {
type: Number,
default: 1.2
},
scale: {
type: Number,
default: 1
},
minScale: {
type: Number,
default: .2
},
maxScale: {
type: Number,
default: 7
},
showProgress: Boolean,
crossorigin: { type: definePropType(String) }
});
const imageEmits = {
load: (evt) => evt instanceof Event,
error: (evt) => evt instanceof Event,
switch: (val) => isNumber(val),
close: () => true,
show: () => true
};
//#endregion
//#region ../../packages/components/image-viewer/src/image-viewer.ts
/**
* @deprecated Removed after 3.0.0, Use `ImageViewerProps` instead.
*/
const imageViewerProps = buildProps({
urlList: {
type: definePropType(Array),
default: () => mutable([])
},
zIndex: { type: Number },
initialIndex: {
type: Number,
default: 0
},
infinite: {
type: Boolean,
default: true
},
hideOnClickModal: Boolean,
teleported: Boolean,
closeOnPressEscape: {
type: Boolean,
default: true
},
zoomRate: {
type: Number,
default: 1.2
},
scale: {
type: Number,
default: 1
},
minScale: {
type: Number,
default: .2
},
maxScale: {
type: Number,
default: 7
},
showProgress: Boolean,
crossorigin: { type: definePropType(String) }
});
const imageViewerEmits = {
close: () => true,
error: (evt) => evt instanceof Event,
switch: (index) => isNumber(index),
rotate: (deg) => isNumber(deg)
};
//#endregion
//#region ../../packages/components/image-viewer/src/image-viewer.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$35 = ["src", "crossorigin"];
var image_viewer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElImageViewer",
__name: "image-viewer",
props: imageViewerProps,
emits: imageViewerEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const modes = {
CONTAIN: {
name: "contain",
icon: (0, vue.markRaw)(full_screen_default)
},
ORIGINAL: {
name: "original",
icon: (0, vue.markRaw)(scale_to_original_default)
}
};
const props = __props;
const emit = __emit;
let stopWheelListener;
const { t } = useLocale();
const ns = useNamespace("image-viewer");
const { nextZIndex } = useZIndex();
const wrapper = (0, vue.ref)();
const imgRef = (0, vue.ref)();
const scopeEventListener = (0, vue.effectScope)();
const scaleClamped = (0, vue.computed)(() => {
const { scale, minScale, maxScale } = props;
return clamp$2(scale, minScale, maxScale);
});
const loading = (0, vue.ref)(true);
const loadError = (0, vue.ref)(false);
const visible = (0, vue.ref)(false);
const activeIndex = (0, vue.ref)(props.initialIndex);
const mode = (0, vue.shallowRef)(modes.CONTAIN);
const transform = (0, vue.ref)({
scale: scaleClamped.value,
deg: 0,
offsetX: 0,
offsetY: 0,
enableTransition: false
});
const zIndex = (0, vue.ref)(props.zIndex ?? nextZIndex());
useLockscreen(visible, { ns });
const isSingle = (0, vue.computed)(() => {
const { urlList } = props;
return urlList.length <= 1;
});
const isFirst = (0, vue.computed)(() => activeIndex.value === 0);
const isLast = (0, vue.computed)(() => activeIndex.value === props.urlList.length - 1);
const currentImg = (0, vue.computed)(() => props.urlList[activeIndex.value]);
const arrowPrevKls = (0, vue.computed)(() => [
ns.e("btn"),
ns.e("prev"),
ns.is("disabled", !props.infinite && isFirst.value)
]);
const arrowNextKls = (0, vue.computed)(() => [
ns.e("btn"),
ns.e("next"),
ns.is("disabled", !props.infinite && isLast.value)
]);
const imgStyle = (0, vue.computed)(() => {
const { scale, deg, offsetX, offsetY, enableTransition } = transform.value;
let translateX = offsetX / scale;
let translateY = offsetY / scale;
const radian = deg * Math.PI / 180;
const cosRadian = Math.cos(radian);
const sinRadian = Math.sin(radian);
translateX = translateX * cosRadian + translateY * sinRadian;
translateY = translateY * cosRadian - offsetX / scale * sinRadian;
const style = {
transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,
transition: enableTransition ? "transform .3s" : ""
};
if (mode.value.name === modes.CONTAIN.name) style.maxWidth = style.maxHeight = "100%";
return style;
});
const progress = (0, vue.computed)(() => `${activeIndex.value + 1} / ${props.urlList.length}`);
function hide() {
unregisterEventListener();
stopWheelListener?.();
visible.value = false;
emit("close");
}
function registerEventListener() {
const keydownHandler = throttle((e) => {
switch (getEventCode(e)) {
case EVENT_CODE.esc:
props.closeOnPressEscape && hide();
break;
case EVENT_CODE.space:
toggleMode();
break;
case EVENT_CODE.left:
prev();
break;
case EVENT_CODE.up:
handleActions("zoomIn");
break;
case EVENT_CODE.right:
next();
break;
case EVENT_CODE.down:
handleActions("zoomOut");
break;
}
});
const mousewheelHandler = throttle((e) => {
handleActions((e.deltaY || e.deltaX) < 0 ? "zoomIn" : "zoomOut", {
zoomRate: props.zoomRate,
enableTransition: false
});
});
scopeEventListener.run(() => {
useEventListener(document, "keydown", keydownHandler);
useEventListener(wrapper, "wheel", mousewheelHandler);
});
}
function unregisterEventListener() {
scopeEventListener.stop();
}
function handleImgLoad() {
loading.value = false;
}
function handleImgError(e) {
loadError.value = true;
loading.value = false;
emit("error", e);
e.target.alt = t("el.image.error");
}
function handleMouseDown(e) {
if (loading.value || e.button !== 0 || !wrapper.value) return;
transform.value.enableTransition = false;
const { offsetX, offsetY } = transform.value;
const startX = e.pageX;
const startY = e.pageY;
const dragHandler = throttle((ev) => {
transform.value = {
...transform.value,
offsetX: offsetX + ev.pageX - startX,
offsetY: offsetY + ev.pageY - startY
};
});
const removeMousemove = useEventListener(document, "mousemove", dragHandler);
const removeMouseup = useEventListener(document, "mouseup", () => {
removeMousemove();
removeMouseup();
});
e.preventDefault();
}
function handleTouchStart(e) {
if (loading.value || !wrapper.value || e.touches.length !== 1) return;
transform.value.enableTransition = false;
const { offsetX, offsetY } = transform.value;
const { pageX: startX, pageY: startY } = e.touches[0];
const dragHandler = throttle((ev) => {
const targetTouch = ev.touches[0];
transform.value = {
...transform.value,
offsetX: offsetX + targetTouch.pageX - startX,
offsetY: offsetY + targetTouch.pageY - startY
};
});
const removeTouchmove = useEventListener(document, "touchmove", dragHandler);
const removeTouchend = useEventListener(document, "touchend", () => {
removeTouchmove();
removeTouchend();
});
e.preventDefault();
}
function reset() {
transform.value = {
scale: scaleClamped.value,
deg: 0,
offsetX: 0,
offsetY: 0,
enableTransition: false
};
}
function toggleMode() {
if (loading.value || loadError.value) return;
const modeNames = keysOf(modes);
const modeValues = Object.values(modes);
const currentMode = mode.value.name;
mode.value = modes[modeNames[(modeValues.findIndex((i) => i.name === currentMode) + 1) % modeNames.length]];
reset();
}
function setActiveItem(index) {
loadError.value = false;
const len = props.urlList.length;
activeIndex.value = (index + len) % len;
}
function prev() {
if (isFirst.value && !props.infinite) return;
setActiveItem(activeIndex.value - 1);
}
function next() {
if (isLast.value && !props.infinite) return;
setActiveItem(activeIndex.value + 1);
}
function handleActions(action, options = {}) {
if (loading.value || loadError.value) return;
const { minScale, maxScale } = props;
const { zoomRate, rotateDeg, enableTransition } = {
zoomRate: props.zoomRate,
rotateDeg: 90,
enableTransition: true,
...options
};
switch (action) {
case "zoomOut":
if (transform.value.scale > minScale) transform.value.scale = Number.parseFloat((transform.value.scale / zoomRate).toFixed(3));
break;
case "zoomIn":
if (transform.value.scale < maxScale) transform.value.scale = Number.parseFloat((transform.value.scale * zoomRate).toFixed(3));
break;
case "clockwise":
transform.value.deg += rotateDeg;
emit("rotate", transform.value.deg);
break;
case "anticlockwise":
transform.value.deg -= rotateDeg;
emit("rotate", transform.value.deg);
break;
}
transform.value.enableTransition = enableTransition;
}
function onFocusoutPrevented(event) {
if (event.detail?.focusReason === "pointer") event.preventDefault();
}
function onCloseRequested() {
if (props.closeOnPressEscape) hide();
}
function wheelHandler(e) {
if (!e.ctrlKey) return;
if (e.deltaY < 0) {
e.preventDefault();
return false;
} else if (e.deltaY > 0) {
e.preventDefault();
return false;
}
}
(0, vue.watch)(() => scaleClamped.value, (val) => {
transform.value.scale = val;
});
(0, vue.watch)(currentImg, () => {
(0, vue.nextTick)(() => {
if (!imgRef.value?.complete) loading.value = true;
});
});
(0, vue.watch)(activeIndex, (val) => {
reset();
emit("switch", val);
});
(0, vue.onMounted)(() => {
visible.value = true;
registerEventListener();
stopWheelListener = useEventListener("wheel", wheelHandler, { passive: false });
});
__expose({ setActiveItem });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTeleport), {
to: "body",
disabled: !__props.teleported
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(vue.Transition, {
name: "viewer-fade",
appear: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref_key: "wrapper",
ref: wrapper,
tabindex: -1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")),
style: (0, vue.normalizeStyle)({ zIndex: zIndex.value })
}, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
loop: "",
trapped: "",
"focus-trap-el": wrapper.value,
"focus-start-el": "container",
onFocusoutPrevented,
onReleaseRequested: onCloseRequested
}, {
default: (0, vue.withCtx)(() => [
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("mask")),
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => __props.hideOnClickModal && hide(), ["self"]))
}, null, 2),
(0, vue.createCommentVNode)(" CLOSE "),
(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("close")]),
onClick: hide
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
})], 2),
(0, vue.createCommentVNode)(" ARROW "),
!isSingle.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)(arrowPrevKls.value),
onClick: prev
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
})], 2), (0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)(arrowNextKls.value),
onClick: next
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})], 2)], 64)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.progress || __props.showProgress ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("progress")])
}, [(0, vue.renderSlot)(_ctx.$slots, "progress", {
activeIndex: activeIndex.value,
total: __props.urlList.length
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(progress.value), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createCommentVNode)(" ACTIONS "),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("actions")]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__inner")) }, [(0, vue.renderSlot)(_ctx.$slots, "toolbar", {
actions: handleActions,
prev,
next,
reset: toggleMode,
activeIndex: activeIndex.value,
setActiveItem
}, () => [
(0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[1] || (_cache[1] = ($event) => handleActions("zoomOut")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_out_default))]),
_: 1
}),
(0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[2] || (_cache[2] = ($event) => handleActions("zoomIn")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_in_default))]),
_: 1
}),
(0, vue.createElementVNode)("i", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__divider")) }, null, 2),
(0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: toggleMode }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(mode.value.icon)))]),
_: 1
}),
(0, vue.createElementVNode)("i", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__divider")) }, null, 2),
(0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[3] || (_cache[3] = ($event) => handleActions("anticlockwise")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(refresh_left_default))]),
_: 1
}),
(0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[4] || (_cache[4] = ($event) => handleActions("clockwise")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(refresh_right_default))]),
_: 1
})
])], 2)], 2),
(0, vue.createCommentVNode)(" CANVAS "),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("canvas")) }, [loadError.value && _ctx.$slots["viewer-error"] ? (0, vue.renderSlot)(_ctx.$slots, "viewer-error", {
key: 0,
activeIndex: activeIndex.value,
src: currentImg.value
}) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
ref_key: "imgRef",
ref: imgRef,
key: currentImg.value,
src: currentImg.value,
style: (0, vue.normalizeStyle)(imgStyle.value),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("img")),
crossorigin: __props.crossorigin,
onLoad: handleImgLoad,
onError: handleImgError,
onMousedown: handleMouseDown,
onTouchstart: handleTouchStart
}, null, 46, _hoisted_1$35))], 2),
(0, vue.renderSlot)(_ctx.$slots, "default")
]),
_: 3
}, 8, ["focus-trap-el"])], 6)]),
_: 3
})]),
_: 3
}, 8, ["disabled"]);
};
}
});
//#endregion
//#region ../../packages/components/image-viewer/src/image-viewer.vue
var image_viewer_default = image_viewer_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/image-viewer/index.ts
const ElImageViewer = withInstall(image_viewer_default);
//#endregion
//#region ../../packages/components/image/src/image.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$34 = [
"src",
"loading",
"crossorigin"
];
const _hoisted_2$21 = { key: 0 };
var image_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElImage",
inheritAttrs: false,
__name: "image",
props: imageProps,
emits: imageEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("image");
const rawAttrs = (0, vue.useAttrs)();
const containerAttrs = (0, vue.computed)(() => {
return fromPairs(Object.entries(rawAttrs).filter(([key]) => /^(data-|on[A-Z])/i.test(key) || ["id", "style"].includes(key)));
});
const imgAttrs = useAttrs({
excludeListeners: true,
excludeKeys: (0, vue.computed)(() => {
return Object.keys(containerAttrs.value);
})
});
const imageSrc = (0, vue.ref)();
const hasLoadError = (0, vue.ref)(false);
const isLoading = (0, vue.ref)(true);
const showViewer = (0, vue.ref)(false);
const container = (0, vue.ref)();
const _scrollContainer = (0, vue.ref)();
const supportLoading = isClient && "loading" in HTMLImageElement.prototype;
let stopScrollListener;
const imageKls = (0, vue.computed)(() => [
ns.e("inner"),
preview.value && ns.e("preview"),
isLoading.value && ns.is("loading")
]);
const imageStyle = (0, vue.computed)(() => {
const { fit } = props;
if (isClient && fit) return { objectFit: fit };
return {};
});
const preview = (0, vue.computed)(() => {
const { previewSrcList } = props;
return isArray$1(previewSrcList) && previewSrcList.length > 0;
});
const imageIndex = (0, vue.computed)(() => {
const { previewSrcList, initialIndex } = props;
let previewIndex = initialIndex;
if (initialIndex > previewSrcList.length - 1) previewIndex = 0;
return previewIndex;
});
const isManual = (0, vue.computed)(() => {
if (props.loading === "eager") return false;
return !supportLoading && props.loading === "lazy" || props.lazy;
});
const loadImage = () => {
if (!isClient) return;
isLoading.value = true;
hasLoadError.value = false;
imageSrc.value = props.src;
};
function handleLoad(event) {
isLoading.value = false;
hasLoadError.value = false;
emit("load", event);
}
function handleError(event) {
isLoading.value = false;
hasLoadError.value = true;
emit("error", event);
}
function handleLazyLoad(isIntersecting) {
if (isIntersecting) {
loadImage();
removeLazyLoadListener();
}
}
const lazyLoadHandler = useThrottleFn(handleLazyLoad, 200, true);
async function addLazyLoadListener() {
if (!isClient) return;
await (0, vue.nextTick)();
const { scrollContainer } = props;
if (isElement$1(scrollContainer)) _scrollContainer.value = scrollContainer;
else if (isString(scrollContainer) && scrollContainer !== "") _scrollContainer.value = document.querySelector(scrollContainer) ?? void 0;
else if (container.value) {
const scrollContainer = getScrollContainer(container.value);
_scrollContainer.value = isWindow(scrollContainer) ? void 0 : scrollContainer;
}
const { stop } = useIntersectionObserver(container, ([entry]) => {
lazyLoadHandler(entry.isIntersecting);
}, { root: _scrollContainer });
stopScrollListener = stop;
}
function removeLazyLoadListener() {
if (!isClient || !lazyLoadHandler) return;
stopScrollListener?.();
_scrollContainer.value = void 0;
stopScrollListener = void 0;
}
function clickHandler() {
if (!preview.value) return;
showViewer.value = true;
emit("show");
}
function closeViewer() {
showViewer.value = false;
emit("close");
}
function switchViewer(val) {
emit("switch", val);
}
(0, vue.watch)(() => props.src, () => {
if (isManual.value) {
isLoading.value = true;
hasLoadError.value = false;
removeLazyLoadListener();
addLazyLoadListener();
} else loadImage();
});
(0, vue.onMounted)(() => {
if (isManual.value) addLazyLoadListener();
else loadImage();
});
__expose({ showPreview: clickHandler });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
ref_key: "container",
ref: container
}, containerAttrs.value, { class: [(0, vue.unref)(ns).b(), _ctx.$attrs.class] }), [hasLoadError.value ? (0, vue.renderSlot)(_ctx.$slots, "error", { key: 0 }, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("error")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.image.error")), 3)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [imageSrc.value !== void 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", (0, vue.mergeProps)({ key: 0 }, (0, vue.unref)(imgAttrs), {
src: imageSrc.value,
loading: __props.loading,
style: imageStyle.value,
class: imageKls.value,
crossorigin: __props.crossorigin,
onClick: clickHandler,
onLoad: handleLoad,
onError: handleError
}), null, 16, _hoisted_1$34)) : (0, vue.createCommentVNode)("v-if", true), isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper"))
}, [(0, vue.renderSlot)(_ctx.$slots, "placeholder", {}, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("placeholder")) }, null, 2)])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 64)), preview.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [showViewer.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElImageViewer), {
key: 0,
"z-index": __props.zIndex,
"initial-index": imageIndex.value,
infinite: __props.infinite,
"zoom-rate": __props.zoomRate,
"min-scale": __props.minScale,
"max-scale": __props.maxScale,
"show-progress": __props.showProgress,
"url-list": __props.previewSrcList,
scale: __props.scale,
crossorigin: __props.crossorigin,
"hide-on-click-modal": __props.hideOnClickModal,
teleported: __props.previewTeleported,
"close-on-press-escape": __props.closeOnPressEscape,
onClose: closeViewer,
onSwitch: switchViewer
}, (0, vue.createSlots)({
toolbar: (0, vue.withCtx)((toolbar) => [(0, vue.renderSlot)(_ctx.$slots, "toolbar", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(toolbar)))]),
default: (0, vue.withCtx)(() => [_ctx.$slots.viewer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$21, [(0, vue.renderSlot)(_ctx.$slots, "viewer")])) : (0, vue.createCommentVNode)("v-if", true)]),
_: 2
}, [_ctx.$slots.progress ? {
name: "progress",
fn: (0, vue.withCtx)((progress) => [(0, vue.renderSlot)(_ctx.$slots, "progress", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(progress)))]),
key: "0"
} : void 0, _ctx.$slots["viewer-error"] ? {
name: "viewer-error",
fn: (0, vue.withCtx)((viewerError) => [(0, vue.renderSlot)(_ctx.$slots, "viewer-error", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(viewerError)))]),
key: "1"
} : void 0]), 1032, [
"z-index",
"initial-index",
"infinite",
"zoom-rate",
"min-scale",
"max-scale",
"show-progress",
"url-list",
"scale",
"crossorigin",
"hide-on-click-modal",
"teleported",
"close-on-press-escape"
])) : (0, vue.createCommentVNode)("v-if", true)], 64)) : (0, vue.createCommentVNode)("v-if", true)], 16);
};
}
});
//#endregion
//#region ../../packages/components/image/src/image.vue
var image_default = image_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/image/index.ts
const ElImage = withInstall(image_default);
//#endregion
//#region ../../packages/components/input-number/src/input-number.ts
/**
* @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.
*/
const inputNumberProps = buildProps({
id: {
type: String,
default: void 0
},
step: {
type: Number,
default: 1
},
stepStrictly: Boolean,
max: {
type: Number,
default: Number.MAX_SAFE_INTEGER
},
min: {
type: Number,
default: Number.MIN_SAFE_INTEGER
},
modelValue: { type: [Number, null] },
readonly: Boolean,
disabled: {
type: Boolean,
default: void 0
},
size: useSizeProp,
controls: {
type: Boolean,
default: true
},
controlsPosition: {
type: String,
default: "",
values: ["", "right"]
},
valueOnClear: {
type: definePropType([
String,
Number,
null
]),
validator: (val) => val === null || isNumber(val) || ["min", "max"].includes(val),
default: null
},
name: String,
placeholder: String,
precision: {
type: Number,
validator: (val) => val >= 0 && val === Number.parseInt(`${val}`, 10)
},
validateEvent: {
type: Boolean,
default: true
},
...useAriaProps(["ariaLabel"]),
inputmode: {
type: definePropType(String),
default: void 0
},
align: {
type: definePropType(String),
default: "center"
},
disabledScientific: Boolean
});
const inputNumberEmits = {
[CHANGE_EVENT]: (cur, prev) => prev !== cur,
blur: (e) => e instanceof FocusEvent,
focus: (e) => e instanceof FocusEvent,
[INPUT_EVENT]: (val) => isNumber(val) || isNil(val),
[UPDATE_MODEL_EVENT]: (val) => isNumber(val) || isNil(val)
};
//#endregion
//#region ../../packages/components/input-number/src/input-number.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$33 = ["aria-label"];
const _hoisted_2$20 = ["aria-label"];
var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElInputNumber",
__name: "input-number",
props: inputNumberProps,
emits: inputNumberEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("input-number");
const input = (0, vue.ref)();
const data = (0, vue.reactive)({
currentValue: props.modelValue,
userInput: null
});
const { formItem } = useFormItem();
const minDisabled = (0, vue.computed)(() => isNumber(props.modelValue) && props.modelValue <= props.min);
const maxDisabled = (0, vue.computed)(() => isNumber(props.modelValue) && props.modelValue >= props.max);
const numPrecision = (0, vue.computed)(() => {
const stepPrecision = getPrecision(props.step);
if (!isUndefined(props.precision)) {
if (stepPrecision > props.precision) /* @__PURE__ */ debugWarn("InputNumber", "precision should not be less than the decimal places of step");
return props.precision;
} else return Math.max(getPrecision(props.modelValue), stepPrecision);
});
const controlsAtRight = (0, vue.computed)(() => {
return props.controls && props.controlsPosition === "right";
});
const inputNumberSize = useFormSize();
const inputNumberDisabled = useFormDisabled();
const displayValue = (0, vue.computed)(() => {
if (data.userInput !== null) return data.userInput;
let currentValue = data.currentValue;
if (isNil(currentValue)) return "";
if (isNumber(currentValue)) {
if (Number.isNaN(currentValue)) return "";
if (!isUndefined(props.precision)) currentValue = currentValue.toFixed(props.precision);
}
return currentValue;
});
const toPrecision = (num, pre) => {
if (isUndefined(pre)) pre = numPrecision.value;
if (pre === 0) return Math.round(num);
let snum = String(num);
const pointPos = snum.indexOf(".");
if (pointPos === -1) return num;
if (!snum.replace(".", "").split("")[pointPos + pre]) return num;
const length = snum.length;
if (snum.charAt(length - 1) === "5") snum = `${snum.slice(0, Math.max(0, length - 1))}6`;
return Number.parseFloat(Number(snum).toFixed(pre));
};
const getPrecision = (value) => {
if (isNil(value)) return 0;
const valueString = value.toString();
const dotPosition = valueString.indexOf(".");
let precision = 0;
if (dotPosition !== -1) precision = valueString.length - dotPosition - 1;
return precision;
};
const ensurePrecision = (val, coefficient = 1) => {
if (!isNumber(val)) return data.currentValue;
if (val >= Number.MAX_SAFE_INTEGER && coefficient === 1) {
/* @__PURE__ */ debugWarn("InputNumber", "The value has reached the maximum safe integer limit.");
return val;
} else if (val <= Number.MIN_SAFE_INTEGER && coefficient === -1) {
/* @__PURE__ */ debugWarn("InputNumber", "The value has reached the minimum safe integer limit.");
return val;
}
return toPrecision(val + props.step * coefficient);
};
const handleKeydown = (event) => {
const code = getEventCode(event);
const key = getEventKey(event);
if (props.disabledScientific && ["e", "E"].includes(key)) {
event.preventDefault();
return;
}
switch (code) {
case EVENT_CODE.up:
event.preventDefault();
increase();
break;
case EVENT_CODE.down:
event.preventDefault();
decrease();
break;
}
};
const increase = () => {
if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return;
setCurrentValue(ensurePrecision(Number(displayValue.value) || 0));
emit(INPUT_EVENT, data.currentValue);
setCurrentValueToModelValue();
};
const decrease = () => {
if (props.readonly || inputNumberDisabled.value || minDisabled.value) return;
setCurrentValue(ensurePrecision(Number(displayValue.value) || 0, -1));
emit(INPUT_EVENT, data.currentValue);
setCurrentValueToModelValue();
};
const verifyValue = (value, update) => {
const { max, min, step, precision, stepStrictly, valueOnClear } = props;
if (max < min) throwError("InputNumber", "min should not be greater than max.");
let newVal = Number(value);
if (isNil(value) || Number.isNaN(newVal)) return null;
if (value === "") {
if (valueOnClear === null) return null;
newVal = isString(valueOnClear) ? {
min,
max
}[valueOnClear] : valueOnClear;
}
if (stepStrictly) {
newVal = toPrecision(Math.round(toPrecision(newVal / step)) * step, precision);
if (newVal !== value) update && emit(UPDATE_MODEL_EVENT, newVal);
}
if (!isUndefined(precision)) newVal = toPrecision(newVal, precision);
if (newVal > max || newVal < min) {
newVal = newVal > max ? max : min;
update && emit(UPDATE_MODEL_EVENT, newVal);
}
return newVal;
};
const setCurrentValue = (value, emitChange = true) => {
const oldVal = data.currentValue;
const newVal = verifyValue(value);
if (!emitChange) {
emit(UPDATE_MODEL_EVENT, newVal);
return;
}
data.userInput = null;
if (oldVal === newVal && value) return;
emit(UPDATE_MODEL_EVENT, newVal);
if (oldVal !== newVal) emit(CHANGE_EVENT, newVal, oldVal);
if (props.validateEvent) formItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
data.currentValue = newVal;
};
const handleInput = (value) => {
data.userInput = value;
const newVal = value === "" ? null : Number(value);
emit(INPUT_EVENT, newVal);
setCurrentValue(newVal, false);
};
const handleInputChange = (value) => {
const newVal = value !== "" ? Number(value) : "";
if (isNumber(newVal) && !Number.isNaN(newVal) || value === "") setCurrentValue(newVal);
setCurrentValueToModelValue();
data.userInput = null;
};
const focus = () => {
input.value?.focus?.();
};
const blur = () => {
input.value?.blur?.();
};
const handleFocus = (event) => {
emit("focus", event);
};
const handleBlur = (event) => {
data.userInput = null;
if (data.currentValue === null && input.value?.input) input.value.input.value = "";
emit("blur", event);
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
};
const setCurrentValueToModelValue = () => {
if (data.currentValue !== props.modelValue) data.currentValue = props.modelValue;
};
const handleWheel = (e) => {
if (document.activeElement === e.target) e.preventDefault();
};
(0, vue.watch)(() => props.modelValue, (value, oldValue) => {
const newValue = verifyValue(value, true);
if (data.userInput === null && newValue !== oldValue) data.currentValue = newValue;
}, { immediate: true });
(0, vue.watch)(() => props.precision, () => {
data.currentValue = verifyValue(props.modelValue);
});
(0, vue.onMounted)(() => {
const { min, max, modelValue } = props;
const innerInput = input.value?.input;
innerInput.setAttribute("role", "spinbutton");
if (Number.isFinite(max)) innerInput.setAttribute("aria-valuemax", String(max));
else innerInput.removeAttribute("aria-valuemax");
if (Number.isFinite(min)) innerInput.setAttribute("aria-valuemin", String(min));
else innerInput.removeAttribute("aria-valuemin");
innerInput.setAttribute("aria-valuenow", data.currentValue || data.currentValue === 0 ? String(data.currentValue) : "");
innerInput.setAttribute("aria-disabled", String(inputNumberDisabled.value));
if (!isNumber(modelValue) && modelValue != null) {
let val = Number(modelValue);
if (Number.isNaN(val)) val = null;
emit(UPDATE_MODEL_EVENT, val);
}
innerInput.addEventListener("wheel", handleWheel, { passive: false });
});
(0, vue.onUpdated)(() => {
(input.value?.input)?.setAttribute("aria-valuenow", `${data.currentValue ?? ""}`);
});
__expose({
focus,
blur
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).m((0, vue.unref)(inputNumberSize)),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(inputNumberDisabled)),
(0, vue.unref)(ns).is("without-controls", !__props.controls),
(0, vue.unref)(ns).is("controls-right", controlsAtRight.value),
(0, vue.unref)(ns).is(__props.align, !!__props.align)
]),
onDragstart: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["prevent"]))
}, [
__props.controls ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
role: "button",
"aria-label": (0, vue.unref)(t)("el.inputNumber.decrease"),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("decrease"), (0, vue.unref)(ns).is("disabled", minDisabled.value)]),
onKeydown: (0, vue.withKeys)(decrease, ["enter"])
}, [(0, vue.renderSlot)(_ctx.$slots, "decrease-icon", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [controlsAtRight.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_down_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(minus_default), { key: 1 }))]),
_: 1
})])], 42, _hoisted_1$33)), [[(0, vue.unref)(vRepeatClick), decrease]]) : (0, vue.createCommentVNode)("v-if", true),
__props.controls ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
role: "button",
"aria-label": (0, vue.unref)(t)("el.inputNumber.increase"),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("increase"), (0, vue.unref)(ns).is("disabled", maxDisabled.value)]),
onKeydown: (0, vue.withKeys)(increase, ["enter"])
}, [(0, vue.renderSlot)(_ctx.$slots, "increase-icon", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [controlsAtRight.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_up_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(plus_default), { key: 1 }))]),
_: 1
})])], 42, _hoisted_2$20)), [[(0, vue.unref)(vRepeatClick), increase]]) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createVNode)((0, vue.unref)(ElInput), {
id: __props.id,
ref_key: "input",
ref: input,
type: "number",
step: __props.step,
"model-value": displayValue.value,
placeholder: __props.placeholder,
readonly: __props.readonly,
disabled: (0, vue.unref)(inputNumberDisabled),
size: (0, vue.unref)(inputNumberSize),
max: __props.max,
min: __props.min,
name: __props.name,
"aria-label": __props.ariaLabel,
"validate-event": false,
inputmode: __props.inputmode,
onKeydown: handleKeydown,
onBlur: handleBlur,
onFocus: handleFocus,
onInput: handleInput,
onChange: handleInputChange
}, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots.prefix ? {
name: "prefix",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
key: "0"
} : void 0, _ctx.$slots.suffix ? {
name: "suffix",
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "suffix")]),
key: "1"
} : void 0]), 1032, [
"id",
"step",
"model-value",
"placeholder",
"readonly",
"disabled",
"size",
"max",
"min",
"name",
"aria-label",
"inputmode"
])
], 34);
};
}
});
//#endregion
//#region ../../packages/components/input-number/src/input-number.vue
var input_number_default = input_number_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/input-number/index.ts
const ElInputNumber = withInstall(input_number_default);
//#endregion
//#region ../../packages/components/input-tag/src/input-tag.ts
/**
* @deprecated Removed after 3.0.0, Use `InputTagProps` instead.
*/
const inputTagProps = buildProps({
modelValue: { type: definePropType(Array) },
max: Number,
tagType: {
...tagProps.type,
default: "info"
},
tagEffect: tagProps.effect,
effect: {
type: definePropType(String),
default: "light"
},
trigger: {
type: definePropType(String),
default: EVENT_CODE.enter
},
draggable: Boolean,
delimiter: {
type: [String, RegExp],
default: ""
},
size: useSizeProp,
clearable: Boolean,
clearIcon: {
type: iconPropType,
default: circle_close_default
},
disabled: {
type: Boolean,
default: void 0
},
validateEvent: {
type: Boolean,
default: true
},
readonly: Boolean,
autofocus: Boolean,
id: {
type: String,
default: void 0
},
tabindex: {
type: [String, Number],
default: 0
},
maxlength: { type: [String, Number] },
minlength: { type: [String, Number] },
placeholder: String,
autocomplete: {
type: definePropType(String),
default: "off"
},
saveOnBlur: {
type: Boolean,
default: true
},
collapseTags: Boolean,
collapseTagsTooltip: Boolean,
maxCollapseTags: {
type: Number,
default: 1
},
ariaLabel: String
});
const inputTagEmits = {
[UPDATE_MODEL_EVENT]: (value) => isArray$1(value) || isUndefined(value),
[CHANGE_EVENT]: (value) => isArray$1(value) || isUndefined(value),
[INPUT_EVENT]: (value) => isString(value),
"add-tag": (value) => isString(value) || isArray$1(value),
"remove-tag": (value, index) => isString(value) && isNumber(index),
"drag-tag": (oldIndex, newIndex, value) => isNumber(oldIndex) && isNumber(newIndex) && isString(value),
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true
};
//#endregion
//#region ../../packages/components/input-tag/src/composables/use-drag-tag.ts
function useDragTag({ wrapperRef, handleDragged, afterDragged }) {
const ns = useNamespace("input-tag");
const dropIndicatorRef = (0, vue.shallowRef)();
const showDropIndicator = (0, vue.ref)(false);
let draggingIndex;
let draggingTag;
let dropIndex;
let dropType;
function getTagClassName(index) {
return `.${ns.e("inner")} .${ns.namespace.value}-tag:nth-child(${index + 1})`;
}
function handleDragStart(event, index) {
draggingIndex = index;
draggingTag = wrapperRef.value.querySelector(getTagClassName(index));
if (draggingTag) draggingTag.style.opacity = "0.5";
event.dataTransfer.effectAllowed = "move";
}
function handleDragOver(event, index) {
dropIndex = index;
event.preventDefault();
event.dataTransfer.dropEffect = "move";
if (isUndefined(draggingIndex) || draggingIndex === index) {
showDropIndicator.value = false;
return;
}
const dropPosition = wrapperRef.value.querySelector(getTagClassName(index)).getBoundingClientRect();
const dropPrev = !(draggingIndex + 1 === index);
const dropNext = !(draggingIndex - 1 === index);
const distance = event.clientX - dropPosition.left;
const prevPercent = dropPrev ? dropNext ? .5 : 1 : -1;
const nextPercent = dropNext ? dropPrev ? .5 : 0 : 1;
if (distance <= dropPosition.width * prevPercent) dropType = "before";
else if (distance > dropPosition.width * nextPercent) dropType = "after";
else dropType = void 0;
const innerEl = wrapperRef.value.querySelector(`.${ns.e("inner")}`);
const innerPosition = innerEl.getBoundingClientRect();
const gap = Number.parseFloat(getStyle(innerEl, "gap")) / 2;
const indicatorTop = dropPosition.top - innerPosition.top;
let indicatorLeft = -9999;
if (dropType === "before") indicatorLeft = Math.max(dropPosition.left - innerPosition.left - gap, Math.floor(-gap / 2));
else if (dropType === "after") {
const left = dropPosition.right - innerPosition.left;
indicatorLeft = left + (innerPosition.width === left ? Math.floor(gap / 2) : gap);
}
setStyle(dropIndicatorRef.value, {
top: `${indicatorTop}px`,
left: `${indicatorLeft}px`
});
showDropIndicator.value = !!dropType;
}
function handleDragEnd(event) {
event.preventDefault();
if (draggingTag) draggingTag.style.opacity = "";
if (dropType && !isUndefined(draggingIndex) && !isUndefined(dropIndex) && draggingIndex !== dropIndex) handleDragged(draggingIndex, dropIndex, dropType);
showDropIndicator.value = false;
draggingIndex = void 0;
draggingTag = null;
dropIndex = void 0;
dropType = void 0;
afterDragged?.();
}
return {
dropIndicatorRef,
showDropIndicator,
handleDragStart,
handleDragOver,
handleDragEnd
};
}
//#endregion
//#region ../../packages/components/input-tag/src/composables/use-hovering.ts
function useHovering() {
const hovering = (0, vue.ref)(false);
const handleMouseEnter = () => {
hovering.value = true;
};
const handleMouseLeave = () => {
hovering.value = false;
};
return {
hovering,
handleMouseEnter,
handleMouseLeave
};
}
//#endregion
//#region ../../packages/components/input-tag/src/composables/use-input-tag.ts
function useInputTag({ props, emit, formItem }) {
const disabled = useFormDisabled();
const size = useFormSize();
const inputRef = (0, vue.shallowRef)();
const inputValue = (0, vue.ref)();
const tagTooltipRef = (0, vue.ref)();
const tagSize = (0, vue.computed)(() => {
return ["small"].includes(size.value) ? "small" : "default";
});
const placeholder = (0, vue.computed)(() => {
return props.modelValue?.length ? void 0 : props.placeholder;
});
const closable = (0, vue.computed)(() => !(props.readonly || disabled.value));
const inputLimit = (0, vue.computed)(() => {
return isUndefined(props.max) ? false : (props.modelValue?.length ?? 0) >= props.max;
});
const showTagList = (0, vue.computed)(() => {
return props.collapseTags ? props.modelValue?.slice(0, props.maxCollapseTags) : props.modelValue;
});
const collapseTagList = (0, vue.computed)(() => {
return props.collapseTags ? props.modelValue?.slice(props.maxCollapseTags) : [];
});
const addTagsEmit = (value) => {
const list = [...props.modelValue ?? [], ...castArray$1(value)];
emit(UPDATE_MODEL_EVENT, list);
emit(CHANGE_EVENT, list);
emit("add-tag", value);
inputValue.value = void 0;
};
const getDelimitedTags = (input) => {
const parts = input.split(props.delimiter);
const tags = parts.length > 1 ? parts.map((val) => val.trim()).filter(Boolean) : [];
if (props.max) {
const maxInsert = props.max - (props.modelValue?.length ?? 0);
tags.splice(maxInsert);
}
return tags.length === 1 ? tags[0] : tags;
};
const handlePaste = (event) => {
const pasted = event.clipboardData?.getData("text");
if (props.readonly || inputLimit.value || !props.delimiter || !pasted) return;
const { selectionStart = 0, selectionEnd = 0, value } = event.target;
const nextValue = value.slice(0, selectionStart) + pasted + value.slice(selectionEnd);
const tags = getDelimitedTags(nextValue);
if (tags.length) {
addTagsEmit(tags);
emit(INPUT_EVENT, nextValue);
event.preventDefault();
}
};
const handleInput = (event) => {
if (inputLimit.value) {
inputValue.value = void 0;
return;
}
if (isComposing.value) return;
if (props.delimiter && inputValue.value) {
const tags = getDelimitedTags(inputValue.value);
if (tags.length) addTagsEmit(tags);
}
emit(INPUT_EVENT, event.target.value);
};
const handleKeydown = (event) => {
if (isComposing.value) return;
switch (getEventCode(event)) {
case props.trigger:
event.preventDefault();
event.stopPropagation();
handleAddTag();
break;
case EVENT_CODE.numpadEnter:
if (props.trigger === EVENT_CODE.enter) {
event.preventDefault();
event.stopPropagation();
handleAddTag();
}
break;
case EVENT_CODE.backspace:
if (!inputValue.value && props.modelValue?.length) {
event.preventDefault();
event.stopPropagation();
handleRemoveTag(props.modelValue.length - 1);
}
break;
}
};
const handleKeyup = (event) => {
if (isComposing.value || !isAndroid()) return;
switch (getEventCode(event)) {
case EVENT_CODE.space:
if (props.trigger === EVENT_CODE.space) {
event.preventDefault();
event.stopPropagation();
handleAddTag();
}
break;
}
};
const handleAddTag = () => {
const value = inputValue.value?.trim();
if (!value || inputLimit.value) return;
addTagsEmit(value);
};
const handleRemoveTag = (index) => {
const value = (props.modelValue ?? []).slice();
const [item] = value.splice(index, 1);
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
emit("remove-tag", item, index);
};
const handleClear = () => {
inputValue.value = void 0;
emit(UPDATE_MODEL_EVENT, void 0);
emit(CHANGE_EVENT, void 0);
emit("clear");
};
const handleDragged = (draggingIndex, dropIndex, type) => {
const value = (props.modelValue ?? []).slice();
const [draggedItem] = value.splice(draggingIndex, 1);
const step = dropIndex > draggingIndex && type === "before" ? -1 : dropIndex < draggingIndex && type === "after" ? 1 : 0;
value.splice(dropIndex + step, 0, draggedItem);
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
emit("drag-tag", draggingIndex, dropIndex + step, draggedItem);
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
inputRef.value?.blur();
};
const { wrapperRef, isFocused } = useFocusController(inputRef, {
disabled,
beforeBlur(event) {
return tagTooltipRef.value?.isFocusInsideContent(event);
},
afterBlur() {
if (props.saveOnBlur) handleAddTag();
else inputValue.value = void 0;
if (props.validateEvent) formItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({ afterComposition: handleInput });
(0, vue.watch)(() => props.modelValue, () => {
if (props.validateEvent) formItem?.validate?.(CHANGE_EVENT).catch((err) => /* @__PURE__ */ debugWarn(err));
});
return {
inputRef,
wrapperRef,
tagTooltipRef,
isFocused,
isComposing,
inputValue,
size,
tagSize,
placeholder,
closable,
disabled,
inputLimit,
showTagList,
collapseTagList,
handleDragged,
handlePaste,
handleInput,
handleKeydown,
handleKeyup,
handleAddTag,
handleRemoveTag,
handleClear,
handleCompositionStart,
handleCompositionUpdate,
handleCompositionEnd,
focus,
blur
};
}
//#endregion
//#region ../../packages/components/input-tag/src/composables/use-input-tag-dom.ts
function useInputTagDom({ props, isFocused, hovering, disabled, inputValue, size, validateState, validateIcon, needStatusIcon }) {
const attrs = (0, vue.useAttrs)();
const slots = (0, vue.useSlots)();
const ns = useNamespace("input-tag");
const nsInput = useNamespace("input");
const collapseItemRef = (0, vue.ref)();
const innerRef = (0, vue.ref)();
const containerKls = (0, vue.computed)(() => [
ns.b(),
ns.is("focused", isFocused.value),
ns.is("hovering", hovering.value),
ns.is("disabled", disabled.value),
ns.m(size.value),
ns.e("wrapper"),
attrs.class
]);
const containerStyle = (0, vue.computed)(() => [attrs.style]);
const innerKls = (0, vue.computed)(() => [
ns.e("inner"),
ns.is("draggable", props.draggable),
ns.is("left-space", !props.modelValue?.length && !slots.prefix),
ns.is("right-space", !props.modelValue?.length && !showSuffix.value)
]);
const showClear = (0, vue.computed)(() => {
return props.clearable && !disabled.value && !props.readonly && (props.modelValue?.length || inputValue.value) && (isFocused.value || hovering.value);
});
const showSuffix = (0, vue.computed)(() => {
return slots.suffix || showClear.value || validateState.value && validateIcon.value && needStatusIcon.value;
});
const states = (0, vue.reactive)({
innerWidth: 0,
collapseItemWidth: 0
});
const getGapWidth = () => {
if (!innerRef.value) return 0;
const style = window.getComputedStyle(innerRef.value);
return Number.parseFloat(style.gap || "6px");
};
const resetInnerWidth = () => {
states.innerWidth = Number.parseFloat(window.getComputedStyle(innerRef.value).width);
};
const resetCollapseItemWidth = () => {
states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
};
const tagStyle = (0, vue.computed)(() => {
if (!props.collapseTags) return {};
const gapWidth = getGapWidth();
const inputSlotWidth = gapWidth + MINIMUM_INPUT_WIDTH;
const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.innerWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.innerWidth - inputSlotWidth;
return { maxWidth: `${Math.max(maxWidth, 0)}px` };
});
useResizeObserver(innerRef, resetInnerWidth);
useResizeObserver(collapseItemRef, resetCollapseItemWidth);
return {
ns,
nsInput,
containerKls,
containerStyle,
innerKls,
showClear,
showSuffix,
tagStyle,
collapseItemRef,
innerRef
};
}
//#endregion
//#region ../../packages/components/input-tag/src/input-tag.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$32 = [
"id",
"minlength",
"maxlength",
"disabled",
"readonly",
"autocomplete",
"tabindex",
"placeholder",
"autofocus",
"ariaLabel"
];
const _hoisted_2$19 = ["textContent"];
var input_tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElInputTag",
inheritAttrs: false,
__name: "input-tag",
props: inputTagProps,
emits: inputTagEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const attrs = useAttrs();
const slots = (0, vue.useSlots)();
const { form, formItem } = useFormItem();
const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
const needStatusIcon = (0, vue.computed)(() => form?.statusIcon ?? false);
const validateState = (0, vue.computed)(() => formItem?.validateState || "");
const validateIcon = (0, vue.computed)(() => {
return validateState.value && ValidateComponentsMap[validateState.value];
});
const { inputRef, wrapperRef, tagTooltipRef, isFocused, inputValue, size, tagSize, placeholder, closable, disabled, showTagList, collapseTagList, handleDragged, handlePaste, handleInput, handleKeydown, handleKeyup, handleRemoveTag, handleClear, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd, focus, blur } = useInputTag({
props,
emit,
formItem
});
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering();
const { calculatorRef, inputStyle } = useCalcInputWidth();
const { dropIndicatorRef, showDropIndicator, handleDragStart, handleDragOver, handleDragEnd } = useDragTag({
wrapperRef,
handleDragged,
afterDragged: focus
});
const { ns, nsInput, containerKls, containerStyle, innerKls, showClear, showSuffix, tagStyle, collapseItemRef, innerRef } = useInputTagDom({
props,
hovering,
isFocused,
inputValue,
disabled,
size,
validateState,
validateIcon,
needStatusIcon
});
__expose({
focus,
blur
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "wrapperRef",
ref: wrapperRef,
class: (0, vue.normalizeClass)((0, vue.unref)(containerKls)),
style: (0, vue.normalizeStyle)((0, vue.unref)(containerStyle)),
onMouseenter: _cache[9] || (_cache[9] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
onMouseleave: _cache[10] || (_cache[10] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args))
}, [
(0, vue.unref)(slots).prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
}, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
ref_key: "innerRef",
ref: innerRef,
class: (0, vue.normalizeClass)((0, vue.unref)(innerKls))
}, [
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(showTagList), (item, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
key: index,
size: (0, vue.unref)(tagSize),
closable: (0, vue.unref)(closable),
type: __props.tagType,
effect: __props.tagEffect,
draggable: (0, vue.unref)(closable) && __props.draggable,
style: (0, vue.normalizeStyle)((0, vue.unref)(tagStyle)),
"disable-transitions": "",
onClose: ($event) => (0, vue.unref)(handleRemoveTag)(index),
onDragstart: (event) => (0, vue.unref)(handleDragStart)(event, index),
onDragover: (event) => (0, vue.unref)(handleDragOver)(event, index),
onDragend: (0, vue.unref)(handleDragEnd),
onDrop: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "tag", {
value: item,
index
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item), 1)])]),
_: 2
}, 1032, [
"size",
"closable",
"type",
"effect",
"draggable",
"style",
"onClose",
"onDragstart",
"onDragover",
"onDragend"
]);
}), 128)),
__props.collapseTags && __props.modelValue && __props.modelValue.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
key: 0,
ref_key: "tagTooltipRef",
ref: tagTooltipRef,
disabled: !__props.collapseTagsTooltip,
"fallback-placements": [
"bottom",
"top",
"right",
"left"
],
effect: __props.effect,
placement: "bottom"
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref_key: "collapseItemRef",
ref: collapseItemRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("collapse-tag"))
}, [(0, vue.createVNode)((0, vue.unref)(ElTag), {
closable: false,
size: (0, vue.unref)(tagSize),
type: __props.tagType,
effect: __props.tagEffect,
"disable-transitions": ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)(" + " + (0, vue.toDisplayString)(__props.modelValue.length - __props.maxCollapseTags), 1)]),
_: 1
}, 8, [
"size",
"type",
"effect"
])], 2)]),
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-tag-list")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(collapseTagList), (item, index) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
key: index,
size: (0, vue.unref)(tagSize),
closable: (0, vue.unref)(closable),
type: __props.tagType,
effect: __props.tagEffect,
"disable-transitions": "",
onClose: ($event) => (0, vue.unref)(handleRemoveTag)(index + __props.maxCollapseTags)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "tag", {
value: item,
index: index + __props.maxCollapseTags
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item), 1)])]),
_: 2
}, 1032, [
"size",
"closable",
"type",
"effect",
"onClose"
]);
}), 128))], 2)]),
_: 3
}, 8, ["disabled", "effect"])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-wrapper")) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
id: (0, vue.unref)(inputId),
ref_key: "inputRef",
ref: inputRef,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => (0, vue.isRef)(inputValue) ? inputValue.value = $event : null)
}, (0, vue.unref)(attrs), {
type: "text",
minlength: __props.minlength,
maxlength: __props.maxlength,
disabled: (0, vue.unref)(disabled),
readonly: __props.readonly,
autocomplete: __props.autocomplete,
tabindex: __props.tabindex,
placeholder: (0, vue.unref)(placeholder),
autofocus: __props.autofocus,
ariaLabel: __props.ariaLabel,
class: (0, vue.unref)(ns).e("input"),
style: (0, vue.unref)(inputStyle),
onCompositionstart: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
onCompositionupdate: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
onCompositionend: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
onPaste: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handlePaste) && (0, vue.unref)(handlePaste)(...args)),
onInput: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleInput) && (0, vue.unref)(handleInput)(...args)),
onKeydown: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args)),
onKeyup: _cache[8] || (_cache[8] = (...args) => (0, vue.unref)(handleKeyup) && (0, vue.unref)(handleKeyup)(...args))
}), null, 16, _hoisted_1$32), [[vue.vModelText, (0, vue.unref)(inputValue)]]), (0, vue.createElementVNode)("span", {
ref_key: "calculatorRef",
ref: calculatorRef,
"aria-hidden": "true",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-calculator")),
textContent: (0, vue.toDisplayString)((0, vue.unref)(inputValue))
}, null, 10, _hoisted_2$19)], 2),
(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
ref_key: "dropIndicatorRef",
ref: dropIndicatorRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("drop-indicator"))
}, null, 2), [[vue.vShow, (0, vue.unref)(showDropIndicator)]])
], 2),
(0, vue.unref)(showSuffix) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("suffix"))
}, [
(0, vue.renderSlot)(_ctx.$slots, "suffix"),
(0, vue.unref)(showClear) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).e("clear")]),
onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
onClick: (0, vue.unref)(handleClear)
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
_: 1
}, 8, [
"class",
"onMousedown",
"onClick"
])) : (0, vue.createCommentVNode)("v-if", true),
validateState.value && validateIcon.value && needStatusIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsInput).e("icon"),
(0, vue.unref)(nsInput).e("validateIcon"),
(0, vue.unref)(nsInput).is("loading", validateState.value === "validating")
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(validateIcon.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 38);
};
}
});
//#endregion
//#region ../../packages/components/input-tag/src/input-tag.vue
var input_tag_default = input_tag_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/input-tag/index.ts
const ElInputTag = withInstall(input_tag_default);
//#endregion
//#region ../../packages/components/link/src/link.ts
/**
* @deprecated Removed after 3.0.0, Use `LinkProps` instead.
*/
const linkProps = buildProps({
type: {
type: String,
values: [
"primary",
"success",
"warning",
"info",
"danger",
"default"
],
default: void 0
},
underline: {
type: [Boolean, String],
values: [
true,
false,
"always",
"never",
"hover"
],
default: void 0
},
disabled: Boolean,
href: {
type: String,
default: ""
},
target: {
type: String,
default: "_self"
},
icon: { type: iconPropType }
});
const linkEmits = { click: (evt) => evt instanceof MouseEvent };
//#endregion
//#region ../../packages/components/link/src/link.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$31 = ["href", "target"];
var link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElLink",
__name: "link",
props: linkProps,
emits: linkEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const globalConfig = useGlobalConfig("link");
useDeprecated({
scope: "el-link",
from: "The underline option (boolean)",
replacement: "'always' | 'hover' | 'never'",
version: "3.0.0",
ref: "https://element-plus.org/en-US/component/link.html#underline"
}, (0, vue.computed)(() => isBoolean(props.underline)));
const ns = useNamespace("link");
const linkKls = (0, vue.computed)(() => [
ns.b(),
ns.m(props.type ?? globalConfig.value?.type ?? "default"),
ns.is("disabled", props.disabled),
ns.is("underline", underline.value === "always"),
ns.is("hover-underline", underline.value === "hover" && !props.disabled)
]);
const underline = (0, vue.computed)(() => {
if (isBoolean(props.underline)) return props.underline ? "hover" : "never";
else return props.underline ?? globalConfig.value?.underline ?? "hover";
});
function handleClick(event) {
if (!props.disabled) emit("click", event);
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
class: (0, vue.normalizeClass)(linkKls.value),
href: __props.disabled || !__props.href ? void 0 : __props.href,
target: __props.disabled || !__props.href ? void 0 : __props.target,
onClick: handleClick
}, [
__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.icon ? (0, vue.renderSlot)(_ctx.$slots, "icon", { key: 2 }) : (0, vue.createCommentVNode)("v-if", true)
], 10, _hoisted_1$31);
};
}
});
//#endregion
//#region ../../packages/components/link/src/link.vue
var link_default = link_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/link/index.ts
const ElLink = withInstall(link_default);
//#endregion
//#region ../../packages/components/menu/src/utils/submenu.ts
var SubMenu = class {
constructor(parent, domNode) {
this.parent = parent;
this.domNode = domNode;
this.subIndex = 0;
this.subIndex = 0;
this.init();
}
init() {
this.subMenuItems = this.domNode.querySelectorAll("li");
this.addListeners();
}
gotoSubIndex(idx) {
if (idx === this.subMenuItems.length) idx = 0;
else if (idx < 0) idx = this.subMenuItems.length - 1;
this.subMenuItems[idx].focus();
this.subIndex = idx;
}
addListeners() {
const parentNode = this.parent.domNode;
Array.prototype.forEach.call(this.subMenuItems, (el) => {
el.addEventListener("keydown", (event) => {
const code = getEventCode(event);
let prevDef = false;
switch (code) {
case EVENT_CODE.down:
this.gotoSubIndex(this.subIndex + 1);
prevDef = true;
break;
case EVENT_CODE.up:
this.gotoSubIndex(this.subIndex - 1);
prevDef = true;
break;
case EVENT_CODE.tab:
triggerEvent(parentNode, "mouseleave");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
case EVENT_CODE.space:
prevDef = true;
event.currentTarget.click();
break;
}
if (prevDef) {
event.preventDefault();
event.stopPropagation();
}
return false;
});
});
}
};
//#endregion
//#region ../../packages/components/menu/src/utils/menu-item.ts
var MenuItem = class {
constructor(domNode, namespace) {
this.domNode = domNode;
this.submenu = null;
this.submenu = null;
this.init(namespace);
}
init(namespace) {
this.domNode.setAttribute("tabindex", "0");
const menuChild = this.domNode.querySelector(`.${namespace}-menu`);
if (menuChild) this.submenu = new SubMenu(this, menuChild);
this.addListeners();
}
addListeners() {
this.domNode.addEventListener("keydown", (event) => {
const code = getEventCode(event);
let prevDef = false;
switch (code) {
case EVENT_CODE.down:
triggerEvent(event.currentTarget, "mouseenter");
this.submenu && this.submenu.gotoSubIndex(0);
prevDef = true;
break;
case EVENT_CODE.up:
triggerEvent(event.currentTarget, "mouseenter");
this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1);
prevDef = true;
break;
case EVENT_CODE.tab:
triggerEvent(event.currentTarget, "mouseleave");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
case EVENT_CODE.space:
prevDef = true;
event.currentTarget.click();
break;
}
if (prevDef) event.preventDefault();
});
}
};
//#endregion
//#region ../../packages/components/menu/src/utils/menu-bar.ts
var Menu = class {
constructor(domNode, namespace) {
this.domNode = domNode;
this.init(namespace);
}
init(namespace) {
const menuChildren = this.domNode.childNodes;
Array.from(menuChildren).forEach((child) => {
if (child.nodeType === 1) new MenuItem(child, namespace);
});
}
};
//#endregion
//#region ../../packages/components/menu/src/menu-collapse-transition.vue?vue&type=script&setup=true&lang.ts
var menu_collapse_transition_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMenuCollapseTransition",
__name: "menu-collapse-transition",
setup(__props) {
const ns = useNamespace("menu");
const listeners = {
onBeforeEnter: (el) => el.style.opacity = "0.2",
onEnter(el, done) {
addClass(el, `${ns.namespace.value}-opacity-transition`);
el.style.opacity = "1";
done();
},
onAfterEnter(el) {
removeClass(el, `${ns.namespace.value}-opacity-transition`);
el.style.opacity = "";
},
onBeforeLeave(el) {
if (!el.dataset) el.dataset = {};
if (hasClass(el, ns.m("collapse"))) {
removeClass(el, ns.m("collapse"));
el.dataset.oldOverflow = el.style.overflow;
el.dataset.scrollWidth = el.clientWidth.toString();
addClass(el, ns.m("collapse"));
} else {
addClass(el, ns.m("collapse"));
el.dataset.oldOverflow = el.style.overflow;
el.dataset.scrollWidth = el.clientWidth.toString();
removeClass(el, ns.m("collapse"));
}
el.style.width = `${el.scrollWidth}px`;
el.style.overflow = "hidden";
},
onLeave(el) {
addClass(el, "horizontal-collapse-transition");
el.style.width = `${el.dataset.scrollWidth}px`;
}
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, (0, vue.mergeProps)({ mode: "out-in" }, listeners), {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 16);
};
}
});
//#endregion
//#region ../../packages/components/menu/src/menu-collapse-transition.vue
var menu_collapse_transition_default = menu_collapse_transition_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/menu/src/use-menu.ts
function useMenu(instance, currentIndex) {
const indexPath = (0, vue.computed)(() => {
let parent = instance.parent;
const path = [currentIndex.value];
while (parent.type.name !== "ElMenu") {
if (parent.props.index) path.unshift(parent.props.index);
parent = parent.parent;
}
return path;
});
return {
parentMenu: (0, vue.computed)(() => {
let parent = instance.parent;
while (parent && !["ElMenu", "ElSubMenu"].includes(parent.type.name)) parent = parent.parent;
return parent;
}),
indexPath
};
}
//#endregion
//#region ../../packages/components/menu/src/use-menu-color.ts
function useMenuColor(props) {
return (0, vue.computed)(() => {
const color = props.backgroundColor;
return color ? new TinyColor(color).shade(20).toString() : "";
});
}
//#endregion
//#region ../../packages/components/menu/src/use-menu-css-var.ts
const useMenuCssVar = (props, level) => {
const ns = useNamespace("menu");
return (0, vue.computed)(() => ns.cssVarBlock({
"text-color": props.textColor || "",
"hover-text-color": props.textColor || "",
"bg-color": props.backgroundColor || "",
"hover-bg-color": useMenuColor(props).value || "",
"active-color": props.activeTextColor || "",
level: `${level}`
}));
};
//#endregion
//#region ../../packages/components/menu/src/tokens.ts
const MENU_INJECTION_KEY = "rootMenu";
const SUB_MENU_INJECTION_KEY = "subMenu:";
//#endregion
//#region ../../packages/components/menu/src/sub-menu.ts
const subMenuProps = buildProps({
index: {
type: String,
required: true
},
showTimeout: Number,
hideTimeout: Number,
popperClass: String,
popperStyle: { type: definePropType([String, Object]) },
disabled: Boolean,
teleported: {
type: Boolean,
default: void 0
},
popperOffset: Number,
expandCloseIcon: { type: iconPropType },
expandOpenIcon: { type: iconPropType },
collapseCloseIcon: { type: iconPropType },
collapseOpenIcon: { type: iconPropType }
});
const COMPONENT_NAME$8 = "ElSubMenu";
var sub_menu_default = (0, vue.defineComponent)({
name: COMPONENT_NAME$8,
props: subMenuProps,
setup(props, { slots, expose }) {
const instance = (0, vue.getCurrentInstance)();
const { indexPath, parentMenu } = useMenu(instance, (0, vue.computed)(() => props.index));
const nsMenu = useNamespace("menu");
const nsSubMenu = useNamespace("sub-menu");
const rootMenu = (0, vue.inject)(MENU_INJECTION_KEY);
if (!rootMenu) throwError(COMPONENT_NAME$8, "can not inject root menu");
const subMenu = (0, vue.inject)(`${SUB_MENU_INJECTION_KEY}${parentMenu.value.uid}`);
if (!subMenu) throwError(COMPONENT_NAME$8, "can not inject sub menu");
const items = (0, vue.ref)({});
const subMenus = (0, vue.ref)({});
let timeout;
const mouseInChild = (0, vue.ref)(false);
const verticalTitleRef = (0, vue.ref)();
const vPopper = (0, vue.ref)();
const isFirstLevel = (0, vue.computed)(() => subMenu.level === 0);
const currentPlacement = (0, vue.computed)(() => mode.value === "horizontal" && isFirstLevel.value ? "bottom-start" : "right-start");
const subMenuTitleIcon = (0, vue.computed)(() => {
if (mode.value === "horizontal" && isFirstLevel.value || mode.value === "vertical" && !rootMenu.props.collapse) {
if (props.expandCloseIcon && props.expandOpenIcon) return opened.value ? props.expandOpenIcon : props.expandCloseIcon;
return arrow_down_default;
} else {
if (props.collapseCloseIcon && props.collapseOpenIcon) return opened.value ? props.collapseOpenIcon : props.collapseCloseIcon;
return arrow_right_default;
}
});
const appendToBody = (0, vue.computed)(() => {
const value = props.teleported;
return isUndefined(value) ? isFirstLevel.value : value;
});
const menuTransitionName = (0, vue.computed)(() => rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`);
const fallbackPlacements = (0, vue.computed)(() => mode.value === "horizontal" && isFirstLevel.value ? [
"bottom-start",
"bottom-end",
"top-start",
"top-end",
"right-start",
"left-start"
] : [
"right-start",
"right",
"right-end",
"left-start",
"bottom-start",
"bottom-end",
"top-start",
"top-end"
]);
const opened = (0, vue.computed)(() => rootMenu.openedMenus.includes(props.index));
const active = (0, vue.computed)(() => [...Object.values(items.value), ...Object.values(subMenus.value)].some(({ active }) => active));
const mode = (0, vue.computed)(() => rootMenu.props.mode);
const persistent = (0, vue.computed)(() => rootMenu.props.persistent);
const item = (0, vue.reactive)({
index: props.index,
indexPath,
active
});
const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);
const subMenuPopperOffset = (0, vue.computed)(() => props.popperOffset ?? rootMenu.props.popperOffset);
const subMenuPopperClass = (0, vue.computed)(() => props.popperClass ?? rootMenu.props.popperClass);
const subMenuPopperStyle = (0, vue.computed)(() => props.popperStyle ?? rootMenu.props.popperStyle);
const subMenuShowTimeout = (0, vue.computed)(() => props.showTimeout ?? rootMenu.props.showTimeout);
const subMenuHideTimeout = (0, vue.computed)(() => props.hideTimeout ?? rootMenu.props.hideTimeout);
const doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();
const handleCollapseToggle = (value) => {
if (!value) doDestroy();
};
const handleClick = () => {
if (rootMenu.props.menuTrigger === "hover" && rootMenu.props.mode === "horizontal" || rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) return;
rootMenu.handleSubMenuClick({
index: props.index,
indexPath: indexPath.value,
active: active.value
});
};
const handleMouseenter = (event, showTimeout = subMenuShowTimeout.value) => {
if (event.type === "focus") return;
if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) {
subMenu.mouseInChild.value = true;
return;
}
subMenu.mouseInChild.value = true;
timeout?.();
({stop: timeout} = useTimeoutFn(() => {
rootMenu.openMenu(props.index, indexPath.value);
}, showTimeout));
if (appendToBody.value) parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent("mouseenter"));
if (event.type === "mouseenter" && event.target) (0, vue.nextTick)(() => {
focusElement(event.target, { preventScroll: true });
});
};
const handleMouseleave = (deepDispatch = false) => {
if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical") {
subMenu.mouseInChild.value = false;
return;
}
timeout?.();
subMenu.mouseInChild.value = false;
({stop: timeout} = useTimeoutFn(() => !mouseInChild.value && rootMenu.closeMenu(props.index, indexPath.value), subMenuHideTimeout.value));
if (appendToBody.value && deepDispatch) subMenu.handleMouseleave?.(true);
};
(0, vue.watch)(() => rootMenu.props.collapse, (value) => handleCollapseToggle(Boolean(value)));
{
const addSubMenu = (item) => {
subMenus.value[item.index] = item;
};
const removeSubMenu = (item) => {
delete subMenus.value[item.index];
};
(0, vue.provide)(`${SUB_MENU_INJECTION_KEY}${instance.uid}`, {
addSubMenu,
removeSubMenu,
handleMouseleave,
mouseInChild,
level: subMenu.level + 1
});
}
expose({ opened });
(0, vue.onMounted)(() => {
rootMenu.addSubMenu(item);
subMenu.addSubMenu(item);
});
(0, vue.onBeforeUnmount)(() => {
subMenu.removeSubMenu(item);
rootMenu.removeSubMenu(item);
});
return () => {
const titleTag = [slots.title?.(), (0, vue.h)(ElIcon, {
class: nsSubMenu.e("icon-arrow"),
style: { transform: opened.value ? props.expandCloseIcon && props.expandOpenIcon || props.collapseCloseIcon && props.collapseOpenIcon && rootMenu.props.collapse ? "none" : "rotateZ(180deg)" : "none" }
}, { default: () => isString(subMenuTitleIcon.value) ? (0, vue.h)(instance.appContext.components[subMenuTitleIcon.value]) : (0, vue.h)(subMenuTitleIcon.value) })];
const child = rootMenu.isMenuPopup ? (0, vue.h)(ElTooltip, {
ref: vPopper,
visible: opened.value,
effect: "light",
pure: true,
offset: subMenuPopperOffset.value,
showArrow: false,
persistent: persistent.value,
popperClass: subMenuPopperClass.value,
popperStyle: subMenuPopperStyle.value,
placement: currentPlacement.value,
teleported: appendToBody.value,
fallbackPlacements: fallbackPlacements.value,
transition: menuTransitionName.value,
gpuAcceleration: false
}, {
content: () => (0, vue.h)("div", {
class: [
nsMenu.m(mode.value),
nsMenu.m("popup-container"),
subMenuPopperClass.value
],
onMouseenter: (evt) => handleMouseenter(evt, 100),
onMouseleave: () => handleMouseleave(true),
onFocus: (evt) => handleMouseenter(evt, 100)
}, [(0, vue.h)("ul", {
class: [
nsMenu.b(),
nsMenu.m("popup"),
nsMenu.m(`popup-${currentPlacement.value}`)
],
style: ulStyle.value
}, [slots.default?.()])]),
default: () => (0, vue.h)("div", {
class: nsSubMenu.e("title"),
onClick: handleClick
}, titleTag)
}) : (0, vue.h)(vue.Fragment, {}, [(0, vue.h)("div", {
class: nsSubMenu.e("title"),
ref: verticalTitleRef,
onClick: handleClick
}, titleTag), (0, vue.h)(ElCollapseTransition, {}, { default: () => (0, vue.withDirectives)((0, vue.h)("ul", {
role: "menu",
class: [nsMenu.b(), nsMenu.m("inline")],
style: ulStyle.value
}, [slots.default?.()]), [[vue.vShow, opened.value]]) })]);
return (0, vue.h)("li", {
class: [
nsSubMenu.b(),
nsSubMenu.is("active", active.value),
nsSubMenu.is("opened", opened.value),
nsSubMenu.is("disabled", props.disabled)
],
role: "menuitem",
ariaHaspopup: true,
ariaExpanded: opened.value,
onMouseenter: handleMouseenter,
onMouseleave: () => handleMouseleave(),
onFocus: handleMouseenter
}, [child]);
};
}
});
//#endregion
//#region ../../packages/components/menu/src/menu.ts
const menuProps = buildProps({
mode: {
type: String,
values: ["horizontal", "vertical"],
default: "vertical"
},
defaultActive: {
type: String,
default: ""
},
defaultOpeneds: {
type: definePropType(Array),
default: () => mutable([])
},
uniqueOpened: Boolean,
router: Boolean,
menuTrigger: {
type: String,
values: ["hover", "click"],
default: "hover"
},
collapse: Boolean,
backgroundColor: String,
textColor: String,
activeTextColor: String,
closeOnClickOutside: Boolean,
collapseTransition: {
type: Boolean,
default: true
},
ellipsis: {
type: Boolean,
default: true
},
popperOffset: {
type: Number,
default: 6
},
ellipsisIcon: {
type: iconPropType,
default: () => more_default
},
popperEffect: {
type: definePropType(String),
default: "dark"
},
popperClass: String,
popperStyle: { type: definePropType([String, Object]) },
showTimeout: {
type: Number,
default: 300
},
hideTimeout: {
type: Number,
default: 300
},
persistent: {
type: Boolean,
default: true
}
});
const checkIndexPath = (indexPath) => isArray$1(indexPath) && indexPath.every((path) => isString(path));
const menuEmits = {
close: (index, indexPath) => isString(index) && checkIndexPath(indexPath),
open: (index, indexPath) => isString(index) && checkIndexPath(indexPath),
select: (index, indexPath, item, routerResult) => isString(index) && checkIndexPath(indexPath) && isObject$1(item) && (isUndefined(routerResult) || routerResult instanceof Promise)
};
const DEFAULT_MORE_ITEM_WIDTH = 64;
var menu_default = (0, vue.defineComponent)({
name: "ElMenu",
props: menuProps,
emits: menuEmits,
setup(props, { emit, slots, expose }) {
const instance = (0, vue.getCurrentInstance)();
const router = instance.appContext.config.globalProperties.$router;
const menu = (0, vue.ref)();
const subMenu = (0, vue.ref)();
const nsMenu = useNamespace("menu");
const nsSubMenu = useNamespace("sub-menu");
let moreItemWidth = DEFAULT_MORE_ITEM_WIDTH;
const sliceIndex = (0, vue.ref)(-1);
const openedMenus = (0, vue.ref)(props.defaultOpeneds && !props.collapse ? props.defaultOpeneds.slice(0) : []);
const activeIndex = (0, vue.ref)(props.defaultActive);
const items = (0, vue.ref)({});
const subMenus = (0, vue.ref)({});
const isMenuPopup = (0, vue.computed)(() => props.mode === "horizontal" || props.mode === "vertical" && props.collapse);
const initMenu = () => {
const activeItem = activeIndex.value && items.value[activeIndex.value];
if (!activeItem || props.mode === "horizontal" || props.collapse) return;
activeItem.indexPath.forEach((index) => {
const subMenu = subMenus.value[index];
subMenu && openMenu(index, subMenu.indexPath);
});
};
const openMenu = (index, indexPath) => {
if (openedMenus.value.includes(index)) return;
if (props.uniqueOpened) openedMenus.value = openedMenus.value.filter((index) => indexPath.includes(index));
openedMenus.value.push(index);
emit("open", index, indexPath);
};
const close = (index) => {
const i = openedMenus.value.indexOf(index);
if (i !== -1) openedMenus.value.splice(i, 1);
};
const closeMenu = (index, indexPath) => {
close(index);
emit("close", index, indexPath);
};
const handleSubMenuClick = ({ index, indexPath }) => {
openedMenus.value.includes(index) ? closeMenu(index, indexPath) : openMenu(index, indexPath);
};
const handleMenuItemClick = (menuItem) => {
if (props.mode === "horizontal" || props.collapse) openedMenus.value = [];
const { index, indexPath } = menuItem;
if (isNil(index) || isNil(indexPath)) return;
if (props.router && router) {
const route = menuItem.route || index;
const routerResult = router.push(route).then((res) => {
if (!res) activeIndex.value = index;
return res;
});
emit("select", index, indexPath, {
index,
indexPath,
route
}, routerResult);
} else {
activeIndex.value = index;
emit("select", index, indexPath, {
index,
indexPath
});
}
};
const updateActiveIndex = (val) => {
const itemsInData = items.value;
activeIndex.value = (itemsInData[val] || activeIndex.value && itemsInData[activeIndex.value] || itemsInData[props.defaultActive])?.index ?? val;
};
const calcMenuItemWidth = (menuItem) => {
const computedStyle = getComputedStyle(menuItem);
const marginLeft = Number.parseInt(computedStyle.marginLeft, 10);
const marginRight = Number.parseInt(computedStyle.marginRight, 10);
return menuItem.offsetWidth + marginLeft + marginRight || 0;
};
const calcSliceIndex = () => {
if (!menu.value) return -1;
const items = Array.from(menu.value.childNodes).filter((item) => item.nodeName !== "#comment" && (item.nodeName !== "#text" || item.nodeValue));
const computedMenuStyle = getComputedStyle(menu.value);
const paddingLeft = Number.parseInt(computedMenuStyle.paddingLeft, 10);
const paddingRight = Number.parseInt(computedMenuStyle.paddingRight, 10);
const menuWidth = menu.value.clientWidth - paddingLeft - paddingRight;
let calcWidth = 0;
let sliceIndex = 0;
items.forEach((item, index) => {
calcWidth += calcMenuItemWidth(item);
if (calcWidth <= menuWidth - moreItemWidth) sliceIndex = index + 1;
});
return sliceIndex === items.length ? -1 : sliceIndex;
};
const getIndexPath = (index) => subMenus.value[index].indexPath;
const debounce = (fn, wait = 33.34) => {
let timer;
return () => {
timer && clearTimeout(timer);
timer = setTimeout(() => {
fn();
}, wait);
};
};
let isFirstTimeRender = true;
const handleResize = () => {
const el = unrefElement(subMenu);
if (el) moreItemWidth = calcMenuItemWidth(el) || DEFAULT_MORE_ITEM_WIDTH;
if (sliceIndex.value === calcSliceIndex()) return;
const callback = () => {
sliceIndex.value = -1;
(0, vue.nextTick)(() => {
sliceIndex.value = calcSliceIndex();
});
};
isFirstTimeRender ? callback() : debounce(callback)();
isFirstTimeRender = false;
};
(0, vue.watch)(() => props.defaultActive, (currentActive) => {
if (!items.value[currentActive]) activeIndex.value = "";
updateActiveIndex(currentActive);
});
(0, vue.watch)(() => props.collapse, (value) => {
if (value) openedMenus.value = [];
});
(0, vue.watch)(items.value, initMenu);
let resizeStopper;
(0, vue.watchEffect)(() => {
if (props.mode === "horizontal" && props.ellipsis) resizeStopper = useResizeObserver(menu, handleResize).stop;
else resizeStopper?.();
});
const mouseInChild = (0, vue.ref)(false);
{
const addSubMenu = (item) => {
subMenus.value[item.index] = item;
};
const removeSubMenu = (item) => {
delete subMenus.value[item.index];
};
const addMenuItem = (item) => {
items.value[item.index] = item;
};
const removeMenuItem = (item) => {
delete items.value[item.index];
};
(0, vue.provide)(MENU_INJECTION_KEY, (0, vue.reactive)({
props,
openedMenus,
items,
subMenus,
activeIndex,
isMenuPopup,
addMenuItem,
removeMenuItem,
addSubMenu,
removeSubMenu,
openMenu,
closeMenu,
handleMenuItemClick,
handleSubMenuClick
}));
(0, vue.provide)(`${SUB_MENU_INJECTION_KEY}${instance.uid}`, {
addSubMenu,
removeSubMenu,
mouseInChild,
level: 0
});
}
(0, vue.onMounted)(() => {
if (props.mode === "horizontal") new Menu(instance.vnode.el, nsMenu.namespace.value);
});
{
const open = (index) => {
const { indexPath } = subMenus.value[index];
indexPath.forEach((i) => openMenu(i, indexPath));
};
expose({
open,
close,
updateActiveIndex,
handleResize
});
}
const ulStyle = useMenuCssVar(props, 0);
return () => {
let slot = slots.default?.() ?? [];
const vShowMore = [];
if (props.mode === "horizontal" && menu.value) {
const originalSlot = flattedChildren(slot).filter((vnode) => {
return vnode?.shapeFlag !== 8;
});
const slotDefault = sliceIndex.value === -1 ? originalSlot : originalSlot.slice(0, sliceIndex.value);
const slotMore = sliceIndex.value === -1 ? [] : originalSlot.slice(sliceIndex.value);
if (slotMore?.length && props.ellipsis) {
slot = slotDefault;
vShowMore.push((0, vue.h)(sub_menu_default, {
ref: subMenu,
index: "sub-menu-more",
class: nsSubMenu.e("hide-arrow"),
popperOffset: props.popperOffset
}, {
title: () => (0, vue.h)(ElIcon, { class: nsSubMenu.e("icon-more") }, { default: () => (0, vue.h)(props.ellipsisIcon) }),
default: () => slotMore
}));
}
}
const directives = props.closeOnClickOutside ? [[ClickOutside, () => {
if (!openedMenus.value.length) return;
if (!mouseInChild.value) {
openedMenus.value.forEach((openedMenu) => emit("close", openedMenu, getIndexPath(openedMenu)));
openedMenus.value = [];
}
}]] : [];
const vMenu = (0, vue.withDirectives)((0, vue.h)("ul", {
key: String(props.collapse),
role: "menubar",
ref: menu,
style: ulStyle.value,
class: {
[nsMenu.b()]: true,
[nsMenu.m(props.mode)]: true,
[nsMenu.m("collapse")]: props.collapse
}
}, [...slot, ...vShowMore]), directives);
if (props.collapseTransition && props.mode === "vertical") return (0, vue.h)(menu_collapse_transition_default, () => vMenu);
return vMenu;
};
}
});
//#endregion
//#region ../../packages/components/menu/src/menu-item.ts
/**
* @deprecated Removed after 3.0.0, Use `MenuItemProps` instead.
*/
const menuItemProps = buildProps({
index: {
type: definePropType([String, null]),
default: null
},
route: { type: definePropType([String, Object]) },
disabled: Boolean
});
const menuItemEmits = { click: (item) => isString(item.index) && isArray$1(item.indexPath) };
//#endregion
//#region ../../packages/components/menu/src/menu-item.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$7 = "ElMenuItem";
var menu_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$7,
__name: "menu-item",
props: menuItemProps,
emits: menuItemEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
isPropAbsent(props.index) && /* @__PURE__ */ debugWarn(COMPONENT_NAME$7, "Missing required prop: \"index\"");
const instance = (0, vue.getCurrentInstance)();
const rootMenu = (0, vue.inject)(MENU_INJECTION_KEY);
const nsMenu = useNamespace("menu");
const nsMenuItem = useNamespace("menu-item");
if (!rootMenu) throwError(COMPONENT_NAME$7, "can not inject root menu");
const { parentMenu, indexPath } = useMenu(instance, (0, vue.toRef)(props, "index"));
const subMenu = (0, vue.inject)(`${SUB_MENU_INJECTION_KEY}${parentMenu.value.uid}`);
if (!subMenu) throwError(COMPONENT_NAME$7, "can not inject sub menu");
const active = (0, vue.computed)(() => props.index === rootMenu.activeIndex);
const item = (0, vue.reactive)({
index: props.index,
indexPath,
active
});
const handleClick = () => {
if (!props.disabled) {
rootMenu.handleMenuItemClick({
index: props.index,
indexPath: indexPath.value,
route: props.route
});
emit("click", item);
}
};
(0, vue.onMounted)(() => {
subMenu.addSubMenu(item);
rootMenu.addMenuItem(item);
});
(0, vue.onBeforeUnmount)(() => {
subMenu.removeSubMenu(item);
rootMenu.removeMenuItem(item);
});
__expose({
parentMenu,
rootMenu,
active,
nsMenu,
nsMenuItem,
handleClick
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsMenuItem).b(),
(0, vue.unref)(nsMenuItem).is("active", active.value),
(0, vue.unref)(nsMenuItem).is("disabled", __props.disabled)
]),
role: "menuitem",
tabindex: "-1",
onClick: handleClick
}, [(0, vue.unref)(parentMenu).type.name === "ElMenu" && (0, vue.unref)(rootMenu).props.collapse && _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
key: 0,
effect: (0, vue.unref)(rootMenu).props.popperEffect,
placement: "right",
"fallback-placements": ["left"],
"popper-class": (0, vue.unref)(rootMenu).props.popperClass,
"popper-style": (0, vue.unref)(rootMenu).props.popperStyle,
persistent: (0, vue.unref)(rootMenu).props.persistent,
"focus-on-target": ""
}, {
content: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "title")]),
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsMenu).be("tooltip", "trigger")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)]),
_: 3
}, 8, [
"effect",
"popper-class",
"popper-style",
"persistent"
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.renderSlot)(_ctx.$slots, "title")], 64))], 2);
};
}
});
//#endregion
//#region ../../packages/components/menu/src/menu-item.vue
var menu_item_default = menu_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/menu/src/menu-item-group.ts
/**
* @deprecated Removed after 3.0.0, Use `MenuItemGroupProps` instead.
*/
const menuItemGroupProps = { title: String };
//#endregion
//#region ../../packages/components/menu/src/menu-item-group.vue?vue&type=script&setup=true&lang.ts
var menu_item_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMenuItemGroup",
__name: "menu-item-group",
props: menuItemGroupProps,
setup(__props) {
const ns = useNamespace("menu-item-group");
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [!_ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)], 64)) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 })], 2), (0, vue.createElementVNode)("ul", null, [(0, vue.renderSlot)(_ctx.$slots, "default")])], 2);
};
}
});
//#endregion
//#region ../../packages/components/menu/src/menu-item-group.vue
var menu_item_group_default = menu_item_group_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/menu/index.ts
const ElMenu = withInstall(menu_default, {
MenuItem: menu_item_default,
MenuItemGroup: menu_item_group_default,
SubMenu: sub_menu_default
});
const ElMenuItem = withNoopInstall(menu_item_default);
const ElMenuItemGroup = withNoopInstall(menu_item_group_default);
const ElSubMenu = withNoopInstall(sub_menu_default);
//#endregion
//#region ../../packages/components/page-header/src/page-header.ts
/**
* @deprecated Removed after 3.0.0, Use `PageHeaderProps` instead.
*/
const pageHeaderProps = buildProps({
icon: {
type: iconPropType,
default: () => back_default
},
title: String,
content: {
type: String,
default: ""
}
});
const pageHeaderEmits = { back: () => true };
//#endregion
//#region ../../packages/components/page-header/src/page-header.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$30 = ["aria-label"];
var page_header_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPageHeader",
__name: "page-header",
props: pageHeaderProps,
emits: pageHeaderEmits,
setup(__props, { emit: __emit }) {
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("page-header");
function handleClick() {
emit("back");
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).is("contentful", !!_ctx.$slots.default),
{
[(0, vue.unref)(ns).m("has-breadcrumb")]: !!_ctx.$slots.breadcrumb,
[(0, vue.unref)(ns).m("has-extra")]: !!_ctx.$slots.extra
}
]) }, [
_ctx.$slots.breadcrumb ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("breadcrumb"))
}, [(0, vue.renderSlot)(_ctx.$slots, "breadcrumb")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("left")) }, [
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("back")),
role: "button",
tabindex: "0",
onClick: handleClick
}, [__props.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
"aria-label": __props.title || (0, vue.unref)(t)("el.pageHeader.title"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon"))
}, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true)])], 10, _hoisted_1$30)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title || (0, vue.unref)(t)("el.pageHeader.title")), 1)])], 2)], 2),
(0, vue.createVNode)((0, vue.unref)(ElDivider), { direction: "vertical" }),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "content", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.content), 1)])], 2)
], 2), _ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra"))
}, [(0, vue.renderSlot)(_ctx.$slots, "extra")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2),
_ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/page-header/src/page-header.vue
var page_header_default = page_header_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/page-header/index.ts
const ElPageHeader = withInstall(page_header_default);
//#endregion
//#region ../../packages/components/pagination/src/constants.ts
const elPaginationKey = Symbol("elPaginationKey");
//#endregion
//#region ../../packages/components/pagination/src/components/prev.ts
const paginationPrevProps = buildProps({
disabled: Boolean,
currentPage: {
type: Number,
default: 1
},
prevText: { type: String },
prevIcon: { type: iconPropType }
});
const paginationPrevEmits = { click: (evt) => evt instanceof MouseEvent };
//#endregion
//#region ../../packages/components/pagination/src/components/prev.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$29 = [
"disabled",
"aria-label",
"aria-disabled"
];
const _hoisted_2$18 = { key: 0 };
var prev_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationPrev",
__name: "prev",
props: paginationPrevProps,
emits: paginationPrevEmits,
setup(__props) {
const props = __props;
const { t } = useLocale();
const internalDisabled = (0, vue.computed)(() => props.disabled || props.currentPage <= 1);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
type: "button",
class: "btn-prev",
disabled: internalDisabled.value,
"aria-label": _ctx.prevText || (0, vue.unref)(t)("el.pagination.prev"),
"aria-disabled": internalDisabled.value,
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
}, [_ctx.prevText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$18, (0, vue.toDisplayString)(_ctx.prevText), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.prevIcon)))]),
_: 1
}))], 8, _hoisted_1$29);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/prev.vue
var prev_default = prev_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/components/next.ts
const paginationNextProps = buildProps({
disabled: Boolean,
currentPage: {
type: Number,
default: 1
},
pageCount: {
type: Number,
default: 50
},
nextText: { type: String },
nextIcon: { type: iconPropType }
});
//#endregion
//#region ../../packages/components/pagination/src/components/next.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$28 = [
"disabled",
"aria-label",
"aria-disabled"
];
const _hoisted_2$17 = { key: 0 };
var next_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationNext",
__name: "next",
props: paginationNextProps,
emits: ["click"],
setup(__props) {
const props = __props;
const { t } = useLocale();
const internalDisabled = (0, vue.computed)(() => props.disabled || props.currentPage === props.pageCount || props.pageCount === 0);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
type: "button",
class: "btn-next",
disabled: internalDisabled.value,
"aria-label": _ctx.nextText || (0, vue.unref)(t)("el.pagination.next"),
"aria-disabled": internalDisabled.value,
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
}, [_ctx.nextText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$17, (0, vue.toDisplayString)(_ctx.nextText), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.nextIcon)))]),
_: 1
}))], 8, _hoisted_1$28);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/next.vue
var next_default = next_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/usePagination.ts
const usePagination = () => (0, vue.inject)(elPaginationKey, {});
//#endregion
//#region ../../packages/components/pagination/src/components/sizes.ts
const paginationSizesProps = buildProps({
pageSize: {
type: Number,
required: true
},
pageSizes: {
type: definePropType(Array),
default: () => mutable([
10,
20,
30,
40,
50,
100
])
},
popperClass: { type: String },
popperStyle: { type: definePropType([String, Object]) },
disabled: Boolean,
teleported: Boolean,
size: {
type: String,
values: componentSizes
},
appendSizeTo: String
});
//#endregion
//#region ../../packages/components/pagination/src/components/sizes.vue?vue&type=script&setup=true&lang.ts
var sizes_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationSizes",
__name: "sizes",
props: paginationSizesProps,
emits: ["page-size-change"],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("pagination");
const pagination = usePagination();
const innerPageSize = (0, vue.ref)(props.pageSize);
(0, vue.watch)(() => props.pageSizes, (newVal, oldVal) => {
if (isEqual$1(newVal, oldVal)) return;
if (isArray$1(newVal)) emit("page-size-change", newVal.includes(props.pageSize) ? props.pageSize : props.pageSizes[0]);
});
(0, vue.watch)(() => props.pageSize, (newVal) => {
innerPageSize.value = newVal;
});
const innerPageSizes = (0, vue.computed)(() => props.pageSizes);
function handleChange(val) {
if (val !== innerPageSize.value) {
innerPageSize.value = val;
pagination.handleSizeChange?.(Number(val));
}
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("sizes")) }, [(0, vue.createVNode)((0, vue.unref)(ElSelect), {
"model-value": innerPageSize.value,
disabled: _ctx.disabled,
"popper-class": _ctx.popperClass,
"popper-style": _ctx.popperStyle,
size: _ctx.size,
teleported: _ctx.teleported,
"validate-event": false,
"append-to": _ctx.appendSizeTo,
onChange: handleChange
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(innerPageSizes.value, (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElOption), {
key: item,
value: item,
label: item + (0, vue.unref)(t)("el.pagination.pagesize")
}, null, 8, ["value", "label"]);
}), 128))]),
_: 1
}, 8, [
"model-value",
"disabled",
"popper-class",
"popper-style",
"size",
"teleported",
"append-to"
])], 2);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/sizes.vue
var sizes_default = sizes_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/components/jumper.ts
const paginationJumperProps = buildProps({ size: {
type: String,
values: componentSizes
} });
//#endregion
//#region ../../packages/components/pagination/src/components/jumper.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$27 = ["disabled"];
var jumper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationJumper",
__name: "jumper",
props: paginationJumperProps,
setup(__props) {
const { t } = useLocale();
const ns = useNamespace("pagination");
const { pageCount, disabled, currentPage, changeEvent } = usePagination();
const userInput = (0, vue.ref)();
const innerValue = (0, vue.computed)(() => userInput.value ?? currentPage?.value);
function handleInput(val) {
userInput.value = val ? +val : "";
}
function handleChange(val) {
val = Math.trunc(+val);
changeEvent?.(val);
userInput.value = void 0;
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("jump")),
disabled: (0, vue.unref)(disabled)
}, [
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("goto")]) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.goto")), 3),
(0, vue.createVNode)((0, vue.unref)(ElInput), {
size: _ctx.size,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("editor"), (0, vue.unref)(ns).is("in-pagination")]),
min: 1,
max: (0, vue.unref)(pageCount),
disabled: (0, vue.unref)(disabled),
"model-value": innerValue.value,
"validate-event": false,
"aria-label": (0, vue.unref)(t)("el.pagination.page"),
type: "number",
"onUpdate:modelValue": handleInput,
onChange: handleChange
}, null, 8, [
"size",
"class",
"max",
"disabled",
"model-value",
"aria-label"
]),
(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("classifier")]) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.pageClassifier")), 3)
], 10, _hoisted_1$27);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/jumper.vue
var jumper_default = jumper_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/components/total.ts
const paginationTotalProps = buildProps({ total: {
type: Number,
default: 1e3
} });
//#endregion
//#region ../../packages/components/pagination/src/components/total.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$26 = ["disabled"];
var total_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationTotal",
__name: "total",
props: paginationTotalProps,
setup(__props) {
const { t } = useLocale();
const ns = useNamespace("pagination");
const { disabled } = usePagination();
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("total")),
disabled: (0, vue.unref)(disabled)
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.total", { total: _ctx.total })), 11, _hoisted_1$26);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/total.vue
var total_default = total_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/components/pager.ts
const paginationPagerProps = buildProps({
currentPage: {
type: Number,
default: 1
},
pageCount: {
type: Number,
required: true
},
pagerCount: {
type: Number,
default: 7
},
disabled: Boolean
});
//#endregion
//#region ../../packages/components/pagination/src/components/pager.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$25 = [
"aria-current",
"aria-label",
"tabindex"
];
const _hoisted_2$16 = ["tabindex", "aria-label"];
const _hoisted_3$7 = [
"aria-current",
"aria-label",
"tabindex"
];
const _hoisted_4$5 = ["tabindex", "aria-label"];
const _hoisted_5$3 = [
"aria-current",
"aria-label",
"tabindex"
];
var pager_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPaginationPager",
__name: "pager",
props: paginationPagerProps,
emits: [CHANGE_EVENT],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const nsPager = useNamespace("pager");
const nsIcon = useNamespace("icon");
const { t } = useLocale();
const showPrevMore = (0, vue.ref)(false);
const showNextMore = (0, vue.ref)(false);
const quickPrevHover = (0, vue.ref)(false);
const quickNextHover = (0, vue.ref)(false);
const quickPrevFocus = (0, vue.ref)(false);
const quickNextFocus = (0, vue.ref)(false);
const pagers = (0, vue.computed)(() => {
const pagerCount = props.pagerCount;
const halfPagerCount = (pagerCount - 1) / 2;
const currentPage = Number(props.currentPage);
const pageCount = Number(props.pageCount);
let showPrevMore = false;
let showNextMore = false;
if (pageCount > pagerCount) {
if (currentPage > pagerCount - halfPagerCount) showPrevMore = true;
if (currentPage < pageCount - halfPagerCount) showNextMore = true;
}
const array = [];
if (showPrevMore && !showNextMore) {
const startPage = pageCount - (pagerCount - 2);
for (let i = startPage; i < pageCount; i++) array.push(i);
} else if (!showPrevMore && showNextMore) for (let i = 2; i < pagerCount; i++) array.push(i);
else if (showPrevMore && showNextMore) {
const offset = Math.floor(pagerCount / 2) - 1;
for (let i = currentPage - offset; i <= currentPage + offset; i++) array.push(i);
} else for (let i = 2; i < pageCount; i++) array.push(i);
return array;
});
const prevMoreKls = (0, vue.computed)(() => [
"more",
"btn-quickprev",
nsIcon.b(),
nsPager.is("disabled", props.disabled)
]);
const nextMoreKls = (0, vue.computed)(() => [
"more",
"btn-quicknext",
nsIcon.b(),
nsPager.is("disabled", props.disabled)
]);
const tabindex = (0, vue.computed)(() => props.disabled ? -1 : 0);
(0, vue.watch)(() => [
props.pageCount,
props.pagerCount,
props.currentPage
], ([pageCount, pagerCount, currentPage]) => {
const halfPagerCount = (pagerCount - 1) / 2;
let showPrev = false;
let showNext = false;
if (pageCount > pagerCount) {
showPrev = currentPage > pagerCount - halfPagerCount;
showNext = currentPage < pageCount - halfPagerCount;
}
quickPrevHover.value &&= showPrev;
quickNextHover.value &&= showNext;
showPrevMore.value = showPrev;
showNextMore.value = showNext;
}, { immediate: true });
function onMouseEnter(forward = false) {
if (props.disabled) return;
if (forward) quickPrevHover.value = true;
else quickNextHover.value = true;
}
function onFocus(forward = false) {
if (forward) quickPrevFocus.value = true;
else quickNextFocus.value = true;
}
function onEnter(e) {
const target = e.target;
if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("number")) {
const newPage = Number(target.textContent);
if (newPage !== props.currentPage) emit(CHANGE_EVENT, newPage);
} else if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("more")) onPagerClick(e);
}
function onPagerClick(event) {
const target = event.target;
if (target.tagName.toLowerCase() === "ul" || props.disabled) return;
let newPage = Number(target.textContent);
const pageCount = props.pageCount;
const currentPage = props.currentPage;
const pagerCountOffset = props.pagerCount - 2;
if (target.className.includes("more")) {
if (target.className.includes("quickprev")) newPage = currentPage - pagerCountOffset;
else if (target.className.includes("quicknext")) newPage = currentPage + pagerCountOffset;
}
if (!Number.isNaN(+newPage)) {
if (newPage < 1) newPage = 1;
if (newPage > pageCount) newPage = pageCount;
}
if (newPage !== currentPage) emit(CHANGE_EVENT, newPage);
}
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsPager).b()),
onClick: onPagerClick,
onKeyup: (0, vue.withKeys)(onEnter, ["enter"])
}, [
_ctx.pageCount > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: 0,
class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === 1), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
"aria-current": _ctx.currentPage === 1,
"aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager: 1 }),
tabindex: tabindex.value
}, " 1 ", 10, _hoisted_1$25)) : (0, vue.createCommentVNode)("v-if", true),
showPrevMore.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: 1,
class: (0, vue.normalizeClass)(prevMoreKls.value),
tabindex: tabindex.value,
"aria-label": (0, vue.unref)(t)("el.pagination.prevPages", { pager: _ctx.pagerCount - 2 }),
onMouseenter: _cache[0] || (_cache[0] = ($event) => onMouseEnter(true)),
onMouseleave: _cache[1] || (_cache[1] = ($event) => quickPrevHover.value = false),
onFocus: _cache[2] || (_cache[2] = ($event) => onFocus(true)),
onBlur: _cache[3] || (_cache[3] = ($event) => quickPrevFocus.value = false)
}, [(quickPrevHover.value || quickPrevFocus.value) && !_ctx.disabled ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(d_arrow_left_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(more_filled_default), { key: 1 }))], 42, _hoisted_2$16)) : (0, vue.createCommentVNode)("v-if", true),
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(pagers.value, (pager) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: pager,
class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === pager), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
"aria-current": _ctx.currentPage === pager,
"aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager }),
tabindex: tabindex.value
}, (0, vue.toDisplayString)(pager), 11, _hoisted_3$7);
}), 128)),
showNextMore.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: 2,
class: (0, vue.normalizeClass)(nextMoreKls.value),
tabindex: tabindex.value,
"aria-label": (0, vue.unref)(t)("el.pagination.nextPages", { pager: _ctx.pagerCount - 2 }),
onMouseenter: _cache[4] || (_cache[4] = ($event) => onMouseEnter()),
onMouseleave: _cache[5] || (_cache[5] = ($event) => quickNextHover.value = false),
onFocus: _cache[6] || (_cache[6] = ($event) => onFocus()),
onBlur: _cache[7] || (_cache[7] = ($event) => quickNextFocus.value = false)
}, [(quickNextHover.value || quickNextFocus.value) && !_ctx.disabled ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(d_arrow_right_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(more_filled_default), { key: 1 }))], 42, _hoisted_4$5)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.pageCount > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: 3,
class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === _ctx.pageCount), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
"aria-current": _ctx.currentPage === _ctx.pageCount,
"aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager: _ctx.pageCount }),
tabindex: tabindex.value
}, (0, vue.toDisplayString)(_ctx.pageCount), 11, _hoisted_5$3)) : (0, vue.createCommentVNode)("v-if", true)
], 34);
};
}
});
//#endregion
//#region ../../packages/components/pagination/src/components/pager.vue
var pager_default = pager_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/pagination/src/pagination.ts
/**
* It it user's responsibility to guarantee that the value of props.total... is number
* (same as pageSize, defaultPageSize, currentPage, defaultCurrentPage, pageCount)
* Otherwise we can reasonable infer that the corresponding field is absent
*/
const isAbsent = (v) => typeof v !== "number";
const paginationProps = buildProps({
pageSize: Number,
defaultPageSize: Number,
total: Number,
pageCount: Number,
pagerCount: {
type: Number,
validator: (value) => {
return isNumber(value) && Math.trunc(value) === value && value > 4 && value < 22 && value % 2 === 1;
},
default: 7
},
currentPage: Number,
defaultCurrentPage: Number,
layout: {
type: String,
default: [
"prev",
"pager",
"next",
"jumper",
"->",
"total"
].join(", ")
},
pageSizes: {
type: definePropType(Array),
default: () => mutable([
10,
20,
30,
40,
50,
100
])
},
popperClass: {
type: String,
default: ""
},
popperStyle: { type: definePropType([String, Object]) },
prevText: {
type: String,
default: ""
},
prevIcon: {
type: iconPropType,
default: () => arrow_left_default
},
nextText: {
type: String,
default: ""
},
nextIcon: {
type: iconPropType,
default: () => arrow_right_default
},
teleported: {
type: Boolean,
default: true
},
small: Boolean,
size: useSizeProp,
background: Boolean,
disabled: Boolean,
hideOnSinglePage: Boolean,
appendSizeTo: String
});
const paginationEmits = {
"update:current-page": (val) => isNumber(val),
"update:page-size": (val) => isNumber(val),
"size-change": (val) => isNumber(val),
change: (currentPage, pageSize) => isNumber(currentPage) && isNumber(pageSize),
"current-change": (val) => isNumber(val),
"prev-click": (val) => isNumber(val),
"next-click": (val) => isNumber(val)
};
const componentName = "ElPagination";
var pagination_default = (0, vue.defineComponent)({
name: componentName,
props: paginationProps,
emits: paginationEmits,
setup(props, { emit, slots }) {
const { t } = useLocale();
const ns = useNamespace("pagination");
const vnodeProps = (0, vue.getCurrentInstance)().vnode.props || {};
const _globalSize = useGlobalSize();
const _size = (0, vue.computed)(() => props.small ? "small" : props.size ?? _globalSize.value);
useDeprecated({
from: "small",
replacement: "size",
version: "3.0.0",
scope: "el-pagination",
ref: "https://element-plus.org/zh-CN/component/pagination.html"
}, (0, vue.computed)(() => !!props.small));
const hasCurrentPageListener = "onUpdate:currentPage" in vnodeProps || "onUpdate:current-page" in vnodeProps || "onCurrentChange" in vnodeProps;
const hasPageSizeListener = "onUpdate:pageSize" in vnodeProps || "onUpdate:page-size" in vnodeProps || "onSizeChange" in vnodeProps;
const assertValidUsage = (0, vue.computed)(() => {
if (isAbsent(props.total) && isAbsent(props.pageCount)) return false;
if (!isAbsent(props.currentPage) && !hasCurrentPageListener) return false;
if (props.layout.includes("sizes")) {
if (!isAbsent(props.pageCount)) {
if (!hasPageSizeListener) return false;
} else if (!isAbsent(props.total)) {
if (!isAbsent(props.pageSize)) {
if (!hasPageSizeListener) return false;
}
}
}
return true;
});
const innerPageSize = (0, vue.ref)(isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize);
const innerCurrentPage = (0, vue.ref)(isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage);
const pageSizeBridge = (0, vue.computed)({
get() {
return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize;
},
set(v) {
if (isAbsent(props.pageSize)) innerPageSize.value = v;
if (hasPageSizeListener) {
emit("update:page-size", v);
emit("size-change", v);
}
}
});
const pageCountBridge = (0, vue.computed)(() => {
let pageCount = 0;
if (!isAbsent(props.pageCount)) pageCount = props.pageCount;
else if (!isAbsent(props.total)) pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value));
return pageCount;
});
const currentPageBridge = (0, vue.computed)({
get() {
return isAbsent(props.currentPage) ? innerCurrentPage.value : props.currentPage;
},
set(v) {
let newCurrentPage = v;
if (v < 1) newCurrentPage = 1;
else if (v > pageCountBridge.value) newCurrentPage = pageCountBridge.value;
if (isAbsent(props.currentPage)) innerCurrentPage.value = newCurrentPage;
if (hasCurrentPageListener) {
emit("update:current-page", newCurrentPage);
emit("current-change", newCurrentPage);
}
}
});
(0, vue.watch)(pageCountBridge, (val) => {
if (currentPageBridge.value > val) currentPageBridge.value = val;
});
(0, vue.watch)([currentPageBridge, pageSizeBridge], (value) => {
emit(CHANGE_EVENT, ...value);
}, { flush: "post" });
function handleCurrentChange(val) {
currentPageBridge.value = val;
}
function handleSizeChange(val) {
pageSizeBridge.value = val;
const newPageCount = pageCountBridge.value;
if (currentPageBridge.value > newPageCount) currentPageBridge.value = newPageCount;
}
function prev() {
if (props.disabled) return;
currentPageBridge.value -= 1;
emit("prev-click", currentPageBridge.value);
}
function next() {
if (props.disabled) return;
currentPageBridge.value += 1;
emit("next-click", currentPageBridge.value);
}
function addClass(element, cls) {
if (element) {
if (!element.props) element.props = {};
element.props.class = [element.props.class, cls].join(" ");
}
}
(0, vue.provide)(elPaginationKey, {
pageCount: pageCountBridge,
disabled: (0, vue.computed)(() => props.disabled),
currentPage: currentPageBridge,
changeEvent: handleCurrentChange,
handleSizeChange
});
return () => {
if (!assertValidUsage.value) {
/* @__PURE__ */ debugWarn(componentName, t("el.pagination.deprecationWarning"));
return null;
}
if (!props.layout) return null;
if (props.hideOnSinglePage && pageCountBridge.value <= 1) return null;
const rootChildren = [];
const rightWrapperChildren = [];
const rightWrapperRoot = (0, vue.h)("div", { class: ns.e("rightwrapper") }, rightWrapperChildren);
const TEMPLATE_MAP = {
prev: (0, vue.h)(prev_default, {
disabled: props.disabled,
currentPage: currentPageBridge.value,
prevText: props.prevText,
prevIcon: props.prevIcon,
onClick: prev
}),
jumper: (0, vue.h)(jumper_default, { size: _size.value }),
pager: (0, vue.h)(pager_default, {
currentPage: currentPageBridge.value,
pageCount: pageCountBridge.value,
pagerCount: props.pagerCount,
onChange: handleCurrentChange,
disabled: props.disabled
}),
next: (0, vue.h)(next_default, {
disabled: props.disabled,
currentPage: currentPageBridge.value,
pageCount: pageCountBridge.value,
nextText: props.nextText,
nextIcon: props.nextIcon,
onClick: next
}),
sizes: (0, vue.h)(sizes_default, {
pageSize: pageSizeBridge.value,
pageSizes: props.pageSizes,
popperClass: props.popperClass,
popperStyle: props.popperStyle,
disabled: props.disabled,
teleported: props.teleported,
size: _size.value,
appendSizeTo: props.appendSizeTo
}),
slot: slots?.default?.() ?? null,
total: (0, vue.h)(total_default, { total: isAbsent(props.total) ? 0 : props.total })
};
const components = props.layout.split(",").map((item) => item.trim());
let haveRightWrapper = false;
components.forEach((c) => {
if (c === "->") {
haveRightWrapper = true;
return;
}
if (!haveRightWrapper) rootChildren.push(TEMPLATE_MAP[c]);
else rightWrapperChildren.push(TEMPLATE_MAP[c]);
});
addClass(rootChildren[0], ns.is("first"));
addClass(rootChildren[rootChildren.length - 1], ns.is("last"));
if (haveRightWrapper && rightWrapperChildren.length > 0) {
addClass(rightWrapperChildren[0], ns.is("first"));
addClass(rightWrapperChildren[rightWrapperChildren.length - 1], ns.is("last"));
rootChildren.push(rightWrapperRoot);
}
return (0, vue.h)("div", { class: [
ns.b(),
ns.is("background", props.background),
ns.m(_size.value)
] }, rootChildren);
};
}
});
//#endregion
//#region ../../packages/components/pagination/index.ts
const ElPagination = withInstall(pagination_default);
//#endregion
//#region ../../packages/components/popconfirm/src/popconfirm.ts
/**
* @deprecated Removed after 3.0.0, Use `PopconfirmProps` instead.
*/
const popconfirmProps = buildProps({
title: String,
confirmButtonText: String,
cancelButtonText: String,
confirmButtonType: {
type: String,
values: buttonTypes,
default: "primary"
},
cancelButtonType: {
type: String,
values: buttonTypes,
default: "text"
},
icon: {
type: iconPropType,
default: () => question_filled_default
},
iconColor: {
type: String,
default: "#f90"
},
hideIcon: Boolean,
hideAfter: {
type: Number,
default: 200
},
effect: {
...useTooltipContentProps.effect,
default: "light"
},
teleported: useTooltipContentProps.teleported,
persistent: useTooltipContentProps.persistent,
width: {
type: [String, Number],
default: 150
},
virtualTriggering: useTooltipTriggerProps.virtualTriggering,
virtualRef: useTooltipTriggerProps.virtualRef
});
const popconfirmEmits = {
confirm: (e) => e instanceof MouseEvent,
cancel: (e) => e instanceof MouseEvent
};
//#endregion
//#region ../../packages/components/popconfirm/src/popconfirm.vue?vue&type=script&setup=true&lang.ts
var popconfirm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopconfirm",
__name: "popconfirm",
props: popconfirmProps,
emits: popconfirmEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const ns = useNamespace("popconfirm");
const tooltipRef = (0, vue.ref)();
const rootRef = (0, vue.ref)();
const popperRef = (0, vue.computed)(() => {
return (0, vue.unref)(tooltipRef)?.popperRef;
});
const showPopper = () => {
rootRef.value?.focus?.();
};
const hidePopper = () => {
tooltipRef.value?.onClose?.();
};
const style = (0, vue.computed)(() => {
return { width: addUnit(props.width) };
});
const confirm = (e) => {
emit("confirm", e);
hidePopper();
};
const cancel = (e) => {
emit("cancel", e);
hidePopper();
};
const finalConfirmButtonText = (0, vue.computed)(() => props.confirmButtonText || t("el.popconfirm.confirmButtonText"));
const finalCancelButtonText = (0, vue.computed)(() => props.cancelButtonText || t("el.popconfirm.cancelButtonText"));
__expose({
popperRef,
hide: hidePopper
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
ref_key: "tooltipRef",
ref: tooltipRef,
trigger: "click",
effect: __props.effect
}, _ctx.$attrs, {
"virtual-triggering": __props.virtualTriggering,
"virtual-ref": __props.virtualRef,
"popper-class": `${(0, vue.unref)(ns).namespace.value}-popover`,
"popper-style": style.value,
teleported: __props.teleported,
"fallback-placements": [
"bottom",
"top",
"right",
"left"
],
"hide-after": __props.hideAfter,
persistent: __props.persistent,
loop: "",
onShow: showPopper
}), {
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref_key: "rootRef",
ref: rootRef,
tabindex: "-1",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main")) }, [!__props.hideIcon && __props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")),
style: (0, vue.normalizeStyle)({ color: __props.iconColor })
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
}, 8, ["class", "style"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(__props.title), 1)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("action")) }, [(0, vue.renderSlot)(_ctx.$slots, "actions", {
confirm,
cancel
}, () => [(0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
type: __props.cancelButtonType === "text" ? "" : __props.cancelButtonType,
text: __props.cancelButtonType === "text",
onClick: cancel
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(finalCancelButtonText.value), 1)]),
_: 1
}, 8, ["type", "text"]), (0, vue.createVNode)((0, vue.unref)(ElButton), {
size: "small",
type: __props.confirmButtonType === "text" ? "" : __props.confirmButtonType,
text: __props.confirmButtonType === "text",
onClick: confirm
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(finalConfirmButtonText.value), 1)]),
_: 1
}, 8, ["type", "text"])])], 2)], 2)]),
default: (0, vue.withCtx)(() => [_ctx.$slots.reference ? (0, vue.renderSlot)(_ctx.$slots, "reference", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16, [
"effect",
"virtual-triggering",
"virtual-ref",
"popper-class",
"popper-style",
"teleported",
"hide-after",
"persistent"
]);
};
}
});
//#endregion
//#region ../../packages/components/popconfirm/src/popconfirm.vue
var popconfirm_default = popconfirm_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/popconfirm/index.ts
const ElPopconfirm = withInstall(popconfirm_default);
//#endregion
//#region ../../packages/components/popover/src/popover.ts
/**
* @deprecated Removed after 3.0.0, Use `PopoverProps` instead.
*/
const popoverProps = buildProps({
trigger: useTooltipTriggerProps.trigger,
triggerKeys: useTooltipTriggerProps.triggerKeys,
placement: dropdownProps.placement,
disabled: useTooltipTriggerProps.disabled,
visible: useTooltipContentProps.visible,
transition: useTooltipContentProps.transition,
popperOptions: dropdownProps.popperOptions,
tabindex: dropdownProps.tabindex,
content: useTooltipContentProps.content,
popperStyle: useTooltipContentProps.popperStyle,
popperClass: useTooltipContentProps.popperClass,
enterable: {
...useTooltipContentProps.enterable,
default: true
},
effect: {
...useTooltipContentProps.effect,
default: "light"
},
teleported: useTooltipContentProps.teleported,
appendTo: useTooltipContentProps.appendTo,
title: String,
width: {
type: [String, Number],
default: 150
},
offset: {
type: Number,
default: void 0
},
showAfter: {
type: Number,
default: 0
},
hideAfter: {
type: Number,
default: 200
},
autoClose: {
type: Number,
default: 0
},
showArrow: {
type: Boolean,
default: true
},
persistent: {
type: Boolean,
default: true
},
"onUpdate:visible": { type: Function }
});
const popoverEmits = {
"update:visible": (value) => isBoolean(value),
"before-enter": () => true,
"before-leave": () => true,
"after-enter": () => true,
"after-leave": () => true
};
/**
* @description default values for PopoverProps
*/
const popoverPropsDefaults = {
trigger: "hover",
triggerKeys: () => [
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space
],
placement: "bottom",
visible: null,
popperOptions: () => ({}),
tabindex: 0,
content: "",
popperStyle: void 0,
enterable: true,
effect: "light",
teleported: true,
width: 150,
offset: void 0,
showAfter: 0,
hideAfter: 200,
autoClose: 0,
showArrow: true,
persistent: true
};
//#endregion
//#region ../../packages/components/popover/src/popover.vue?vue&type=script&setup=true&lang.ts
const updateEventKeyRaw = `onUpdate:visible`;
var popover_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElPopover",
__name: "popover",
props: popoverProps,
emits: popoverEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const onUpdateVisible = (0, vue.computed)(() => {
return props[updateEventKeyRaw];
});
const ns = useNamespace("popover");
const tooltipRef = (0, vue.ref)();
const popperRef = (0, vue.computed)(() => {
return (0, vue.unref)(tooltipRef)?.popperRef;
});
const style = (0, vue.computed)(() => {
return [{ width: addUnit(props.width) }, props.popperStyle];
});
const kls = (0, vue.computed)(() => {
return [
ns.b(),
props.popperClass,
{ [ns.m("plain")]: !!props.content }
];
});
const gpuAcceleration = (0, vue.computed)(() => {
return props.transition === `${ns.namespace.value}-fade-in-linear`;
});
const hide = () => {
tooltipRef.value?.hide();
};
const beforeEnter = () => {
emit("before-enter");
};
const beforeLeave = () => {
emit("before-leave");
};
const afterEnter = () => {
emit("after-enter");
};
const afterLeave = () => {
emit("update:visible", false);
emit("after-leave");
};
__expose({
popperRef,
hide
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
ref_key: "tooltipRef",
ref: tooltipRef
}, _ctx.$attrs, {
trigger: __props.trigger,
"trigger-keys": __props.triggerKeys,
placement: __props.placement,
disabled: __props.disabled,
visible: __props.visible,
transition: __props.transition,
"popper-options": __props.popperOptions,
tabindex: __props.tabindex,
content: __props.content,
offset: __props.offset,
"show-after": __props.showAfter,
"hide-after": __props.hideAfter,
"auto-close": __props.autoClose,
"show-arrow": __props.showArrow,
"aria-label": __props.title,
effect: __props.effect,
enterable: __props.enterable,
"popper-class": kls.value,
"popper-style": style.value,
teleported: __props.teleported,
"append-to": __props.appendTo,
persistent: __props.persistent,
"gpu-acceleration": gpuAcceleration.value,
"onUpdate:visible": onUpdateVisible.value,
onBeforeShow: beforeEnter,
onBeforeHide: beforeLeave,
onShow: afterEnter,
onHide: afterLeave
}), {
content: (0, vue.withCtx)(() => [__props.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")),
role: "title"
}, (0, vue.toDisplayString)(__props.title), 3)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default", { hide }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.content), 1)])]),
default: (0, vue.withCtx)(() => [_ctx.$slots.reference ? (0, vue.renderSlot)(_ctx.$slots, "reference", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16, [
"trigger",
"trigger-keys",
"placement",
"disabled",
"visible",
"transition",
"popper-options",
"tabindex",
"content",
"offset",
"show-after",
"hide-after",
"auto-close",
"show-arrow",
"aria-label",
"effect",
"enterable",
"popper-class",
"popper-style",
"teleported",
"append-to",
"persistent",
"gpu-acceleration",
"onUpdate:visible"
]);
};
}
});
//#endregion
//#region ../../packages/components/popover/src/popover.vue
var popover_default = popover_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/popover/src/directive.ts
const attachEvents = (el, binding) => {
const popover = (binding.arg || binding.value)?.popperRef;
if (popover) popover.triggerRef = el;
};
var directive_default = {
mounted(el, binding) {
attachEvents(el, binding);
},
updated(el, binding) {
attachEvents(el, binding);
}
};
const VPopover = "popover";
//#endregion
//#region ../../packages/components/popover/index.ts
const ElPopoverDirective = withInstallDirective(directive_default, VPopover);
const ElPopover = withInstall(popover_default, { directive: ElPopoverDirective });
//#endregion
//#region ../../packages/components/progress/src/progress.ts
/**
* @deprecated Removed after 3.0.0, Use `ProgressProps` instead.
*/
const progressProps = buildProps({
type: {
type: String,
default: "line",
values: [
"line",
"circle",
"dashboard"
]
},
percentage: {
type: Number,
default: 0,
validator: (val) => val >= 0 && val <= 100
},
status: {
type: String,
default: "",
values: [
"",
"success",
"exception",
"warning"
]
},
indeterminate: Boolean,
duration: {
type: Number,
default: 3
},
strokeWidth: {
type: Number,
default: 6
},
strokeLinecap: {
type: definePropType(String),
default: "round"
},
textInside: Boolean,
width: {
type: Number,
default: 126
},
showText: {
type: Boolean,
default: true
},
color: {
type: definePropType([
String,
Array,
Function
]),
default: ""
},
striped: Boolean,
stripedFlow: Boolean,
format: {
type: definePropType(Function),
default: (percentage) => `${percentage}%`
}
});
//#endregion
//#region ../../packages/components/progress/src/progress.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$24 = ["aria-valuenow"];
const _hoisted_2$15 = { viewBox: "0 0 100 100" };
const _hoisted_3$6 = [
"d",
"stroke",
"stroke-linecap",
"stroke-width"
];
const _hoisted_4$4 = [
"d",
"stroke",
"opacity",
"stroke-linecap",
"stroke-width"
];
const _hoisted_5$2 = { key: 0 };
var progress_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElProgress",
__name: "progress",
props: progressProps,
setup(__props) {
const STATUS_COLOR_MAP = {
success: "#13ce66",
exception: "#ff4949",
warning: "#e6a23c",
default: "#20a0ff"
};
const props = __props;
const ns = useNamespace("progress");
const barStyle = (0, vue.computed)(() => {
const barStyle = {
width: `${props.percentage}%`,
animationDuration: `${props.duration}s`
};
const color = getCurrentColor(props.percentage);
if (color.includes("gradient")) barStyle.background = color;
else barStyle.backgroundColor = color;
return barStyle;
});
const relativeStrokeWidth = (0, vue.computed)(() => (props.strokeWidth / props.width * 100).toFixed(1));
const radius = (0, vue.computed)(() => {
if (["circle", "dashboard"].includes(props.type)) return Number.parseInt(`${50 - Number.parseFloat(relativeStrokeWidth.value) / 2}`, 10);
return 0;
});
const trackPath = (0, vue.computed)(() => {
const r = radius.value;
const isDashboard = props.type === "dashboard";
return `
M 50 50
m 0 ${isDashboard ? "" : "-"}${r}
a ${r} ${r} 0 1 1 0 ${isDashboard ? "-" : ""}${r * 2}
a ${r} ${r} 0 1 1 0 ${isDashboard ? "" : "-"}${r * 2}
`;
});
const perimeter = (0, vue.computed)(() => 2 * Math.PI * radius.value);
const rate = (0, vue.computed)(() => props.type === "dashboard" ? .75 : 1);
const strokeDashoffset = (0, vue.computed)(() => {
return `${-1 * perimeter.value * (1 - rate.value) / 2}px`;
});
const trailPathStyle = (0, vue.computed)(() => ({
strokeDasharray: `${perimeter.value * rate.value}px, ${perimeter.value}px`,
strokeDashoffset: strokeDashoffset.value
}));
const circlePathStyle = (0, vue.computed)(() => ({
strokeDasharray: `${perimeter.value * rate.value * (props.percentage / 100)}px, ${perimeter.value}px`,
strokeDashoffset: strokeDashoffset.value,
transition: "stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"
}));
const stroke = (0, vue.computed)(() => {
let ret;
if (props.color) ret = getCurrentColor(props.percentage);
else ret = STATUS_COLOR_MAP[props.status] || STATUS_COLOR_MAP.default;
return ret;
});
const statusIcon = (0, vue.computed)(() => {
if (props.status === "warning") return warning_filled_default;
if (props.type === "line") return props.status === "success" ? circle_check_default : circle_close_default;
else return props.status === "success" ? check_default : close_default;
});
const progressTextSize = (0, vue.computed)(() => {
return props.type === "line" ? 12 + props.strokeWidth * .4 : props.width * .111111 + 2;
});
const content = (0, vue.computed)(() => props.format(props.percentage));
function getColors(color) {
const span = 100 / color.length;
return color.map((seriesColor, index) => {
if (isString(seriesColor)) return {
color: seriesColor,
percentage: (index + 1) * span
};
return seriesColor;
}).sort((a, b) => a.percentage - b.percentage);
}
const getCurrentColor = (percentage) => {
const { color } = props;
if (isFunction$1(color)) return color(percentage);
else if (isString(color)) return color;
else {
const colors = getColors(color);
for (const color of colors) if (color.percentage > percentage) return color.color;
return colors[colors.length - 1]?.color;
}
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).m(__props.type),
(0, vue.unref)(ns).is(__props.status),
{
[(0, vue.unref)(ns).m("without-text")]: !__props.showText,
[(0, vue.unref)(ns).m("text-inside")]: __props.textInside
}
]),
role: "progressbar",
"aria-valuenow": __props.percentage,
"aria-valuemin": "0",
"aria-valuemax": "100"
}, [__props.type === "line" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("bar"))
}, [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("bar", "outer")),
style: (0, vue.normalizeStyle)({ height: `${__props.strokeWidth}px` })
}, [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).be("bar", "inner"),
{ [(0, vue.unref)(ns).bem("bar", "inner", "indeterminate")]: __props.indeterminate },
{ [(0, vue.unref)(ns).bem("bar", "inner", "striped")]: __props.striped },
{ [(0, vue.unref)(ns).bem("bar", "inner", "striped-flow")]: __props.stripedFlow }
]),
style: (0, vue.normalizeStyle)(barStyle.value)
}, [(__props.showText || _ctx.$slots.default) && __props.textInside ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("bar", "innerText"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", { percentage: __props.percentage }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(content.value), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 6)], 6)], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("circle")),
style: (0, vue.normalizeStyle)({
height: `${__props.width}px`,
width: `${__props.width}px`
})
}, [((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_2$15, [(0, vue.createElementVNode)("path", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("circle", "track")),
d: trackPath.value,
stroke: `var(${(0, vue.unref)(ns).cssVarName("fill-color-light")}, #e5e9f2)`,
"stroke-linecap": __props.strokeLinecap,
"stroke-width": relativeStrokeWidth.value,
fill: "none",
style: (0, vue.normalizeStyle)(trailPathStyle.value)
}, null, 14, _hoisted_3$6), (0, vue.createElementVNode)("path", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("circle", "path")),
d: trackPath.value,
stroke: stroke.value,
fill: "none",
opacity: __props.percentage ? 1 : 0,
"stroke-linecap": __props.strokeLinecap,
"stroke-width": relativeStrokeWidth.value,
style: (0, vue.normalizeStyle)(circlePathStyle.value)
}, null, 14, _hoisted_4$4)]))], 6)), (__props.showText || _ctx.$slots.default) && !__props.textInside ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("text")),
style: (0, vue.normalizeStyle)({ fontSize: `${progressTextSize.value}px` })
}, [(0, vue.renderSlot)(_ctx.$slots, "default", { percentage: __props.percentage }, () => [!__props.status ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$2, (0, vue.toDisplayString)(content.value), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(statusIcon.value)))]),
_: 1
}))])], 6)) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_1$24);
};
}
});
//#endregion
//#region ../../packages/components/progress/src/progress.vue
var progress_default = progress_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/progress/index.ts
const ElProgress = withInstall(progress_default);
//#endregion
//#region ../../packages/components/rate/src/rate.ts
/**
* @deprecated Removed after 3.0.0, Use `RateProps` instead.
*/
const rateProps = buildProps({
modelValue: {
type: Number,
default: 0
},
id: {
type: String,
default: void 0
},
lowThreshold: {
type: Number,
default: 2
},
highThreshold: {
type: Number,
default: 4
},
max: {
type: Number,
default: 5
},
colors: {
type: definePropType([Array, Object]),
default: () => mutable([
"",
"",
""
])
},
voidColor: {
type: String,
default: ""
},
disabledVoidColor: {
type: String,
default: ""
},
icons: {
type: definePropType([Array, Object]),
default: () => [
star_filled_default,
star_filled_default,
star_filled_default
]
},
voidIcon: {
type: iconPropType,
default: () => star_default
},
disabledVoidIcon: {
type: iconPropType,
default: () => star_filled_default
},
disabled: {
type: Boolean,
default: void 0
},
allowHalf: Boolean,
showText: Boolean,
showScore: Boolean,
textColor: {
type: String,
default: ""
},
texts: {
type: definePropType(Array),
default: () => mutable([
"Extremely bad",
"Disappointed",
"Fair",
"Satisfied",
"Surprise"
])
},
scoreTemplate: {
type: String,
default: "{value}"
},
size: useSizeProp,
clearable: Boolean,
...useAriaProps(["ariaLabel"])
});
const rateEmits = {
[CHANGE_EVENT]: (value) => isNumber(value),
[UPDATE_MODEL_EVENT]: (value) => isNumber(value)
};
//#endregion
//#region ../../packages/components/rate/src/rate.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$23 = [
"id",
"aria-label",
"aria-labelledby",
"aria-valuenow",
"aria-valuetext",
"aria-valuemax",
"tabindex",
"aria-disabled"
];
const _hoisted_2$14 = ["onMousemove", "onClick"];
var rate_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElRate",
__name: "rate",
props: rateProps,
emits: rateEmits,
setup(__props, { expose: __expose, emit: __emit }) {
function getValueFromMap(value, map) {
const isExcludedObject = (val) => isObject$1(val);
const matchedValue = map[Object.keys(map).map((key) => +key).filter((key) => {
const val = map[key];
return (isExcludedObject(val) ? val.excluded : false) ? value < key : value <= key;
}).sort((a, b) => a - b)[0]];
return isExcludedObject(matchedValue) && matchedValue.value || matchedValue;
}
const props = __props;
const emit = __emit;
const formItemContext = (0, vue.inject)(formItemContextKey, void 0);
const rateSize = useFormSize();
const ns = useNamespace("rate");
const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext });
const currentValue = (0, vue.ref)(clamp$1(props.modelValue, 0, props.max));
const hoverIndex = (0, vue.ref)(-1);
const pointerAtLeftHalf = (0, vue.ref)(true);
const iconRefs = (0, vue.ref)([]);
const iconClientWidths = (0, vue.computed)(() => iconRefs.value.map((icon) => icon.$el.clientWidth));
const rateClasses = (0, vue.computed)(() => [ns.b(), ns.m(rateSize.value)]);
const rateDisabled = useFormDisabled();
const rateStyles = (0, vue.computed)(() => {
return ns.cssVarBlock({
"void-color": props.voidColor,
"disabled-void-color": props.disabledVoidColor,
"fill-color": activeColor.value
});
});
const text = (0, vue.computed)(() => {
let result = "";
if (props.showScore) result = props.scoreTemplate.replace(/\{\s*value\s*\}/, rateDisabled.value ? `${props.modelValue}` : `${currentValue.value}`);
else if (props.showText) result = props.texts[Math.ceil(currentValue.value) - 1];
return result;
});
const valueDecimal = (0, vue.computed)(() => props.modelValue * 100 - Math.floor(props.modelValue) * 100);
const colorMap = (0, vue.computed)(() => isArray$1(props.colors) ? {
[props.lowThreshold]: props.colors[0],
[props.highThreshold]: {
value: props.colors[1],
excluded: true
},
[props.max]: props.colors[2]
} : props.colors);
const activeColor = (0, vue.computed)(() => {
const color = getValueFromMap(currentValue.value, colorMap.value);
return isObject$1(color) ? "" : color;
});
const decimalStyle = (0, vue.computed)(() => {
let width = "";
if (rateDisabled.value) width = `${valueDecimal.value}%`;
else if (props.allowHalf) width = "50%";
return {
color: activeColor.value,
width
};
});
const componentMap = (0, vue.computed)(() => {
let icons = isArray$1(props.icons) ? [...props.icons] : { ...props.icons };
icons = (0, vue.markRaw)(icons);
return isArray$1(icons) ? {
[props.lowThreshold]: icons[0],
[props.highThreshold]: {
value: icons[1],
excluded: true
},
[props.max]: icons[2]
} : icons;
});
const decimalIconComponent = (0, vue.computed)(() => getValueFromMap(props.modelValue, componentMap.value));
const voidComponent = (0, vue.computed)(() => rateDisabled.value ? isString(props.disabledVoidIcon) ? props.disabledVoidIcon : (0, vue.markRaw)(props.disabledVoidIcon) : isString(props.voidIcon) ? props.voidIcon : (0, vue.markRaw)(props.voidIcon));
const activeComponent = (0, vue.computed)(() => getValueFromMap(currentValue.value, componentMap.value));
function showDecimalIcon(item) {
const showWhenDisabled = rateDisabled.value && valueDecimal.value > 0 && item - 1 < props.modelValue && item > props.modelValue;
const showWhenAllowHalf = props.allowHalf && pointerAtLeftHalf.value && item - .5 <= currentValue.value && item > currentValue.value;
return showWhenDisabled || showWhenAllowHalf;
}
function emitValue(value) {
if (props.clearable && value === props.modelValue) value = 0;
emit(UPDATE_MODEL_EVENT, value);
if (props.modelValue !== value) emit(CHANGE_EVENT, value);
}
function selectValue(value) {
if (rateDisabled.value) return;
if (props.allowHalf && pointerAtLeftHalf.value) emitValue(currentValue.value);
else emitValue(value);
}
function handleKey(e) {
if (rateDisabled.value) return;
const code = getEventCode(e);
const step = props.allowHalf ? .5 : 1;
let _currentValue = currentValue.value;
switch (code) {
case EVENT_CODE.up:
case EVENT_CODE.right:
_currentValue += step;
break;
case EVENT_CODE.left:
case EVENT_CODE.down:
_currentValue -= step;
break;
}
_currentValue = clamp$1(_currentValue, 0, props.max);
if (_currentValue === currentValue.value) return;
e.stopPropagation();
e.preventDefault();
emit(UPDATE_MODEL_EVENT, _currentValue);
emit(CHANGE_EVENT, _currentValue);
return _currentValue;
}
function setCurrentValue(value, event) {
if (rateDisabled.value) return;
if (props.allowHalf && event) {
pointerAtLeftHalf.value = event.offsetX * 2 <= iconClientWidths.value[value - 1];
currentValue.value = pointerAtLeftHalf.value ? value - .5 : value;
} else currentValue.value = value;
hoverIndex.value = value;
}
function resetCurrentValue() {
if (rateDisabled.value) return;
if (props.allowHalf) pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue);
currentValue.value = clamp$1(props.modelValue, 0, props.max);
hoverIndex.value = -1;
}
(0, vue.watch)(() => props.modelValue, (val) => {
currentValue.value = clamp$1(val, 0, props.max);
pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue);
});
if (!props.modelValue) emit(UPDATE_MODEL_EVENT, 0);
__expose({
setCurrentValue,
resetCurrentValue
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
id: (0, vue.unref)(inputId),
class: (0, vue.normalizeClass)([rateClasses.value, (0, vue.unref)(ns).is("disabled", (0, vue.unref)(rateDisabled))]),
role: "slider",
"aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "rating" : void 0,
"aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItemContext)?.labelId : void 0,
"aria-valuenow": currentValue.value,
"aria-valuetext": text.value || void 0,
"aria-valuemin": "0",
"aria-valuemax": __props.max,
style: (0, vue.normalizeStyle)(rateStyles.value),
tabindex: (0, vue.unref)(rateDisabled) ? void 0 : 0,
"aria-disabled": (0, vue.unref)(rateDisabled),
onKeydown: handleKey
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.max, (item, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")),
onMousemove: ($event) => setCurrentValue(item, $event),
onMouseleave: resetCurrentValue,
onClick: ($event) => selectValue(item)
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), {
ref_for: true,
ref_key: "iconRefs",
ref: iconRefs,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("icon"),
{ hover: hoverIndex.value === item },
(0, vue.unref)(ns).is("active", item <= currentValue.value),
(0, vue.unref)(ns).is("focus-visible", item === Math.ceil(currentValue.value || 1))
])
}, {
default: (0, vue.withCtx)(() => [
(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(activeComponent.value), null, null, 512)), [[vue.vShow, !showDecimalIcon(item) && item <= currentValue.value]]),
(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(voidComponent.value), null, null, 512)), [[vue.vShow, !showDecimalIcon(item) && item > currentValue.value]]),
(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(voidComponent.value), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).em("decimal", "box")]) }, null, 8, ["class"])), [[vue.vShow, showDecimalIcon(item)]]),
(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), {
style: (0, vue.normalizeStyle)(decimalStyle.value),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).e("decimal")])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(decimalIconComponent.value)))]),
_: 1
}, 8, ["style", "class"]), [[vue.vShow, showDecimalIcon(item)]])
]),
_: 2
}, 1032, ["class"])], 42, _hoisted_2$14);
}), 128)), __props.showText || __props.showScore ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("text")),
style: (0, vue.normalizeStyle)({ color: __props.textColor })
}, (0, vue.toDisplayString)(text.value), 7)) : (0, vue.createCommentVNode)("v-if", true)], 46, _hoisted_1$23);
};
}
});
//#endregion
//#region ../../packages/components/rate/src/rate.vue
var rate_default = rate_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/rate/index.ts
const ElRate = withInstall(rate_default);
//#endregion
//#region ../../packages/components/result/src/result.ts
const IconMap = {
primary: "icon-primary",
success: "icon-success",
warning: "icon-warning",
error: "icon-error",
info: "icon-info"
};
const IconComponentMap = {
[IconMap.primary]: info_filled_default,
[IconMap.success]: circle_check_filled_default,
[IconMap.warning]: warning_filled_default,
[IconMap.error]: circle_close_filled_default,
[IconMap.info]: info_filled_default
};
/**
* @deprecated Removed after 3.0.0, Use `ResultProps` instead.
*/
const resultProps = buildProps({
title: {
type: String,
default: ""
},
subTitle: {
type: String,
default: ""
},
icon: {
type: String,
values: [
"primary",
"success",
"warning",
"info",
"error"
],
default: "info"
}
});
//#endregion
//#region ../../packages/components/result/src/result.vue?vue&type=script&setup=true&lang.ts
var result_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElResult",
__name: "result",
props: resultProps,
setup(__props) {
const props = __props;
const ns = useNamespace("result");
const resultIcon = (0, vue.computed)(() => {
const icon = props.icon;
const iconClass = icon && IconMap[icon] ? IconMap[icon] : "icon-info";
return {
class: iconClass,
component: IconComponentMap[iconClass] || IconComponentMap["icon-info"]
};
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")) }, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [resultIcon.value.component ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(resultIcon.value.component), {
key: 0,
class: (0, vue.normalizeClass)(resultIcon.value.class)
}, null, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)])], 2),
__props.title || _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
}, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
__props.subTitle || _ctx.$slots["sub-title"] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("subtitle"))
}, [(0, vue.renderSlot)(_ctx.$slots, "sub-title", {}, () => [(0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)(__props.subTitle), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra"))
}, [(0, vue.renderSlot)(_ctx.$slots, "extra")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/result/src/result.vue
var result_default = result_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/result/index.ts
const ElResult = withInstall(result_default);
//#endregion
//#region ../../node_modules/.pnpm/memoize-one@6.0.0/node_modules/memoize-one/dist/memoize-one.esm.js
var safeIsNaN = Number.isNaN || function ponyfill(value) {
return typeof value === "number" && value !== value;
};
function isEqual(first, second) {
if (first === second) return true;
if (safeIsNaN(first) && safeIsNaN(second)) return true;
return false;
}
function areInputsEqual(newInputs, lastInputs) {
if (newInputs.length !== lastInputs.length) return false;
for (var i = 0; i < newInputs.length; i++) if (!isEqual(newInputs[i], lastInputs[i])) return false;
return true;
}
function memoizeOne(resultFn, isEqual) {
if (isEqual === void 0) isEqual = areInputsEqual;
var cache = null;
function memoized() {
var newArgs = [];
for (var _i = 0; _i < arguments.length; _i++) newArgs[_i] = arguments[_i];
if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) return cache.lastResult;
var lastResult = resultFn.apply(this, newArgs);
cache = {
lastResult,
lastArgs: newArgs,
lastThis: this
};
return lastResult;
}
memoized.clear = function clear() {
cache = null;
};
return memoized;
}
//#endregion
//#region ../../packages/components/virtual-list/src/hooks/use-cache.ts
const useCache = () => {
const props = (0, vue.getCurrentInstance)().proxy.$props;
return (0, vue.computed)(() => {
const _getItemStyleCache = (_, __, ___) => ({});
return props.perfMode ? memoize(_getItemStyleCache) : memoizeOne(_getItemStyleCache);
});
};
//#endregion
//#region ../../packages/components/virtual-list/src/defaults.ts
const DEFAULT_DYNAMIC_LIST_ITEM_SIZE = 50;
const ITEM_RENDER_EVT = "itemRendered";
const SCROLL_EVT = "scroll";
const FORWARD = "forward";
const BACKWARD = "backward";
const AUTO_ALIGNMENT = "auto";
const SMART_ALIGNMENT = "smart";
const START_ALIGNMENT = "start";
const CENTERED_ALIGNMENT = "center";
const END_ALIGNMENT = "end";
const HORIZONTAL = "horizontal";
const VERTICAL = "vertical";
const LTR = "ltr";
const RTL = "rtl";
const RTL_OFFSET_NAG = "negative";
const RTL_OFFSET_POS_ASC = "positive-ascending";
const RTL_OFFSET_POS_DESC = "positive-descending";
const ScrollbarSizeKey = {
[HORIZONTAL]: "height",
[VERTICAL]: "width"
};
const ScrollbarDirKey = {
[HORIZONTAL]: "left",
[VERTICAL]: "top"
};
const SCROLLBAR_MIN_SIZE = 20;
//#endregion
//#region ../../packages/components/virtual-list/src/hooks/use-wheel.ts
const useWheel = ({ atEndEdge, atStartEdge, layout }, onWheelDelta) => {
let frameHandle;
let offset = 0;
const hasReachedEdge = (offset) => {
return offset < 0 && atStartEdge.value || offset > 0 && atEndEdge.value;
};
const onWheel = (e) => {
cAF(frameHandle);
let { deltaX, deltaY } = e;
if (e.shiftKey && deltaY !== 0) {
deltaX = deltaY;
deltaY = 0;
}
const newOffset = layout.value === HORIZONTAL ? deltaX : deltaY;
if (hasReachedEdge(newOffset)) return;
offset += newOffset;
if (!isFirefox() && newOffset !== 0) e.preventDefault();
frameHandle = rAF(() => {
onWheelDelta(offset);
offset = 0;
});
};
return {
hasReachedEdge,
onWheel
};
};
//#endregion
//#region ../../packages/components/virtual-list/src/props.ts
const itemSize$1 = buildProp({
type: definePropType([Number, Function]),
required: true
});
const estimatedItemSize = buildProp({ type: Number });
const cache = buildProp({
type: Number,
default: 2
});
const direction = buildProp({
type: String,
values: ["ltr", "rtl"],
default: "ltr"
});
const initScrollOffset = buildProp({
type: Number,
default: 0
});
const total = buildProp({
type: Number,
required: true
});
const layout = buildProp({
type: String,
values: ["horizontal", "vertical"],
default: VERTICAL
});
const virtualizedProps = buildProps({
className: {
type: String,
default: ""
},
containerElement: {
type: definePropType([String, Object]),
default: "div"
},
data: {
type: definePropType(Array),
default: () => mutable([])
},
direction,
height: {
type: [String, Number],
required: true
},
innerElement: {
type: [String, Object],
default: "div"
},
innerProps: {
type: definePropType(Object),
default: () => ({})
},
style: { type: definePropType([
Object,
String,
Array
]) },
useIsScrolling: Boolean,
width: {
type: [Number, String],
required: false
},
perfMode: {
type: Boolean,
default: true
},
scrollbarAlwaysOn: Boolean
});
const virtualizedListProps = buildProps({
cache,
estimatedItemSize,
layout,
initScrollOffset,
total,
itemSize: itemSize$1,
...virtualizedProps
});
const scrollbarSize = {
type: Number,
default: 6
};
const startGap = {
type: Number,
default: 0
};
const endGap = {
type: Number,
default: 2
};
const virtualizedGridProps = buildProps({
columnCache: cache,
columnWidth: itemSize$1,
estimatedColumnWidth: estimatedItemSize,
estimatedRowHeight: estimatedItemSize,
initScrollLeft: initScrollOffset,
initScrollTop: initScrollOffset,
itemKey: {
type: definePropType(Function),
default: ({ columnIndex, rowIndex }) => `${rowIndex}:${columnIndex}`
},
rowCache: cache,
rowHeight: itemSize$1,
totalColumn: total,
totalRow: total,
hScrollbarSize: scrollbarSize,
vScrollbarSize: scrollbarSize,
scrollbarStartGap: startGap,
scrollbarEndGap: endGap,
role: String,
...virtualizedProps
});
const virtualizedScrollbarProps = buildProps({
alwaysOn: Boolean,
class: String,
layout,
total,
ratio: {
type: Number,
required: true
},
clientSize: {
type: Number,
required: true
},
scrollFrom: {
type: Number,
required: true
},
scrollbarSize,
startGap,
endGap,
visible: Boolean
});
//#endregion
//#region ../../packages/components/virtual-list/src/utils.ts
const getScrollDir = (prev, cur) => prev < cur ? FORWARD : BACKWARD;
const isHorizontal = (dir) => dir === LTR || dir === RTL || dir === HORIZONTAL;
const isRTL = (dir) => dir === RTL;
let cachedRTLResult = null;
function getRTLOffsetType(recalculate = false) {
if (cachedRTLResult === null || recalculate) {
const outerDiv = document.createElement("div");
const outerStyle = outerDiv.style;
outerStyle.width = "50px";
outerStyle.height = "50px";
outerStyle.overflow = "scroll";
outerStyle.direction = "rtl";
const innerDiv = document.createElement("div");
const innerStyle = innerDiv.style;
innerStyle.width = "100px";
innerStyle.height = "100px";
outerDiv.appendChild(innerDiv);
document.body.appendChild(outerDiv);
if (outerDiv.scrollLeft > 0) cachedRTLResult = RTL_OFFSET_POS_DESC;
else {
outerDiv.scrollLeft = 1;
if (outerDiv.scrollLeft === 0) cachedRTLResult = RTL_OFFSET_NAG;
else cachedRTLResult = RTL_OFFSET_POS_ASC;
}
document.body.removeChild(outerDiv);
return cachedRTLResult;
}
return cachedRTLResult;
}
function renderThumbStyle$1({ move, size, bar }, layout) {
const style = {};
const translate = `translate${bar.axis}(${move}px)`;
style[bar.size] = size;
style.transform = translate;
if (layout === "horizontal") style.height = "100%";
else style.width = "100%";
return style;
}
//#endregion
//#region ../../packages/components/virtual-list/src/components/scrollbar.ts
const ScrollBar = (0, vue.defineComponent)({
name: "ElVirtualScrollBar",
props: virtualizedScrollbarProps,
emits: [
"scroll",
"start-move",
"stop-move"
],
setup(props, { emit }) {
const GAP = (0, vue.computed)(() => props.startGap + props.endGap);
const nsVirtualScrollbar = useNamespace("virtual-scrollbar");
const nsScrollbar = useNamespace("scrollbar");
const trackRef = (0, vue.ref)();
const thumbRef = (0, vue.ref)();
let frameHandle = null;
let onselectstartStore = null;
const state = (0, vue.reactive)({
isDragging: false,
traveled: 0
});
const bar = (0, vue.computed)(() => BAR_MAP[props.layout]);
const trackSize = (0, vue.computed)(() => props.clientSize - (0, vue.unref)(GAP));
const trackStyle = (0, vue.computed)(() => ({
position: "absolute",
width: `${HORIZONTAL === props.layout ? trackSize.value : props.scrollbarSize}px`,
height: `${HORIZONTAL === props.layout ? props.scrollbarSize : trackSize.value}px`,
[ScrollbarDirKey[props.layout]]: "2px",
right: "2px",
bottom: "2px",
borderRadius: "4px"
}));
const thumbSize = (0, vue.computed)(() => {
const ratio = props.ratio;
if (ratio >= 100) return Number.POSITIVE_INFINITY;
if (ratio >= 50) return ratio * trackSize.value / 100;
const SCROLLBAR_MAX_SIZE = trackSize.value / 3;
return Math.floor(Math.min(Math.max(ratio * trackSize.value / 100, SCROLLBAR_MIN_SIZE), SCROLLBAR_MAX_SIZE));
});
const thumbStyle = (0, vue.computed)(() => {
if (!Number.isFinite(thumbSize.value)) return { display: "none" };
const thumb = `${thumbSize.value}px`;
return renderThumbStyle$1({
bar: bar.value,
size: thumb,
move: state.traveled
}, props.layout);
});
const totalSteps = (0, vue.computed)(() => Math.ceil(props.clientSize - thumbSize.value - (0, vue.unref)(GAP)));
const attachEvents = () => {
window.addEventListener("mousemove", onMouseMove);
window.addEventListener("mouseup", onMouseUp);
const thumbEl = (0, vue.unref)(thumbRef);
if (!thumbEl) return;
onselectstartStore = document.onselectstart;
document.onselectstart = () => false;
thumbEl.addEventListener("touchmove", onMouseMove, { passive: true });
thumbEl.addEventListener("touchend", onMouseUp);
};
const detachEvents = () => {
window.removeEventListener("mousemove", onMouseMove);
window.removeEventListener("mouseup", onMouseUp);
document.onselectstart = onselectstartStore;
onselectstartStore = null;
const thumbEl = (0, vue.unref)(thumbRef);
if (!thumbEl) return;
thumbEl.removeEventListener("touchmove", onMouseMove);
thumbEl.removeEventListener("touchend", onMouseUp);
};
const onThumbMouseDown = (e) => {
e.stopImmediatePropagation();
if (e.ctrlKey || [1, 2].includes(e.button)) return;
state.isDragging = true;
state[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
emit("start-move");
attachEvents();
};
const onMouseUp = () => {
state.isDragging = false;
state[bar.value.axis] = 0;
emit("stop-move");
detachEvents();
};
const onMouseMove = (e) => {
const { isDragging } = state;
if (!isDragging) return;
if (!thumbRef.value || !trackRef.value) return;
const prevPage = state[bar.value.axis];
if (!prevPage) return;
cAF(frameHandle);
/**
* +--------------+ +--------------+
* | - <--------- thumb.offsetTop | |
* | |+| <--+ | |
* | - | | |
* | Content | | | |
* | | | | |
* | | | | |
* | | | | -
* | | +--> | |+|
* | | | -
* +--------------+ +--------------+
*/
const distance = (trackRef.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1 - (thumbRef.value[bar.value.offset] - prevPage);
frameHandle = rAF(() => {
state.traveled = Math.max(0, Math.min(distance, totalSteps.value));
emit("scroll", distance, totalSteps.value);
});
};
const clickTrackHandler = (e) => {
const distance = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) - thumbRef.value[bar.value.offset] / 2;
state.traveled = Math.max(0, Math.min(distance, totalSteps.value));
emit("scroll", distance, totalSteps.value);
};
(0, vue.watch)(() => props.scrollFrom, (v) => {
if (state.isDragging) return;
/**
* this is simply mapping the current scrollbar offset
*
* formula 1:
* v = scrollOffset / (estimatedTotalSize - clientSize)
* traveled = v * (clientSize - thumbSize - GAP) --> v * totalSteps
*
* formula 2:
* traveled = (v * clientSize) / (clientSize / totalSteps) --> (v * clientSize) * (totalSteps / clientSize) --> v * totalSteps
*/
state.traveled = Math.ceil(v * totalSteps.value);
});
(0, vue.onBeforeUnmount)(() => {
detachEvents();
});
return () => {
return (0, vue.h)("div", {
role: "presentation",
ref: trackRef,
class: [
nsVirtualScrollbar.b(),
props.class,
(props.alwaysOn || state.isDragging) && "always-on"
],
style: trackStyle.value,
onMousedown: (0, vue.withModifiers)(clickTrackHandler, ["stop", "prevent"]),
onTouchstartPrevent: onThumbMouseDown
}, (0, vue.h)("div", {
ref: thumbRef,
class: nsScrollbar.e("thumb"),
style: thumbStyle.value,
onMousedown: onThumbMouseDown
}, []));
};
}
});
//#endregion
//#region ../../packages/components/virtual-list/src/builders/build-list.ts
const createList = ({ name, getOffset, getItemSize, getItemOffset, getEstimatedTotalSize, getStartIndexForOffset, getStopIndexForStartIndex, initCache, clearCache, validateProps }) => {
return (0, vue.defineComponent)({
name: name ?? "ElVirtualList",
props: virtualizedListProps,
emits: [ITEM_RENDER_EVT, SCROLL_EVT],
setup(props, { emit, expose }) {
validateProps(props);
const instance = (0, vue.getCurrentInstance)();
const ns = useNamespace("vl");
const dynamicSizeCache = (0, vue.ref)(initCache(props, instance));
const getItemStyleCache = useCache();
const windowRef = (0, vue.ref)();
const innerRef = (0, vue.ref)();
const scrollbarRef = (0, vue.ref)();
const states = (0, vue.ref)({
isScrolling: false,
scrollDir: "forward",
scrollOffset: isNumber(props.initScrollOffset) ? props.initScrollOffset : 0,
updateRequested: false,
isScrollbarDragging: false,
scrollbarAlwaysOn: props.scrollbarAlwaysOn
});
const itemsToRender = (0, vue.computed)(() => {
const { total, cache } = props;
const { isScrolling, scrollDir, scrollOffset } = (0, vue.unref)(states);
if (total === 0) return [
0,
0,
0,
0
];
const startIndex = getStartIndexForOffset(props, scrollOffset, (0, vue.unref)(dynamicSizeCache));
const stopIndex = getStopIndexForStartIndex(props, startIndex, scrollOffset, (0, vue.unref)(dynamicSizeCache));
const cacheBackward = !isScrolling || scrollDir === BACKWARD ? Math.max(1, cache) : 1;
const cacheForward = !isScrolling || scrollDir === FORWARD ? Math.max(1, cache) : 1;
return [
Math.max(0, startIndex - cacheBackward),
Math.max(0, Math.min(total - 1, stopIndex + cacheForward)),
startIndex,
stopIndex
];
});
const estimatedTotalSize = (0, vue.computed)(() => getEstimatedTotalSize(props, (0, vue.unref)(dynamicSizeCache)));
const _isHorizontal = (0, vue.computed)(() => isHorizontal(props.layout));
const windowStyle = (0, vue.computed)(() => [
{
position: "relative",
[`overflow-${_isHorizontal.value ? "x" : "y"}`]: "scroll",
WebkitOverflowScrolling: "touch",
willChange: "transform"
},
{
direction: props.direction,
height: isNumber(props.height) ? `${props.height}px` : props.height,
width: isNumber(props.width) ? `${props.width}px` : props.width
},
props.style
]);
const innerStyle = (0, vue.computed)(() => {
const size = (0, vue.unref)(estimatedTotalSize);
const horizontal = (0, vue.unref)(_isHorizontal);
return {
height: horizontal ? "100%" : `${size}px`,
pointerEvents: (0, vue.unref)(states).isScrolling ? "none" : void 0,
width: horizontal ? `${size}px` : "100%",
margin: 0,
boxSizing: "border-box"
};
});
const clientSize = (0, vue.computed)(() => _isHorizontal.value ? props.width : props.height);
const { onWheel } = useWheel({
atStartEdge: (0, vue.computed)(() => states.value.scrollOffset <= 0),
atEndEdge: (0, vue.computed)(() => states.value.scrollOffset >= estimatedTotalSize.value),
layout: (0, vue.computed)(() => props.layout)
}, (offset) => {
scrollbarRef.value.onMouseUp?.();
scrollTo(Math.min(states.value.scrollOffset + offset, estimatedTotalSize.value - clientSize.value));
});
useEventListener(windowRef, "wheel", onWheel, { passive: false });
const emitEvents = () => {
const { total } = props;
if (total > 0) {
const [cacheStart, cacheEnd, visibleStart, visibleEnd] = (0, vue.unref)(itemsToRender);
emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd);
}
const { scrollDir, scrollOffset, updateRequested } = (0, vue.unref)(states);
emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested);
};
const scrollVertically = (e) => {
const { clientHeight, scrollHeight, scrollTop } = e.currentTarget;
const _states = (0, vue.unref)(states);
if (_states.scrollOffset === scrollTop) return;
const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));
states.value = {
..._states,
isScrolling: true,
scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),
scrollOffset,
updateRequested: false
};
(0, vue.nextTick)(resetIsScrolling);
};
const scrollHorizontally = (e) => {
const { clientWidth, scrollLeft, scrollWidth } = e.currentTarget;
const _states = (0, vue.unref)(states);
if (_states.scrollOffset === scrollLeft) return;
const { direction } = props;
let scrollOffset = scrollLeft;
if (direction === RTL) switch (getRTLOffsetType()) {
case RTL_OFFSET_NAG:
scrollOffset = -scrollLeft;
break;
case RTL_OFFSET_POS_DESC:
scrollOffset = scrollWidth - clientWidth - scrollLeft;
break;
}
scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));
states.value = {
..._states,
isScrolling: true,
scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),
scrollOffset,
updateRequested: false
};
(0, vue.nextTick)(resetIsScrolling);
};
const onScroll = (e) => {
(0, vue.unref)(_isHorizontal) ? scrollHorizontally(e) : scrollVertically(e);
emitEvents();
};
const onScrollbarScroll = (distanceToGo, totalSteps) => {
const offset = (estimatedTotalSize.value - clientSize.value) / totalSteps * distanceToGo;
scrollTo(Math.min(estimatedTotalSize.value - clientSize.value, offset));
};
const scrollTo = (offset) => {
offset = Math.max(offset, 0);
if (offset === (0, vue.unref)(states).scrollOffset) return;
states.value = {
...(0, vue.unref)(states),
scrollOffset: offset,
scrollDir: getScrollDir((0, vue.unref)(states).scrollOffset, offset),
updateRequested: true
};
(0, vue.nextTick)(resetIsScrolling);
};
const scrollToItem = (idx, alignment = AUTO_ALIGNMENT) => {
const { scrollOffset } = (0, vue.unref)(states);
idx = Math.max(0, Math.min(idx, props.total - 1));
scrollTo(getOffset(props, idx, alignment, scrollOffset, (0, vue.unref)(dynamicSizeCache)));
};
const getItemStyle = (idx) => {
const { direction, itemSize, layout } = props;
const itemStyleCache = getItemStyleCache.value(clearCache && itemSize, clearCache && layout, clearCache && direction);
let style;
if (hasOwn(itemStyleCache, String(idx))) style = itemStyleCache[idx];
else {
const offset = getItemOffset(props, idx, (0, vue.unref)(dynamicSizeCache));
const size = getItemSize(props, idx, (0, vue.unref)(dynamicSizeCache));
const horizontal = (0, vue.unref)(_isHorizontal);
const isRtl = direction === RTL;
const offsetHorizontal = horizontal ? offset : 0;
itemStyleCache[idx] = style = {
position: "absolute",
left: isRtl ? void 0 : `${offsetHorizontal}px`,
right: isRtl ? `${offsetHorizontal}px` : void 0,
top: !horizontal ? `${offset}px` : 0,
height: !horizontal ? `${size}px` : "100%",
width: horizontal ? `${size}px` : "100%"
};
}
return style;
};
const resetIsScrolling = () => {
states.value.isScrolling = false;
(0, vue.nextTick)(() => {
getItemStyleCache.value(-1, null, null);
});
};
const resetScrollTop = () => {
const window = windowRef.value;
if (window) window.scrollTop = 0;
};
(0, vue.onMounted)(() => {
if (!isClient) return;
const { initScrollOffset } = props;
const windowElement = (0, vue.unref)(windowRef);
if (isNumber(initScrollOffset) && windowElement) if ((0, vue.unref)(_isHorizontal)) windowElement.scrollLeft = initScrollOffset;
else windowElement.scrollTop = initScrollOffset;
emitEvents();
});
(0, vue.onUpdated)(() => {
const { direction, layout } = props;
const { scrollOffset, updateRequested } = (0, vue.unref)(states);
const windowElement = (0, vue.unref)(windowRef);
if (updateRequested && windowElement) if (layout === HORIZONTAL) if (direction === RTL) switch (getRTLOffsetType()) {
case RTL_OFFSET_NAG:
windowElement.scrollLeft = -scrollOffset;
break;
case RTL_OFFSET_POS_ASC:
windowElement.scrollLeft = scrollOffset;
break;
default: {
const { clientWidth, scrollWidth } = windowElement;
windowElement.scrollLeft = scrollWidth - clientWidth - scrollOffset;
break;
}
}
else windowElement.scrollLeft = scrollOffset;
else windowElement.scrollTop = scrollOffset;
});
(0, vue.onActivated)(() => {
(0, vue.unref)(windowRef).scrollTop = (0, vue.unref)(states).scrollOffset;
});
const api = {
ns,
clientSize,
estimatedTotalSize,
windowStyle,
windowRef,
innerRef,
innerStyle,
itemsToRender,
scrollbarRef,
states,
getItemStyle,
onScroll,
onScrollbarScroll,
onWheel,
scrollTo,
scrollToItem,
resetScrollTop
};
expose({
windowRef,
innerRef,
getItemStyleCache,
scrollTo,
scrollToItem,
resetScrollTop,
states
});
return api;
},
render(ctx) {
const { $slots, className, clientSize, containerElement, data, getItemStyle, innerElement, itemsToRender, innerStyle, layout, total, onScroll, onScrollbarScroll, states, useIsScrolling, windowStyle, ns } = ctx;
const [start, end] = itemsToRender;
const Container = (0, vue.resolveDynamicComponent)(containerElement);
const Inner = (0, vue.resolveDynamicComponent)(innerElement);
const children = [];
if (total > 0) for (let i = start; i <= end; i++) children.push((0, vue.h)(vue.Fragment, { key: i }, $slots.default?.({
data,
index: i,
isScrolling: useIsScrolling ? states.isScrolling : void 0,
style: getItemStyle(i)
})));
const InnerNode = [(0, vue.h)(Inner, (0, vue.mergeProps)(ctx.innerProps, {
style: innerStyle,
ref: "innerRef"
}), !isString(Inner) ? { default: () => children } : children)];
const scrollbar = (0, vue.h)(ScrollBar, {
ref: "scrollbarRef",
clientSize,
layout,
onScroll: onScrollbarScroll,
ratio: clientSize * 100 / this.estimatedTotalSize,
scrollFrom: states.scrollOffset / (this.estimatedTotalSize - clientSize),
total,
alwaysOn: states.scrollbarAlwaysOn
});
const listContainer = (0, vue.h)(Container, {
class: [ns.e("window"), className],
style: windowStyle,
onScroll,
ref: "windowRef",
key: 0
}, !isString(Container) ? { default: () => [InnerNode] } : [InnerNode]);
return (0, vue.h)("div", {
key: 0,
class: [ns.e("wrapper"), states.scrollbarAlwaysOn ? "always-on" : ""]
}, [listContainer, scrollbar]);
}
});
};
//#endregion
//#region ../../packages/components/virtual-list/src/components/fixed-size-list.ts
const FixedSizeList = createList({
name: "ElFixedSizeList",
getItemOffset: ({ itemSize }, index) => index * itemSize,
getItemSize: ({ itemSize }) => itemSize,
getEstimatedTotalSize: ({ total, itemSize }) => itemSize * total,
getOffset: ({ height, total, itemSize, layout, width }, index, alignment, scrollOffset) => {
const size = isHorizontal(layout) ? width : height;
const lastItemOffset = Math.max(0, total * itemSize - size);
const maxOffset = Math.min(lastItemOffset, index * itemSize);
const minOffset = Math.max(0, (index + 1) * itemSize - size);
if (alignment === SMART_ALIGNMENT) if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
else alignment = CENTERED_ALIGNMENT;
switch (alignment) {
case START_ALIGNMENT: return maxOffset;
case END_ALIGNMENT: return minOffset;
case CENTERED_ALIGNMENT: {
const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
if (middleOffset < Math.ceil(size / 2)) return 0;
else if (middleOffset > lastItemOffset + Math.floor(size / 2)) return lastItemOffset;
else return middleOffset;
}
case AUTO_ALIGNMENT:
default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
else if (scrollOffset < minOffset) return minOffset;
else return maxOffset;
}
},
getStartIndexForOffset: ({ total, itemSize }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))),
getStopIndexForStartIndex: ({ height, total, itemSize, layout, width }, startIndex, scrollOffset) => {
const offset = startIndex * itemSize;
const size = isHorizontal(layout) ? width : height;
const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);
return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1));
},
initCache() {},
clearCache: true,
validateProps() {}
});
//#endregion
//#region ../../packages/components/virtual-list/src/components/dynamic-size-list.ts
const getItemFromCache$1 = (props, index, listCache) => {
const { itemSize } = props;
const { items, lastVisitedIndex } = listCache;
if (index > lastVisitedIndex) {
let offset = 0;
if (lastVisitedIndex >= 0) {
const item = items[lastVisitedIndex];
offset = item.offset + item.size;
}
for (let i = lastVisitedIndex + 1; i <= index; i++) {
const size = itemSize(i);
items[i] = {
offset,
size
};
offset += size;
}
listCache.lastVisitedIndex = index;
}
return items[index];
};
const findItem$1 = (props, listCache, offset) => {
const { items, lastVisitedIndex } = listCache;
if ((lastVisitedIndex > 0 ? items[lastVisitedIndex].offset : 0) >= offset) return bs$1(props, listCache, 0, lastVisitedIndex, offset);
return es$1(props, listCache, Math.max(0, lastVisitedIndex), offset);
};
const bs$1 = (props, listCache, low, high, offset) => {
while (low <= high) {
const mid = low + Math.floor((high - low) / 2);
const currentOffset = getItemFromCache$1(props, mid, listCache).offset;
if (currentOffset === offset) return mid;
else if (currentOffset < offset) low = mid + 1;
else if (currentOffset > offset) high = mid - 1;
}
return Math.max(0, low - 1);
};
const es$1 = (props, listCache, index, offset) => {
const { total } = props;
let exponent = 1;
while (index < total && getItemFromCache$1(props, index, listCache).offset < offset) {
index += exponent;
exponent *= 2;
}
return bs$1(props, listCache, Math.floor(index / 2), Math.min(index, total - 1), offset);
};
const getEstimatedTotalSize = ({ total }, { items, estimatedItemSize, lastVisitedIndex }) => {
let totalSizeOfMeasuredItems = 0;
if (lastVisitedIndex >= total) lastVisitedIndex = total - 1;
if (lastVisitedIndex >= 0) {
const item = items[lastVisitedIndex];
totalSizeOfMeasuredItems = item.offset + item.size;
}
const totalSizeOfUnmeasuredItems = (total - lastVisitedIndex - 1) * estimatedItemSize;
return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;
};
const DynamicSizeList = createList({
name: "ElDynamicSizeList",
getItemOffset: (props, index, listCache) => getItemFromCache$1(props, index, listCache).offset,
getItemSize: (_, index, { items }) => items[index].size,
getEstimatedTotalSize,
getOffset: (props, index, alignment, scrollOffset, listCache) => {
const { height, layout, width } = props;
const size = isHorizontal(layout) ? width : height;
const item = getItemFromCache$1(props, index, listCache);
const estimatedTotalSize = getEstimatedTotalSize(props, listCache);
const maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, item.offset));
const minOffset = Math.max(0, item.offset - size + item.size);
if (alignment === SMART_ALIGNMENT) if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
else alignment = CENTERED_ALIGNMENT;
switch (alignment) {
case START_ALIGNMENT: return maxOffset;
case END_ALIGNMENT: return minOffset;
case CENTERED_ALIGNMENT: return Math.round(minOffset + (maxOffset - minOffset) / 2);
case AUTO_ALIGNMENT:
default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
else if (scrollOffset < minOffset) return minOffset;
else return maxOffset;
}
},
getStartIndexForOffset: (props, offset, listCache) => findItem$1(props, listCache, offset),
getStopIndexForStartIndex: (props, startIndex, scrollOffset, listCache) => {
const { height, total, layout, width } = props;
const size = isHorizontal(layout) ? width : height;
const item = getItemFromCache$1(props, startIndex, listCache);
const maxOffset = scrollOffset + size;
let offset = item.offset + item.size;
let stopIndex = startIndex;
while (stopIndex < total - 1 && offset < maxOffset) {
stopIndex++;
offset += getItemFromCache$1(props, stopIndex, listCache).size;
}
return stopIndex;
},
initCache({ estimatedItemSize = DEFAULT_DYNAMIC_LIST_ITEM_SIZE }, instance) {
const cache = {
items: {},
estimatedItemSize,
lastVisitedIndex: -1
};
cache.clearCacheAfterIndex = (index, forceUpdate = true) => {
cache.lastVisitedIndex = Math.min(cache.lastVisitedIndex, index - 1);
instance.exposed?.getItemStyleCache(-1);
if (forceUpdate) instance.proxy?.$forceUpdate();
};
return cache;
},
clearCache: false,
validateProps: ({ itemSize }) => {}
});
//#endregion
//#region ../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts
const useGridWheel = ({ atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }, onWheelDelta) => {
let frameHandle = null;
let xOffset = 0;
let yOffset = 0;
const hasReachedEdge = (x, y) => {
const xEdgeReached = x < 0 && atXStartEdge.value || x > 0 && atXEndEdge.value;
const yEdgeReached = y < 0 && atYStartEdge.value || y > 0 && atYEndEdge.value;
return xEdgeReached || yEdgeReached;
};
const onWheel = (e) => {
cAF(frameHandle);
let x = e.deltaX;
let y = e.deltaY;
if (Math.abs(x) > Math.abs(y)) y = 0;
else x = 0;
if (e.shiftKey && y !== 0) {
x = y;
y = 0;
}
if (hasReachedEdge(x, y)) {
if (e.deltaX !== 0 && x === 0) e.preventDefault();
return;
}
xOffset += x;
yOffset += y;
e.preventDefault();
frameHandle = rAF(() => {
onWheelDelta(xOffset, yOffset);
xOffset = 0;
yOffset = 0;
});
};
return {
hasReachedEdge,
onWheel
};
};
//#endregion
//#region ../../packages/components/virtual-list/src/hooks/use-grid-touch.ts
const useGridTouch = (windowRef, states, scrollTo, estimatedTotalWidth, estimatedTotalHeight, parsedWidth, parsedHeight) => {
const touchStartX = (0, vue.ref)(0);
const touchStartY = (0, vue.ref)(0);
let frameHandle;
let deltaX = 0;
let deltaY = 0;
const handleTouchStart = (event) => {
cAF(frameHandle);
touchStartX.value = event.touches[0].clientX;
touchStartY.value = event.touches[0].clientY;
deltaX = 0;
deltaY = 0;
};
const handleTouchMove = (event) => {
event.preventDefault();
cAF(frameHandle);
deltaX += touchStartX.value - event.touches[0].clientX;
deltaY += touchStartY.value - event.touches[0].clientY;
touchStartX.value = event.touches[0].clientX;
touchStartY.value = event.touches[0].clientY;
frameHandle = rAF(() => {
const maxScrollLeft = estimatedTotalWidth.value - (0, vue.unref)(parsedWidth);
const maxScrollTop = estimatedTotalHeight.value - (0, vue.unref)(parsedHeight);
scrollTo({
scrollLeft: Math.min(states.value.scrollLeft + deltaX, maxScrollLeft),
scrollTop: Math.min(states.value.scrollTop + deltaY, maxScrollTop)
});
deltaX = 0;
deltaY = 0;
});
};
useEventListener(windowRef, "touchstart", handleTouchStart, { passive: true });
useEventListener(windowRef, "touchmove", handleTouchMove, { passive: false });
return {
touchStartX,
touchStartY,
handleTouchStart,
handleTouchMove
};
};
//#endregion
//#region ../../packages/components/virtual-list/src/builders/build-grid.ts
const createGrid = ({ name, clearCache, getColumnPosition, getColumnStartIndexForOffset, getColumnStopIndexForStartIndex, getEstimatedTotalHeight, getEstimatedTotalWidth, getColumnOffset, getRowOffset, getRowPosition, getRowStartIndexForOffset, getRowStopIndexForStartIndex, initCache, injectToInstance, validateProps }) => {
return (0, vue.defineComponent)({
name: name ?? "ElVirtualList",
props: virtualizedGridProps,
emits: [ITEM_RENDER_EVT, SCROLL_EVT],
setup(props, { emit, expose, slots }) {
const ns = useNamespace("vl");
validateProps(props);
const instance = (0, vue.getCurrentInstance)();
const cache = (0, vue.ref)(initCache(props, instance));
injectToInstance?.(instance, cache);
const windowRef = (0, vue.ref)();
const hScrollbar = (0, vue.ref)();
const vScrollbar = (0, vue.ref)();
const innerRef = (0, vue.ref)();
const states = (0, vue.ref)({
isScrolling: false,
scrollLeft: isNumber(props.initScrollLeft) ? props.initScrollLeft : 0,
scrollTop: isNumber(props.initScrollTop) ? props.initScrollTop : 0,
updateRequested: false,
xAxisScrollDir: FORWARD,
yAxisScrollDir: FORWARD
});
const getItemStyleCache = useCache();
const parsedHeight = (0, vue.computed)(() => Number.parseInt(`${props.height}`, 10));
const parsedWidth = (0, vue.computed)(() => Number.parseInt(`${props.width}`, 10));
const columnsToRender = (0, vue.computed)(() => {
const { totalColumn, totalRow, columnCache } = props;
const { isScrolling, xAxisScrollDir, scrollLeft } = (0, vue.unref)(states);
if (totalColumn === 0 || totalRow === 0) return [
0,
0,
0,
0
];
const startIndex = getColumnStartIndexForOffset(props, scrollLeft, (0, vue.unref)(cache));
const stopIndex = getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, (0, vue.unref)(cache));
const cacheBackward = !isScrolling || xAxisScrollDir === BACKWARD ? Math.max(1, columnCache) : 1;
const cacheForward = !isScrolling || xAxisScrollDir === FORWARD ? Math.max(1, columnCache) : 1;
return [
Math.max(0, startIndex - cacheBackward),
Math.max(0, Math.min(totalColumn - 1, stopIndex + cacheForward)),
startIndex,
stopIndex
];
});
const rowsToRender = (0, vue.computed)(() => {
const { totalColumn, totalRow, rowCache } = props;
const { isScrolling, yAxisScrollDir, scrollTop } = (0, vue.unref)(states);
if (totalColumn === 0 || totalRow === 0) return [
0,
0,
0,
0
];
const startIndex = getRowStartIndexForOffset(props, scrollTop, (0, vue.unref)(cache));
const stopIndex = getRowStopIndexForStartIndex(props, startIndex, scrollTop, (0, vue.unref)(cache));
const cacheBackward = !isScrolling || yAxisScrollDir === BACKWARD ? Math.max(1, rowCache) : 1;
const cacheForward = !isScrolling || yAxisScrollDir === FORWARD ? Math.max(1, rowCache) : 1;
return [
Math.max(0, startIndex - cacheBackward),
Math.max(0, Math.min(totalRow - 1, stopIndex + cacheForward)),
startIndex,
stopIndex
];
});
const estimatedTotalHeight = (0, vue.computed)(() => getEstimatedTotalHeight(props, (0, vue.unref)(cache)));
const estimatedTotalWidth = (0, vue.computed)(() => getEstimatedTotalWidth(props, (0, vue.unref)(cache)));
const windowStyle = (0, vue.computed)(() => [
{
position: "relative",
overflow: "hidden",
WebkitOverflowScrolling: "touch",
willChange: "transform"
},
{
direction: props.direction,
height: isNumber(props.height) ? `${props.height}px` : props.height,
width: isNumber(props.width) ? `${props.width}px` : props.width
},
props.style ?? {}
]);
const innerStyle = (0, vue.computed)(() => {
const width = `${(0, vue.unref)(estimatedTotalWidth)}px`;
return {
height: `${(0, vue.unref)(estimatedTotalHeight)}px`,
pointerEvents: (0, vue.unref)(states).isScrolling ? "none" : void 0,
width,
margin: 0,
boxSizing: "border-box"
};
});
const emitEvents = () => {
const { totalColumn, totalRow } = props;
if (totalColumn > 0 && totalRow > 0) {
const [columnCacheStart, columnCacheEnd, columnVisibleStart, columnVisibleEnd] = (0, vue.unref)(columnsToRender);
const [rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd] = (0, vue.unref)(rowsToRender);
emit(ITEM_RENDER_EVT, {
columnCacheStart,
columnCacheEnd,
rowCacheStart,
rowCacheEnd,
columnVisibleStart,
columnVisibleEnd,
rowVisibleStart,
rowVisibleEnd
});
}
const { scrollLeft, scrollTop, updateRequested, xAxisScrollDir, yAxisScrollDir } = (0, vue.unref)(states);
emit(SCROLL_EVT, {
xAxisScrollDir,
scrollLeft,
yAxisScrollDir,
scrollTop,
updateRequested
});
};
const onScroll = (e) => {
const { clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth } = e.currentTarget;
const _states = (0, vue.unref)(states);
if (_states.scrollTop === scrollTop && _states.scrollLeft === scrollLeft) return;
let _scrollLeft = scrollLeft;
if (isRTL(props.direction)) switch (getRTLOffsetType()) {
case RTL_OFFSET_NAG:
_scrollLeft = -scrollLeft;
break;
case RTL_OFFSET_POS_DESC:
_scrollLeft = scrollWidth - clientWidth - scrollLeft;
break;
}
states.value = {
..._states,
isScrolling: true,
scrollLeft: _scrollLeft,
scrollTop: Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)),
updateRequested: true,
xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft),
yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop)
};
(0, vue.nextTick)(() => resetIsScrolling());
onUpdated();
emitEvents();
};
const onVerticalScroll = (distance, totalSteps) => {
const height = (0, vue.unref)(parsedHeight);
const offset = (estimatedTotalHeight.value - height) / totalSteps * distance;
scrollTo({ scrollTop: Math.min(estimatedTotalHeight.value - height, offset) });
};
const onHorizontalScroll = (distance, totalSteps) => {
const width = (0, vue.unref)(parsedWidth);
const offset = (estimatedTotalWidth.value - width) / totalSteps * distance;
scrollTo({ scrollLeft: Math.min(estimatedTotalWidth.value - width, offset) });
};
const { onWheel } = useGridWheel({
atXStartEdge: (0, vue.computed)(() => states.value.scrollLeft <= 0),
atXEndEdge: (0, vue.computed)(() => states.value.scrollLeft >= estimatedTotalWidth.value - (0, vue.unref)(parsedWidth)),
atYStartEdge: (0, vue.computed)(() => states.value.scrollTop <= 0),
atYEndEdge: (0, vue.computed)(() => states.value.scrollTop >= estimatedTotalHeight.value - (0, vue.unref)(parsedHeight))
}, (x, y) => {
hScrollbar.value?.onMouseUp?.();
vScrollbar.value?.onMouseUp?.();
const width = (0, vue.unref)(parsedWidth);
const height = (0, vue.unref)(parsedHeight);
scrollTo({
scrollLeft: Math.min(states.value.scrollLeft + x, estimatedTotalWidth.value - width),
scrollTop: Math.min(states.value.scrollTop + y, estimatedTotalHeight.value - height)
});
});
useEventListener(windowRef, "wheel", onWheel, { passive: false });
const scrollTo = ({ scrollLeft = states.value.scrollLeft, scrollTop = states.value.scrollTop }) => {
scrollLeft = Math.max(scrollLeft, 0);
scrollTop = Math.max(scrollTop, 0);
const _states = (0, vue.unref)(states);
if (scrollTop === _states.scrollTop && scrollLeft === _states.scrollLeft) return;
states.value = {
..._states,
xAxisScrollDir: getScrollDir(_states.scrollLeft, scrollLeft),
yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),
scrollLeft,
scrollTop,
updateRequested: true
};
(0, vue.nextTick)(() => resetIsScrolling());
onUpdated();
emitEvents();
};
const { touchStartX, touchStartY, handleTouchStart, handleTouchMove } = useGridTouch(windowRef, states, scrollTo, estimatedTotalWidth, estimatedTotalHeight, parsedWidth, parsedHeight);
const scrollToItem = (rowIndex = 0, columnIdx = 0, alignment = AUTO_ALIGNMENT) => {
const _states = (0, vue.unref)(states);
columnIdx = Math.max(0, Math.min(columnIdx, props.totalColumn - 1));
rowIndex = Math.max(0, Math.min(rowIndex, props.totalRow - 1));
const scrollBarWidth = getScrollBarWidth(ns.namespace.value);
const _cache = (0, vue.unref)(cache);
const estimatedHeight = getEstimatedTotalHeight(props, _cache);
const estimatedWidth = getEstimatedTotalWidth(props, _cache);
scrollTo({
scrollLeft: getColumnOffset(props, columnIdx, alignment, _states.scrollLeft, _cache, estimatedWidth > props.width ? scrollBarWidth : 0),
scrollTop: getRowOffset(props, rowIndex, alignment, _states.scrollTop, _cache, estimatedHeight > props.height ? scrollBarWidth : 0)
});
};
const getItemStyle = (rowIndex, columnIndex) => {
const { columnWidth, direction, rowHeight } = props;
const itemStyleCache = getItemStyleCache.value(clearCache && columnWidth, clearCache && rowHeight, clearCache && direction);
const key = `${rowIndex},${columnIndex}`;
if (hasOwn(itemStyleCache, key)) return itemStyleCache[key];
else {
const [, left] = getColumnPosition(props, columnIndex, (0, vue.unref)(cache));
const _cache = (0, vue.unref)(cache);
const rtl = isRTL(direction);
const [height, top] = getRowPosition(props, rowIndex, _cache);
const [width] = getColumnPosition(props, columnIndex, _cache);
itemStyleCache[key] = {
position: "absolute",
left: rtl ? void 0 : `${left}px`,
right: rtl ? `${left}px` : void 0,
top: `${top}px`,
height: `${height}px`,
width: `${width}px`
};
return itemStyleCache[key];
}
};
const resetIsScrolling = () => {
states.value.isScrolling = false;
(0, vue.nextTick)(() => {
getItemStyleCache.value(-1, null, null);
});
};
(0, vue.onMounted)(() => {
if (!isClient) return;
const { initScrollLeft, initScrollTop } = props;
const windowElement = (0, vue.unref)(windowRef);
if (windowElement) {
if (isNumber(initScrollLeft)) windowElement.scrollLeft = initScrollLeft;
if (isNumber(initScrollTop)) windowElement.scrollTop = initScrollTop;
}
emitEvents();
});
const onUpdated = () => {
const { direction } = props;
const { scrollLeft, scrollTop, updateRequested } = (0, vue.unref)(states);
const windowElement = (0, vue.unref)(windowRef);
if (updateRequested && windowElement) {
if (direction === RTL) switch (getRTLOffsetType()) {
case RTL_OFFSET_NAG:
windowElement.scrollLeft = -scrollLeft;
break;
case RTL_OFFSET_POS_ASC:
windowElement.scrollLeft = scrollLeft;
break;
default: {
const { clientWidth, scrollWidth } = windowElement;
windowElement.scrollLeft = scrollWidth - clientWidth - scrollLeft;
break;
}
}
else windowElement.scrollLeft = Math.max(0, scrollLeft);
windowElement.scrollTop = Math.max(0, scrollTop);
}
};
const { resetAfterColumnIndex, resetAfterRowIndex, resetAfter } = instance.proxy;
expose({
windowRef,
innerRef,
getItemStyleCache,
touchStartX,
touchStartY,
handleTouchStart,
handleTouchMove,
scrollTo,
scrollToItem,
states,
resetAfterColumnIndex,
resetAfterRowIndex,
resetAfter
});
const renderScrollbars = () => {
const { scrollbarAlwaysOn, scrollbarStartGap, scrollbarEndGap, totalColumn, totalRow } = props;
const width = (0, vue.unref)(parsedWidth);
const height = (0, vue.unref)(parsedHeight);
const estimatedWidth = (0, vue.unref)(estimatedTotalWidth);
const estimatedHeight = (0, vue.unref)(estimatedTotalHeight);
const { scrollLeft, scrollTop } = (0, vue.unref)(states);
return {
horizontalScrollbar: (0, vue.h)(ScrollBar, {
ref: hScrollbar,
alwaysOn: scrollbarAlwaysOn,
startGap: scrollbarStartGap,
endGap: scrollbarEndGap,
class: ns.e("horizontal"),
clientSize: width,
layout: "horizontal",
onScroll: onHorizontalScroll,
ratio: width * 100 / estimatedWidth,
scrollFrom: scrollLeft / (estimatedWidth - width),
total: totalRow,
visible: true
}),
verticalScrollbar: (0, vue.h)(ScrollBar, {
ref: vScrollbar,
alwaysOn: scrollbarAlwaysOn,
startGap: scrollbarStartGap,
endGap: scrollbarEndGap,
class: ns.e("vertical"),
clientSize: height,
layout: "vertical",
onScroll: onVerticalScroll,
ratio: height * 100 / estimatedHeight,
scrollFrom: scrollTop / (estimatedHeight - height),
total: totalColumn,
visible: true
})
};
};
const renderItems = () => {
const [columnStart, columnEnd] = (0, vue.unref)(columnsToRender);
const [rowStart, rowEnd] = (0, vue.unref)(rowsToRender);
const { data, totalColumn, totalRow, useIsScrolling, itemKey } = props;
const children = [];
if (totalRow > 0 && totalColumn > 0) for (let row = rowStart; row <= rowEnd; row++) for (let column = columnStart; column <= columnEnd; column++) {
const key = itemKey({
columnIndex: column,
data,
rowIndex: row
});
children.push((0, vue.h)(vue.Fragment, { key }, slots.default?.({
columnIndex: column,
data,
isScrolling: useIsScrolling ? (0, vue.unref)(states).isScrolling : void 0,
style: getItemStyle(row, column),
rowIndex: row
})));
}
return children;
};
const renderInner = () => {
const Inner = (0, vue.resolveDynamicComponent)(props.innerElement);
const children = renderItems();
return [(0, vue.h)(Inner, (0, vue.mergeProps)(props.innerProps, {
style: (0, vue.unref)(innerStyle),
ref: innerRef
}), !isString(Inner) ? { default: () => children } : children)];
};
const renderWindow = () => {
const Container = (0, vue.resolveDynamicComponent)(props.containerElement);
const { horizontalScrollbar, verticalScrollbar } = renderScrollbars();
const Inner = renderInner();
return (0, vue.h)("div", {
key: 0,
class: ns.e("wrapper"),
role: props.role
}, [
(0, vue.h)(Container, {
class: props.className,
style: (0, vue.unref)(windowStyle),
onScroll,
ref: windowRef
}, !isString(Container) ? { default: () => Inner } : Inner),
horizontalScrollbar,
verticalScrollbar
]);
};
return renderWindow;
}
});
};
//#endregion
//#region ../../packages/components/virtual-list/src/components/fixed-size-grid.ts
const FixedSizeGrid = createGrid({
name: "ElFixedSizeGrid",
getColumnPosition: ({ columnWidth }, index) => [columnWidth, index * columnWidth],
getRowPosition: ({ rowHeight }, index) => [rowHeight, index * rowHeight],
getEstimatedTotalHeight: ({ totalRow, rowHeight }) => rowHeight * totalRow,
getEstimatedTotalWidth: ({ totalColumn, columnWidth }) => columnWidth * totalColumn,
getColumnOffset: ({ totalColumn, columnWidth, width }, columnIndex, alignment, scrollLeft, _, scrollBarWidth) => {
width = Number(width);
const lastColumnOffset = Math.max(0, totalColumn * columnWidth - width);
const maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);
const minOffset = Math.max(0, columnIndex * columnWidth - width + scrollBarWidth + columnWidth);
if (alignment === "smart") if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) alignment = AUTO_ALIGNMENT;
else alignment = CENTERED_ALIGNMENT;
switch (alignment) {
case START_ALIGNMENT: return maxOffset;
case END_ALIGNMENT: return minOffset;
case CENTERED_ALIGNMENT: {
const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
if (middleOffset < Math.ceil(width / 2)) return 0;
else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) return lastColumnOffset;
else return middleOffset;
}
case AUTO_ALIGNMENT:
default: if (scrollLeft >= minOffset && scrollLeft <= maxOffset) return scrollLeft;
else if (minOffset > maxOffset) return minOffset;
else if (scrollLeft < minOffset) return minOffset;
else return maxOffset;
}
},
getRowOffset: ({ rowHeight, height, totalRow }, rowIndex, align, scrollTop, _, scrollBarWidth) => {
height = Number(height);
const lastRowOffset = Math.max(0, totalRow * rowHeight - height);
const maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);
const minOffset = Math.max(0, rowIndex * rowHeight - height + scrollBarWidth + rowHeight);
if (align === SMART_ALIGNMENT) if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) align = AUTO_ALIGNMENT;
else align = CENTERED_ALIGNMENT;
switch (align) {
case START_ALIGNMENT: return maxOffset;
case END_ALIGNMENT: return minOffset;
case CENTERED_ALIGNMENT: {
const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
if (middleOffset < Math.ceil(height / 2)) return 0;
else if (middleOffset > lastRowOffset + Math.floor(height / 2)) return lastRowOffset;
else return middleOffset;
}
case AUTO_ALIGNMENT:
default: if (scrollTop >= minOffset && scrollTop <= maxOffset) return scrollTop;
else if (minOffset > maxOffset) return minOffset;
else if (scrollTop < minOffset) return minOffset;
else return maxOffset;
}
},
getColumnStartIndexForOffset: ({ columnWidth, totalColumn }, scrollLeft) => Math.max(0, Math.min(totalColumn - 1, Math.floor(scrollLeft / columnWidth))),
getColumnStopIndexForStartIndex: ({ columnWidth, totalColumn, width }, startIndex, scrollLeft) => {
const left = startIndex * columnWidth;
const visibleColumnsCount = Math.ceil((width + scrollLeft - left) / columnWidth);
return Math.max(0, Math.min(totalColumn - 1, startIndex + visibleColumnsCount - 1));
},
getRowStartIndexForOffset: ({ rowHeight, totalRow }, scrollTop) => Math.max(0, Math.min(totalRow - 1, Math.floor(scrollTop / rowHeight))),
getRowStopIndexForStartIndex: ({ rowHeight, totalRow, height }, startIndex, scrollTop) => {
const top = startIndex * rowHeight;
const numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);
return Math.max(0, Math.min(totalRow - 1, startIndex + numVisibleRows - 1));
},
initCache: () => void 0,
clearCache: true,
validateProps: ({ columnWidth, rowHeight }) => {}
});
//#endregion
//#region ../../packages/components/virtual-list/src/components/dynamic-size-grid.ts
const { max, min, floor } = Math;
const ACCESS_SIZER_KEY_MAP = {
column: "columnWidth",
row: "rowHeight"
};
const ACCESS_LAST_VISITED_KEY_MAP = {
column: "lastVisitedColumnIndex",
row: "lastVisitedRowIndex"
};
const getItemFromCache = (props, index, gridCache, type) => {
const [cachedItems, sizer, lastVisited] = [
gridCache[type],
props[ACCESS_SIZER_KEY_MAP[type]],
gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]]
];
if (index > lastVisited) {
let offset = 0;
if (lastVisited >= 0) {
const item = cachedItems[lastVisited];
offset = item.offset + item.size;
}
for (let i = lastVisited + 1; i <= index; i++) {
const size = sizer(i);
cachedItems[i] = {
offset,
size
};
offset += size;
}
gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] = index;
}
return cachedItems[index];
};
const bs = (props, gridCache, low, high, offset, type) => {
while (low <= high) {
const mid = low + floor((high - low) / 2);
const currentOffset = getItemFromCache(props, mid, gridCache, type).offset;
if (currentOffset === offset) return mid;
else if (currentOffset < offset) low = mid + 1;
else high = mid - 1;
}
return max(0, low - 1);
};
const es = (props, gridCache, idx, offset, type) => {
const total = type === "column" ? props.totalColumn : props.totalRow;
let exponent = 1;
while (idx < total && getItemFromCache(props, idx, gridCache, type).offset < offset) {
idx += exponent;
exponent *= 2;
}
return bs(props, gridCache, floor(idx / 2), min(idx, total - 1), offset, type);
};
const findItem = (props, gridCache, offset, type) => {
const [cache, lastVisitedIndex] = [gridCache[type], gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]]];
if ((lastVisitedIndex > 0 ? cache[lastVisitedIndex].offset : 0) >= offset) return bs(props, gridCache, 0, lastVisitedIndex, offset, type);
return es(props, gridCache, max(0, lastVisitedIndex), offset, type);
};
const getEstimatedTotalHeight = ({ totalRow }, { estimatedRowHeight, lastVisitedRowIndex, row }) => {
let sizeOfVisitedRows = 0;
if (lastVisitedRowIndex >= totalRow) lastVisitedRowIndex = totalRow - 1;
if (lastVisitedRowIndex >= 0) {
const item = row[lastVisitedRowIndex];
sizeOfVisitedRows = item.offset + item.size;
}
const sizeOfUnvisitedItems = (totalRow - lastVisitedRowIndex - 1) * estimatedRowHeight;
return sizeOfVisitedRows + sizeOfUnvisitedItems;
};
const getEstimatedTotalWidth = ({ totalColumn }, { column, estimatedColumnWidth, lastVisitedColumnIndex }) => {
let sizeOfVisitedColumns = 0;
if (lastVisitedColumnIndex > totalColumn) lastVisitedColumnIndex = totalColumn - 1;
if (lastVisitedColumnIndex >= 0) {
const item = column[lastVisitedColumnIndex];
sizeOfVisitedColumns = item.offset + item.size;
}
const sizeOfUnvisitedItems = (totalColumn - lastVisitedColumnIndex - 1) * estimatedColumnWidth;
return sizeOfVisitedColumns + sizeOfUnvisitedItems;
};
const ACCESS_ESTIMATED_SIZE_KEY_MAP = {
column: getEstimatedTotalWidth,
row: getEstimatedTotalHeight
};
const getOffset$1 = (props, index, alignment, scrollOffset, cache, type, scrollBarWidth) => {
const [size, estimatedSizeAssociates] = [type === "row" ? props.height : props.width, ACCESS_ESTIMATED_SIZE_KEY_MAP[type]];
const item = getItemFromCache(props, index, cache, type);
const maxOffset = max(0, min(estimatedSizeAssociates(props, cache) - size, item.offset));
const minOffset = max(0, item.offset - size + scrollBarWidth + item.size);
if (alignment === SMART_ALIGNMENT) if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
else alignment = CENTERED_ALIGNMENT;
switch (alignment) {
case START_ALIGNMENT: return maxOffset;
case END_ALIGNMENT: return minOffset;
case CENTERED_ALIGNMENT: return Math.round(minOffset + (maxOffset - minOffset) / 2);
case AUTO_ALIGNMENT:
default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
else if (minOffset > maxOffset) return minOffset;
else if (scrollOffset < minOffset) return minOffset;
else return maxOffset;
}
};
const DynamicSizeGrid = createGrid({
name: "ElDynamicSizeGrid",
getColumnPosition: (props, idx, cache) => {
const item = getItemFromCache(props, idx, cache, "column");
return [item.size, item.offset];
},
getRowPosition: (props, idx, cache) => {
const item = getItemFromCache(props, idx, cache, "row");
return [item.size, item.offset];
},
getColumnOffset: (props, columnIndex, alignment, scrollLeft, cache, scrollBarWidth) => getOffset$1(props, columnIndex, alignment, scrollLeft, cache, "column", scrollBarWidth),
getRowOffset: (props, rowIndex, alignment, scrollTop, cache, scrollBarWidth) => getOffset$1(props, rowIndex, alignment, scrollTop, cache, "row", scrollBarWidth),
getColumnStartIndexForOffset: (props, scrollLeft, cache) => findItem(props, cache, scrollLeft, "column"),
getColumnStopIndexForStartIndex: (props, startIndex, scrollLeft, cache) => {
const item = getItemFromCache(props, startIndex, cache, "column");
const maxOffset = scrollLeft + props.width;
let offset = item.offset + item.size;
let stopIndex = startIndex;
while (stopIndex < props.totalColumn - 1 && offset < maxOffset) {
stopIndex++;
offset += getItemFromCache(props, startIndex, cache, "column").size;
}
return stopIndex;
},
getEstimatedTotalHeight,
getEstimatedTotalWidth,
getRowStartIndexForOffset: (props, scrollTop, cache) => findItem(props, cache, scrollTop, "row"),
getRowStopIndexForStartIndex: (props, startIndex, scrollTop, cache) => {
const { totalRow, height } = props;
const item = getItemFromCache(props, startIndex, cache, "row");
const maxOffset = scrollTop + height;
let offset = item.size + item.offset;
let stopIndex = startIndex;
while (stopIndex < totalRow - 1 && offset < maxOffset) {
stopIndex++;
offset += getItemFromCache(props, stopIndex, cache, "row").size;
}
return stopIndex;
},
injectToInstance: (instance, cache) => {
const resetAfter = ({ columnIndex, rowIndex }, forceUpdate) => {
forceUpdate = isUndefined(forceUpdate) ? true : forceUpdate;
if (isNumber(columnIndex)) cache.value.lastVisitedColumnIndex = Math.min(cache.value.lastVisitedColumnIndex, columnIndex - 1);
if (isNumber(rowIndex)) cache.value.lastVisitedRowIndex = Math.min(cache.value.lastVisitedRowIndex, rowIndex - 1);
instance.exposed?.getItemStyleCache.value(-1, null, null);
if (forceUpdate) instance.proxy?.$forceUpdate();
};
const resetAfterColumnIndex = (columnIndex, forceUpdate) => {
resetAfter({ columnIndex }, forceUpdate);
};
const resetAfterRowIndex = (rowIndex, forceUpdate) => {
resetAfter({ rowIndex }, forceUpdate);
};
Object.assign(instance.proxy, {
resetAfterColumnIndex,
resetAfterRowIndex,
resetAfter
});
},
initCache: ({ estimatedColumnWidth = DEFAULT_DYNAMIC_LIST_ITEM_SIZE, estimatedRowHeight = DEFAULT_DYNAMIC_LIST_ITEM_SIZE }) => {
return {
column: {},
estimatedColumnWidth,
estimatedRowHeight,
lastVisitedColumnIndex: -1,
lastVisitedRowIndex: -1,
row: {}
};
},
clearCache: false,
validateProps: ({ columnWidth, rowHeight }) => {}
});
//#endregion
//#region ../../packages/components/select-v2/src/group-item.vue?vue&type=script&lang.ts
var group_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
props: {
item: {
type: Object,
required: true
},
style: { type: Object },
height: Number
},
setup() {
return { ns: useNamespace("select") };
}
});
//#endregion
//#region ../../packages/components/select-v2/src/group-item.vue
function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)(_ctx.ns.be("group", "title")),
style: (0, vue.normalizeStyle)({
..._ctx.style,
lineHeight: `${_ctx.height}px`
})
}, (0, vue.toDisplayString)(_ctx.item.label), 7);
}
var group_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(group_item_vue_vue_type_script_lang_default, [["render", _sfc_render$7]]);
//#endregion
//#region ../../packages/components/select-v2/src/useOption.ts
function useOption(props, { emit }) {
return {
hoverItem: () => {
if (!props.disabled) emit("hover", props.index);
},
selectOptionClick: () => {
if (!props.disabled) emit("select", props.item, props.index);
}
};
}
//#endregion
//#region ../../packages/components/select-v2/src/defaults.ts
const selectV2Props = buildProps({
allowCreate: Boolean,
autocomplete: {
type: definePropType(String),
default: "none"
},
automaticDropdown: Boolean,
clearable: Boolean,
clearIcon: {
type: iconPropType,
default: circle_close_default
},
effect: {
type: definePropType(String),
default: "light"
},
collapseTags: Boolean,
collapseTagsTooltip: Boolean,
tagTooltip: {
type: definePropType(Object),
default: () => ({})
},
maxCollapseTags: {
type: Number,
default: 1
},
defaultFirstOption: Boolean,
disabled: {
type: Boolean,
default: void 0
},
estimatedOptionHeight: {
type: Number,
default: void 0
},
filterable: Boolean,
filterMethod: { type: definePropType(Function) },
height: {
type: Number,
default: 274
},
itemHeight: {
type: Number,
default: 34
},
id: String,
loading: Boolean,
loadingText: String,
modelValue: {
type: definePropType([
Array,
String,
Number,
Boolean,
Object
]),
default: void 0
},
multiple: Boolean,
multipleLimit: {
type: Number,
default: 0
},
name: String,
noDataText: String,
noMatchText: String,
remoteMethod: { type: definePropType(Function) },
reserveKeyword: {
type: Boolean,
default: true
},
options: {
type: definePropType(Array),
required: true
},
placeholder: { type: String },
teleported: useTooltipContentProps.teleported,
persistent: {
type: Boolean,
default: true
},
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
remote: Boolean,
debounce: {
type: Number,
default: 300
},
size: useSizeProp,
props: {
type: definePropType(Object),
default: () => defaultProps$2
},
valueKey: {
type: String,
default: "value"
},
scrollbarAlwaysOn: Boolean,
validateEvent: {
type: Boolean,
default: true
},
offset: {
type: Number,
default: 12
},
remoteShowSuffix: Boolean,
showArrow: {
type: Boolean,
default: true
},
placement: {
type: definePropType(String),
values: Ee,
default: "bottom-start"
},
fallbackPlacements: {
type: definePropType(Array),
default: [
"bottom-start",
"top-start",
"right",
"left"
]
},
tagType: {
...tagProps.type,
default: "info"
},
tagEffect: {
...tagProps.effect,
default: "light"
},
tabindex: {
type: [String, Number],
default: 0
},
appendTo: useTooltipContentProps.appendTo,
fitInputWidth: {
type: [Boolean, Number],
default: true,
validator(val) {
return isBoolean(val) || isNumber(val);
}
},
suffixIcon: {
type: iconPropType,
default: arrow_down_default
},
...useEmptyValuesProps,
...useAriaProps(["ariaLabel"])
});
const optionV2Props = buildProps({
data: Array,
disabled: Boolean,
hovering: Boolean,
item: {
type: definePropType(Object),
required: true
},
index: Number,
style: Object,
selected: Boolean,
created: Boolean
});
const selectV2Emits = {
[UPDATE_MODEL_EVENT]: (val) => true,
[CHANGE_EVENT]: (val) => true,
"remove-tag": (val) => true,
"visible-change": (visible) => true,
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent,
clear: () => true
};
const optionV2Emits = {
hover: (index) => isNumber(index),
select: (val, index) => true
};
//#endregion
//#region ../../packages/components/select-v2/src/token.ts
const selectV2InjectionKey = Symbol("ElSelectV2Injection");
//#endregion
//#region ../../packages/components/select-v2/src/option-item.vue?vue&type=script&lang.ts
var option_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
props: optionV2Props,
emits: optionV2Emits,
setup(props, { emit }) {
const select = (0, vue.inject)(selectV2InjectionKey);
const ns = useNamespace("select");
const { hoverItem, selectOptionClick } = useOption(props, { emit });
const { getLabel } = useProps(select.props);
const contentId = select.contentId;
const handleMousedown = (event) => {
let target = event.target;
const currentTarget = event.currentTarget;
while (target && target !== currentTarget) {
if (isFocusable(target)) return;
target = target.parentElement;
}
event.preventDefault();
};
return {
ns,
contentId,
hoverItem,
handleMousedown,
selectOptionClick,
getLabel
};
}
});
//#endregion
//#region ../../packages/components/select-v2/src/option-item.vue
const _hoisted_1$22 = [
"id",
"aria-selected",
"aria-disabled"
];
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
id: `${_ctx.contentId}-${_ctx.index}`,
role: "option",
"aria-selected": _ctx.selected,
"aria-disabled": _ctx.disabled || void 0,
style: (0, vue.normalizeStyle)(_ctx.style),
class: (0, vue.normalizeClass)([
_ctx.ns.be("dropdown", "item"),
_ctx.ns.is("selected", _ctx.selected),
_ctx.ns.is("disabled", _ctx.disabled),
_ctx.ns.is("created", _ctx.created),
_ctx.ns.is("hovering", _ctx.hovering)
]),
onMousemove: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)),
onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {
item: _ctx.item,
index: _ctx.index,
disabled: _ctx.disabled
}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.getLabel(_ctx.item)), 1)])], 46, _hoisted_1$22);
}
var option_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_item_vue_vue_type_script_lang_default, [["render", _sfc_render$6]]);
//#endregion
//#region ../../packages/components/select-v2/src/select-dropdown.tsx
const props = {
loading: Boolean,
data: {
type: Array,
required: true
},
hoveringIndex: Number,
width: Number,
id: String,
ariaLabel: String
};
var select_dropdown_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSelectDropdown",
props,
setup(props, { slots, expose }) {
const select = (0, vue.inject)(selectV2InjectionKey);
const ns = useNamespace("select");
const { getLabel, getValue, getDisabled } = useProps(select.props);
const cachedHeights = (0, vue.ref)([]);
const listRef = (0, vue.ref)();
const size = (0, vue.computed)(() => props.data.length);
(0, vue.watch)(() => size.value, () => {
select.tooltipRef.value?.updatePopper?.();
});
const isSized = (0, vue.computed)(() => isUndefined(select.props.estimatedOptionHeight));
const listProps = (0, vue.computed)(() => {
if (isSized.value) return { itemSize: select.props.itemHeight };
return {
estimatedSize: select.props.estimatedOptionHeight,
itemSize: (idx) => cachedHeights.value[idx]
};
});
const contains = (arr = [], target) => {
const { props: { valueKey } } = select;
if (!isObject$1(target)) return arr.includes(target);
return arr && arr.some((item) => {
return (0, vue.toRaw)(get(item, valueKey)) === get(target, valueKey);
});
};
const isEqual = (selected, target) => {
if (!isObject$1(target)) return selected === target;
else {
const { valueKey } = select.props;
return get(selected, valueKey) === get(target, valueKey);
}
};
const isItemSelected = (modelValue, target) => {
if (select.props.multiple) return contains(modelValue, getValue(target));
return isEqual(modelValue, getValue(target));
};
const isItemDisabled = (modelValue, selected) => {
const { disabled, multiple, multipleLimit } = select.props;
return disabled || !selected && (multiple ? multipleLimit > 0 && modelValue.length >= multipleLimit : false);
};
const isItemHovering = (target) => props.hoveringIndex === target;
const scrollToItem = (index) => {
const list = listRef.value;
if (list) list.scrollToItem(index);
};
const resetScrollTop = () => {
const list = listRef.value;
if (list) list.resetScrollTop();
};
expose({
listRef,
isSized,
isItemDisabled,
isItemHovering,
isItemSelected,
scrollToItem,
resetScrollTop
});
const Item = (itemProps) => {
const { index, data, style } = itemProps;
const sized = (0, vue.unref)(isSized);
const { itemSize, estimatedSize } = (0, vue.unref)(listProps);
const { modelValue } = select.props;
const { onSelect, onHover } = select;
const item = data[index];
if (item.type === "Group") return (0, vue.createVNode)(group_item_default, {
"item": item,
"style": style,
"height": sized ? itemSize : estimatedSize
}, null);
const isSelected = isItemSelected(modelValue, item);
const isDisabled = isItemDisabled(modelValue, isSelected);
const isHovering = isItemHovering(index);
return (0, vue.createVNode)(option_item_default, (0, vue.mergeProps)(itemProps, {
"selected": isSelected,
"disabled": getDisabled(item) || isDisabled,
"created": !!item.created,
"hovering": isHovering,
"item": item,
"onSelect": onSelect,
"onHover": onHover
}), { default: (props) => slots.default?.(props) || (0, vue.createVNode)("span", null, [getLabel(item)]) });
};
const { onKeyboardNavigate, onKeyboardSelect } = select;
const onForward = () => {
onKeyboardNavigate("forward");
};
const onBackward = () => {
onKeyboardNavigate("backward");
};
const onEscOrTab = () => {};
const onKeydown = (e) => {
const code = getEventCode(e);
const { tab, esc, down, up, enter, numpadEnter } = EVENT_CODE;
if ([
esc,
down,
up,
enter,
numpadEnter
].includes(code)) {
e.preventDefault();
e.stopPropagation();
}
switch (code) {
case tab:
case esc:
onEscOrTab();
break;
case down:
onForward();
break;
case up:
onBackward();
break;
case enter:
case numpadEnter:
onKeyboardSelect();
break;
}
};
return () => {
const { data, width } = props;
const { height, multiple, scrollbarAlwaysOn } = select.props;
const isScrollbarAlwaysOn = (0, vue.computed)(() => {
return isIOS ? true : scrollbarAlwaysOn;
});
const List = (0, vue.unref)(isSized) ? FixedSizeList : DynamicSizeList;
return (0, vue.createVNode)("div", {
"class": [ns.b("dropdown"), ns.is("multiple", multiple)],
"style": { width: `${width}px` }
}, [
slots.header?.(),
slots.loading?.() || slots.empty?.() || (0, vue.createVNode)(List, (0, vue.mergeProps)({ "ref": listRef }, (0, vue.unref)(listProps), {
"className": ns.be("dropdown", "list"),
"scrollbarAlwaysOn": isScrollbarAlwaysOn.value,
"data": data,
"height": height,
"width": width,
"total": data.length,
"innerElement": "ul",
"innerProps": {
id: props.id,
role: "listbox",
"aria-label": props.ariaLabel,
"aria-orientation": "vertical"
},
"onKeydown": onKeydown
}), { default: (props) => (0, vue.createVNode)(Item, props, null) }),
slots.footer?.()
]);
};
}
});
//#endregion
//#region ../../packages/components/select-v2/src/useAllowCreate.ts
function useAllowCreate(props, states) {
const { aliasProps, getLabel, getValue } = useProps(props);
const createOptionCount = (0, vue.ref)(0);
const cachedSelectedOption = (0, vue.ref)();
const enableAllowCreateMode = (0, vue.computed)(() => {
return props.allowCreate && props.filterable;
});
(0, vue.watch)(() => props.options, (options) => {
const optionLabelsSet = new Set(options.map((option) => getLabel(option)));
states.createdOptions = states.createdOptions.filter((createdOption) => !optionLabelsSet.has(getLabel(createdOption)));
});
function hasExistingOption(query) {
const hasOption = (option) => getLabel(option) === query;
return props.options && props.options.some(hasOption) || states.createdOptions.some(hasOption);
}
function selectNewOption(option) {
if (!enableAllowCreateMode.value) return;
if (props.multiple && option.created) createOptionCount.value++;
else cachedSelectedOption.value = option;
}
function createNewOption(query) {
if (enableAllowCreateMode.value) if (query && query.length > 0) {
if (hasExistingOption(query)) {
states.createdOptions = states.createdOptions.filter((createdOption) => getLabel(createdOption) !== states.previousQuery);
return;
}
const newOption = {
[aliasProps.value.value]: query,
[aliasProps.value.label]: query,
created: true,
[aliasProps.value.disabled]: false
};
if (states.createdOptions.length >= createOptionCount.value) states.createdOptions[createOptionCount.value] = newOption;
else states.createdOptions.push(newOption);
} else if (props.multiple) states.createdOptions.length = createOptionCount.value;
else {
const selectedOption = cachedSelectedOption.value;
states.createdOptions.length = 0;
if (selectedOption && selectedOption.created) states.createdOptions.push(selectedOption);
}
}
function removeNewOption(option) {
if (!enableAllowCreateMode.value || !option || !option.created || option.created && props.reserveKeyword && states.inputValue === getLabel(option)) return;
const idx = states.createdOptions.findIndex((it) => getValue(it) === getValue(option));
if (~idx) {
states.createdOptions.splice(idx, 1);
createOptionCount.value--;
}
}
function clearAllNewOption() {
if (enableAllowCreateMode.value) {
states.createdOptions.length = 0;
createOptionCount.value = 0;
}
}
return {
createNewOption,
removeNewOption,
selectNewOption,
clearAllNewOption
};
}
//#endregion
//#region ../../packages/components/select-v2/src/useSelect.ts
const useSelect$1 = (props, emit) => {
const { t } = useLocale();
const slots = (0, vue.useSlots)();
const nsSelect = useNamespace("select");
const nsInput = useNamespace("input");
const { form: elForm, formItem: elFormItem } = useFormItem();
const { inputId } = useFormItemInputId(props, { formItemContext: elFormItem });
const { aliasProps, getLabel, getValue, getDisabled, getOptions } = useProps(props);
const { valueOnClear, isEmptyValue } = useEmptyValues(props);
const states = (0, vue.reactive)({
inputValue: "",
cachedOptions: [],
createdOptions: [],
hoveringIndex: -1,
inputHovering: false,
selectionWidth: 0,
collapseItemWidth: 0,
previousQuery: null,
previousValue: void 0,
selectedLabel: "",
menuVisibleOnFocus: false,
isBeforeHide: false
});
const popperSize = (0, vue.ref)(-1);
const debouncing = (0, vue.ref)(false);
const selectRef = (0, vue.ref)();
const selectionRef = (0, vue.ref)();
const tooltipRef = (0, vue.ref)();
const tagTooltipRef = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const prefixRef = (0, vue.ref)();
const suffixRef = (0, vue.ref)();
const menuRef = (0, vue.ref)();
const tagMenuRef = (0, vue.ref)();
const collapseItemRef = (0, vue.ref)();
const { isComposing, handleCompositionStart, handleCompositionEnd, handleCompositionUpdate } = useComposition({ afterComposition: (e) => onInput(e) });
const selectDisabled = useFormDisabled();
const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
disabled: selectDisabled,
afterFocus() {
if (props.automaticDropdown && !expanded.value) {
expanded.value = true;
states.menuVisibleOnFocus = true;
}
},
beforeBlur(event) {
return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
},
afterBlur() {
expanded.value = false;
states.menuVisibleOnFocus = false;
if (props.validateEvent) elFormItem?.validate?.("blur").catch((err) => /* @__PURE__ */ debugWarn(err));
}
});
const allOptions = (0, vue.computed)(() => filterOptions(""));
const hasOptions = (0, vue.computed)(() => {
if (props.loading) return false;
return props.options.length > 0 || states.createdOptions.length > 0;
});
const filteredOptions = (0, vue.ref)([]);
const expanded = (0, vue.ref)(false);
const needStatusIcon = (0, vue.computed)(() => elForm?.statusIcon ?? false);
const popupHeight = (0, vue.computed)(() => {
const totalHeight = filteredOptions.value.length * props.itemHeight;
return totalHeight > props.height ? props.height : totalHeight;
});
const hasModelValue = (0, vue.computed)(() => {
return props.multiple ? isArray$1(props.modelValue) && props.modelValue.length > 0 : !isEmptyValue(props.modelValue);
});
const showClearBtn = (0, vue.computed)(() => {
return props.clearable && !selectDisabled.value && hasModelValue.value && (isFocused.value || states.inputHovering);
});
const iconComponent = (0, vue.computed)(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon);
const iconReverse = (0, vue.computed)(() => iconComponent.value && nsSelect.is("reverse", expanded.value));
const validateState = (0, vue.computed)(() => elFormItem?.validateState || "");
const validateIcon = (0, vue.computed)(() => {
if (!validateState.value) return;
return ValidateComponentsMap[validateState.value];
});
const debounce = (0, vue.computed)(() => props.remote ? props.debounce : 0);
const isRemoteSearchEmpty = (0, vue.computed)(() => props.remote && !states.inputValue && !hasOptions.value);
const emptyText = (0, vue.computed)(() => {
if (props.loading) return props.loadingText || t("el.select.loading");
else {
if (props.filterable && states.inputValue && hasOptions.value && filteredOptions.value.length === 0) return props.noMatchText || t("el.select.noMatch");
if (!hasOptions.value) return props.noDataText || t("el.select.noData");
}
return null;
});
const isFilterMethodValid = (0, vue.computed)(() => props.filterable && isFunction$1(props.filterMethod));
const isRemoteMethodValid = (0, vue.computed)(() => props.filterable && props.remote && isFunction$1(props.remoteMethod));
const filterOptions = (query) => {
const regexp = new RegExp(escapeStringRegexp(query), "i");
const isValidOption = (o) => {
if (isFilterMethodValid.value || isRemoteMethodValid.value) return true;
return query ? regexp.test(getLabel(o) || "") : true;
};
if (props.loading) return [];
return [...states.createdOptions, ...props.options].reduce((all, item) => {
const options = getOptions(item);
if (isArray$1(options)) {
const filtered = options.filter(isValidOption);
if (filtered.length > 0) all.push({
label: getLabel(item),
type: "Group"
}, ...filtered);
} else if (props.remote || isValidOption(item)) all.push(item);
return all;
}, []);
};
const updateOptions = () => {
filteredOptions.value = filterOptions(states.inputValue);
};
const allOptionsValueMap = (0, vue.computed)(() => {
const valueMap = /* @__PURE__ */ new Map();
allOptions.value.forEach((option, index) => {
valueMap.set(getValueKey(getValue(option)), {
option,
index
});
});
return valueMap;
});
const filteredOptionsValueMap = (0, vue.computed)(() => {
const valueMap = /* @__PURE__ */ new Map();
filteredOptions.value.forEach((option, index) => {
valueMap.set(getValueKey(getValue(option)), {
option,
index
});
});
return valueMap;
});
const optionsAllDisabled = (0, vue.computed)(() => filteredOptions.value.every((option) => getDisabled(option)));
const selectSize = useFormSize();
const collapseTagSize = (0, vue.computed)(() => "small" === selectSize.value ? "small" : "default");
const calculatePopperSize = () => {
if (isNumber(props.fitInputWidth)) {
popperSize.value = props.fitInputWidth;
return;
}
const width = selectRef.value?.offsetWidth || 200;
if (!props.fitInputWidth && hasOptions.value) (0, vue.nextTick)(() => {
popperSize.value = Math.max(width, calculateLabelMaxWidth());
});
else popperSize.value = width;
};
const calculateLabelMaxWidth = () => {
const ctx = document.createElement("canvas").getContext("2d");
const selector = nsSelect.be("dropdown", "item");
const dropdownItemEl = (menuRef.value?.listRef?.innerRef || document).querySelector(`.${selector}`);
if (dropdownItemEl === null || ctx === null) return 0;
const style = getComputedStyle(dropdownItemEl);
const padding = Number.parseFloat(style.paddingLeft) + Number.parseFloat(style.paddingRight);
ctx.font = `bold ${style.font.replace(new RegExp(`\\b${style.fontWeight}\\b`), "")}`;
return filteredOptions.value.reduce((max, option) => {
const metrics = ctx.measureText(getLabel(option));
return Math.max(metrics.width, max);
}, 0) + padding;
};
const getGapWidth = () => {
if (!selectionRef.value) return 0;
const style = window.getComputedStyle(selectionRef.value);
return Number.parseFloat(style.gap || "6px");
};
const tagStyle = (0, vue.computed)(() => {
const gapWidth = getGapWidth();
const inputSlotWidth = props.filterable ? gapWidth + MINIMUM_INPUT_WIDTH : 0;
return { maxWidth: `${collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.selectionWidth - inputSlotWidth}px` };
});
const collapseTagStyle = (0, vue.computed)(() => {
return { maxWidth: `${states.selectionWidth}px` };
});
const shouldShowPlaceholder = (0, vue.computed)(() => {
if (isArray$1(props.modelValue)) return props.modelValue.length === 0 && !states.inputValue;
return props.filterable ? !states.inputValue : true;
});
const currentPlaceholder = (0, vue.computed)(() => {
const _placeholder = props.placeholder ?? t("el.select.placeholder");
return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel;
});
const popperRef = (0, vue.computed)(() => tooltipRef.value?.popperRef?.contentRef);
const indexRef = (0, vue.computed)(() => {
if (props.multiple) {
const len = props.modelValue.length;
if (len > 0 && filteredOptionsValueMap.value.has(props.modelValue[len - 1])) {
const { index } = filteredOptionsValueMap.value.get(props.modelValue[len - 1]);
return index;
}
} else if (!isEmptyValue(props.modelValue) && filteredOptionsValueMap.value.has(props.modelValue)) {
const { index } = filteredOptionsValueMap.value.get(props.modelValue);
return index;
}
return -1;
});
const dropdownMenuVisible = (0, vue.computed)({
get() {
return expanded.value && (props.loading || !isRemoteSearchEmpty.value || props.remote && !!slots.empty) && (!debouncing.value || !isEmpty(states.previousQuery) || hasOptions.value);
},
set(val) {
expanded.value = val;
}
});
const showTagList = (0, vue.computed)(() => {
if (!props.multiple) return [];
return props.collapseTags ? states.cachedOptions.slice(0, props.maxCollapseTags) : states.cachedOptions;
});
const collapseTagList = (0, vue.computed)(() => {
if (!props.multiple) return [];
return props.collapseTags ? states.cachedOptions.slice(props.maxCollapseTags) : [];
});
const { createNewOption, removeNewOption, selectNewOption, clearAllNewOption } = useAllowCreate(props, states);
const toggleMenu = (event) => {
if (selectDisabled.value || props.filterable && expanded.value && event && !suffixRef.value?.contains(event.target)) return;
if (states.menuVisibleOnFocus) states.menuVisibleOnFocus = false;
else expanded.value = !expanded.value;
};
const onInputChange = () => {
if (states.inputValue.length > 0 && !expanded.value) expanded.value = true;
createNewOption(states.inputValue);
(0, vue.nextTick)(() => {
handleQueryChange(states.inputValue);
});
};
const debouncedOnInputChange = useDebounceFn(() => {
onInputChange();
debouncing.value = false;
}, debounce);
const handleQueryChange = (val) => {
if (states.previousQuery === val || isComposing.value) return;
states.previousQuery = val;
if (props.filterable && isFunction$1(props.filterMethod)) props.filterMethod(val);
else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) props.remoteMethod(val);
if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptions.value.length) (0, vue.nextTick)(checkDefaultFirstOption);
else (0, vue.nextTick)(updateHoveringIndex);
};
/**
* find and highlight first option as default selected
* @remark
* - if the first option in dropdown list is user-created,
* it would be at the end of the optionsArray
* so find it and set hover.
* (NOTE: there must be only one user-created option in dropdown list with query)
* - if there's no user-created option in list, just find the first one as usual
* (NOTE: exclude options that are disabled or in disabled-group)
*/
const checkDefaultFirstOption = () => {
const optionsInDropdown = filteredOptions.value.filter((n) => !n.disabled && n.type !== "Group");
const userCreatedOption = optionsInDropdown.find((n) => n.created);
const firstOriginOption = optionsInDropdown[0];
states.hoveringIndex = getValueIndex(filteredOptions.value, userCreatedOption || firstOriginOption);
};
const emitChange = (val) => {
if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
};
const update = (val) => {
emit(UPDATE_MODEL_EVENT, val);
emitChange(val);
states.previousValue = props.multiple ? String(val) : val;
(0, vue.nextTick)(() => {
if (props.multiple && isArray$1(props.modelValue)) {
const cachedOptions = states.cachedOptions.slice();
const selectedOptions = props.modelValue.map((value) => getOption(value, cachedOptions));
if (!isEqual$1(states.cachedOptions, selectedOptions)) states.cachedOptions = selectedOptions;
} else initStates(true);
});
};
const getValueIndex = (arr = [], value) => {
if (!isObject$1(value)) return arr.indexOf(value);
const valueKey = props.valueKey;
let index = -1;
arr.some((item, i) => {
if (get(item, valueKey) === get(value, valueKey)) {
index = i;
return true;
}
return false;
});
return index;
};
const getValueKey = (item) => {
return isObject$1(item) ? get(item, props.valueKey) : item;
};
const handleResize = () => {
calculatePopperSize();
};
const resetSelectionWidth = () => {
states.selectionWidth = Number.parseFloat(window.getComputedStyle(selectionRef.value).width);
};
const resetCollapseItemWidth = () => {
states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
};
const updateTooltip = () => {
tooltipRef.value?.updatePopper?.();
};
const updateTagTooltip = () => {
tagTooltipRef.value?.updatePopper?.();
};
const onSelect = (option) => {
const optionValue = getValue(option);
if (props.multiple) {
let selectedOptions = props.modelValue.slice();
const index = getValueIndex(selectedOptions, optionValue);
if (index > -1) {
selectedOptions = [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)];
states.cachedOptions.splice(index, 1);
removeNewOption(option);
} else if (props.multipleLimit <= 0 || selectedOptions.length < props.multipleLimit) {
selectedOptions = [...selectedOptions, optionValue];
states.cachedOptions.push(option);
selectNewOption(option);
}
update(selectedOptions);
if (option.created) handleQueryChange("");
if (props.filterable && (option.created || !props.reserveKeyword)) states.inputValue = "";
} else {
states.selectedLabel = getLabel(option);
!isEqual$1(props.modelValue, optionValue) && update(optionValue);
expanded.value = false;
selectNewOption(option);
if (!option.created) clearAllNewOption();
}
focus();
};
const deleteTag = (event, option) => {
let selectedOptions = props.modelValue.slice();
const index = getValueIndex(selectedOptions, getValue(option));
if (index > -1 && !selectDisabled.value) {
selectedOptions = [...props.modelValue.slice(0, index), ...props.modelValue.slice(index + 1)];
states.cachedOptions.splice(index, 1);
update(selectedOptions);
emit("remove-tag", getValue(option));
removeNewOption(option);
}
event.stopPropagation();
focus();
};
const focus = () => {
inputRef.value?.focus();
};
const blur = () => {
if (expanded.value) {
expanded.value = false;
(0, vue.nextTick)(() => inputRef.value?.blur());
return;
}
inputRef.value?.blur();
};
const handleEsc = () => {
if (states.inputValue.length > 0) states.inputValue = "";
else expanded.value = false;
};
const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => !states.cachedOptions.some((option) => getValue(option) === it && getDisabled(option)));
const handleDel = (e) => {
const code = getEventCode(e);
if (!props.multiple) return;
if (code === EVENT_CODE.delete) return;
if (states.inputValue.length === 0) {
e.preventDefault();
const selected = props.modelValue.slice();
const lastNotDisabledIndex = getLastNotDisabledIndex(selected);
if (lastNotDisabledIndex < 0) return;
const removeTagValue = selected[lastNotDisabledIndex];
selected.splice(lastNotDisabledIndex, 1);
const option = states.cachedOptions[lastNotDisabledIndex];
states.cachedOptions.splice(lastNotDisabledIndex, 1);
removeNewOption(option);
update(selected);
emit("remove-tag", removeTagValue);
}
};
const handleClear = () => {
let emptyValue;
if (isArray$1(props.modelValue)) emptyValue = [];
else emptyValue = valueOnClear.value;
states.selectedLabel = "";
expanded.value = false;
update(emptyValue);
emit("clear");
clearAllNewOption();
focus();
};
const onKeyboardNavigate = (direction, hoveringIndex = void 0) => {
const options = filteredOptions.value;
if (!["forward", "backward"].includes(direction) || selectDisabled.value || options.length <= 0 || optionsAllDisabled.value || isComposing.value) return;
if (!expanded.value) return toggleMenu();
if (isUndefined(hoveringIndex)) hoveringIndex = states.hoveringIndex;
let newIndex = -1;
if (direction === "forward") {
newIndex = hoveringIndex + 1;
if (newIndex >= options.length) newIndex = 0;
} else if (direction === "backward") {
newIndex = hoveringIndex - 1;
if (newIndex < 0 || newIndex >= options.length) newIndex = options.length - 1;
}
const option = options[newIndex];
if (getDisabled(option) || option.type === "Group") return onKeyboardNavigate(direction, newIndex);
else {
states.hoveringIndex = newIndex;
scrollToItem(newIndex);
}
};
const onKeyboardSelect = () => {
if (!expanded.value) return toggleMenu();
else if (~states.hoveringIndex && filteredOptions.value[states.hoveringIndex]) onSelect(filteredOptions.value[states.hoveringIndex]);
};
const onHoverOption = (idx) => {
states.hoveringIndex = idx ?? -1;
};
const updateHoveringIndex = () => {
if (!props.multiple) states.hoveringIndex = filteredOptions.value.findIndex((item) => {
return getValueKey(getValue(item)) === getValueKey(props.modelValue);
});
else {
const length = props.modelValue.length;
if (length > 0) {
const lastValue = props.modelValue[length - 1];
states.hoveringIndex = filteredOptions.value.findIndex((item) => getValueKey(lastValue) === getValueKey(getValue(item)));
} else states.hoveringIndex = -1;
}
};
const onInput = (event) => {
states.inputValue = event.target.value;
if (props.remote) {
debouncing.value = true;
debouncedOnInputChange();
} else return onInputChange();
};
const handleClickOutside = (event) => {
expanded.value = false;
if (isFocused.value) handleBlur(new FocusEvent("blur", event));
};
const handleMenuEnter = () => {
states.isBeforeHide = false;
return (0, vue.nextTick)(() => {
if (~indexRef.value) scrollToItem(indexRef.value);
});
};
const scrollToItem = (index) => {
menuRef.value.scrollToItem(index);
};
const getOption = (value, cachedOptions) => {
const selectValue = getValueKey(value);
if (allOptionsValueMap.value.has(selectValue)) {
const { option } = allOptionsValueMap.value.get(selectValue);
return option;
}
if (cachedOptions && cachedOptions.length) {
const option = cachedOptions.find((option) => getValueKey(getValue(option)) === selectValue);
if (option) return option;
}
return {
[aliasProps.value.value]: value,
[aliasProps.value.label]: value
};
};
const getIndex = (option) => allOptionsValueMap.value.get(getValue(option))?.index ?? -1;
const initStates = (needUpdateSelectedLabel = false) => {
if (props.multiple) if (props.modelValue.length > 0) {
const cachedOptions = states.cachedOptions.slice();
states.cachedOptions.length = 0;
states.previousValue = props.modelValue.toString();
for (const value of props.modelValue) {
const option = getOption(value, cachedOptions);
states.cachedOptions.push(option);
}
} else {
states.cachedOptions = [];
states.previousValue = void 0;
}
else if (hasModelValue.value) {
states.previousValue = props.modelValue;
const options = filteredOptions.value;
const selectedItemIndex = options.findIndex((option) => getValueKey(getValue(option)) === getValueKey(props.modelValue));
if (~selectedItemIndex) states.selectedLabel = getLabel(options[selectedItemIndex]);
else if (!states.selectedLabel || needUpdateSelectedLabel) states.selectedLabel = getValueKey(props.modelValue);
} else {
states.selectedLabel = "";
states.previousValue = void 0;
}
clearAllNewOption();
calculatePopperSize();
};
(0, vue.watch)(() => props.fitInputWidth, () => {
calculatePopperSize();
});
(0, vue.watch)(expanded, (val) => {
if (val) {
if (!props.persistent) calculatePopperSize();
handleQueryChange("");
} else {
states.inputValue = "";
states.previousQuery = null;
states.isBeforeHide = true;
states.menuVisibleOnFocus = false;
createNewOption("");
}
});
(0, vue.watch)(() => props.modelValue, (val, oldVal) => {
if (!val || isArray$1(val) && val.length === 0 || props.multiple && !isEqual$1(val.toString(), states.previousValue) || !props.multiple && getValueKey(val) !== getValueKey(states.previousValue)) initStates(true);
if (!isEqual$1(val, oldVal) && props.validateEvent) elFormItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
}, { deep: true });
(0, vue.watch)(() => props.options, () => {
const input = inputRef.value;
if (!input || input && document.activeElement !== input) initStates();
}, {
deep: true,
flush: "post"
});
(0, vue.watch)(() => filteredOptions.value, () => {
calculatePopperSize();
return menuRef.value && (0, vue.nextTick)(menuRef.value.resetScrollTop);
});
(0, vue.watchEffect)(() => {
if (states.isBeforeHide) return;
updateOptions();
});
(0, vue.watchEffect)(() => {
const { valueKey, options } = props;
const duplicateValue = /* @__PURE__ */ new Map();
for (const item of options) {
const optionValue = getValue(item);
let v = optionValue;
if (isObject$1(v)) v = get(optionValue, valueKey);
if (duplicateValue.get(v)) {
/* @__PURE__ */ debugWarn("ElSelectV2", `The option values you provided seem to be duplicated, which may cause some problems, please check.`);
break;
} else duplicateValue.set(v, true);
}
});
(0, vue.onMounted)(() => {
initStates();
});
useResizeObserver(selectRef, handleResize);
useResizeObserver(selectionRef, resetSelectionWidth);
useResizeObserver(wrapperRef, updateTooltip);
useResizeObserver(tagMenuRef, updateTagTooltip);
useResizeObserver(collapseItemRef, resetCollapseItemWidth);
let stop;
(0, vue.watch)(() => dropdownMenuVisible.value, (newVal) => {
if (newVal) stop = useResizeObserver(menuRef, updateTooltip).stop;
else {
stop?.();
stop = void 0;
}
emit("visible-change", newVal);
});
return {
inputId,
collapseTagSize,
currentPlaceholder,
expanded,
emptyText,
popupHeight,
debounce,
allOptions,
allOptionsValueMap,
filteredOptions,
iconComponent,
iconReverse,
tagStyle,
collapseTagStyle,
popperSize,
dropdownMenuVisible,
hasModelValue,
shouldShowPlaceholder,
selectDisabled,
selectSize,
needStatusIcon,
showClearBtn,
states,
isFocused,
nsSelect,
nsInput,
inputRef,
menuRef,
tagMenuRef,
tooltipRef,
tagTooltipRef,
selectRef,
wrapperRef,
selectionRef,
prefixRef,
suffixRef,
collapseItemRef,
popperRef,
validateState,
validateIcon,
showTagList,
collapseTagList,
debouncedOnInputChange,
deleteTag,
getLabel,
getValue,
getDisabled,
getValueKey,
getIndex,
handleClear,
handleClickOutside,
handleDel,
handleEsc,
focus,
blur,
handleMenuEnter,
handleResize,
resetSelectionWidth,
updateTooltip,
updateTagTooltip,
updateOptions,
toggleMenu,
scrollTo: scrollToItem,
onInput,
onKeyboardNavigate,
onKeyboardSelect,
onSelect,
onHover: onHoverOption,
handleCompositionStart,
handleCompositionEnd,
handleCompositionUpdate
};
};
//#endregion
//#region ../../packages/components/select-v2/src/select.vue?vue&type=script&lang.ts
var select_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElSelectV2",
components: {
ElSelectMenu: select_dropdown_default,
ElTag,
ElTooltip,
ElIcon
},
directives: { ClickOutside },
props: selectV2Props,
emits: selectV2Emits,
setup(props, { emit }) {
const modelValue = (0, vue.computed)(() => {
const { modelValue: rawModelValue, multiple } = props;
const fallback = multiple ? [] : void 0;
if (isArray$1(rawModelValue)) return multiple ? rawModelValue : fallback;
return multiple ? fallback : rawModelValue;
});
const API = useSelect$1((0, vue.reactive)({
...(0, vue.toRefs)(props),
modelValue
}), emit);
const { calculatorRef, inputStyle } = useCalcInputWidth();
const contentId = useId();
(0, vue.provide)(selectV2InjectionKey, {
props: (0, vue.reactive)({
...(0, vue.toRefs)(props),
height: API.popupHeight,
modelValue
}),
expanded: API.expanded,
tooltipRef: API.tooltipRef,
contentId,
onSelect: API.onSelect,
onHover: API.onHover,
onKeyboardNavigate: API.onKeyboardNavigate,
onKeyboardSelect: API.onKeyboardSelect
});
const selectedLabel = (0, vue.computed)(() => {
if (!props.multiple) return API.states.selectedLabel;
return API.states.cachedOptions.map((i) => API.getLabel(i));
});
return {
...API,
modelValue,
selectedLabel,
calculatorRef,
inputStyle,
contentId,
BORDER_HORIZONTAL_WIDTH
};
}
});
//#endregion
//#region ../../packages/components/select-v2/src/select.vue
const _hoisted_1$21 = [
"id",
"value",
"autocomplete",
"tabindex",
"aria-expanded",
"aria-label",
"disabled",
"aria-controls",
"aria-activedescendant",
"readonly",
"name"
];
const _hoisted_2$13 = ["textContent"];
const _hoisted_3$5 = { key: 1 };
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_tag = (0, vue.resolveComponent)("el-tag");
const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_select_menu = (0, vue.resolveComponent)("el-select-menu");
const _directive_click_outside = (0, vue.resolveDirective)("click-outside");
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: "selectRef",
class: (0, vue.normalizeClass)([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]),
onMouseenter: _cache[15] || (_cache[15] = ($event) => _ctx.states.inputHovering = true),
onMouseleave: _cache[16] || (_cache[16] = ($event) => _ctx.states.inputHovering = false)
}, [(0, vue.createVNode)(_component_el_tooltip, {
ref: "tooltipRef",
visible: _ctx.dropdownMenuVisible,
teleported: _ctx.teleported,
"popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass],
"popper-style": _ctx.popperStyle,
"gpu-acceleration": false,
"stop-popper-mouse-event": false,
"popper-options": _ctx.popperOptions,
"fallback-placements": _ctx.fallbackPlacements,
effect: _ctx.effect,
placement: _ctx.placement,
pure: "",
transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`,
trigger: "click",
persistent: _ctx.persistent,
"append-to": _ctx.appendTo,
"show-arrow": _ctx.showArrow,
offset: _ctx.offset,
onBeforeShow: _ctx.handleMenuEnter,
onHide: _cache[14] || (_cache[14] = ($event) => _ctx.states.isBeforeHide = false)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "wrapperRef",
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("wrapper"),
_ctx.nsSelect.is("focused", _ctx.isFocused),
_ctx.nsSelect.is("hovering", _ctx.states.inputHovering),
_ctx.nsSelect.is("filterable", _ctx.filterable),
_ctx.nsSelect.is("disabled", _ctx.selectDisabled)
]),
onClick: _cache[11] || (_cache[11] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["prevent"]))
}, [
_ctx.$slots.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "prefixRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("prefix"))
}, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
ref: "selectionRef",
class: (0, vue.normalizeClass)([_ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.modelValue.length)])
}, [
_ctx.multiple ? (0, vue.renderSlot)(_ctx.$slots, "tag", {
key: 0,
data: _ctx.states.cachedOptions,
deleteTag: _ctx.deleteTag,
selectDisabled: _ctx.selectDisabled
}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.showTagList, (item) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: _ctx.getValueKey(_ctx.getValue(item)),
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
closable: !_ctx.selectDisabled && !_ctx.getDisabled(item),
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
"disable-transitions": "",
style: (0, vue.normalizeStyle)(_ctx.tagStyle),
onClose: ($event) => _ctx.deleteTag($event, item)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
index: _ctx.getIndex(item),
label: _ctx.getLabel(item),
value: _ctx.getValue(item)
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.getLabel(item)), 1)])], 2)]),
_: 2
}, 1032, [
"closable",
"size",
"type",
"effect",
"style",
"onClose"
])], 2);
}), 128)), _ctx.collapseTags && _ctx.states.cachedOptions.length > _ctx.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
key: 0,
ref: "tagTooltipRef",
disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip,
"fallback-placements": _ctx.tagTooltip?.fallbackPlacements ?? [
"bottom",
"top",
"right",
"left"
],
effect: _ctx.tagTooltip?.effect ?? _ctx.effect,
placement: _ctx.tagTooltip?.placement ?? "bottom",
"popper-class": _ctx.tagTooltip?.popperClass ?? _ctx.popperClass,
"popper-style": _ctx.tagTooltip?.popperStyle ?? _ctx.popperStyle,
teleported: _ctx.tagTooltip?.teleported ?? _ctx.teleported,
"append-to": _ctx.tagTooltip?.appendTo ?? _ctx.appendTo,
"popper-options": _ctx.tagTooltip?.popperOptions ?? _ctx.popperOptions,
transition: _ctx.tagTooltip?.transition,
"show-after": _ctx.tagTooltip?.showAfter,
"hide-after": _ctx.tagTooltip?.hideAfter,
"auto-close": _ctx.tagTooltip?.autoClose,
offset: _ctx.tagTooltip?.offset
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "collapseItemRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
closable: false,
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
style: (0, vue.normalizeStyle)(_ctx.collapseTagStyle),
"disable-transitions": ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, " + " + (0, vue.toDisplayString)(_ctx.states.cachedOptions.length - _ctx.maxCollapseTags), 3)]),
_: 1
}, 8, [
"size",
"type",
"effect",
"style"
])], 2)]),
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "tagMenuRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selection"))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.collapseTagList, (selected) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: _ctx.getValueKey(_ctx.getValue(selected)),
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
}, [(0, vue.createVNode)(_component_el_tag, {
class: "in-tooltip",
closable: !_ctx.selectDisabled && !_ctx.getDisabled(selected),
size: _ctx.collapseTagSize,
type: _ctx.tagType,
effect: _ctx.tagEffect,
"disable-transitions": "",
onClose: ($event) => _ctx.deleteTag($event, selected)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
index: _ctx.getIndex(selected),
label: _ctx.getLabel(selected),
value: _ctx.getValue(selected)
}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.getLabel(selected)), 1)])], 2)]),
_: 2
}, 1032, [
"closable",
"size",
"type",
"effect",
"onClose"
])], 2);
}), 128))], 2)]),
_: 3
}, 8, [
"disabled",
"fallback-placements",
"effect",
"placement",
"popper-class",
"popper-style",
"teleported",
"append-to",
"popper-options",
"transition",
"show-after",
"hide-after",
"auto-close",
"offset"
])) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("selected-item"),
_ctx.nsSelect.e("input-wrapper"),
_ctx.nsSelect.is("hidden", !_ctx.filterable || _ctx.selectDisabled || !_ctx.states.inputValue && !_ctx.isFocused)
]) }, [(0, vue.createElementVNode)("input", {
id: _ctx.inputId,
ref: "inputRef",
value: _ctx.states.inputValue,
style: (0, vue.normalizeStyle)(_ctx.inputStyle),
autocomplete: _ctx.autocomplete,
tabindex: _ctx.tabindex,
"aria-autocomplete": "none",
"aria-haspopup": "listbox",
autocapitalize: "off",
"aria-expanded": _ctx.expanded,
"aria-label": _ctx.ariaLabel,
class: (0, vue.normalizeClass)([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]),
disabled: _ctx.selectDisabled,
role: "combobox",
"aria-controls": _ctx.contentId,
"aria-activedescendant": _ctx.states.hoveringIndex >= 0 ? `${_ctx.contentId}-${_ctx.states.hoveringIndex}` : "",
readonly: !_ctx.filterable,
spellcheck: "false",
type: "text",
name: _ctx.name,
onInput: _cache[0] || (_cache[0] = (...args) => _ctx.onInput && _ctx.onInput(...args)),
onChange: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"])),
onCompositionstart: _cache[2] || (_cache[2] = (...args) => _ctx.handleCompositionStart && _ctx.handleCompositionStart(...args)),
onCompositionupdate: _cache[3] || (_cache[3] = (...args) => _ctx.handleCompositionUpdate && _ctx.handleCompositionUpdate(...args)),
onCompositionend: _cache[4] || (_cache[4] = (...args) => _ctx.handleCompositionEnd && _ctx.handleCompositionEnd(...args)),
onKeydown: [
_cache[5] || (_cache[5] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.onKeyboardNavigate("backward"), ["stop", "prevent"]), ["up"])),
_cache[6] || (_cache[6] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.onKeyboardNavigate("forward"), ["stop", "prevent"]), ["down"])),
_cache[7] || (_cache[7] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.onKeyboardSelect && _ctx.onKeyboardSelect(...args), ["stop", "prevent"]), ["enter"])),
_cache[8] || (_cache[8] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.handleEsc && _ctx.handleEsc(...args), ["stop", "prevent"]), ["esc"])),
_cache[9] || (_cache[9] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.handleDel && _ctx.handleDel(...args), ["stop"]), ["delete"]))
],
onClick: _cache[10] || (_cache[10] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"]))
}, null, 46, _hoisted_1$21), _ctx.filterable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
ref: "calculatorRef",
"aria-hidden": "true",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("input-calculator")),
textContent: (0, vue.toDisplayString)(_ctx.states.inputValue)
}, null, 10, _hoisted_2$13)) : (0, vue.createCommentVNode)("v-if", true)], 2),
_ctx.shouldShowPlaceholder ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("selected-item"),
_ctx.nsSelect.e("placeholder"),
_ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue)
])
}, [_ctx.hasModelValue ? (0, vue.renderSlot)(_ctx.$slots, "label", {
key: 0,
index: _ctx.allOptionsValueMap.get(_ctx.modelValue)?.index ?? -1,
label: _ctx.currentPlaceholder,
value: _ctx.modelValue
}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$5, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1))], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2),
(0, vue.createElementVNode)("div", {
ref: "suffixRef",
class: (0, vue.normalizeClass)(_ctx.nsSelect.e("suffix"))
}, [
_ctx.iconComponent ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 0,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("caret"),
_ctx.nsInput.e("icon"),
_ctx.iconReverse
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
_: 1
}, 8, ["class"])), [[vue.vShow, !_ctx.showClearBtn]]) : (0, vue.createCommentVNode)("v-if", true),
_ctx.showClearBtn && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 1,
class: (0, vue.normalizeClass)([
_ctx.nsSelect.e("caret"),
_ctx.nsInput.e("icon"),
_ctx.nsSelect.e("clear")
]),
onClick: (0, vue.withModifiers)(_ctx.handleClear, ["prevent", "stop"])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
_: 1
}, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 2,
class: (0, vue.normalizeClass)([
_ctx.nsInput.e("icon"),
_ctx.nsInput.e("validateIcon"),
_ctx.nsInput.is("loading", _ctx.validateState === "validating")
])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.validateIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 2)
], 2)]),
content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_select_menu, {
id: _ctx.contentId,
ref: "menuRef",
data: _ctx.filteredOptions,
width: _ctx.popperSize - _ctx.BORDER_HORIZONTAL_WIDTH,
"hovering-index": _ctx.states.hoveringIndex,
"scrollbar-always-on": _ctx.scrollbarAlwaysOn,
"aria-label": _ctx.ariaLabel
}, (0, vue.createSlots)({
default: (0, vue.withCtx)((scope) => [(0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(scope)))]),
_: 2
}, [
_ctx.$slots.header ? {
name: "header",
fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "header")),
onClick: _cache[12] || (_cache[12] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)]),
key: "0"
} : void 0,
_ctx.$slots.loading && _ctx.loading ? {
name: "loading",
fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "loading")) }, [(0, vue.renderSlot)(_ctx.$slots, "loading")], 2)]),
key: "1"
} : _ctx.loading || _ctx.filteredOptions.length === 0 ? {
name: "empty",
fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "empty")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.emptyText), 1)])], 2)]),
key: "2"
} : void 0,
_ctx.$slots.footer ? {
name: "footer",
fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "footer")),
onClick: _cache[13] || (_cache[13] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)]),
key: "3"
} : void 0
]), 1032, [
"id",
"data",
"width",
"hovering-index",
"scrollbar-always-on",
"aria-label"
])]),
_: 3
}, 8, [
"visible",
"teleported",
"popper-class",
"popper-style",
"popper-options",
"fallback-placements",
"effect",
"placement",
"transition",
"persistent",
"append-to",
"show-arrow",
"offset",
"onBeforeShow"
])], 34)), [[
_directive_click_outside,
_ctx.handleClickOutside,
_ctx.popperRef
]]);
}
var select_default = /* @__PURE__ */ _plugin_vue_export_helper_default(select_vue_vue_type_script_lang_default, [["render", _sfc_render$5]]);
//#endregion
//#region ../../packages/components/select-v2/index.ts
const ElSelectV2 = withInstall(select_default);
//#endregion
//#region ../../packages/components/skeleton/src/skeleton.ts
/**
* @deprecated Removed after 3.0.0, Use `SkeletonProps` instead.
*/
const skeletonProps = buildProps({
animated: Boolean,
count: {
type: Number,
default: 1
},
rows: {
type: Number,
default: 3
},
loading: {
type: Boolean,
default: true
},
throttle: { type: definePropType([Number, Object]) }
});
//#endregion
//#region ../../packages/components/skeleton/src/skeleton-item.ts
/**
* @deprecated Removed after 3.0.0, Use `SkeletonItemProps` instead.
*/
const skeletonItemProps = buildProps({ variant: {
type: String,
values: [
"circle",
"rect",
"h1",
"h3",
"text",
"caption",
"p",
"image",
"button"
],
default: "text"
} });
//#endregion
//#region ../../packages/components/skeleton/src/skeleton-item.vue?vue&type=script&setup=true&lang.ts
var skeleton_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSkeletonItem",
__name: "skeleton-item",
props: skeletonItemProps,
setup(__props) {
const ns = useNamespace("skeleton");
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("item"), (0, vue.unref)(ns).e(__props.variant)]) }, [__props.variant === "image" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(picture_filled_default), { key: 0 })) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/skeleton/src/skeleton-item.vue
var skeleton_item_default = skeleton_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/skeleton/src/skeleton.vue?vue&type=script&setup=true&lang.ts
var skeleton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSkeleton",
__name: "skeleton",
props: skeletonProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("skeleton");
const uiLoading = useThrottleRender((0, vue.toRef)(props, "loading"), props.throttle);
__expose({ uiLoading });
return (_ctx, _cache) => {
return (0, vue.unref)(uiLoading) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
key: 0,
class: [(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is("animated", __props.animated)]
}, _ctx.$attrs), [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.count, (i) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: i }, [(0, vue.unref)(uiLoading) ? (0, vue.renderSlot)(_ctx.$slots, "template", { key: i }, () => [(0, vue.createVNode)(skeleton_item_default, {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("first")),
variant: "p"
}, null, 8, ["class"]), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.rows, (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(skeleton_item_default, {
key: item,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("paragraph"), (0, vue.unref)(ns).is("last", item === __props.rows && __props.rows > 1)]),
variant: "p"
}, null, 8, ["class"]);
}), 128))]) : (0, vue.createCommentVNode)("v-if", true)], 64);
}), 128))], 16)) : (0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.normalizeProps)((0, vue.mergeProps)({ key: 1 }, _ctx.$attrs)));
};
}
});
//#endregion
//#region ../../packages/components/skeleton/src/skeleton.vue
var skeleton_default = skeleton_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/skeleton/index.ts
const ElSkeleton = withInstall(skeleton_default, { SkeletonItem: skeleton_item_default });
const ElSkeletonItem = withNoopInstall(skeleton_item_default);
//#endregion
//#region ../../packages/components/slider/src/constants.ts
const sliderContextKey = Symbol("sliderContextKey");
//#endregion
//#region ../../packages/components/slider/src/slider.ts
const sliderProps = buildProps({
modelValue: {
type: definePropType([Number, Array]),
default: 0
},
id: {
type: String,
default: void 0
},
min: {
type: Number,
default: 0
},
max: {
type: Number,
default: 100
},
step: {
type: definePropType([Number, String]),
default: 1
},
showInput: Boolean,
showInputControls: {
type: Boolean,
default: true
},
size: useSizeProp,
inputSize: useSizeProp,
showStops: Boolean,
showTooltip: {
type: Boolean,
default: true
},
formatTooltip: {
type: definePropType(Function),
default: void 0
},
disabled: {
type: Boolean,
default: void 0
},
range: Boolean,
vertical: Boolean,
height: String,
rangeStartLabel: {
type: String,
default: void 0
},
rangeEndLabel: {
type: String,
default: void 0
},
formatValueText: {
type: definePropType(Function),
default: void 0
},
tooltipClass: {
type: String,
default: void 0
},
placement: {
type: String,
values: Ee,
default: "top"
},
marks: { type: definePropType(Object) },
validateEvent: {
type: Boolean,
default: true
},
persistent: {
type: Boolean,
default: true
},
...useAriaProps(["ariaLabel"])
});
const isValidValue$1 = (value) => isNumber(value) || isArray$1(value) && value.every(isNumber);
const sliderEmits = {
[UPDATE_MODEL_EVENT]: isValidValue$1,
[INPUT_EVENT]: isValidValue$1,
[CHANGE_EVENT]: isValidValue$1
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-lifecycle.ts
const useLifecycle = (props, initData, resetSize) => {
const sliderWrapper = (0, vue.ref)();
(0, vue.onMounted)(async () => {
if (props.range) {
if (isArray$1(props.modelValue)) {
initData.firstValue = Math.max(props.min, props.modelValue[0]);
initData.secondValue = Math.min(props.max, props.modelValue[1]);
} else {
initData.firstValue = props.min;
initData.secondValue = props.max;
}
initData.oldValue = [initData.firstValue, initData.secondValue];
} else {
if (!isNumber(props.modelValue) || Number.isNaN(props.modelValue)) initData.firstValue = props.min;
else initData.firstValue = Math.min(props.max, Math.max(props.min, props.modelValue));
initData.oldValue = initData.firstValue;
}
useEventListener(window, "resize", resetSize);
await (0, vue.nextTick)();
resetSize();
});
return { sliderWrapper };
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-marks.ts
const useMarks = (props) => {
const markList = (0, vue.computed)(() => {
if (!props.marks) return [];
return Object.keys(props.marks).map(Number.parseFloat).sort((a, b) => a - b).filter((point) => point <= props.max && point >= props.min).map((point) => ({
point,
position: (point - props.min) * 100 / (props.max - props.min),
mark: props.marks[point]
}));
});
(0, vue.watchEffect)(() => {
if (props.step === "mark" && !props.marks) /* @__PURE__ */ debugWarn("ElSlider", "marks prop must be provided when step is mark");
if (props.marks) {
const keys = Object.keys(props.marks);
const validPoints = markList.value.map((m) => m.point);
const invalidKeys = keys.filter((key) => {
const parsed = Number.parseFloat(key);
return Number.isNaN(parsed) || !validPoints.includes(parsed);
});
if (invalidKeys.length > 0) /* @__PURE__ */ debugWarn("ElSlider", `Some marks keys are invalid (not a number or out of [min, max]): [${invalidKeys.map((k) => `'${k}'`).join(", ")}] and will be ignored.`);
}
});
return markList;
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-slide.ts
const useSlide = (props, initData, emit) => {
const { formItem: elFormItem } = useFormItem();
const slider = (0, vue.shallowRef)();
const firstButton = (0, vue.ref)();
const secondButton = (0, vue.ref)();
const buttonRefs = {
firstButton,
secondButton
};
const sliderDisabled = useFormDisabled();
const minValue = (0, vue.computed)(() => {
return Math.min(initData.firstValue, initData.secondValue);
});
const maxValue = (0, vue.computed)(() => {
return Math.max(initData.firstValue, initData.secondValue);
});
const barSize = (0, vue.computed)(() => {
return props.range ? `${100 * (maxValue.value - minValue.value) / (props.max - props.min)}%` : `${100 * (initData.firstValue - props.min) / (props.max - props.min)}%`;
});
const barStart = (0, vue.computed)(() => {
return props.range ? `${100 * (minValue.value - props.min) / (props.max - props.min)}%` : "0%";
});
const runwayStyle = (0, vue.computed)(() => {
return props.vertical ? { height: props.height } : {};
});
const barStyle = (0, vue.computed)(() => {
return props.vertical ? {
height: barSize.value,
bottom: barStart.value
} : {
width: barSize.value,
left: barStart.value
};
});
const resetSize = () => {
if (slider.value) initData.sliderSize = slider.value.getBoundingClientRect()[props.vertical ? "height" : "width"];
};
const getButtonRefByPercent = (percent) => {
const targetValue = props.min + percent * (props.max - props.min) / 100;
if (!props.range) return firstButton;
let buttonRefName;
if (Math.abs(minValue.value - targetValue) < Math.abs(maxValue.value - targetValue)) buttonRefName = initData.firstValue < initData.secondValue ? "firstButton" : "secondButton";
else buttonRefName = initData.firstValue > initData.secondValue ? "firstButton" : "secondButton";
return buttonRefs[buttonRefName];
};
const setPosition = (percent) => {
const buttonRef = getButtonRefByPercent(percent);
buttonRef.value.setPosition(percent);
return buttonRef;
};
const setFirstValue = (firstValue) => {
initData.firstValue = firstValue ?? props.min;
_emit(props.range ? [minValue.value, maxValue.value] : firstValue ?? props.min);
};
const setSecondValue = (secondValue) => {
initData.secondValue = secondValue;
if (props.range) _emit([minValue.value, maxValue.value]);
};
const _emit = (val) => {
emit(UPDATE_MODEL_EVENT, val);
emit(INPUT_EVENT, val);
};
const emitChange = async () => {
await (0, vue.nextTick)();
emit(CHANGE_EVENT, props.range ? [minValue.value, maxValue.value] : props.modelValue);
};
const handleSliderPointerEvent = (event) => {
if (sliderDisabled.value || initData.dragging) return;
resetSize();
let newPercent = 0;
if (props.vertical) {
const clientY = event.touches?.item(0)?.clientY ?? event.clientY;
newPercent = (slider.value.getBoundingClientRect().bottom - clientY) / initData.sliderSize * 100;
} else newPercent = ((event.touches?.item(0)?.clientX ?? event.clientX) - slider.value.getBoundingClientRect().left) / initData.sliderSize * 100;
if (newPercent < 0 || newPercent > 100) return;
return setPosition(newPercent);
};
const onSliderWrapperPrevent = (event) => {
if (buttonRefs["firstButton"].value?.dragging || buttonRefs["secondButton"].value?.dragging) event.preventDefault();
};
const onSliderDown = async (event) => {
const buttonRef = handleSliderPointerEvent(event);
if (buttonRef) {
await (0, vue.nextTick)();
buttonRef.value.onButtonDown(event);
}
};
const onSliderClick = (event) => {
if (handleSliderPointerEvent(event)) emitChange();
};
const onSliderMarkerDown = (position) => {
if (sliderDisabled.value || initData.dragging) return;
if (setPosition(position)) emitChange();
};
return {
elFormItem,
slider,
firstButton,
secondButton,
sliderDisabled,
minValue,
maxValue,
runwayStyle,
barStyle,
resetSize,
setPosition,
emitChange,
onSliderWrapperPrevent,
onSliderClick,
onSliderDown,
onSliderMarkerDown,
setFirstValue,
setSecondValue
};
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-slider-button.ts
const useTooltip = (props, formatTooltip, showTooltip) => {
const tooltip = (0, vue.ref)();
const tooltipVisible = (0, vue.ref)(false);
const enableFormat = (0, vue.computed)(() => {
return formatTooltip.value instanceof Function;
});
return {
tooltip,
tooltipVisible,
formatValue: (0, vue.computed)(() => {
return enableFormat.value && formatTooltip.value(props.modelValue) || props.modelValue;
}),
displayTooltip: debounce(() => {
showTooltip.value && (tooltipVisible.value = true);
}, 50),
hideTooltip: debounce(() => {
showTooltip.value && (tooltipVisible.value = false);
}, 50)
};
};
const useSliderButton = (props, initData, emit) => {
const { disabled, min, max, step, showTooltip, persistent, precision, sliderSize, formatTooltip, emitChange, resetSize, updateDragging, markList } = (0, vue.inject)(sliderContextKey);
const { tooltip, tooltipVisible, formatValue, displayTooltip, hideTooltip } = useTooltip(props, formatTooltip, showTooltip);
const button = (0, vue.ref)();
const currentPosition = (0, vue.computed)(() => {
return `${(props.modelValue - min.value) / (max.value - min.value) * 100}%`;
});
const wrapperStyle = (0, vue.computed)(() => {
return props.vertical ? { bottom: currentPosition.value } : { left: currentPosition.value };
});
const shouldMoveToMark = (0, vue.computed)(() => {
return step.value === "mark" && markList.value.length > 0;
});
const handleMouseEnter = () => {
initData.hovering = true;
displayTooltip();
};
const handleMouseLeave = () => {
initData.hovering = false;
if (!initData.dragging) hideTooltip();
};
const onButtonDown = (event) => {
if (disabled.value) return;
event.preventDefault();
onDragStart(event);
window.addEventListener("mousemove", onDragging);
window.addEventListener("touchmove", onDragging);
window.addEventListener("mouseup", onDragEnd);
window.addEventListener("touchend", onDragEnd);
window.addEventListener("contextmenu", onDragEnd);
button.value.focus();
};
const incrementPosition = (amount) => {
if (disabled.value) return;
initData.newPosition = Number.parseFloat(currentPosition.value) + amount / (max.value - min.value) * 100;
setPosition(initData.newPosition);
emitChange();
};
const moveToMark = (amount) => {
if (disabled.value || !markList.value.length) return;
const current = props.modelValue;
const epsilon = Number.EPSILON;
const stride = Math.abs(amount);
let target;
if (amount > 0) {
const startIndex = markList.value.findIndex((m) => m.point > current + epsilon);
if (startIndex !== -1) {
const targetIndex = Math.min(startIndex + stride - 1, markList.value.length - 1);
target = markList.value[targetIndex].point;
}
} else {
let startIndex = -1;
for (let i = markList.value.length - 1; i >= 0; i--) if (markList.value[i].point < current - epsilon) {
startIndex = i;
break;
}
if (startIndex !== -1) {
const targetIndex = Math.max(startIndex - (stride - 1), 0);
target = markList.value[targetIndex].point;
}
}
if (target !== void 0 && target !== current) {
setPosition((target - min.value) / (max.value - min.value) * 100);
emitChange();
}
};
const onLeftKeyDown = () => {
if (shouldMoveToMark.value) moveToMark(-1);
else if (isNumber(step.value)) incrementPosition(-step.value);
};
const onRightKeyDown = () => {
if (shouldMoveToMark.value) moveToMark(1);
else if (isNumber(step.value)) incrementPosition(step.value);
};
const onPageDownKeyDown = () => {
if (shouldMoveToMark.value) moveToMark(-4);
else if (isNumber(step.value)) incrementPosition(-step.value * 4);
};
const onPageUpKeyDown = () => {
if (shouldMoveToMark.value) moveToMark(4);
else if (isNumber(step.value)) incrementPosition(step.value * 4);
};
const onHomeKeyDown = () => {
if (disabled.value) return;
setPosition(0);
emitChange();
};
const onEndKeyDown = () => {
if (disabled.value) return;
setPosition(100);
emitChange();
};
const onKeyDown = (event) => {
const code = getEventCode(event);
let isPreventDefault = true;
switch (code) {
case EVENT_CODE.left:
case EVENT_CODE.down:
onLeftKeyDown();
break;
case EVENT_CODE.right:
case EVENT_CODE.up:
onRightKeyDown();
break;
case EVENT_CODE.home:
onHomeKeyDown();
break;
case EVENT_CODE.end:
onEndKeyDown();
break;
case EVENT_CODE.pageDown:
onPageDownKeyDown();
break;
case EVENT_CODE.pageUp:
onPageUpKeyDown();
break;
default:
isPreventDefault = false;
break;
}
isPreventDefault && event.preventDefault();
};
const getClientXY = (event) => {
let clientX;
let clientY;
if (event.type.startsWith("touch")) {
clientY = event.touches[0].clientY;
clientX = event.touches[0].clientX;
} else {
clientY = event.clientY;
clientX = event.clientX;
}
return {
clientX,
clientY
};
};
const onDragStart = (event) => {
initData.dragging = true;
initData.isClick = true;
const { clientX, clientY } = getClientXY(event);
if (props.vertical) initData.startY = clientY;
else initData.startX = clientX;
initData.startPosition = Number.parseFloat(currentPosition.value);
initData.newPosition = initData.startPosition;
};
const onDragging = (event) => {
if (initData.dragging) {
initData.isClick = false;
displayTooltip();
resetSize();
let diff;
const { clientX, clientY } = getClientXY(event);
if (props.vertical) {
initData.currentY = clientY;
diff = (initData.startY - initData.currentY) / sliderSize.value * 100;
} else {
initData.currentX = clientX;
diff = (initData.currentX - initData.startX) / sliderSize.value * 100;
}
initData.newPosition = initData.startPosition + diff;
setPosition(initData.newPosition);
}
};
const onDragEnd = () => {
if (initData.dragging) {
setTimeout(() => {
initData.dragging = false;
if (!initData.hovering) hideTooltip();
if (!initData.isClick) setPosition(initData.newPosition);
emitChange();
}, 0);
window.removeEventListener("mousemove", onDragging);
window.removeEventListener("touchmove", onDragging);
window.removeEventListener("mouseup", onDragEnd);
window.removeEventListener("touchend", onDragEnd);
window.removeEventListener("contextmenu", onDragEnd);
}
};
const setPosition = async (newPosition) => {
if (newPosition === null || Number.isNaN(+newPosition)) return;
newPosition = clamp$1(newPosition, 0, 100);
let value;
if (step.value === "mark") if (markList.value.length === 0) value = newPosition <= 50 ? min.value : max.value;
else value = markList.value.reduce((prev, curr) => {
return Math.abs(curr.position - newPosition) < Math.abs(prev.position - newPosition) ? curr : prev;
}).point;
else {
const fullSteps = Math.floor((max.value - min.value) / step.value);
const fullRangePercentage = fullSteps * step.value / (max.value - min.value) * 100;
const threshold = fullRangePercentage + (100 - fullRangePercentage) / 2;
if (newPosition < fullRangePercentage) {
const valueBetween = fullRangePercentage / fullSteps;
const steps = Math.round(newPosition / valueBetween);
value = min.value + steps * step.value;
} else if (newPosition < threshold) value = min.value + fullSteps * step.value;
else value = max.value;
value = Number.parseFloat(value.toFixed(precision.value));
}
if (value !== props.modelValue) emit(UPDATE_MODEL_EVENT, value);
if (!initData.dragging && props.modelValue !== initData.oldValue) initData.oldValue = props.modelValue;
await (0, vue.nextTick)();
initData.dragging && displayTooltip();
tooltip.value.updatePopper();
};
(0, vue.watch)(() => initData.dragging, (val) => {
updateDragging(val);
});
useEventListener(button, "touchstart", onButtonDown, { passive: false });
return {
disabled,
button,
tooltip,
tooltipVisible,
showTooltip,
persistent,
wrapperStyle,
formatValue,
handleMouseEnter,
handleMouseLeave,
onButtonDown,
onKeyDown,
setPosition
};
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-stops.ts
const useStops = (props, initData, minValue, maxValue) => {
const stops = (0, vue.computed)(() => {
if (!props.showStops || props.min > props.max) return [];
if (props.step === "mark" || props.step === 0) {
if (props.step === 0) /* @__PURE__ */ debugWarn("ElSlider", "step should not be 0.");
return [];
}
const stopCount = Math.ceil((props.max - props.min) / props.step);
const stepWidth = 100 * props.step / (props.max - props.min);
const result = Array.from({ length: stopCount - 1 }).map((_, index) => (index + 1) * stepWidth);
if (props.range) return result.filter((step) => {
return step < 100 * (minValue.value - props.min) / (props.max - props.min) || step > 100 * (maxValue.value - props.min) / (props.max - props.min);
});
else return result.filter((step) => step > 100 * (initData.firstValue - props.min) / (props.max - props.min));
});
const getStopStyle = (position) => {
return props.vertical ? { bottom: `${position}%` } : { left: `${position}%` };
};
return {
stops,
getStopStyle
};
};
//#endregion
//#region ../../packages/components/slider/src/composables/use-watch.ts
const useWatch = (props, initData, minValue, maxValue, emit, elFormItem) => {
const _emit = (val) => {
emit(UPDATE_MODEL_EVENT, val);
emit(INPUT_EVENT, val);
};
const valueChanged = () => {
if (props.range) return ![minValue.value, maxValue.value].every((item, index) => item === initData.oldValue[index]);
else return props.modelValue !== initData.oldValue;
};
const setValues = () => {
if (props.min > props.max) throwError("Slider", "min should not be greater than max.");
const val = props.modelValue;
if (props.range && isArray$1(val)) if (val[1] < props.min) _emit([props.min, props.min]);
else if (val[0] > props.max) _emit([props.max, props.max]);
else if (val[0] < props.min) _emit([props.min, val[1]]);
else if (val[1] > props.max) _emit([val[0], props.max]);
else {
initData.firstValue = val[0];
initData.secondValue = val[1];
if (valueChanged()) {
if (props.validateEvent) elFormItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
initData.oldValue = val.slice();
}
}
else if (!props.range && isNumber(val) && !Number.isNaN(val)) if (val < props.min) _emit(props.min);
else if (val > props.max) _emit(props.max);
else {
initData.firstValue = val;
if (valueChanged()) {
if (props.validateEvent) elFormItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
initData.oldValue = val;
}
}
};
setValues();
(0, vue.watch)(() => initData.dragging, (val) => {
if (!val) setValues();
});
(0, vue.watch)(() => props.modelValue, (val, oldVal) => {
if (initData.dragging || isArray$1(val) && isArray$1(oldVal) && val.every((item, index) => item === oldVal[index]) && initData.firstValue === val[0] && initData.secondValue === val[1]) return;
setValues();
}, { deep: true });
(0, vue.watch)(() => [props.min, props.max], () => {
setValues();
});
};
//#endregion
//#region ../../packages/components/slider/src/button.ts
const sliderButtonProps = buildProps({
modelValue: {
type: Number,
default: 0
},
vertical: Boolean,
tooltipClass: String,
placement: {
type: String,
values: Ee,
default: "top"
}
});
const sliderButtonEmits = { [UPDATE_MODEL_EVENT]: (value) => isNumber(value) };
//#endregion
//#region ../../packages/components/slider/src/button.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$20 = ["tabindex"];
var button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSliderButton",
__name: "button",
props: sliderButtonProps,
emits: sliderButtonEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("slider");
const initData = (0, vue.reactive)({
hovering: false,
dragging: false,
isClick: false,
startX: 0,
currentX: 0,
startY: 0,
currentY: 0,
startPosition: 0,
newPosition: 0,
oldValue: props.modelValue
});
const tooltipPersistent = (0, vue.computed)(() => !showTooltip.value ? false : persistent.value);
const { disabled, button, tooltip, showTooltip, persistent, tooltipVisible, wrapperStyle, formatValue, handleMouseEnter, handleMouseLeave, onButtonDown, onKeyDown, setPosition } = useSliderButton(props, initData, emit);
const { hovering, dragging } = (0, vue.toRefs)(initData);
__expose({
onButtonDown,
onKeyDown,
setPosition,
hovering,
dragging
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "button",
ref: button,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button-wrapper"), {
hover: (0, vue.unref)(hovering),
dragging: (0, vue.unref)(dragging)
}]),
style: (0, vue.normalizeStyle)((0, vue.unref)(wrapperStyle)),
tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
onMouseenter: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
onMouseleave: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args)),
onMousedown: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(onButtonDown) && (0, vue.unref)(onButtonDown)(...args)),
onFocus: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
onBlur: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args)),
onKeydown: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(onKeyDown) && (0, vue.unref)(onKeyDown)(...args))
}, [(0, vue.createVNode)((0, vue.unref)(ElTooltip), {
ref_key: "tooltip",
ref: tooltip,
visible: (0, vue.unref)(tooltipVisible),
placement: _ctx.placement,
"fallback-placements": [
"top",
"bottom",
"right",
"left"
],
"stop-popper-mouse-event": false,
"popper-class": _ctx.tooltipClass,
disabled: !(0, vue.unref)(showTooltip),
persistent: tooltipPersistent.value
}, {
content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(formatValue)), 1)]),
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), {
hover: (0, vue.unref)(hovering),
dragging: (0, vue.unref)(dragging)
}]) }, null, 2)]),
_: 1
}, 8, [
"visible",
"placement",
"popper-class",
"disabled",
"persistent"
])], 46, _hoisted_1$20);
};
}
});
//#endregion
//#region ../../packages/components/slider/src/button.vue
var button_default = button_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/slider/src/marker.ts
const sliderMarkerProps = buildProps({ mark: {
type: definePropType([String, Object]),
default: void 0
} });
var marker_default = (0, vue.defineComponent)({
name: "ElSliderMarker",
props: sliderMarkerProps,
setup(props) {
const ns = useNamespace("slider");
const label = (0, vue.computed)(() => {
return isString(props.mark) ? props.mark : props.mark.label;
});
const style = (0, vue.computed)(() => isString(props.mark) ? void 0 : props.mark.style);
return () => (0, vue.h)("div", {
class: ns.e("marks-text"),
style: style.value
}, label.value);
}
});
//#endregion
//#region ../../packages/components/slider/src/slider.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$19 = [
"id",
"role",
"aria-label",
"aria-labelledby"
];
const _hoisted_2$12 = { key: 1 };
var slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSlider",
__name: "slider",
props: sliderProps,
emits: sliderEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("slider");
const { t } = useLocale();
const initData = (0, vue.reactive)({
firstValue: 0,
secondValue: 0,
oldValue: 0,
dragging: false,
sliderSize: 1
});
const { elFormItem, slider, firstButton, secondButton, sliderDisabled, minValue, maxValue, runwayStyle, barStyle, resetSize, emitChange, onSliderWrapperPrevent, onSliderClick, onSliderDown, onSliderMarkerDown, setFirstValue, setSecondValue } = useSlide(props, initData, emit);
const { stops, getStopStyle } = useStops(props, initData, minValue, maxValue);
const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: elFormItem });
const sliderWrapperSize = useFormSize();
const sliderInputSize = (0, vue.computed)(() => props.inputSize || sliderWrapperSize.value);
const renderInput = (0, vue.computed)(() => {
return props.showInput && !props.range && props.step !== "mark";
});
const groupLabel = (0, vue.computed)(() => {
return props.ariaLabel || t("el.slider.defaultLabel", {
min: props.min,
max: props.max
});
});
const firstButtonLabel = (0, vue.computed)(() => {
if (props.range) return props.rangeStartLabel || t("el.slider.defaultRangeStartLabel");
else return groupLabel.value;
});
const firstValueText = (0, vue.computed)(() => {
return props.formatValueText ? props.formatValueText(firstValue.value) : `${firstValue.value}`;
});
const secondButtonLabel = (0, vue.computed)(() => {
return props.rangeEndLabel || t("el.slider.defaultRangeEndLabel");
});
const secondValueText = (0, vue.computed)(() => {
return props.formatValueText ? props.formatValueText(secondValue.value) : `${secondValue.value}`;
});
const sliderKls = (0, vue.computed)(() => [
ns.b(),
ns.m(sliderWrapperSize.value),
ns.is("vertical", props.vertical),
{ [ns.m("with-input")]: renderInput.value }
]);
const markList = useMarks(props);
useWatch(props, initData, minValue, maxValue, emit, elFormItem);
const sliderInputStep = (0, vue.computed)(() => {
return isNumber(props.step) ? props.step : 1;
});
const precision = (0, vue.computed)(() => {
const stepValue = isNumber(props.step) ? props.step : 1;
const precisions = [
props.min,
props.max,
stepValue
].map((item) => {
const decimal = `${item}`.split(".")[1];
return decimal ? decimal.length : 0;
});
return Math.max.apply(null, precisions);
});
const { sliderWrapper } = useLifecycle(props, initData, resetSize);
const { firstValue, secondValue, sliderSize } = (0, vue.toRefs)(initData);
const updateDragging = (val) => {
initData.dragging = val;
};
useEventListener(sliderWrapper, "touchstart", onSliderWrapperPrevent, { passive: false });
useEventListener(sliderWrapper, "touchmove", onSliderWrapperPrevent, { passive: false });
(0, vue.provide)(sliderContextKey, {
...(0, vue.toRefs)(props),
sliderSize,
disabled: sliderDisabled,
precision,
markList,
emitChange,
resetSize,
updateDragging
});
__expose({ onSliderClick });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
id: _ctx.range ? (0, vue.unref)(inputId) : void 0,
ref_key: "sliderWrapper",
ref: sliderWrapper,
class: (0, vue.normalizeClass)(sliderKls.value),
role: _ctx.range ? "group" : void 0,
"aria-label": _ctx.range && !(0, vue.unref)(isLabeledByFormItem) ? groupLabel.value : void 0,
"aria-labelledby": _ctx.range && (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(elFormItem)?.labelId : void 0
}, [(0, vue.createElementVNode)("div", {
ref_key: "slider",
ref: slider,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("runway"),
{ "show-input": renderInput.value },
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(sliderDisabled))
]),
style: (0, vue.normalizeStyle)((0, vue.unref)(runwayStyle)),
onMousedown: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(onSliderDown) && (0, vue.unref)(onSliderDown)(...args)),
onTouchstartPassive: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(onSliderDown) && (0, vue.unref)(onSliderDown)(...args))
}, [
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("bar")),
style: (0, vue.normalizeStyle)((0, vue.unref)(barStyle))
}, null, 6),
(0, vue.createVNode)(button_default, {
id: !_ctx.range ? (0, vue.unref)(inputId) : void 0,
ref_key: "firstButton",
ref: firstButton,
"model-value": (0, vue.unref)(firstValue),
vertical: _ctx.vertical,
"tooltip-class": _ctx.tooltipClass,
placement: _ctx.placement,
role: "slider",
"aria-label": _ctx.range || !(0, vue.unref)(isLabeledByFormItem) ? firstButtonLabel.value : void 0,
"aria-labelledby": !_ctx.range && (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(elFormItem)?.labelId : void 0,
"aria-valuemin": _ctx.min,
"aria-valuemax": _ctx.range ? (0, vue.unref)(secondValue) : _ctx.max,
"aria-valuenow": (0, vue.unref)(firstValue),
"aria-valuetext": firstValueText.value,
"aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
"aria-disabled": (0, vue.unref)(sliderDisabled),
"onUpdate:modelValue": (0, vue.unref)(setFirstValue)
}, null, 8, [
"id",
"model-value",
"vertical",
"tooltip-class",
"placement",
"aria-label",
"aria-labelledby",
"aria-valuemin",
"aria-valuemax",
"aria-valuenow",
"aria-valuetext",
"aria-orientation",
"aria-disabled",
"onUpdate:modelValue"
]),
_ctx.range ? ((0, vue.openBlock)(), (0, vue.createBlock)(button_default, {
key: 0,
ref_key: "secondButton",
ref: secondButton,
"model-value": (0, vue.unref)(secondValue),
vertical: _ctx.vertical,
"tooltip-class": _ctx.tooltipClass,
placement: _ctx.placement,
role: "slider",
"aria-label": secondButtonLabel.value,
"aria-valuemin": (0, vue.unref)(firstValue),
"aria-valuemax": _ctx.max,
"aria-valuenow": (0, vue.unref)(secondValue),
"aria-valuetext": secondValueText.value,
"aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
"aria-disabled": (0, vue.unref)(sliderDisabled),
"onUpdate:modelValue": (0, vue.unref)(setSecondValue)
}, null, 8, [
"model-value",
"vertical",
"tooltip-class",
"placement",
"aria-label",
"aria-valuemin",
"aria-valuemax",
"aria-valuenow",
"aria-valuetext",
"aria-orientation",
"aria-disabled",
"onUpdate:modelValue"
])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.showStops ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$12, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(stops), (item, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("stop")),
style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item))
}, null, 6);
}), 128))])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.unref)(markList).length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createElementVNode)("div", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(markList), (item, key) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key,
style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item.position)),
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("stop"), (0, vue.unref)(ns).e("marks-stop")])
}, null, 6);
}), 128))]), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("marks")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(markList), (item, key) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(marker_default), {
key,
mark: item.mark,
style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item.position)),
onMousedown: (0, vue.withModifiers)(($event) => (0, vue.unref)(onSliderMarkerDown)(item.position), ["stop"])
}, null, 8, [
"mark",
"style",
"onMousedown"
]);
}), 128))], 2)], 64)) : (0, vue.createCommentVNode)("v-if", true)
], 38), renderInput.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInputNumber), {
key: 0,
ref: "input",
"model-value": (0, vue.unref)(firstValue),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
step: sliderInputStep.value,
disabled: (0, vue.unref)(sliderDisabled),
controls: _ctx.showInputControls,
min: _ctx.min,
max: _ctx.max,
precision: precision.value,
size: sliderInputSize.value,
"onUpdate:modelValue": (0, vue.unref)(setFirstValue),
onChange: (0, vue.unref)(emitChange)
}, null, 8, [
"model-value",
"class",
"step",
"disabled",
"controls",
"min",
"max",
"precision",
"size",
"onUpdate:modelValue",
"onChange"
])) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_1$19);
};
}
});
//#endregion
//#region ../../packages/components/slider/src/slider.vue
var slider_default = slider_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/slider/index.ts
const ElSlider = withInstall(slider_default);
//#endregion
//#region ../../packages/components/space/src/item.ts
const spaceItemProps = buildProps({ prefixCls: { type: String } });
const SpaceItem = (0, vue.defineComponent)({
name: "ElSpaceItem",
props: spaceItemProps,
setup(props, { slots }) {
const ns = useNamespace("space");
const classes = (0, vue.computed)(() => `${props.prefixCls || ns.b()}__item`);
return () => (0, vue.h)("div", { class: classes.value }, (0, vue.renderSlot)(slots, "default"));
}
});
//#endregion
//#region ../../packages/components/space/src/use-space.ts
const SIZE_MAP = {
small: 8,
default: 12,
large: 16
};
function useSpace(props) {
const ns = useNamespace("space");
const classes = (0, vue.computed)(() => [
ns.b(),
ns.m(props.direction),
props.class
]);
const horizontalSize = (0, vue.ref)(0);
const verticalSize = (0, vue.ref)(0);
const containerStyle = (0, vue.computed)(() => {
return [
props.wrap || props.fill ? { flexWrap: "wrap" } : {},
{ alignItems: props.alignment },
{
rowGap: `${verticalSize.value}px`,
columnGap: `${horizontalSize.value}px`
},
props.style
];
});
const itemStyle = (0, vue.computed)(() => {
return props.fill ? {
flexGrow: 1,
minWidth: `${props.fillRatio}%`
} : {};
});
(0, vue.watchEffect)(() => {
const { size = "small", wrap, direction: dir, fill } = props;
if (isArray$1(size)) {
const [h = 0, v = 0] = size;
horizontalSize.value = h;
verticalSize.value = v;
} else {
let val;
if (isNumber(size)) val = size;
else val = SIZE_MAP[size || "small"] || SIZE_MAP.small;
if ((wrap || fill) && dir === "horizontal") horizontalSize.value = verticalSize.value = val;
else if (dir === "horizontal") {
horizontalSize.value = val;
verticalSize.value = 0;
} else {
verticalSize.value = val;
horizontalSize.value = 0;
}
}
});
return {
classes,
containerStyle,
itemStyle
};
}
//#endregion
//#region ../../packages/components/space/src/space.ts
const spaceProps = buildProps({
direction: {
type: String,
values: ["horizontal", "vertical"],
default: "horizontal"
},
class: {
type: definePropType([
String,
Object,
Array
]),
default: ""
},
style: {
type: definePropType([
String,
Array,
Object
]),
default: ""
},
alignment: {
type: definePropType(String),
default: "center"
},
prefixCls: { type: String },
spacer: {
type: definePropType([
Object,
String,
Number,
Array
]),
default: null,
validator: (val) => (0, vue.isVNode)(val) || isNumber(val) || isString(val)
},
wrap: Boolean,
fill: Boolean,
fillRatio: {
type: Number,
default: 100
},
size: {
type: [
String,
Array,
Number
],
values: componentSizes,
validator: (val) => {
return isNumber(val) || isArray$1(val) && val.length === 2 && val.every(isNumber);
}
}
});
const Space = (0, vue.defineComponent)({
name: "ElSpace",
props: spaceProps,
setup(props, { slots }) {
const { classes, containerStyle, itemStyle } = useSpace(props);
function extractChildren(children, parentKey = "", extractedChildren = []) {
const { prefixCls } = props;
children.forEach((child, loopKey) => {
if (isFragment(child)) {
if (isArray$1(child.children)) child.children.forEach((nested, key) => {
if (isFragment(nested) && isArray$1(nested.children)) extractChildren(nested.children, `${parentKey + key}-`, extractedChildren);
else if ((0, vue.isVNode)(nested) && nested?.type === vue.Comment) extractedChildren.push(nested);
else extractedChildren.push((0, vue.createVNode)(SpaceItem, {
style: itemStyle.value,
prefixCls,
key: `nested-${parentKey + key}`
}, { default: () => [nested] }, PatchFlags.PROPS | PatchFlags.STYLE, ["style", "prefixCls"]));
});
} else if (isValidElementNode(child)) extractedChildren.push((0, vue.createVNode)(SpaceItem, {
style: itemStyle.value,
prefixCls,
key: `LoopKey${parentKey + loopKey}`
}, { default: () => [child] }, PatchFlags.PROPS | PatchFlags.STYLE, ["style", "prefixCls"]));
});
return extractedChildren;
}
return () => {
const { spacer, direction } = props;
const children = (0, vue.renderSlot)(slots, "default", { key: 0 }, () => []);
if ((children.children ?? []).length === 0) return null;
if (isArray$1(children.children)) {
let extractedChildren = extractChildren(children.children);
if (spacer) {
const len = extractedChildren.length - 1;
extractedChildren = extractedChildren.reduce((acc, child, idx) => {
const children = [...acc, child];
if (idx !== len) children.push((0, vue.createVNode)("span", {
style: [itemStyle.value, direction === "vertical" ? "width: 100%" : null],
key: idx
}, [(0, vue.isVNode)(spacer) ? spacer : (0, vue.createTextVNode)(spacer, PatchFlags.TEXT)], PatchFlags.STYLE));
return children;
}, []);
}
return (0, vue.createVNode)("div", {
class: classes.value,
style: containerStyle.value
}, extractedChildren, PatchFlags.STYLE | PatchFlags.CLASS);
}
return children.children;
};
}
});
//#endregion
//#region ../../packages/components/space/index.ts
const ElSpace = withInstall(Space);
//#endregion
//#region ../../packages/components/statistic/src/statistic.ts
/**
* @deprecated Removed after 3.0.0, Use `StatisticProps` instead.
*/
const statisticProps = buildProps({
decimalSeparator: {
type: String,
default: "."
},
groupSeparator: {
type: String,
default: ","
},
precision: {
type: Number,
default: 0
},
formatter: Function,
value: {
type: definePropType([Number, Object]),
default: 0
},
prefix: String,
suffix: String,
title: String,
valueStyle: { type: definePropType([
String,
Object,
Array
]) }
});
//#endregion
//#region ../../packages/components/statistic/src/statistic.vue?vue&type=script&setup=true&lang.ts
var statistic_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElStatistic",
__name: "statistic",
props: statisticProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("statistic");
const displayValue = (0, vue.computed)(() => {
const { value, formatter, precision, decimalSeparator, groupSeparator } = props;
if (isFunction$1(formatter)) return formatter(value);
if (!isNumber(value) || Number.isNaN(value)) return value;
let [integer, decimal = ""] = String(value).split(".");
decimal = decimal.padEnd(precision, "0").slice(0, precision > 0 ? precision : 0);
integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator);
return [integer, decimal].join(decimal ? decimalSeparator : "");
});
__expose({ displayValue });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [_ctx.$slots.title || __props.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("head"))
}, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [
_ctx.$slots.prefix || __props.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
}, [(0, vue.renderSlot)(_ctx.$slots, "prefix", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.prefix), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("number")),
style: (0, vue.normalizeStyle)(__props.valueStyle)
}, (0, vue.toDisplayString)(displayValue.value), 7),
_ctx.$slots.suffix || __props.suffix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("suffix"))
}, [(0, vue.renderSlot)(_ctx.$slots, "suffix", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.suffix), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/statistic/src/statistic.vue
var statistic_default = statistic_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/statistic/index.ts
const ElStatistic = withInstall(statistic_default);
//#endregion
//#region ../../packages/components/countdown/src/countdown.ts
/**
* @deprecated Removed after 3.0.0, Use `CountdownProps` instead.
*/
const countdownProps = buildProps({
format: {
type: String,
default: "HH:mm:ss"
},
prefix: String,
suffix: String,
title: String,
value: {
type: definePropType([Number, Object]),
default: 0
},
valueStyle: { type: definePropType([
String,
Object,
Array
]) }
});
const countdownEmits = {
finish: () => true,
[CHANGE_EVENT]: (value) => isNumber(value)
};
//#endregion
//#region ../../packages/components/countdown/src/utils.ts
const timeUnits$1 = [
["Y", 1e3 * 60 * 60 * 24 * 365],
["M", 1e3 * 60 * 60 * 24 * 30],
["D", 1e3 * 60 * 60 * 24],
["H", 1e3 * 60 * 60],
["m", 1e3 * 60],
["s", 1e3],
["S", 1]
];
const getTime = (value) => {
return isNumber(value) ? new Date(value).getTime() : value.valueOf();
};
const formatTime$1 = (timestamp, format) => {
let timeLeft = timestamp;
return timeUnits$1.reduce((current, [name, unit]) => {
const replaceRegex = new RegExp(`${name}+(?![^\\[\\]]*\\])`, "g");
if (replaceRegex.test(current)) {
const value = Math.floor(timeLeft / unit);
timeLeft -= value * unit;
return current.replace(replaceRegex, (match) => String(value).padStart(match.length, "0"));
}
return current;
}, format).replace(/\[([^\]]*)]/g, "$1");
};
//#endregion
//#region ../../packages/components/countdown/src/countdown.vue?vue&type=script&setup=true&lang.ts
var countdown_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElCountdown",
__name: "countdown",
props: countdownProps,
emits: countdownEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
let timer;
const rawValue = (0, vue.ref)(0);
const displayValue = (0, vue.computed)(() => formatTime$1(rawValue.value, props.format));
const formatter = (val) => formatTime$1(val, props.format);
const stopTimer = () => {
if (timer) {
cAF(timer);
timer = void 0;
}
};
const startTimer = () => {
const timestamp = getTime(props.value);
const frameFunc = () => {
let diff = timestamp - Date.now();
emit(CHANGE_EVENT, diff);
if (diff <= 0) {
diff = 0;
stopTimer();
emit("finish");
} else timer = rAF(frameFunc);
rawValue.value = diff;
};
timer = rAF(frameFunc);
};
(0, vue.onMounted)(() => {
rawValue.value = getTime(props.value) - Date.now();
(0, vue.watch)(() => [props.value, props.format], () => {
stopTimer();
startTimer();
}, { immediate: true });
});
(0, vue.onBeforeUnmount)(() => {
stopTimer();
});
__expose({ displayValue });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElStatistic), {
value: rawValue.value,
title: __props.title,
prefix: __props.prefix,
suffix: __props.suffix,
"value-style": __props.valueStyle,
formatter
}, (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
return {
name,
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, name)])
};
})]), 1032, [
"value",
"title",
"prefix",
"suffix",
"value-style"
]);
};
}
});
//#endregion
//#region ../../packages/components/countdown/src/countdown.vue
var countdown_default = countdown_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/countdown/index.ts
const ElCountdown = withInstall(countdown_default);
//#endregion
//#region ../../packages/components/steps/src/steps.ts
/**
* @deprecated Removed after 3.0.0, Use `StepsProps` instead.
*/
const stepsProps = buildProps({
space: {
type: [Number, String],
default: ""
},
active: {
type: Number,
default: 0
},
direction: {
type: String,
default: "horizontal",
values: ["horizontal", "vertical"]
},
alignCenter: { type: Boolean },
simple: { type: Boolean },
finishStatus: {
type: String,
values: [
"wait",
"process",
"finish",
"error",
"success"
],
default: "finish"
},
processStatus: {
type: String,
values: [
"wait",
"process",
"finish",
"error",
"success"
],
default: "process"
}
});
const stepsEmits = { [CHANGE_EVENT]: (newVal, oldVal) => [newVal, oldVal].every(isNumber) };
//#endregion
//#region ../../packages/components/steps/src/tokens.ts
const STEPS_INJECTION_KEY = "ElSteps";
//#endregion
//#region ../../packages/components/steps/src/steps.vue?vue&type=script&setup=true&lang.ts
var steps_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSteps",
__name: "steps",
props: stepsProps,
emits: stepsEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("steps");
const { children: steps, addChild: addStep, removeChild: removeStep, ChildrenSorter: StepsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElStep");
(0, vue.watch)(steps, () => {
steps.value.forEach((instance, index) => {
instance.setIndex(index);
});
});
(0, vue.provide)(STEPS_INJECTION_KEY, {
props,
steps,
addStep,
removeStep
});
(0, vue.watch)(() => props.active, (newVal, oldVal) => {
emit(CHANGE_EVENT, newVal, oldVal);
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).m(__props.simple ? "simple" : __props.direction)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)((0, vue.unref)(StepsSorter))], 2);
};
}
});
//#endregion
//#region ../../packages/components/steps/src/steps.vue
var steps_default$1 = steps_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/steps/src/item.ts
/**
* @deprecated Removed after 3.0.0, Use `StepProps` instead.
*/
const stepProps = buildProps({
title: {
type: String,
default: ""
},
icon: { type: iconPropType },
description: {
type: String,
default: ""
},
status: {
type: String,
values: [
"",
"wait",
"process",
"finish",
"error",
"success"
],
default: ""
}
});
//#endregion
//#region ../../packages/components/steps/src/item.vue?vue&type=script&setup=true&lang.ts
var item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElStep",
__name: "item",
props: stepProps,
setup(__props) {
const props = __props;
const ns = useNamespace("step");
const index = (0, vue.ref)(-1);
const lineStyle = (0, vue.ref)({});
const internalStatus = (0, vue.ref)("");
const parent = (0, vue.inject)(STEPS_INJECTION_KEY);
const currentInstance = (0, vue.getCurrentInstance)();
let stepDiff = 0;
let beforeActive = 0;
(0, vue.onMounted)(() => {
(0, vue.watch)([
() => parent.props.active,
() => parent.props.processStatus,
() => parent.props.finishStatus
], ([active], [oldActive]) => {
beforeActive = oldActive || 0;
stepDiff = active - beforeActive;
updateStatus(active);
}, { immediate: true });
});
const currentStatus = (0, vue.computed)(() => {
return props.status || internalStatus.value;
});
const prevInternalStatus = (0, vue.computed)(() => {
const prevStep = parent.steps.value[index.value - 1];
return prevStep ? prevStep.internalStatus.value : "wait";
});
const isCenter = (0, vue.computed)(() => {
return parent.props.alignCenter;
});
const isVertical = (0, vue.computed)(() => {
return parent.props.direction === "vertical";
});
const isSimple = (0, vue.computed)(() => {
return parent.props.simple;
});
const stepsCount = (0, vue.computed)(() => {
return parent.steps.value.length;
});
const isLast = (0, vue.computed)(() => {
return parent.steps.value[stepsCount.value - 1]?.uid === currentInstance.uid;
});
const space = (0, vue.computed)(() => {
return isSimple.value ? "" : parent.props.space;
});
const containerKls = (0, vue.computed)(() => {
return [
ns.b(),
ns.is(isSimple.value ? "simple" : parent.props.direction),
ns.is("flex", isLast.value && !space.value && !isCenter.value),
ns.is("center", isCenter.value && !isVertical.value && !isSimple.value)
];
});
const style = (0, vue.computed)(() => {
const style = { flexBasis: isNumber(space.value) ? `${space.value}px` : space.value ? space.value : `${100 / (stepsCount.value - (isCenter.value ? 0 : 1))}%` };
if (isVertical.value) return style;
if (isLast.value) style.maxWidth = `${100 / stepsCount.value}%`;
return style;
});
const setIndex = (val) => {
index.value = val;
};
const calcProgress = (status) => {
const isWait = status === "wait";
const style = { transitionDelay: `${Math.abs(stepDiff) === 1 ? 0 : stepDiff > 0 ? (index.value + 1 - beforeActive) * 150 : -(index.value + 1 - parent.props.active) * 150}ms` };
const step = status === parent.props.processStatus || isWait ? 0 : 100;
style.borderWidth = step && !isSimple.value ? "1px" : 0;
style[parent.props.direction === "vertical" ? "height" : "width"] = `${step}%`;
lineStyle.value = style;
};
const updateStatus = (activeIndex) => {
if (activeIndex > index.value) internalStatus.value = parent.props.finishStatus;
else if (activeIndex === index.value && prevInternalStatus.value !== "error") internalStatus.value = parent.props.processStatus;
else internalStatus.value = "wait";
const prevChild = parent.steps.value[index.value - 1];
if (prevChild) prevChild.calcProgress(internalStatus.value);
};
const stepItemState = {
uid: currentInstance.uid,
getVnode: () => currentInstance.vnode,
currentStatus,
internalStatus,
setIndex,
calcProgress
};
parent.addStep(stepItemState);
(0, vue.onBeforeUnmount)(() => {
parent.removeStep(stepItemState);
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
style: (0, vue.normalizeStyle)(style.value),
class: (0, vue.normalizeClass)(containerKls.value)
}, [
(0, vue.createCommentVNode)(" icon & line "),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("head"), (0, vue.unref)(ns).is(currentStatus.value)]) }, [!isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("line"))
}, [(0, vue.createElementVNode)("i", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("line-inner")),
style: (0, vue.normalizeStyle)(lineStyle.value)
}, null, 6)], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).is(__props.icon || _ctx.$slots.icon ? "icon" : "text")]) }, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon-inner"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
}, 8, ["class"])) : currentStatus.value === "success" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon-inner"), (0, vue.unref)(ns).is("status")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
_: 1
}, 8, ["class"])) : currentStatus.value === "error" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 2,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon-inner"), (0, vue.unref)(ns).is("status")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
}, 8, ["class"])) : !isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 3,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon-inner"))
}, (0, vue.toDisplayString)(index.value + 1), 3)) : (0, vue.createCommentVNode)("v-if", true)])], 2)], 2),
(0, vue.createCommentVNode)(" title & description "),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("title"), (0, vue.unref)(ns).is(currentStatus.value)]) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow"))
}, null, 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("description"), (0, vue.unref)(ns).is(currentStatus.value)])
}, [(0, vue.renderSlot)(_ctx.$slots, "description", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.description), 1)])], 2))], 2)
], 6);
};
}
});
//#endregion
//#region ../../packages/components/steps/src/item.vue
var item_default = item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/steps/index.ts
const ElSteps = withInstall(steps_default$1, { Step: item_default });
const ElStep = withNoopInstall(item_default);
//#endregion
//#region ../../packages/components/switch/src/switch.ts
/**
* @deprecated Removed after 3.0.0, Use `SwitchProps` instead.
*/
const switchProps = buildProps({
modelValue: {
type: [
Boolean,
String,
Number
],
default: false
},
disabled: {
type: Boolean,
default: void 0
},
loading: Boolean,
size: {
type: String,
validator: isValidComponentSize
},
width: {
type: [String, Number],
default: ""
},
inlinePrompt: Boolean,
inactiveActionIcon: { type: iconPropType },
activeActionIcon: { type: iconPropType },
activeIcon: { type: iconPropType },
inactiveIcon: { type: iconPropType },
activeText: {
type: String,
default: ""
},
inactiveText: {
type: String,
default: ""
},
activeValue: {
type: [
Boolean,
String,
Number
],
default: true
},
inactiveValue: {
type: [
Boolean,
String,
Number
],
default: false
},
name: {
type: String,
default: ""
},
validateEvent: {
type: Boolean,
default: true
},
beforeChange: { type: definePropType(Function) },
id: String,
tabindex: { type: [String, Number] },
...useAriaProps(["ariaLabel"])
});
const switchEmits = {
[UPDATE_MODEL_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val),
[CHANGE_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val),
[INPUT_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val)
};
//#endregion
//#region ../../packages/components/switch/src/switch.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$18 = [
"id",
"aria-checked",
"aria-disabled",
"aria-label",
"name",
"true-value",
"false-value",
"disabled",
"tabindex"
];
const _hoisted_2$11 = ["aria-hidden"];
const _hoisted_3$4 = { key: 1 };
const _hoisted_4$3 = { key: 1 };
const _hoisted_5$1 = ["aria-hidden"];
const COMPONENT_NAME$6 = "ElSwitch";
var switch_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$6,
__name: "switch",
props: switchProps,
emits: switchEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const { formItem } = useFormItem();
const switchSize = useFormSize();
const ns = useNamespace("switch");
const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
const switchDisabled = useFormDisabled((0, vue.computed)(() => {
if (props.loading) return true;
}));
const isControlled = (0, vue.ref)(props.modelValue !== false);
const input = (0, vue.shallowRef)();
const switchKls = (0, vue.computed)(() => [
ns.b(),
ns.m(switchSize.value),
ns.is("disabled", switchDisabled.value),
ns.is("checked", checked.value)
]);
const labelLeftKls = (0, vue.computed)(() => [
ns.e("label"),
ns.em("label", "left"),
ns.is("active", !checked.value)
]);
const labelRightKls = (0, vue.computed)(() => [
ns.e("label"),
ns.em("label", "right"),
ns.is("active", checked.value)
]);
const coreStyle = (0, vue.computed)(() => ({ width: addUnit(props.width) }));
(0, vue.watch)(() => props.modelValue, () => {
isControlled.value = true;
});
const actualValue = (0, vue.computed)(() => {
return isControlled.value ? props.modelValue : false;
});
const checked = (0, vue.computed)(() => actualValue.value === props.activeValue);
if (![props.activeValue, props.inactiveValue].includes(actualValue.value)) {
emit(UPDATE_MODEL_EVENT, props.inactiveValue);
emit(CHANGE_EVENT, props.inactiveValue);
emit(INPUT_EVENT, props.inactiveValue);
}
(0, vue.watch)(checked, (val) => {
input.value.checked = val;
if (props.validateEvent) formItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
const handleChange = () => {
const val = checked.value ? props.inactiveValue : props.activeValue;
emit(UPDATE_MODEL_EVENT, val);
emit(CHANGE_EVENT, val);
emit(INPUT_EVENT, val);
(0, vue.nextTick)(() => {
input.value.checked = checked.value;
});
};
const switchValue = () => {
if (switchDisabled.value) return;
const { beforeChange } = props;
if (!beforeChange) {
handleChange();
return;
}
const shouldChange = beforeChange();
if (![isPromise(shouldChange), isBoolean(shouldChange)].includes(true)) throwError(COMPONENT_NAME$6, "beforeChange must return type `Promise<boolean>` or `boolean`");
if (isPromise(shouldChange)) shouldChange.then((result) => {
if (result) handleChange();
}).catch((e) => {
/* @__PURE__ */ debugWarn(COMPONENT_NAME$6, `some error occurred: ${e}`);
});
else if (shouldChange) handleChange();
};
const focus = () => {
input.value?.focus?.();
};
(0, vue.onMounted)(() => {
input.value.checked = checked.value;
});
__expose({
focus,
checked
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)(switchKls.value),
onClick: (0, vue.withModifiers)(switchValue, ["prevent"])
}, [
(0, vue.createElementVNode)("input", {
id: (0, vue.unref)(inputId),
ref_key: "input",
ref: input,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
type: "checkbox",
role: "switch",
"aria-checked": checked.value,
"aria-disabled": (0, vue.unref)(switchDisabled),
"aria-label": __props.ariaLabel,
name: __props.name,
"true-value": __props.activeValue,
"false-value": __props.inactiveValue,
disabled: (0, vue.unref)(switchDisabled),
tabindex: __props.tabindex,
onChange: handleChange,
onKeydown: (0, vue.withKeys)(switchValue, ["enter"])
}, null, 42, _hoisted_1$18),
!__props.inlinePrompt && (__props.inactiveIcon || __props.inactiveText || _ctx.$slots.inactive) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)(labelLeftKls.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "inactive", {}, () => [__props.inactiveIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true), !__props.inactiveIcon && __props.inactiveText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
"aria-hidden": checked.value
}, (0, vue.toDisplayString)(__props.inactiveText), 9, _hoisted_2$11)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("core")),
style: (0, vue.normalizeStyle)(coreStyle.value)
}, [__props.inlinePrompt ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner"))
}, [!checked.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner-wrapper"))
}, [(0, vue.renderSlot)(_ctx.$slots, "inactive", {}, () => [__props.inactiveIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true), !__props.inactiveIcon && __props.inactiveText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$4, (0, vue.toDisplayString)(__props.inactiveText), 1)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner-wrapper"))
}, [(0, vue.renderSlot)(_ctx.$slots, "active", {}, () => [__props.activeIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true), !__props.activeIcon && __props.activeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_4$3, (0, vue.toDisplayString)(__props.activeText), 1)) : (0, vue.createCommentVNode)("v-if", true)])], 2))], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("action")) }, [__props.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
_: 1
}, 8, ["class"])) : checked.value ? (0, vue.renderSlot)(_ctx.$slots, "active-action", { key: 1 }, () => [__props.activeActionIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeActionIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true)]) : !checked.value ? (0, vue.renderSlot)(_ctx.$slots, "inactive-action", { key: 2 }, () => [__props.inactiveActionIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveActionIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true)], 2)], 6),
!__props.inlinePrompt && (__props.activeIcon || __props.activeText || _ctx.$slots.active) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
class: (0, vue.normalizeClass)(labelRightKls.value)
}, [(0, vue.renderSlot)(_ctx.$slots, "active", {}, () => [__props.activeIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeIcon)))]),
_: 1
})) : (0, vue.createCommentVNode)("v-if", true), !__props.activeIcon && __props.activeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 1,
"aria-hidden": !checked.value
}, (0, vue.toDisplayString)(__props.activeText), 9, _hoisted_5$1)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/switch/src/switch.vue
var switch_default = switch_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/switch/index.ts
const ElSwitch = withInstall(switch_default);
//#endregion
//#region ../../packages/components/table/src/util.ts
const getCell = function(event) {
return event.target?.closest("td");
};
const orderBy = function(array, sortKey, reverse, sortMethod, sortBy) {
if (!sortKey && !sortMethod && (!sortBy || isArray$1(sortBy) && !sortBy.length)) return array;
if (isString(reverse)) reverse = reverse === "descending" ? -1 : 1;
else reverse = reverse && reverse < 0 ? -1 : 1;
const getKey = sortMethod ? null : function(value, index) {
if (sortBy) return flatMap(castArray$1(sortBy), (by) => {
if (isString(by)) return get(value, by);
else return by(value, index, array);
});
if (sortKey !== "$key") {
if (isObject$1(value) && "$value" in value) value = value.$value;
}
return [isObject$1(value) ? sortKey ? get(value, sortKey) : null : value];
};
const compare = function(a, b) {
if (sortMethod) return sortMethod(a.value, b.value);
for (let i = 0, len = a.key?.length ?? 0; i < len; i++) {
if (a.key?.[i] < b.key?.[i]) return -1;
if (a.key?.[i] > b.key?.[i]) return 1;
}
return 0;
};
return array.map((value, index) => {
return {
value,
index,
key: getKey ? getKey(value, index) : null
};
}).sort((a, b) => {
let order = compare(a, b);
if (!order) order = a.index - b.index;
return order * +reverse;
}).map((item) => item.value);
};
const getColumnById = function(table, columnId) {
let column = null;
table.columns.forEach((item) => {
if (item.id === columnId) column = item;
});
return column;
};
const getColumnByKey = function(table, columnKey) {
let column = null;
for (let i = 0; i < table.columns.length; i++) {
const item = table.columns[i];
if (item.columnKey === columnKey) {
column = item;
break;
}
}
if (!column) throwError("ElTable", `No column matching with column-key: ${columnKey}`);
return column;
};
const getColumnByCell = function(table, cell, namespace) {
const matches = (cell.className || "").match(new RegExp(`${namespace}-table_[^\\s]+`, "gm"));
if (matches) return getColumnById(table, matches[0]);
return null;
};
const getRowIdentity = (row, rowKey) => {
if (!row) throw new Error("Row is required when get row identity");
if (isString(rowKey)) {
if (!rowKey.includes(".")) return `${row[rowKey]}`;
const key = rowKey.split(".");
let current = row;
for (const element of key) current = current[element];
return `${current}`;
} else if (isFunction$1(rowKey)) return rowKey.call(null, row);
return "";
};
const getKeysMap = function(array, rowKey, flatten = false, childrenKey = "children") {
const data = array || [];
const arrayMap = {};
data.forEach((row, index) => {
arrayMap[getRowIdentity(row, rowKey)] = {
row,
index
};
if (flatten) {
const children = row[childrenKey];
if (isArray$1(children)) Object.assign(arrayMap, getKeysMap(children, rowKey, true, childrenKey));
}
});
return arrayMap;
};
function mergeOptions(defaults, config) {
const options = {};
let key;
for (key in defaults) options[key] = defaults[key];
for (key in config) if (hasOwn(config, key)) {
const value = config[key];
if (!isUndefined(value)) options[key] = value;
}
return options;
}
function parseWidth(width) {
if (width === "") return width;
if (!isUndefined(width)) {
width = Number.parseInt(width, 10);
if (Number.isNaN(width)) width = "";
}
return width;
}
function parseMinWidth(minWidth) {
if (minWidth === "") return minWidth;
if (!isUndefined(minWidth)) {
minWidth = parseWidth(minWidth);
if (Number.isNaN(minWidth)) minWidth = 80;
}
return minWidth;
}
function parseHeight(height) {
if (isNumber(height)) return height;
if (isString(height)) if (/^\d+(?:px)?$/.test(height)) return Number.parseInt(height, 10);
else return height;
return null;
}
function compose(...funcs) {
if (funcs.length === 0) return (arg) => arg;
if (funcs.length === 1) return funcs[0];
return funcs.reduce((a, b) => (...args) => a(b(...args)));
}
function toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex, rowKey) {
let _rowIndex = rowIndex ?? 0;
let changed = false;
const getIndex = () => {
if (!rowKey) return statusArr.indexOf(row);
const id = getRowIdentity(row, rowKey);
return statusArr.findIndex((item) => getRowIdentity(item, rowKey) === id);
};
const index = getIndex();
const included = index !== -1;
const isRowSelectable = selectable?.call(null, row, _rowIndex);
const toggleStatus = (type) => {
if (type === "add") statusArr.push(row);
else statusArr.splice(index, 1);
changed = true;
};
const getChildrenCount = (row) => {
let count = 0;
const children = tableTreeProps?.children && row[tableTreeProps.children];
if (children && isArray$1(children)) {
count += children.length;
children.forEach((item) => {
count += getChildrenCount(item);
});
}
return count;
};
if (!selectable || isRowSelectable) if (isBoolean(newVal)) {
if (newVal && !included) toggleStatus("add");
else if (!newVal && included) toggleStatus("remove");
} else included ? toggleStatus("remove") : toggleStatus("add");
if (!tableTreeProps?.checkStrictly && tableTreeProps?.children && isArray$1(row[tableTreeProps.children])) row[tableTreeProps.children].forEach((item) => {
const childChanged = toggleRowStatus(statusArr, item, newVal ?? !included, tableTreeProps, selectable, _rowIndex + 1, rowKey);
_rowIndex += getChildrenCount(item) + 1;
if (childChanged) changed = childChanged;
});
return changed;
}
function walkTreeNode(root, cb, childrenKey = "children", lazyKey = "hasChildren", lazy = false) {
const isNil = (array) => !(isArray$1(array) && array.length);
function _walker(parent, children, level) {
cb(parent, children, level);
children.forEach((item) => {
if (item[lazyKey] && lazy) {
cb(item, null, level + 1);
return;
}
const children = item[childrenKey];
if (!isNil(children)) _walker(item, children, level + 1);
});
}
root.forEach((item) => {
if (item[lazyKey] && lazy) {
cb(item, null, 0);
return;
}
const children = item[childrenKey];
if (!isNil(children)) _walker(item, children, 0);
});
}
const getTableOverflowTooltipProps = (props, innerText, row, column) => {
const popperOptions = {
strategy: "fixed",
...props.popperOptions
};
const tooltipFormatterContent = isFunction$1(column?.tooltipFormatter) ? column.tooltipFormatter({
row,
column,
cellValue: getProp(row, column.property).value
}) : void 0;
if ((0, vue.isVNode)(tooltipFormatterContent)) return {
slotContent: tooltipFormatterContent,
content: null,
...props,
popperOptions
};
return {
slotContent: null,
content: tooltipFormatterContent ?? innerText,
...props,
popperOptions
};
};
let removePopper = null;
function createTablePopper(props, popperContent, row, column, trigger, table) {
const tableOverflowTooltipProps = getTableOverflowTooltipProps(props, popperContent, row, column);
const mergedProps = {
...tableOverflowTooltipProps,
slotContent: void 0
};
if (removePopper?.trigger === trigger) {
const comp = removePopper.vm?.component;
merge(comp?.props, mergedProps);
if (comp && tableOverflowTooltipProps.slotContent) comp.slots.content = () => [tableOverflowTooltipProps.slotContent];
return;
}
removePopper?.();
const parentNode = table?.refs.tableWrapper;
const ns = parentNode?.dataset.prefix;
const vm = (0, vue.createVNode)(ElTooltip, {
virtualTriggering: true,
virtualRef: trigger,
appendTo: parentNode,
placement: "top",
transition: "none",
offset: 0,
hideAfter: 0,
...mergedProps
}, tableOverflowTooltipProps.slotContent ? { content: () => tableOverflowTooltipProps.slotContent } : void 0);
vm.appContext = {
...table.appContext,
...table
};
const container = document.createElement("div");
(0, vue.render)(vm, container);
vm.component.exposed.onOpen();
const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`);
removePopper = () => {
if (vm.component?.exposed?.onClose) vm.component.exposed.onClose();
(0, vue.render)(null, container);
const currentRemovePopper = removePopper;
scrollContainer?.removeEventListener("scroll", currentRemovePopper);
currentRemovePopper.trigger = void 0;
currentRemovePopper.vm = void 0;
removePopper = null;
};
removePopper.trigger = trigger ?? void 0;
removePopper.vm = vm;
scrollContainer?.addEventListener("scroll", removePopper);
}
function getCurrentColumns(column) {
if (column.children) return flatMap(column.children, getCurrentColumns);
else return [column];
}
function getColSpan(colSpan, column) {
return colSpan + column.colSpan;
}
const isFixedColumn = (index, fixed, store, realColumns) => {
let start = 0;
let after = index;
const columns = store.states.columns.value;
if (realColumns) {
const curColumns = getCurrentColumns(realColumns[index]);
start = columns.slice(0, columns.indexOf(curColumns[0])).reduce(getColSpan, 0);
after = start + curColumns.reduce(getColSpan, 0) - 1;
} else start = index;
let fixedLayout;
switch (fixed) {
case "left":
if (after < store.states.fixedLeafColumnsLength.value) fixedLayout = "left";
break;
case "right":
if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) fixedLayout = "right";
break;
default: if (after < store.states.fixedLeafColumnsLength.value) fixedLayout = "left";
else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) fixedLayout = "right";
}
return fixedLayout ? {
direction: fixedLayout,
start,
after
} : {};
};
const getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => {
const classes = [];
const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns);
if (direction) {
const isLeft = direction === "left";
classes.push(`${namespace}-fixed-column--${direction}`);
if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) classes.push("is-last-column");
else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) classes.push("is-first-column");
}
return classes;
};
function getOffset(offset, column) {
return offset + (isNull(column.realWidth) || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth);
}
const getFixedColumnOffset = (index, fixed, store, realColumns) => {
const { direction, start = 0, after = 0 } = isFixedColumn(index, fixed, store, realColumns);
if (!direction) return;
const styles = {};
const isLeft = direction === "left";
const columns = store.states.columns.value;
if (isLeft) styles.left = columns.slice(0, start).reduce(getOffset, 0);
else styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0);
return styles;
};
const ensurePosition = (style, key) => {
if (!style) return;
if (!Number.isNaN(style[key])) style[key] = `${style[key]}px`;
};
function ensureValidVNode(vnodes) {
return vnodes.some((child) => {
if (!(0, vue.isVNode)(child)) return true;
if (child.type === vue.Comment) return false;
if (child.type === vue.Fragment && !ensureValidVNode(child.children)) return false;
return true;
}) ? vnodes : null;
}
//#endregion
//#region ../../packages/components/table/src/store/expand.ts
function useExpand(watcherData) {
const instance = (0, vue.getCurrentInstance)();
const defaultExpandAll = (0, vue.ref)(false);
const expandRows = (0, vue.ref)([]);
const canRowExpand = (row, index) => {
const expandableFn = instance.store.states.rowExpandable.value;
return expandableFn?.(row, index) ?? true;
};
const updateExpandRows = () => {
const data = watcherData.data.value || [];
const rowKey = watcherData.rowKey.value;
if (defaultExpandAll.value) expandRows.value = instance.store.states.rowExpandable.value ? data.filter(canRowExpand) : data.slice();
else if (rowKey) {
const expandRowsMap = getKeysMap(expandRows.value, rowKey);
expandRows.value = data.filter((row, index) => {
return !!expandRowsMap[getRowIdentity(row, rowKey)] && canRowExpand(row, index);
});
} else expandRows.value = [];
};
const toggleRowExpansion = (row, expanded) => {
const rowIndex = (watcherData.data.value || []).indexOf(row);
if (rowIndex > -1 && !canRowExpand(row, rowIndex)) return;
if (toggleRowStatus(expandRows.value, row, expanded, void 0, void 0, void 0, watcherData.rowKey.value)) instance.emit("expand-change", row, expandRows.value.slice());
};
const setExpandRowKeys = (rowKeys) => {
instance.store.assertRowKey();
const data = watcherData.data.value || [];
const rowKey = watcherData.rowKey.value;
const keysMap = getKeysMap(data, rowKey);
expandRows.value = rowKeys.reduce((prev, cur) => {
const info = keysMap[cur];
if (info && canRowExpand(info.row, info.index)) prev.push(info.row);
return prev;
}, []);
};
const isRowExpanded = (row) => {
const rowKey = watcherData.rowKey.value;
if (rowKey) return !!getKeysMap(expandRows.value, rowKey)[getRowIdentity(row, rowKey)];
return expandRows.value.includes(row);
};
return {
updateExpandRows,
toggleRowExpansion,
setExpandRowKeys,
isRowExpanded,
states: {
expandRows,
defaultExpandAll
}
};
}
//#endregion
//#region ../../packages/components/table/src/store/current.ts
function useCurrent(watcherData) {
const instance = (0, vue.getCurrentInstance)();
const _currentRowKey = (0, vue.ref)(null);
const currentRow = (0, vue.ref)(null);
const setCurrentRowKey = (key) => {
instance.store.assertRowKey();
_currentRowKey.value = key;
setCurrentRowByKey(key);
};
const restoreCurrentRowKey = () => {
_currentRowKey.value = null;
};
const setCurrentRowByKey = (key) => {
const { data, rowKey } = watcherData;
const oldCurrentRow = currentRow.value;
let _currentRow = null;
if (rowKey.value) _currentRow = ((0, vue.unref)(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key) ?? null;
currentRow.value = _currentRow ?? null;
instance.emit("current-change", currentRow.value, oldCurrentRow);
};
const updateCurrentRow = (_currentRow) => {
const oldCurrentRow = currentRow.value;
if (_currentRow && _currentRow !== oldCurrentRow) {
currentRow.value = _currentRow;
instance.emit("current-change", currentRow.value, oldCurrentRow);
return;
}
if (!_currentRow && oldCurrentRow) {
currentRow.value = null;
instance.emit("current-change", null, oldCurrentRow);
}
};
const updateCurrentRowData = () => {
const rowKey = watcherData.rowKey.value;
const data = watcherData.data.value || [];
const oldCurrentRow = currentRow.value;
if (oldCurrentRow && !data.includes(oldCurrentRow)) if (rowKey) setCurrentRowByKey(getRowIdentity(oldCurrentRow, rowKey));
else {
currentRow.value = null;
instance.emit("current-change", null, oldCurrentRow);
}
else if (_currentRowKey.value) {
setCurrentRowByKey(_currentRowKey.value);
restoreCurrentRowKey();
}
};
return {
setCurrentRowKey,
restoreCurrentRowKey,
setCurrentRowByKey,
updateCurrentRow,
updateCurrentRowData,
states: {
_currentRowKey,
currentRow
}
};
}
//#endregion
//#region ../../packages/components/table/src/store/tree.ts
function useTree$2(watcherData) {
const expandRowKeys = (0, vue.ref)([]);
const treeData = (0, vue.ref)({});
const indent = (0, vue.ref)(16);
const lazy = (0, vue.ref)(false);
const lazyTreeNodeMap = (0, vue.ref)({});
const lazyColumnIdentifier = (0, vue.ref)("hasChildren");
const childrenColumnName = (0, vue.ref)("children");
const checkStrictly = (0, vue.ref)(false);
const instance = (0, vue.getCurrentInstance)();
const normalizedData = (0, vue.computed)(() => {
if (!watcherData.rowKey.value) return {};
return normalize(watcherData.data.value || []);
});
const normalizedLazyNode = (0, vue.computed)(() => {
const rowKey = watcherData.rowKey.value;
const keys = Object.keys(lazyTreeNodeMap.value);
const res = {};
if (!keys.length) return res;
keys.forEach((key) => {
if (lazyTreeNodeMap.value[key].length) {
const item = { children: [] };
lazyTreeNodeMap.value[key].forEach((row) => {
const currentRowKey = getRowIdentity(row, rowKey);
item.children.push(currentRowKey);
if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) res[currentRowKey] = { children: [] };
});
res[key] = item;
}
});
return res;
});
const normalize = (data) => {
const rowKey = watcherData.rowKey.value;
const res = {};
walkTreeNode(data, (parent, children, level) => {
const parentId = getRowIdentity(parent, rowKey);
if (isArray$1(children)) res[parentId] = {
children: children.map((row) => getRowIdentity(row, rowKey)),
level
};
else if (lazy.value) res[parentId] = {
children: [],
lazy: true,
level
};
}, childrenColumnName.value, lazyColumnIdentifier.value, lazy.value);
return res;
};
const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll) => {
ifExpandAll ||= instance.store?.states.defaultExpandAll.value;
const nested = normalizedData.value;
const normalizedLazyNode_ = normalizedLazyNode.value;
const keys = Object.keys(nested);
const newTreeData = {};
if (keys.length) {
const oldTreeData = (0, vue.unref)(treeData);
const rootLazyRowKeys = [];
const getExpanded = (oldValue, key) => {
if (ifChangeExpandRowKeys) if (expandRowKeys.value) return ifExpandAll || expandRowKeys.value.includes(key);
else return !!(ifExpandAll || oldValue?.expanded);
else {
const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key);
return !!(oldValue?.expanded || included);
}
};
keys.forEach((key) => {
const oldValue = oldTreeData[key];
const newValue = { ...nested[key] };
newValue.expanded = getExpanded(oldValue, key);
if (newValue.lazy) {
const { loaded = false, loading = false } = oldValue || {};
newValue.loaded = !!loaded;
newValue.loading = !!loading;
rootLazyRowKeys.push(key);
}
newTreeData[key] = newValue;
});
const lazyKeys = Object.keys(normalizedLazyNode_);
if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) lazyKeys.forEach((key) => {
const oldValue = oldTreeData[key];
const lazyNodeChildren = normalizedLazyNode_[key].children;
if (rootLazyRowKeys.includes(key)) {
if (newTreeData[key].children?.length !== 0) throw new Error("[ElTable]children must be an empty array.");
newTreeData[key].children = lazyNodeChildren;
} else {
const { loaded = false, loading = false } = oldValue || {};
newTreeData[key] = {
lazy: true,
loaded: !!loaded,
loading: !!loading,
expanded: getExpanded(oldValue, key),
children: lazyNodeChildren,
level: void 0
};
}
});
}
treeData.value = newTreeData;
instance.store?.updateTableScrollY();
};
(0, vue.watch)(() => expandRowKeys.value, () => {
updateTreeData(true);
}, { deep: true });
(0, vue.watch)(() => normalizedData.value, () => {
updateTreeData();
});
(0, vue.watch)(() => normalizedLazyNode.value, () => {
updateTreeData();
});
const updateTreeExpandKeys = (value) => {
expandRowKeys.value = value;
updateTreeData();
};
const isUseLazy = (data) => {
return lazy.value && data && "loaded" in data && !data.loaded;
};
const toggleTreeExpansion = (row, expanded) => {
instance.store.assertRowKey();
const rowKey = watcherData.rowKey.value;
const id = getRowIdentity(row, rowKey);
const data = id && treeData.value[id];
if (id && data && "expanded" in data) {
const oldExpanded = data.expanded;
expanded = isUndefined(expanded) ? !data.expanded : expanded;
treeData.value[id].expanded = expanded;
if (oldExpanded !== expanded) instance.emit("expand-change", row, expanded);
expanded && isUseLazy(data) && loadData(row, id, data);
instance.store.updateTableScrollY();
}
};
const loadOrToggle = (row) => {
instance.store.assertRowKey();
const rowKey = watcherData.rowKey.value;
const id = getRowIdentity(row, rowKey);
const data = treeData.value[id];
if (isUseLazy(data)) loadData(row, id, data);
else toggleTreeExpansion(row, void 0);
};
const loadData = (row, key, treeNode) => {
const { load } = instance.props;
if (load && !treeData.value[key].loaded) {
treeData.value[key].loading = true;
load(row, treeNode, (data) => {
if (!isArray$1(data)) throw new TypeError("[ElTable] data must be an array");
treeData.value[key].loading = false;
treeData.value[key].loaded = true;
treeData.value[key].expanded = true;
if (data.length) lazyTreeNodeMap.value[key] = data;
instance.emit("expand-change", row, true);
});
}
};
const updateKeyChildren = (key, data) => {
const { lazy, rowKey } = instance.props;
if (!lazy) return;
if (!rowKey) throw new Error("[Table] rowKey is required in updateKeyChild");
if (lazyTreeNodeMap.value[key]) lazyTreeNodeMap.value[key] = data;
};
return {
loadData,
loadOrToggle,
toggleTreeExpansion,
updateTreeExpandKeys,
updateTreeData,
updateKeyChildren,
normalize,
states: {
expandRowKeys,
treeData,
indent,
lazy,
lazyTreeNodeMap,
lazyColumnIdentifier,
childrenColumnName,
checkStrictly
}
};
}
//#endregion
//#region ../../packages/components/table/src/store/watcher.ts
const sortData = (data, states) => {
const sortingColumn = states.sortingColumn;
if (!sortingColumn || isString(sortingColumn.sortable)) return data;
return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);
};
const doFlattenColumns = (columns) => {
const result = [];
columns.forEach((column) => {
if (column.children && column.children.length > 0) result.push.apply(result, doFlattenColumns(column.children));
else result.push(column);
});
return result;
};
function useWatcher$1() {
const instance = (0, vue.getCurrentInstance)();
const { size: tableSize } = (0, vue.toRefs)(instance.proxy?.$props);
const rowKey = (0, vue.ref)(null);
const data = (0, vue.ref)([]);
const _data = (0, vue.ref)([]);
const isComplex = (0, vue.ref)(false);
const _columns = (0, vue.ref)([]);
const originColumns = (0, vue.ref)([]);
const columns = (0, vue.ref)([]);
const fixedColumns = (0, vue.ref)([]);
const rightFixedColumns = (0, vue.ref)([]);
const leafColumns = (0, vue.ref)([]);
const fixedLeafColumns = (0, vue.ref)([]);
const rightFixedLeafColumns = (0, vue.ref)([]);
const updateOrderFns = [];
const leafColumnsLength = (0, vue.ref)(0);
const fixedLeafColumnsLength = (0, vue.ref)(0);
const rightFixedLeafColumnsLength = (0, vue.ref)(0);
const isAllSelected = (0, vue.ref)(false);
const selection = (0, vue.ref)([]);
const reserveSelection = (0, vue.ref)(false);
const selectOnIndeterminate = (0, vue.ref)(false);
const selectable = (0, vue.ref)(null);
const rowExpandable = (0, vue.ref)(null);
const filters = (0, vue.ref)({});
const filteredData = (0, vue.ref)(null);
const sortingColumn = (0, vue.ref)(null);
const sortProp = (0, vue.ref)(null);
const sortOrder = (0, vue.ref)(null);
const hoverRow = (0, vue.ref)(null);
const selectedMap = (0, vue.computed)(() => {
return rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0;
});
(0, vue.watch)(data, () => {
if (instance.state) {
scheduleLayout(false);
if (instance.props.tableLayout === "auto") instance.refs.tableHeaderRef?.updateFixedColumnStyle();
}
}, { deep: true });
const assertRowKey = () => {
if (!rowKey.value) throw new Error("[ElTable] prop row-key is required");
};
const updateChildFixed = (column) => {
column.children?.forEach((childColumn) => {
childColumn.fixed = column.fixed;
updateChildFixed(childColumn);
});
};
const updateColumns = () => {
_columns.value.forEach((column) => {
updateChildFixed(column);
});
fixedColumns.value = _columns.value.filter((column) => [true, "left"].includes(column.fixed));
const selectColumn = _columns.value.find((column) => column.type === "selection");
let selectColFixLeft;
if (selectColumn && selectColumn.fixed !== "right" && !fixedColumns.value.includes(selectColumn)) {
if (_columns.value.indexOf(selectColumn) === 0 && fixedColumns.value.length) {
fixedColumns.value.unshift(selectColumn);
selectColFixLeft = true;
}
}
rightFixedColumns.value = _columns.value.filter((column) => column.fixed === "right");
const notFixedColumns = _columns.value.filter((column) => (selectColFixLeft ? column.type !== "selection" : true) && !column.fixed);
originColumns.value = Array.from(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value);
const leafColumns = doFlattenColumns(notFixedColumns);
const fixedLeafColumns = doFlattenColumns(fixedColumns.value);
const rightFixedLeafColumns = doFlattenColumns(rightFixedColumns.value);
leafColumnsLength.value = leafColumns.length;
fixedLeafColumnsLength.value = fixedLeafColumns.length;
rightFixedLeafColumnsLength.value = rightFixedLeafColumns.length;
columns.value = Array.from(fixedLeafColumns).concat(leafColumns).concat(rightFixedLeafColumns);
isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0;
};
const scheduleLayout = (needUpdateColumns, immediate = false) => {
if (needUpdateColumns) updateColumns();
if (immediate) instance.state.doLayout();
else instance.state.debouncedUpdateLayout();
};
const isSelected = (row) => {
if (selectedMap.value) return !!selectedMap.value[getRowIdentity(row, rowKey.value)];
else return selection.value.includes(row);
};
const clearSelection = () => {
isAllSelected.value = false;
const oldSelection = selection.value;
selection.value = [];
if (oldSelection.length) instance.emit("selection-change", []);
};
const cleanSelection = () => {
let deleted;
if (rowKey.value) {
deleted = [];
const childrenKey = instance?.store?.states?.childrenColumnName.value;
const dataMap = getKeysMap(data.value, rowKey.value, true, childrenKey);
for (const key in selectedMap.value) if (hasOwn(selectedMap.value, key) && !dataMap[key]) deleted.push(selectedMap.value[key].row);
} else deleted = selection.value.filter((item) => !data.value.includes(item));
if (deleted.length) {
const newSelection = selection.value.filter((item) => !deleted.includes(item));
selection.value = newSelection;
instance.emit("selection-change", newSelection.slice());
}
};
const getSelectionRows = () => {
return (selection.value || []).slice();
};
const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => {
const treeProps = {
children: instance?.store?.states?.childrenColumnName.value,
checkStrictly: instance?.store?.states?.checkStrictly.value
};
if (toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value, data.value.indexOf(row), rowKey.value)) {
const newSelection = (selection.value || []).slice();
if (emitChange) instance.emit("select", newSelection, row);
instance.emit("selection-change", newSelection);
}
};
const _toggleAllSelection = () => {
const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length);
isAllSelected.value = value;
let selectionChanged = false;
let childrenCount = 0;
const rowKey = instance?.store?.states?.rowKey.value;
const { childrenColumnName } = instance.store.states;
const treeProps = {
children: childrenColumnName.value,
checkStrictly: false
};
data.value.forEach((row, index) => {
const rowIndex = index + childrenCount;
if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex, rowKey)) selectionChanged = true;
childrenCount += getChildrenCount(getRowIdentity(row, rowKey));
});
if (selectionChanged) instance.emit("selection-change", selection.value ? selection.value.slice() : []);
instance.emit("select-all", (selection.value || []).slice());
};
const updateAllSelected = () => {
if (data.value?.length === 0) {
isAllSelected.value = false;
return;
}
const { childrenColumnName } = instance.store.states;
let rowIndex = 0;
let selectedCount = 0;
const checkSelectedStatus = (data) => {
for (const row of data) {
const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex);
if (!isSelected(row)) {
if (!selectable.value || isRowSelectable) return false;
} else selectedCount++;
rowIndex++;
if (row[childrenColumnName.value]?.length && !checkSelectedStatus(row[childrenColumnName.value])) return false;
}
return true;
};
const isAllSelected_ = checkSelectedStatus(data.value || []);
isAllSelected.value = selectedCount === 0 ? false : isAllSelected_;
};
const getChildrenCount = (rowKey) => {
if (!instance || !instance.store) return 0;
const { treeData } = instance.store.states;
let count = 0;
const children = treeData.value[rowKey]?.children;
if (children) {
count += children.length;
children.forEach((childKey) => {
count += getChildrenCount(childKey);
});
}
return count;
};
const updateFilters = (column, values) => {
const filters_ = {};
castArray$1(column).forEach((col) => {
filters.value[col.id] = values;
filters_[col.columnKey || col.id] = values;
});
return filters_;
};
const updateSort = (column, prop, order) => {
if (sortingColumn.value && sortingColumn.value !== column) sortingColumn.value.order = null;
sortingColumn.value = column;
sortProp.value = prop;
sortOrder.value = order;
};
const execFilter = () => {
let sourceData = (0, vue.unref)(_data);
Object.keys(filters.value).forEach((columnId) => {
const values = filters.value[columnId];
if (!values || values.length === 0) return;
const column = getColumnById({ columns: columns.value }, columnId);
if (column && column.filterMethod) sourceData = sourceData.filter((row) => {
return values.some((value) => column.filterMethod.call(null, value, row, column));
});
});
filteredData.value = sourceData;
};
const execSort = () => {
data.value = sortData(filteredData.value ?? [], {
sortingColumn: sortingColumn.value,
sortProp: sortProp.value,
sortOrder: sortOrder.value
});
};
const execQuery = (ignore = void 0) => {
if (!ignore?.filter) execFilter();
execSort();
};
const clearFilter = (columnKeys) => {
const { tableHeaderRef } = instance.refs;
if (!tableHeaderRef) return;
const panels = Object.assign({}, tableHeaderRef.filterPanels);
const keys = Object.keys(panels);
if (!keys.length) return;
if (isString(columnKeys)) columnKeys = [columnKeys];
if (isArray$1(columnKeys)) {
const columns_ = columnKeys.map((key) => getColumnByKey({ columns: columns.value }, key));
keys.forEach((key) => {
const column = columns_.find((col) => col.id === key);
if (column) column.filteredValue = [];
});
instance.store.commit("filterChange", {
column: columns_,
values: [],
silent: true,
multi: true
});
} else {
keys.forEach((key) => {
const column = columns.value.find((col) => col.id === key);
if (column) column.filteredValue = [];
});
filters.value = {};
instance.store.commit("filterChange", {
column: {},
values: [],
silent: true
});
}
};
const clearSort = () => {
if (!sortingColumn.value) return;
updateSort(null, null, null);
instance.store.commit("changeSortCondition", { silent: true });
};
const { setExpandRowKeys, toggleRowExpansion, updateExpandRows, states: expandStates, isRowExpanded } = useExpand({
data,
rowKey
});
const { updateTreeExpandKeys, toggleTreeExpansion, updateTreeData, updateKeyChildren, loadOrToggle, states: treeStates } = useTree$2({
data,
rowKey
});
const { updateCurrentRowData, updateCurrentRow, setCurrentRowKey, states: currentData } = useCurrent({
data,
rowKey
});
const setExpandRowKeysAdapter = (val) => {
setExpandRowKeys(val);
updateTreeExpandKeys(val);
};
const toggleRowExpansionAdapter = (row, expanded) => {
if (columns.value.some(({ type }) => type === "expand")) toggleRowExpansion(row, expanded);
else toggleTreeExpansion(row, expanded);
};
return {
assertRowKey,
updateColumns,
scheduleLayout,
isSelected,
clearSelection,
cleanSelection,
getSelectionRows,
toggleRowSelection,
_toggleAllSelection,
toggleAllSelection: null,
updateAllSelected,
updateFilters,
updateCurrentRow,
updateSort,
execFilter,
execSort,
execQuery,
clearFilter,
clearSort,
toggleRowExpansion,
setExpandRowKeysAdapter,
setCurrentRowKey,
toggleRowExpansionAdapter,
isRowExpanded,
updateExpandRows,
updateCurrentRowData,
loadOrToggle,
updateTreeData,
updateKeyChildren,
states: {
tableSize,
rowKey,
data,
_data,
isComplex,
_columns,
originColumns,
columns,
fixedColumns,
rightFixedColumns,
leafColumns,
fixedLeafColumns,
rightFixedLeafColumns,
updateOrderFns,
leafColumnsLength,
fixedLeafColumnsLength,
rightFixedLeafColumnsLength,
isAllSelected,
selection,
reserveSelection,
selectOnIndeterminate,
selectable,
rowExpandable,
filters,
filteredData,
sortingColumn,
sortProp,
sortOrder,
hoverRow,
...expandStates,
...treeStates,
...currentData
}
};
}
//#endregion
//#region ../../packages/components/table/src/store/index.ts
function replaceColumn(array, column) {
return array.map((item) => {
if (item.id === column.id) return column;
else if (item.children?.length) item.children = replaceColumn(item.children, column);
return item;
});
}
function sortColumn(array) {
array.forEach((item) => {
item.no = item.getColumnIndex?.();
if (item.children?.length) sortColumn(item.children);
});
array.sort((cur, pre) => cur.no - pre.no);
}
function useStore() {
const instance = (0, vue.getCurrentInstance)();
const watcher = useWatcher$1();
const ns = useNamespace("table");
const { t } = useLocale();
const mutations = {
setData(states, data) {
const dataInstanceChanged = (0, vue.unref)(states._data) !== data;
states.data.value = data;
states._data.value = data;
instance.store.execQuery();
instance.store.updateCurrentRowData();
instance.store.updateExpandRows();
instance.store.updateTreeData(instance.store.states.defaultExpandAll.value);
if ((0, vue.unref)(states.reserveSelection)) instance.store.assertRowKey();
else if (dataInstanceChanged) instance.store.clearSelection();
else instance.store.cleanSelection();
instance.store.updateAllSelected();
if (instance.$ready) instance.store.scheduleLayout();
},
insertColumn(states, column, parent, updateColumnOrder) {
const array = (0, vue.unref)(states._columns);
let newColumns = [];
if (!parent) {
array.push(column);
newColumns = array;
} else {
if (parent && !parent.children) parent.children = [];
parent.children?.push(column);
newColumns = replaceColumn(array, parent);
}
sortColumn(newColumns);
states._columns.value = newColumns;
states.updateOrderFns.push(updateColumnOrder);
if (column.type === "selection") {
states.selectable.value = column.selectable;
states.reserveSelection.value = column.reserveSelection;
}
if (instance.$ready) {
instance.store.updateColumns();
instance.store.scheduleLayout();
}
},
updateColumnOrder(states, column) {
if (column.getColumnIndex?.() === column.no) return;
sortColumn(states._columns.value);
if (instance.$ready) instance.store.updateColumns();
},
removeColumn(states, column, parent, updateColumnOrder) {
const array = (0, vue.unref)(states._columns) || [];
if (parent) {
parent.children?.splice(parent.children.findIndex((item) => item.id === column.id), 1);
(0, vue.nextTick)(() => {
if (parent.children?.length === 0) delete parent.children;
});
states._columns.value = replaceColumn(array, parent);
} else {
const index = array.indexOf(column);
if (index > -1) {
array.splice(index, 1);
states._columns.value = array;
}
}
const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder);
updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1);
if (instance.$ready) {
instance.store.updateColumns();
instance.store.scheduleLayout();
}
},
sort(states, options) {
const { prop, order, init } = options;
if (prop) {
const column = (0, vue.unref)(states.columns).find((column) => column.property === prop);
if (column) {
column.order = order;
instance.store.updateSort(column, prop, order);
instance.store.commit("changeSortCondition", { init });
}
}
},
changeSortCondition(states, options) {
const { sortingColumn, sortProp, sortOrder } = states;
const columnValue = (0, vue.unref)(sortingColumn), propValue = (0, vue.unref)(sortProp), orderValue = (0, vue.unref)(sortOrder);
if (isNull(orderValue)) {
states.sortingColumn.value = null;
states.sortProp.value = null;
}
instance.store.execQuery({ filter: true });
if (!options || !(options.silent || options.init)) instance.emit("sort-change", {
column: columnValue,
prop: propValue,
order: orderValue
});
instance.store.updateTableScrollY();
},
filterChange(_states, options) {
const { column, values, silent } = options;
const newFilters = instance.store.updateFilters(column, values);
instance.store.execQuery();
if (!silent) instance.emit("filter-change", newFilters);
instance.store.updateTableScrollY();
},
toggleAllSelection() {
instance.store.toggleAllSelection?.();
},
rowSelectedChanged(_states, row) {
instance.store.toggleRowSelection(row);
instance.store.updateAllSelected();
},
setHoverRow(states, row) {
states.hoverRow.value = row;
},
setCurrentRow(_states, row) {
instance.store.updateCurrentRow(row);
}
};
const commit = function(name, ...args) {
const mutations = instance.store.mutations;
if (mutations[name]) mutations[name].apply(instance, [instance.store.states, ...args]);
else throw new Error(`Action not found: ${name}`);
};
const updateTableScrollY = function() {
(0, vue.nextTick)(() => instance.layout.updateScrollY.apply(instance.layout));
};
return {
ns,
t,
...watcher,
mutations,
commit,
updateTableScrollY
};
}
//#endregion
//#region ../../packages/components/table/src/store/helper.ts
const InitialStateMap = {
rowKey: "rowKey",
defaultExpandAll: "defaultExpandAll",
rowExpandable: "rowExpandable",
selectOnIndeterminate: "selectOnIndeterminate",
indent: "indent",
lazy: "lazy",
["treeProps.hasChildren"]: {
key: "lazyColumnIdentifier",
default: "hasChildren"
},
["treeProps.children"]: {
key: "childrenColumnName",
default: "children"
},
["treeProps.checkStrictly"]: {
key: "checkStrictly",
default: false
}
};
function createStore(table, props) {
if (!table) throw new Error("Table is required.");
const store = useStore();
store.toggleAllSelection = debounce(store._toggleAllSelection, 10);
Object.keys(InitialStateMap).forEach((key) => {
handleValue(getArrKeysValue(props, key), key, store);
});
proxyTableProps(store, props);
return store;
}
function proxyTableProps(store, props) {
Object.keys(InitialStateMap).forEach((key) => {
(0, vue.watch)(() => getArrKeysValue(props, key), (value) => {
handleValue(value, key, store);
});
});
}
function handleValue(value, propsKey, store) {
let newVal = value;
let storeKey = InitialStateMap[propsKey];
if (isObject$1(storeKey)) {
newVal = newVal || storeKey.default;
storeKey = storeKey.key;
}
store.states[storeKey].value = newVal;
}
function getArrKeysValue(props, key) {
if (key.includes(".")) {
const keyList = key.split(".");
let value = props;
keyList.forEach((k) => {
value = value[k];
});
return value;
} else return props[key];
}
//#endregion
//#region ../../packages/components/table/src/table-layout.ts
var TableLayout = class {
constructor(options) {
this.observers = [];
this.table = null;
this.store = null;
this.columns = [];
this.fit = true;
this.showHeader = true;
this.height = (0, vue.ref)(null);
this.scrollX = (0, vue.ref)(false);
this.scrollY = (0, vue.ref)(false);
this.bodyWidth = (0, vue.ref)(null);
this.fixedWidth = (0, vue.ref)(null);
this.rightFixedWidth = (0, vue.ref)(null);
this.gutterWidth = 0;
for (const name in options) if (hasOwn(options, name)) if ((0, vue.isRef)(this[name])) this[name].value = options[name];
else this[name] = options[name];
if (!this.table) throw new Error("Table is required for Table Layout");
if (!this.store) throw new Error("Store is required for Table Layout");
}
updateScrollY() {
const height = this.height.value;
/**
* When the height is not initialized, it is null.
* After the table is initialized, when the height is not configured, the height is 0.
*/
if (isNull(height)) return false;
const scrollBarRef = this.table.refs.scrollBarRef;
if (this.table.vnode.el && scrollBarRef?.wrapRef) {
let scrollY = true;
const prevScrollY = this.scrollY.value;
scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight;
this.scrollY.value = scrollY;
return prevScrollY !== scrollY;
}
return false;
}
setHeight(value, prop = "height") {
if (!isClient) return;
const el = this.table.vnode.el;
value = parseHeight(value);
this.height.value = Number(value);
if (!el && (value || value === 0)) {
(0, vue.nextTick)(() => this.setHeight(value, prop));
return;
}
if (el && isNumber(value)) {
el.style[prop] = `${value}px`;
this.updateElsHeight();
} else if (el && isString(value)) {
el.style[prop] = value;
this.updateElsHeight();
}
}
setMaxHeight(value) {
this.setHeight(value, "max-height");
}
getFlattenColumns() {
const flattenColumns = [];
this.table.store.states.columns.value.forEach((column) => {
if (column.isColumnGroup) flattenColumns.push.apply(flattenColumns, column.columns);
else flattenColumns.push(column);
});
return flattenColumns;
}
updateElsHeight() {
this.updateScrollY();
this.notifyObservers("scrollable");
}
headerDisplayNone(elm) {
if (!elm) return true;
let headerChild = elm;
while (headerChild.tagName !== "DIV") {
if (getComputedStyle(headerChild).display === "none") return true;
headerChild = headerChild.parentElement;
}
return false;
}
updateColumnsWidth() {
if (!isClient) return;
const fit = this.fit;
const bodyWidth = this.table.vnode.el?.clientWidth;
let bodyMinWidth = 0;
const flattenColumns = this.getFlattenColumns();
const flexColumns = flattenColumns.filter((column) => !isNumber(column.width));
flattenColumns.forEach((column) => {
if (isNumber(column.width) && column.realWidth) column.realWidth = null;
});
if (flexColumns.length > 0 && fit) {
flattenColumns.forEach((column) => {
bodyMinWidth += Number(column.width || column.minWidth || 80);
});
if (bodyMinWidth <= bodyWidth) {
this.scrollX.value = false;
const totalFlexWidth = bodyWidth - bodyMinWidth;
if (flexColumns.length === 1) flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth;
else {
const flexWidthPerPixel = totalFlexWidth / flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0);
let noneFirstWidth = 0;
flexColumns.forEach((column, index) => {
if (index === 0) return;
const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel);
noneFirstWidth += flexWidth;
column.realWidth = Number(column.minWidth || 80) + flexWidth;
});
flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;
}
} else {
this.scrollX.value = true;
flexColumns.forEach((column) => {
column.realWidth = Number(column.minWidth);
});
}
this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth);
this.table.state.resizeState.value.width = this.bodyWidth.value;
} else {
flattenColumns.forEach((column) => {
if (!column.width && !column.minWidth) column.realWidth = 80;
else column.realWidth = Number(column.width || column.minWidth);
bodyMinWidth += column.realWidth;
});
this.scrollX.value = bodyMinWidth > bodyWidth;
this.bodyWidth.value = bodyMinWidth;
}
const fixedColumns = this.store.states.fixedColumns.value;
if (fixedColumns.length > 0) {
let fixedWidth = 0;
fixedColumns.forEach((column) => {
fixedWidth += Number(column.realWidth || column.width);
});
this.fixedWidth.value = fixedWidth;
}
const rightFixedColumns = this.store.states.rightFixedColumns.value;
if (rightFixedColumns.length > 0) {
let rightFixedWidth = 0;
rightFixedColumns.forEach((column) => {
rightFixedWidth += Number(column.realWidth || column.width);
});
this.rightFixedWidth.value = rightFixedWidth;
}
this.notifyObservers("columns");
}
addObserver(observer) {
this.observers.push(observer);
}
removeObserver(observer) {
const index = this.observers.indexOf(observer);
if (index !== -1) this.observers.splice(index, 1);
}
notifyObservers(event) {
this.observers.forEach((observer) => {
switch (event) {
case "columns":
observer.state?.onColumnsChange(this);
break;
case "scrollable":
observer.state?.onScrollableChange(this);
break;
default: throw new Error(`Table Layout don't have event ${event}.`);
}
});
}
};
//#endregion
//#region ../../packages/components/table/src/filter-panel.vue?vue&type=script&lang.ts
var filter_panel_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTableFilterPanel",
components: {
ElCheckbox,
ElCheckboxGroup,
ElScrollbar,
ElTooltip,
ElIcon,
ArrowDown: arrow_down_default,
ArrowUp: arrow_up_default
},
props: {
placement: {
type: String,
default: "bottom-start"
},
store: { type: Object },
column: { type: Object },
upDataColumn: { type: Function },
appendTo: useTooltipContentProps.appendTo
},
setup(props) {
const instance = (0, vue.getCurrentInstance)();
const { t } = useLocale();
const ns = useNamespace("table-filter");
const parent = instance?.parent;
if (props.column && !parent.filterPanels.value[props.column.id]) parent.filterPanels.value[props.column.id] = instance;
const tooltipRef = (0, vue.ref)(null);
const rootRef = (0, vue.ref)(null);
const checkedIndex = (0, vue.ref)(0);
const filters = (0, vue.computed)(() => {
return props.column && props.column.filters;
});
const filterClassName = (0, vue.computed)(() => {
if (props.column && props.column.filterClassName) return `${ns.b()} ${props.column.filterClassName}`;
return ns.b();
});
const filterValue = (0, vue.computed)({
get: () => (props.column?.filteredValue || [])[0],
set: (value) => {
if (filteredValue.value) if (!isPropAbsent(value)) filteredValue.value.splice(0, 1, value);
else filteredValue.value.splice(0, 1);
}
});
const filteredValue = (0, vue.computed)({
get() {
if (props.column) return props.column.filteredValue || [];
return [];
},
set(value) {
if (props.column) props.upDataColumn?.("filteredValue", value);
}
});
const multiple = (0, vue.computed)(() => {
if (props.column) return props.column.filterMultiple;
return true;
});
const isActive = (filter) => {
return filter.value === filterValue.value;
};
const hidden = () => {
tooltipRef.value?.onClose();
};
const handleConfirm = () => {
confirmFilter(filteredValue.value);
hidden();
};
const handleReset = () => {
filteredValue.value = [];
confirmFilter(filteredValue.value);
hidden();
};
const handleSelect = (_filterValue, index) => {
filterValue.value = _filterValue;
checkedIndex.value = index;
if (!isPropAbsent(_filterValue)) confirmFilter(filteredValue.value);
else confirmFilter([]);
hidden();
};
const confirmFilter = (filteredValue) => {
props.store?.commit("filterChange", {
column: props.column,
values: filteredValue
});
props.store?.updateAllSelected();
};
const handleShowTooltip = () => {
rootRef.value?.focus();
!multiple.value && initCheckedIndex();
if (props.column) props.upDataColumn?.("filterOpened", true);
};
const handleHideTooltip = () => {
if (props.column) props.upDataColumn?.("filterOpened", false);
};
const initCheckedIndex = () => {
if (isPropAbsent(filterValue)) {
checkedIndex.value = 0;
return;
}
const idx = (filters.value || []).findIndex((item) => {
return item.value === filterValue.value;
});
checkedIndex.value = idx >= 0 ? idx + 1 : 0;
};
const handleKeydown = (event) => {
const code = getEventCode(event);
const len = (filters.value ? filters.value.length : 0) + 1;
let index = checkedIndex.value;
let isPreventDefault = true;
switch (code) {
case EVENT_CODE.down:
case EVENT_CODE.right:
index = (index + 1) % len;
break;
case EVENT_CODE.up:
case EVENT_CODE.left:
index = (index - 1 + len) % len;
break;
case EVENT_CODE.tab:
hidden();
isPreventDefault = false;
break;
case EVENT_CODE.enter:
case EVENT_CODE.space:
if (index === 0) handleSelect(null, 0);
else {
const item = (filters.value || [])[index - 1];
item.value && handleSelect(item.value, index);
}
break;
default:
isPreventDefault = false;
break;
}
isPreventDefault && event.preventDefault();
checkedIndex.value = index;
rootRef.value?.querySelector(`.${ns.e("list-item")}:nth-child(${index + 1})`)?.focus();
};
return {
multiple,
filterClassName,
filteredValue,
filterValue,
filters,
handleConfirm,
handleReset,
handleSelect,
isPropAbsent,
isActive,
t,
ns,
tooltipRef,
rootRef,
checkedIndex,
handleShowTooltip,
handleHideTooltip,
handleKeydown
};
}
});
//#endregion
//#region ../../packages/components/table/src/filter-panel.vue
const _hoisted_1$17 = ["disabled"];
const _hoisted_2$10 = ["tabindex", "aria-checked"];
const _hoisted_3$3 = [
"tabindex",
"aria-checked",
"onClick"
];
const _hoisted_4$2 = ["aria-label"];
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_checkbox = (0, vue.resolveComponent)("el-checkbox");
const _component_el_checkbox_group = (0, vue.resolveComponent)("el-checkbox-group");
const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
const _component_arrow_up = (0, vue.resolveComponent)("arrow-up");
const _component_arrow_down = (0, vue.resolveComponent)("arrow-down");
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
ref: "tooltipRef",
offset: 0,
placement: _ctx.placement,
"show-arrow": false,
trigger: "click",
role: "dialog",
teleported: "",
effect: "light",
pure: "",
loop: "",
"popper-class": _ctx.filterClassName,
persistent: "",
"append-to": _ctx.appendTo,
onShow: _ctx.handleShowTooltip,
onHide: _ctx.handleHideTooltip
}, {
content: (0, vue.withCtx)(() => [_ctx.multiple ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "rootRef",
tabindex: "-1",
class: (0, vue.normalizeClass)(_ctx.ns.e("multiple"))
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("content")) }, [(0, vue.createVNode)(_component_el_scrollbar, { "wrap-class": _ctx.ns.e("wrap") }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_checkbox_group, {
modelValue: _ctx.filteredValue,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.filteredValue = $event),
class: (0, vue.normalizeClass)(_ctx.ns.e("checkbox-group"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.filters, (filter) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_checkbox, {
key: filter.value,
value: filter.value
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(filter.text), 1)]),
_: 2
}, 1032, ["value"]);
}), 128))]),
_: 1
}, 8, ["modelValue", "class"])]),
_: 1
}, 8, ["wrap-class"])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("bottom")) }, [(0, vue.createElementVNode)("button", {
class: (0, vue.normalizeClass)(_ctx.ns.is("disabled", _ctx.filteredValue.length === 0)),
disabled: _ctx.filteredValue.length === 0,
type: "button",
onClick: _cache[1] || (_cache[1] = (...args) => _ctx.handleConfirm && _ctx.handleConfirm(...args))
}, (0, vue.toDisplayString)(_ctx.t("el.table.confirmFilter")), 11, _hoisted_1$17), (0, vue.createElementVNode)("button", {
type: "button",
onClick: _cache[2] || (_cache[2] = (...args) => _ctx.handleReset && _ctx.handleReset(...args))
}, (0, vue.toDisplayString)(_ctx.t("el.table.resetFilter")), 1)], 2)], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
key: 1,
ref: "rootRef",
tabindex: "-1",
role: "radiogroup",
class: (0, vue.normalizeClass)(_ctx.ns.e("list")),
onKeydown: _cache[4] || (_cache[4] = (...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args))
}, [(0, vue.createElementVNode)("li", {
role: "radio",
class: (0, vue.normalizeClass)([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isPropAbsent(_ctx.filterValue))]),
tabindex: _ctx.checkedIndex === 0 ? 0 : -1,
"aria-checked": _ctx.isPropAbsent(_ctx.filterValue),
onClick: _cache[3] || (_cache[3] = ($event) => _ctx.handleSelect(null, 0))
}, (0, vue.toDisplayString)(_ctx.t("el.table.clearFilter")), 11, _hoisted_2$10), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.filters, (filter, idx) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: filter.value,
role: "radio",
class: (0, vue.normalizeClass)([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isActive(filter))]),
tabindex: _ctx.checkedIndex === idx + 1 ? 0 : -1,
"aria-checked": _ctx.isActive(filter),
onClick: ($event) => _ctx.handleSelect(filter.value, idx + 1)
}, (0, vue.toDisplayString)(filter.text), 11, _hoisted_3$3);
}), 128))], 34))]),
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("button", {
type: "button",
class: (0, vue.normalizeClass)(`${_ctx.ns.namespace.value}-table__column-filter-trigger`),
"aria-label": _ctx.t("el.table.filterLabel", { column: _ctx.column?.label || "" })
}, [(0, vue.createVNode)(_component_el_icon, null, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "filter-icon", {}, () => [_ctx.column?.filterOpened ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_arrow_up, { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)(_component_arrow_down, { key: 1 }))])]),
_: 3
})], 10, _hoisted_4$2)]),
_: 3
}, 8, [
"placement",
"popper-class",
"append-to",
"onShow",
"onHide"
]);
}
var filter_panel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(filter_panel_vue_vue_type_script_lang_default, [["render", _sfc_render$4]]);
//#endregion
//#region ../../packages/components/table/src/layout-observer.ts
function useLayoutObserver(root) {
const instance = (0, vue.getCurrentInstance)();
(0, vue.onBeforeMount)(() => {
tableLayout.value.addObserver(instance);
});
(0, vue.onMounted)(() => {
onColumnsChange(tableLayout.value);
onScrollableChange(tableLayout.value);
});
(0, vue.onUpdated)(() => {
onColumnsChange(tableLayout.value);
onScrollableChange(tableLayout.value);
});
(0, vue.onUnmounted)(() => {
tableLayout.value.removeObserver(instance);
});
const tableLayout = (0, vue.computed)(() => {
const layout = root.layout;
if (!layout) throw new Error("Can not find table layout.");
return layout;
});
const onColumnsChange = (layout) => {
const cols = root.vnode.el?.querySelectorAll("colgroup > col") || [];
if (!cols.length) return;
const flattenColumns = layout.getFlattenColumns();
const columnsMap = {};
flattenColumns.forEach((column) => {
columnsMap[column.id] = column;
});
for (let i = 0, j = cols.length; i < j; i++) {
const col = cols[i];
const column = columnsMap[col.getAttribute("name")];
if (column) col.setAttribute("width", column.realWidth || column.width);
}
};
const onScrollableChange = (layout) => {
const cols = root.vnode.el?.querySelectorAll("colgroup > col[name=gutter]") || [];
for (let i = 0, j = cols.length; i < j; i++) cols[i].setAttribute("width", layout.scrollY.value ? layout.gutterWidth : "0");
const ths = root.vnode.el?.querySelectorAll("th.gutter") || [];
for (let i = 0, j = ths.length; i < j; i++) {
const th = ths[i];
th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0";
th.style.display = layout.scrollY.value ? "" : "none";
}
};
return {
tableLayout: tableLayout.value,
onColumnsChange,
onScrollableChange
};
}
//#endregion
//#region ../../packages/components/table/src/tokens.ts
const TABLE_INJECTION_KEY = Symbol("ElTable");
//#endregion
//#region ../../packages/components/table/src/table-header/event-helper.ts
function useEvent(props, emit) {
const instance = (0, vue.getCurrentInstance)();
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const handleFilterClick = (event) => {
event.stopPropagation();
};
const handleHeaderClick = (event, column) => {
if (!column.filters && column.sortable) handleSortClick(event, column, false);
else if (column.filterable && !column.sortable) handleFilterClick(event);
parent?.emit("header-click", column, event);
};
const handleHeaderContextMenu = (event, column) => {
parent?.emit("header-contextmenu", column, event);
};
const draggingColumn = (0, vue.ref)(null);
const dragging = (0, vue.ref)(false);
const dragState = (0, vue.ref)();
const handleMouseDown = (event, column) => {
if (!isClient) return;
if (column.children && column.children.length > 0) return;
/* istanbul ignore if */
if (draggingColumn.value && props.border && draggingColumn.value.id === column.id) {
dragging.value = true;
const table = parent;
emit("set-drag-visible", true);
const tableLeft = (table?.vnode.el)?.getBoundingClientRect().left;
const columnEl = instance?.vnode?.el?.querySelector(`th.${column.id}`);
const columnRect = columnEl.getBoundingClientRect();
const minLeft = columnRect.left - tableLeft + 30;
addClass(columnEl, "noclick");
dragState.value = {
startMouseLeft: event.clientX,
startLeft: columnRect.right - tableLeft,
startColumnLeft: columnRect.left - tableLeft,
tableLeft
};
const resizeProxy = table?.refs.resizeProxy;
resizeProxy.style.left = `${dragState.value.startLeft}px`;
document.onselectstart = function() {
return false;
};
document.ondragstart = function() {
return false;
};
const handleMouseMove = (event) => {
const deltaLeft = event.clientX - dragState.value.startMouseLeft;
const proxyLeft = dragState.value.startLeft + deltaLeft;
resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`;
};
const handleMouseUp = () => {
if (dragging.value) {
const { startColumnLeft, startLeft } = dragState.value;
column.width = column.realWidth = Number.parseInt(resizeProxy.style.left, 10) - startColumnLeft;
table?.emit("header-dragend", column.width, startLeft - startColumnLeft, column, event);
requestAnimationFrame(() => {
props.store.scheduleLayout(false, true);
});
document.body.style.cursor = "";
dragging.value = false;
draggingColumn.value = null;
dragState.value = void 0;
emit("set-drag-visible", false);
}
document.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseup", handleMouseUp);
document.onselectstart = null;
document.ondragstart = null;
setTimeout(() => {
removeClass(columnEl, "noclick");
}, 0);
};
document.addEventListener("mousemove", handleMouseMove);
document.addEventListener("mouseup", handleMouseUp);
}
};
const handleMouseMove = (event, column) => {
if (!props.border || column.children && column.children.length > 0) return;
const el = event.target;
const target = isElement$1(el) ? el.closest("th") : null;
if (!target) return;
const isSortable = hasClass(target, "is-sortable");
if (isSortable) {
const cursor = dragging.value ? "col-resize" : "";
target.style.cursor = cursor;
const caret = target.querySelector(".caret-wrapper");
if (caret) caret.style.cursor = cursor;
}
if (!column.resizable || dragging.value) {
draggingColumn.value = null;
return;
}
const rect = target.getBoundingClientRect();
const isLastTh = target.parentNode?.lastElementChild === target;
const allowDrag = props.allowDragLastColumn || !isLastTh;
const isResizeHandleActive = rect.width > 12 && rect.right - event.clientX < 8 && allowDrag;
const cursor = isResizeHandleActive ? "col-resize" : "";
document.body.style.cursor = cursor;
draggingColumn.value = isResizeHandleActive ? column : null;
if (isSortable) target.style.cursor = cursor;
};
const handleMouseOut = () => {
if (!isClient || dragging.value) return;
document.body.style.cursor = "";
};
const toggleOrder = ({ order, sortOrders }) => {
if (order === "") return sortOrders[0];
const index = sortOrders.indexOf(order || null);
return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];
};
const handleSortClick = (event, column, givenOrder) => {
event.stopPropagation();
const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column);
const target = event.target?.closest("th");
if (target) {
if (hasClass(target, "noclick")) {
removeClass(target, "noclick");
return;
}
}
if (!column.sortable) return;
const clickTarget = event.currentTarget;
if (["ascending", "descending"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) return;
const states = props.store.states;
let sortProp = states.sortProp.value;
let sortOrder;
const sortingColumn = states.sortingColumn.value;
if (sortingColumn !== column || sortingColumn === column && isNull(sortingColumn.order)) {
if (sortingColumn) sortingColumn.order = null;
states.sortingColumn.value = column;
sortProp = column.property;
}
if (!order) sortOrder = column.order = null;
else sortOrder = column.order = order;
states.sortProp.value = sortProp;
states.sortOrder.value = sortOrder;
parent?.store.commit("changeSortCondition");
};
return {
handleHeaderClick,
handleHeaderContextMenu,
handleMouseDown,
handleMouseMove,
handleMouseOut,
handleSortClick,
handleFilterClick
};
}
//#endregion
//#region ../../packages/components/table/src/table-header/style.helper.ts
function useStyle$2(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const getHeaderRowStyle = (rowIndex) => {
const headerRowStyle = parent?.props.headerRowStyle;
if (isFunction$1(headerRowStyle)) return headerRowStyle.call(null, { rowIndex });
return headerRowStyle;
};
const getHeaderRowClass = (rowIndex) => {
const classes = [];
const headerRowClassName = parent?.props.headerRowClassName;
if (isString(headerRowClassName)) classes.push(headerRowClassName);
else if (isFunction$1(headerRowClassName)) classes.push(headerRowClassName.call(null, { rowIndex }));
return classes.join(" ");
};
const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => {
let headerCellStyles = parent?.props.headerCellStyle ?? {};
if (isFunction$1(headerCellStyles)) headerCellStyles = headerCellStyles.call(null, {
rowIndex,
columnIndex,
row,
column
});
const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row);
ensurePosition(fixedStyle, "left");
ensurePosition(fixedStyle, "right");
return Object.assign({}, headerCellStyles, fixedStyle);
};
const getHeaderCellClass = (rowIndex, columnIndex, row, column) => {
const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row);
const classes = [
column.id,
column.order,
column.headerAlign,
column.className,
column.labelClassName,
...fixedClasses
];
if (!column.children) classes.push("is-leaf");
if (column.sortable) classes.push("is-sortable");
const headerCellClassName = parent?.props.headerCellClassName;
if (isString(headerCellClassName)) classes.push(headerCellClassName);
else if (isFunction$1(headerCellClassName)) classes.push(headerCellClassName.call(null, {
rowIndex,
columnIndex,
row,
column
}));
classes.push(ns.e("cell"));
return classes.filter((className) => Boolean(className)).join(" ");
};
return {
getHeaderRowStyle,
getHeaderRowClass,
getHeaderCellStyle,
getHeaderCellClass
};
}
//#endregion
//#region ../../packages/components/table/src/table-header/utils-helper.ts
const getAllColumns = (columns) => {
const result = [];
columns.forEach((column) => {
if (column.children) {
result.push(column);
result.push.apply(result, getAllColumns(column.children));
} else result.push(column);
});
return result;
};
const convertToRows = (originColumns) => {
let maxLevel = 1;
const traverse = (column, parent) => {
if (parent) {
column.level = parent.level + 1;
if (maxLevel < column.level) maxLevel = column.level;
}
if (column.children) {
let colSpan = 0;
column.children.forEach((subColumn) => {
traverse(subColumn, column);
colSpan += subColumn.colSpan;
});
column.colSpan = colSpan;
} else column.colSpan = 1;
};
originColumns.forEach((column) => {
column.level = 1;
traverse(column, void 0);
});
const rows = [];
for (let i = 0; i < maxLevel; i++) rows.push([]);
getAllColumns(originColumns).forEach((column) => {
if (!column.children) column.rowSpan = maxLevel - column.level + 1;
else {
column.rowSpan = 1;
column.children.forEach((col) => col.isSubColumn = true);
}
rows[column.level - 1].push(column);
});
return rows;
};
function useUtils$1(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const columnRows = (0, vue.computed)(() => {
return convertToRows(props.store.states.originColumns.value);
});
const isGroup = (0, vue.computed)(() => {
const result = columnRows.value.length > 1;
if (result && parent) parent.state.isGroup.value = true;
return result;
});
const toggleAllSelection = (event) => {
event.stopPropagation();
parent?.store.commit("toggleAllSelection");
};
return {
isGroup,
toggleAllSelection,
columnRows
};
}
//#endregion
//#region ../../packages/components/table/src/table-header/index.ts
var table_header_default = (0, vue.defineComponent)({
name: "ElTableHeader",
components: { ElCheckbox },
props: {
fixed: {
type: String,
default: ""
},
store: {
required: true,
type: Object
},
border: Boolean,
defaultSort: {
type: Object,
default: () => {
return {
prop: "",
order: ""
};
}
},
appendFilterPanelTo: { type: String },
allowDragLastColumn: { type: Boolean }
},
setup(props, { emit }) {
const instance = (0, vue.getCurrentInstance)();
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const filterPanels = (0, vue.ref)({});
const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);
const isTableLayoutAuto = parent?.props.tableLayout === "auto";
const saveIndexSelection = (0, vue.reactive)(/* @__PURE__ */ new Map());
const theadRef = (0, vue.ref)();
let delayId;
const updateFixedColumnStyle = () => {
delayId = setTimeout(() => {
if (saveIndexSelection.size > 0) {
saveIndexSelection.forEach((column, key) => {
const el = theadRef.value.querySelector(`.${key.replace(/\s/g, ".")}`);
if (el) column.width = el.getBoundingClientRect().width || column.width;
});
saveIndexSelection.clear();
}
});
};
(0, vue.watch)(saveIndexSelection, updateFixedColumnStyle);
(0, vue.onBeforeUnmount)(() => {
if (delayId) {
clearTimeout(delayId);
delayId = void 0;
}
});
(0, vue.onMounted)(async () => {
await (0, vue.nextTick)();
await (0, vue.nextTick)();
const { prop, order } = props.defaultSort;
parent?.store.commit("sort", {
prop,
order,
init: true
});
updateFixedColumnStyle();
});
const { handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick } = useEvent(props, emit);
const { getHeaderRowStyle, getHeaderRowClass, getHeaderCellStyle, getHeaderCellClass } = useStyle$2(props);
const { isGroup, toggleAllSelection, columnRows } = useUtils$1(props);
const { t } = useLocale();
instance.state = {
onColumnsChange,
onScrollableChange
};
instance.filterPanels = filterPanels;
return {
ns,
t,
filterPanels,
onColumnsChange,
onScrollableChange,
columnRows,
getHeaderRowClass,
getHeaderRowStyle,
getHeaderCellClass,
getHeaderCellStyle,
handleHeaderClick,
handleHeaderContextMenu,
handleMouseDown,
handleMouseMove,
handleMouseOut,
handleSortClick,
handleFilterClick,
isGroup,
toggleAllSelection,
saveIndexSelection,
isTableLayoutAuto,
theadRef,
updateFixedColumnStyle
};
},
render() {
const { ns, t, isGroup, columnRows, getHeaderCellStyle, getHeaderCellClass, getHeaderRowClass, getHeaderRowStyle, handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleSortClick, handleMouseOut, store, $parent, saveIndexSelection, isTableLayoutAuto } = this;
let rowSpan = 1;
return (0, vue.h)("thead", {
ref: "theadRef",
class: ns.is("group", isGroup)
}, columnRows.map((subColumns, rowIndex) => (0, vue.h)("tr", {
class: getHeaderRowClass(rowIndex),
key: rowIndex,
style: getHeaderRowStyle(rowIndex)
}, subColumns.map((column, cellIndex) => {
if (column.rowSpan > rowSpan) rowSpan = column.rowSpan;
const _class = getHeaderCellClass(rowIndex, cellIndex, subColumns, column);
if (isTableLayoutAuto && column.fixed) saveIndexSelection.set(_class, column);
return (0, vue.h)("th", {
class: _class,
colspan: column.colSpan,
key: `${column.id}-thead`,
rowspan: column.rowSpan,
scope: column.colSpan > 1 ? "colgroup" : "col",
ariaSort: column.sortable ? column.order : void 0,
style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column),
onClick: ($event) => {
if ($event.currentTarget?.classList.contains("noclick")) return;
handleHeaderClick($event, column);
},
onContextmenu: ($event) => handleHeaderContextMenu($event, column),
onMousedown: ($event) => handleMouseDown($event, column),
onMousemove: ($event) => handleMouseMove($event, column),
onMouseout: handleMouseOut
}, [(0, vue.h)("div", { class: ["cell", column.filteredValue && column.filteredValue.length > 0 ? "highlight" : ""] }, [
column.renderHeader ? column.renderHeader({
column,
$index: cellIndex,
store,
_self: $parent
}) : column.label,
column.sortable && (0, vue.h)("button", {
type: "button",
class: "caret-wrapper",
"aria-label": t("el.table.sortLabel", { column: column.label || "" }),
onClick: ($event) => handleSortClick($event, column)
}, [(0, vue.h)("i", {
onClick: ($event) => handleSortClick($event, column, "ascending"),
class: "sort-caret ascending"
}), (0, vue.h)("i", {
onClick: ($event) => handleSortClick($event, column, "descending"),
class: "sort-caret descending"
})]),
column.filterable && (0, vue.h)(filter_panel_default, {
store,
placement: column.filterPlacement || "bottom-start",
appendTo: $parent?.appendFilterPanelTo,
column,
upDataColumn: (key, value) => {
column[key] = value;
}
}, { "filter-icon": () => column.renderFilterIcon ? column.renderFilterIcon({ filterOpened: column.filterOpened }) : null })
])]);
}))));
}
});
//#endregion
//#region ../../packages/components/table/src/table-body/events-helper.ts
function useEvents(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const tooltipContent = (0, vue.ref)("");
const tooltipTrigger = (0, vue.ref)((0, vue.h)("div"));
const handleEvent = (event, row, name) => {
const table = parent;
const cell = getCell(event);
let column = null;
const namespace = table?.vnode.el?.dataset.prefix;
if (cell) {
column = getColumnByCell({ columns: props.store?.states.columns.value ?? [] }, cell, namespace);
if (column) table?.emit(`cell-${name}`, row, column, cell, event);
}
table?.emit(`row-${name}`, row, column, event);
};
const handleDoubleClick = (event, row) => {
handleEvent(event, row, "dblclick");
};
const handleClick = (event, row) => {
props.store?.commit("setCurrentRow", row);
handleEvent(event, row, "click");
};
const handleContextMenu = (event, row) => {
handleEvent(event, row, "contextmenu");
};
const handleMouseEnter = debounce((index) => {
props.store?.commit("setHoverRow", index);
}, 30);
const handleMouseLeave = debounce(() => {
props.store?.commit("setHoverRow", null);
}, 30);
const getPadding = (el) => {
const style = window.getComputedStyle(el, null);
return {
left: Number.parseInt(style.paddingLeft, 10) || 0,
right: Number.parseInt(style.paddingRight, 10) || 0,
top: Number.parseInt(style.paddingTop, 10) || 0,
bottom: Number.parseInt(style.paddingBottom, 10) || 0
};
};
const toggleRowClassByCell = (rowSpan, event, toggle) => {
let node = (event?.target)?.parentNode;
while (rowSpan > 1) {
node = node?.nextSibling;
if (!node || node.nodeName !== "TR") break;
toggle(node, "hover-row hover-fixed-row");
rowSpan--;
}
};
const handleCellMouseEnter = (event, row, tooltipOptions) => {
if (!parent) return;
const table = parent;
const cell = getCell(event);
const namespace = table?.vnode.el?.dataset.prefix;
let column = null;
if (cell) {
column = getColumnByCell({ columns: props.store?.states.columns.value ?? [] }, cell, namespace);
if (!column) return;
if (cell.rowSpan > 1) toggleRowClassByCell(cell.rowSpan, event, addClass);
const hoverState = table.hoverState = {
cell,
column,
row
};
table?.emit("cell-mouse-enter", hoverState.row, hoverState.column, hoverState.cell, event);
}
if (!tooltipOptions) {
if (removePopper?.trigger === cell) removePopper?.();
return;
}
const cellChild = event.target.querySelector(".cell");
if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length && cellChild.textContent?.trim())) return;
const range = document.createRange();
range.setStart(cellChild, 0);
range.setEnd(cellChild, cellChild.childNodes.length);
/** detail: https://github.com/element-plus/element-plus/issues/10790
* What went wrong?
* UI > Browser > Zoom, In Blink/WebKit, getBoundingClientRect() sometimes returns inexact values, probably due to lost precision during internal calculations. In the example above:
* - Expected: 188
* - Actual: 188.00000762939453
*/
const { width: rangeWidth, height: rangeHeight } = range.getBoundingClientRect();
const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect();
const { top, left, right, bottom } = getPadding(cellChild);
const horizontalPadding = left + right;
const verticalPadding = top + bottom;
if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) createTablePopper(tooltipOptions, (cell?.innerText || cell?.textContent) ?? "", row, column, cell, table);
else if (removePopper?.trigger === cell) removePopper?.();
};
const handleCellMouseLeave = (event) => {
const cell = getCell(event);
if (!cell) return;
if (cell.rowSpan > 1) toggleRowClassByCell(cell.rowSpan, event, removeClass);
const oldHoverState = parent?.hoverState;
parent?.emit("cell-mouse-leave", oldHoverState?.row, oldHoverState?.column, oldHoverState?.cell, event);
};
return {
handleDoubleClick,
handleClick,
handleContextMenu,
handleMouseEnter,
handleMouseLeave,
handleCellMouseEnter,
handleCellMouseLeave,
tooltipContent,
tooltipTrigger
};
}
//#endregion
//#region ../../packages/components/table/src/table-body/styles-helper.ts
function useStyles$1(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const getRowStyle = (row, rowIndex) => {
const rowStyle = parent?.props.rowStyle;
if (isFunction$1(rowStyle)) return rowStyle.call(null, {
row,
rowIndex
});
return rowStyle || null;
};
const getRowClass = (row, rowIndex, displayIndex) => {
const classes = [ns.e("row")];
if (parent?.props.highlightCurrentRow && row === props.store?.states.currentRow.value) classes.push("current-row");
if (props.stripe && displayIndex % 2 === 1) classes.push(ns.em("row", "striped"));
const rowClassName = parent?.props.rowClassName;
if (isString(rowClassName)) classes.push(rowClassName);
else if (isFunction$1(rowClassName)) classes.push(rowClassName.call(null, {
row,
rowIndex
}));
return classes;
};
const getCellStyle = (rowIndex, columnIndex, row, column) => {
const cellStyle = parent?.props.cellStyle;
let cellStyles = cellStyle ?? {};
if (isFunction$1(cellStyle)) cellStyles = cellStyle.call(null, {
rowIndex,
columnIndex,
row,
column
});
const fixedStyle = getFixedColumnOffset(columnIndex, props?.fixed, props.store);
ensurePosition(fixedStyle, "left");
ensurePosition(fixedStyle, "right");
return Object.assign({}, cellStyles, fixedStyle);
};
const getCellClass = (rowIndex, columnIndex, row, column, offset) => {
const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props?.fixed, props.store, void 0, offset);
const classes = [
column.id,
column.align,
column.className,
...fixedClasses
];
const cellClassName = parent?.props.cellClassName;
if (isString(cellClassName)) classes.push(cellClassName);
else if (isFunction$1(cellClassName)) classes.push(cellClassName.call(null, {
rowIndex,
columnIndex,
row,
column
}));
classes.push(ns.e("cell"));
return classes.filter((className) => Boolean(className)).join(" ");
};
const getSpan = (row, column, rowIndex, columnIndex) => {
let rowspan = 1;
let colspan = 1;
const fn = parent?.props.spanMethod;
if (isFunction$1(fn)) {
const result = fn({
row,
column,
rowIndex,
columnIndex
});
if (isArray$1(result)) {
rowspan = result[0];
colspan = result[1];
} else if (isObject$1(result)) {
rowspan = result.rowspan;
colspan = result.colspan;
}
}
return {
rowspan,
colspan
};
};
const getColspanRealWidth = (columns, colspan, index) => {
if (colspan < 1) return columns[index].realWidth;
const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan);
return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1));
};
return {
getRowStyle,
getRowClass,
getCellStyle,
getCellClass,
getSpan,
getColspanRealWidth
};
}
//#endregion
//#region ../../packages/components/table/src/table-body/td-wrapper.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$16 = ["colspan", "rowspan"];
var td_wrapper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "TableTdWrapper",
__name: "td-wrapper",
props: {
colspan: {
type: Number,
default: 1
},
rowspan: {
type: Number,
default: 1
}
},
setup(__props) {
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
colspan: __props.colspan,
rowspan: __props.rowspan
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 8, _hoisted_1$16);
};
}
});
//#endregion
//#region ../../packages/components/table/src/table-body/td-wrapper.vue
var td_wrapper_default = td_wrapper_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/table/src/table-body/render-helper.ts
function useRender$1(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const { handleDoubleClick, handleClick, handleContextMenu, handleMouseEnter, handleMouseLeave, handleCellMouseEnter, handleCellMouseLeave, tooltipContent, tooltipTrigger } = useEvents(props);
const { getRowStyle, getRowClass, getCellStyle, getCellClass, getSpan, getColspanRealWidth } = useStyles$1(props);
let displayIndex = -1;
const firstDefaultColumnIndex = (0, vue.computed)(() => {
return props.store?.states.columns.value.findIndex(({ type }) => type === "default");
});
const getKeyOfRow = (row, index) => {
const rowKey = (parent?.props)?.rowKey;
if (rowKey) return getRowIdentity(row, rowKey);
return index;
};
const rowRender = (row, $index, treeRowData, expanded = false) => {
const { tooltipEffect, tooltipOptions, store } = props;
const { indent, columns } = store.states;
const rowClasses = [];
let display = true;
if (treeRowData) {
rowClasses.push(ns.em("row", `level-${treeRowData.level}`));
display = !!treeRowData.display;
}
if ($index === 0) displayIndex = -1;
if (props.stripe && display) displayIndex++;
rowClasses.push(...getRowClass(row, $index, displayIndex));
return (0, vue.h)("tr", {
style: [display ? null : { display: "none" }, getRowStyle(row, $index)],
class: rowClasses,
key: getKeyOfRow(row, $index),
onDblclick: ($event) => handleDoubleClick($event, row),
onClick: ($event) => handleClick($event, row),
onContextmenu: ($event) => handleContextMenu($event, row),
onMouseenter: () => handleMouseEnter($index),
onMouseleave: handleMouseLeave
}, columns.value.map((column, cellIndex) => {
const { rowspan, colspan } = getSpan(row, column, $index, cellIndex);
if (!rowspan || !colspan) return null;
const columnData = Object.assign({}, column);
columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex);
const data = {
store,
_self: props.context || parent,
column: columnData,
row,
$index,
cellIndex,
expanded
};
if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {
data.treeNode = {
indent: treeRowData.level && treeRowData.level * indent.value,
level: treeRowData.level
};
if (isBoolean(treeRowData.expanded)) {
data.treeNode.expanded = treeRowData.expanded;
if ("loading" in treeRowData) data.treeNode.loading = treeRowData.loading;
if ("noLazyChildren" in treeRowData) data.treeNode.noLazyChildren = treeRowData.noLazyChildren;
}
}
const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`;
const patchKey = columnData.columnKey || columnData.rawColumnKey || "";
const mergedTooltipOptions = column.showOverflowTooltip && merge({ effect: tooltipEffect }, tooltipOptions, column.showOverflowTooltip);
return (0, vue.h)(td_wrapper_default, {
style: getCellStyle($index, cellIndex, row, column),
class: getCellClass($index, cellIndex, row, column, colspan - 1),
key: `${patchKey}${baseKey}`,
rowspan,
colspan,
onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions),
onMouseleave: handleCellMouseLeave
}, { default: () => cellChildren(cellIndex, column, data) });
}));
};
const cellChildren = (_cellIndex, column, data) => {
return column.renderCell(data);
};
const wrappedRowRender = (row, $index) => {
const store = props.store;
const { isRowExpanded, assertRowKey } = store;
const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;
const columns = store.states.columns.value;
if (columns.some(({ type }) => type === "expand")) {
const expanded = isRowExpanded(row);
const tr = rowRender(row, $index, void 0, expanded);
const renderExpanded = parent?.renderExpanded;
if (!renderExpanded) {
console.error("[Element Error]renderExpanded is required.");
return tr;
}
const rows = [[tr]];
if (parent.props.preserveExpandedContent || expanded) rows[0].push((0, vue.h)("tr", {
key: `expanded-row__${tr.key}`,
style: { display: expanded ? "" : "none" }
}, [(0, vue.h)("td", {
colspan: columns.length,
class: `${ns.e("cell")} ${ns.e("expanded-cell")}`
}, [renderExpanded({
row,
$index,
store,
expanded
})])]));
return rows;
} else if (Object.keys(treeData.value).length) {
assertRowKey();
const key = getRowIdentity(row, rowKey.value);
let cur = treeData.value[key];
let treeRowData = null;
if (cur) {
treeRowData = {
expanded: cur.expanded,
level: cur.level,
display: true,
noLazyChildren: void 0,
loading: void 0
};
if (isBoolean(cur.lazy)) {
if (treeRowData && isBoolean(cur.loaded) && cur.loaded) treeRowData.noLazyChildren = !(cur.children && cur.children.length);
treeRowData.loading = cur.loading;
}
}
const tmp = [rowRender(row, $index, treeRowData ?? void 0)];
if (cur) {
let i = 0;
const traverse = (children, parent) => {
if (!(children && children.length && parent)) return;
children.forEach((node) => {
const innerTreeRowData = {
display: parent.display && parent.expanded,
level: parent.level + 1,
expanded: false,
noLazyChildren: false,
loading: false
};
const childKey = getRowIdentity(node, rowKey.value);
if (isPropAbsent(childKey)) throw new Error("For nested data item, row-key is required.");
cur = { ...treeData.value[childKey] };
if (cur) {
innerTreeRowData.expanded = cur.expanded;
cur.level = cur.level || innerTreeRowData.level;
cur.display = !!(cur.expanded && innerTreeRowData.display);
if (isBoolean(cur.lazy)) {
if (isBoolean(cur.loaded) && cur.loaded) innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);
innerTreeRowData.loading = cur.loading;
}
}
i++;
tmp.push(rowRender(node, $index + i, innerTreeRowData));
if (cur) traverse(lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value], cur);
});
};
cur.display = true;
traverse(lazyTreeNodeMap.value[key] || row[childrenColumnName.value], cur);
}
return tmp;
} else return rowRender(row, $index, void 0);
};
return {
wrappedRowRender,
tooltipContent,
tooltipTrigger
};
}
//#endregion
//#region ../../packages/components/table/src/table-body/defaults.ts
const defaultProps$1 = {
store: {
required: true,
type: Object
},
stripe: Boolean,
tooltipEffect: String,
tooltipOptions: { type: Object },
context: {
default: () => ({}),
type: Object
},
rowClassName: [String, Function],
rowStyle: [Object, Function],
fixed: {
type: String,
default: ""
},
highlight: Boolean
};
//#endregion
//#region ../../packages/components/table/src/table-body/index.ts
var table_body_default = (0, vue.defineComponent)({
name: "ElTableBody",
props: defaultProps$1,
setup(props) {
const instance = (0, vue.getCurrentInstance)();
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender$1(props);
const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);
const hoveredCellList = [];
(0, vue.watch)(props.store?.states.hoverRow, (newVal, oldVal) => {
const el = instance?.vnode.el;
const rows = Array.from(el?.children || []).filter((e) => e?.classList.contains(`${ns.e("row")}`));
let rowNum = newVal;
const childNodes = rows[rowNum]?.childNodes;
if (childNodes?.length) {
let control = 0;
Array.from(childNodes).reduce((acc, item, index) => {
if (childNodes[index]?.colSpan > 1) control = childNodes[index]?.colSpan;
if (item.nodeName !== "TD" && control === 0) acc.push(index);
control > 0 && control--;
return acc;
}, []).forEach((rowIndex) => {
rowNum = newVal;
while (rowNum > 0) {
const preChildNodes = rows[rowNum - 1]?.childNodes;
if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === "TD" && preChildNodes[rowIndex].rowSpan > 1) {
addClass(preChildNodes[rowIndex], "hover-cell");
hoveredCellList.push(preChildNodes[rowIndex]);
break;
}
rowNum--;
}
});
} else {
hoveredCellList.forEach((item) => removeClass(item, "hover-cell"));
hoveredCellList.length = 0;
}
if (!props.store?.states.isComplex.value || !isClient) return;
rAF(() => {
const oldRow = rows[oldVal];
const newRow = rows[newVal];
if (oldRow && !oldRow.classList.contains("hover-fixed-row")) removeClass(oldRow, "hover-row");
if (newRow) addClass(newRow, "hover-row");
});
});
(0, vue.onUnmounted)(() => {
removePopper?.();
});
return {
ns,
onColumnsChange,
onScrollableChange,
wrappedRowRender,
tooltipContent,
tooltipTrigger
};
},
render() {
const { wrappedRowRender, store } = this;
return (0, vue.h)("tbody", { tabIndex: -1 }, [(store?.states.data.value || []).reduce((acc, row) => {
return acc.concat(wrappedRowRender(row, acc.length));
}, [])]);
}
});
//#endregion
//#region ../../packages/components/table/src/table-footer/mapState-helper.ts
function useMapState() {
const store = (0, vue.inject)(TABLE_INJECTION_KEY)?.store;
return {
leftFixedLeafCount: (0, vue.computed)(() => {
return store?.states.fixedLeafColumnsLength.value ?? 0;
}),
rightFixedLeafCount: (0, vue.computed)(() => {
return store?.states.rightFixedColumns.value.length ?? 0;
}),
columnsCount: (0, vue.computed)(() => {
return store?.states.columns.value.length ?? 0;
}),
leftFixedCount: (0, vue.computed)(() => {
return store?.states.fixedColumns.value.length ?? 0;
}),
rightFixedCount: (0, vue.computed)(() => {
return store?.states.rightFixedColumns.value.length ?? 0;
}),
columns: (0, vue.computed)(() => store?.states.columns.value ?? [])
};
}
//#endregion
//#region ../../packages/components/table/src/table-footer/style-helper.ts
function useStyle$1(props) {
const { columns } = useMapState();
const ns = useNamespace("table");
const getCellClasses = (columns, cellIndex) => {
const column = columns[cellIndex];
const classes = [
ns.e("cell"),
column.id,
column.align,
column.labelClassName,
...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store)
];
if (column.className) classes.push(column.className);
if (!column.children) classes.push(ns.is("leaf"));
return classes;
};
const getCellStyles = (column, cellIndex) => {
const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store);
ensurePosition(fixedStyle, "left");
ensurePosition(fixedStyle, "right");
return fixedStyle;
};
return {
getCellClasses,
getCellStyles,
columns
};
}
//#endregion
//#region ../../packages/components/table/src/table-footer/index.ts
var table_footer_default = (0, vue.defineComponent)({
name: "ElTableFooter",
props: {
fixed: {
type: String,
default: ""
},
store: {
required: true,
type: Object
},
summaryMethod: Function,
sumText: String,
border: Boolean,
defaultSort: {
type: Object,
default: () => {
return {
prop: "",
order: ""
};
}
}
},
setup(props) {
const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
const ns = useNamespace("table");
const { getCellClasses, getCellStyles, columns } = useStyle$1(props);
const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent);
return {
ns,
onScrollableChange,
onColumnsChange,
getCellClasses,
getCellStyles,
columns
};
},
render() {
const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;
const data = this.store.states.data.value;
let sums = [];
if (summaryMethod) sums = summaryMethod({
columns,
data
});
else columns.forEach((column, index) => {
if (index === 0) {
sums[index] = sumText;
return;
}
const values = data.map((item) => Number(item[column.property]));
const precisions = [];
let notNumber = true;
values.forEach((value) => {
if (!Number.isNaN(+value)) {
notNumber = false;
const decimal = `${value}`.split(".")[1];
precisions.push(decimal ? decimal.length : 0);
}
});
const precision = Math.max.apply(null, precisions);
if (!notNumber) sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!Number.isNaN(+value)) return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
else return prev;
}, 0);
else sums[index] = "";
});
return (0, vue.h)((0, vue.h)("tfoot", [(0, vue.h)("tr", {}, [...columns.map((column, cellIndex) => (0, vue.h)("td", {
key: cellIndex,
colspan: column.colSpan,
rowspan: column.rowSpan,
class: getCellClasses(columns, cellIndex),
style: getCellStyles(column, cellIndex)
}, [(0, vue.h)("div", { class: ["cell", column.labelClassName] }, [sums[cellIndex]])]))])]));
}
});
//#endregion
//#region ../../packages/components/table/src/table/utils-helper.ts
function useUtils(store) {
const setCurrentRow = (row) => {
store.commit("setCurrentRow", row);
};
const getSelectionRows = () => {
return store.getSelectionRows();
};
const toggleRowSelection = (row, selected, ignoreSelectable = true) => {
store.toggleRowSelection(row, selected, false, ignoreSelectable);
store.updateAllSelected();
};
const clearSelection = () => {
store.clearSelection();
};
const clearFilter = (columnKeys) => {
store.clearFilter(columnKeys);
};
const toggleAllSelection = () => {
store.commit("toggleAllSelection");
};
const toggleRowExpansion = (row, expanded) => {
store.toggleRowExpansionAdapter(row, expanded);
};
const clearSort = () => {
store.clearSort();
};
const sort = (prop, order) => {
store.commit("sort", {
prop,
order
});
};
const updateKeyChildren = (key, data) => {
store.updateKeyChildren(key, data);
};
return {
setCurrentRow,
getSelectionRows,
toggleRowSelection,
clearSelection,
clearFilter,
toggleAllSelection,
toggleRowExpansion,
clearSort,
sort,
updateKeyChildren
};
}
//#endregion
//#region ../../packages/components/table/src/table/style-helper.ts
function useStyle(props, layout, store, table) {
const isHidden = (0, vue.ref)(false);
const renderExpanded = (0, vue.ref)(null);
const resizeProxyVisible = (0, vue.ref)(false);
const setDragVisible = (visible) => {
resizeProxyVisible.value = visible;
};
const resizeState = (0, vue.ref)({
width: null,
height: null,
headerHeight: null
});
const isGroup = (0, vue.ref)(false);
const scrollbarViewStyle = {
display: "inline-block",
verticalAlign: "middle"
};
const tableWidth = (0, vue.ref)();
const tableScrollHeight = (0, vue.ref)(0);
const bodyScrollHeight = (0, vue.ref)(0);
const headerScrollHeight = (0, vue.ref)(0);
const footerScrollHeight = (0, vue.ref)(0);
const appendScrollHeight = (0, vue.ref)(0);
(0, vue.watch)(() => props.height, (value) => {
layout.setHeight(value ?? null);
}, { immediate: true });
(0, vue.watch)(() => props.maxHeight, (value) => {
layout.setMaxHeight(value ?? null);
}, { immediate: true });
(0, vue.watch)(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => {
if (!(0, vue.unref)(rowKey) || !(0, vue.unref)(currentRowKey)) return;
store.setCurrentRowKey(`${currentRowKey}`);
}, { immediate: true });
(0, vue.watch)(() => props.data, (data) => {
table.store.commit("setData", data);
}, {
immediate: true,
deep: true
});
(0, vue.watchEffect)(() => {
if (props.expandRowKeys) store.setExpandRowKeysAdapter(props.expandRowKeys);
});
const handleMouseLeave = () => {
table.store.commit("setHoverRow", null);
if (table.hoverState) table.hoverState = null;
};
const handleHeaderFooterMousewheel = (_event, data) => {
const { pixelX, pixelY } = data;
if (Math.abs(pixelX) >= Math.abs(pixelY)) table.refs.bodyWrapper.scrollLeft += data.pixelX / 5;
};
const shouldUpdateHeight = (0, vue.computed)(() => {
return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0;
});
const tableBodyStyles = (0, vue.computed)(() => {
return { width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : "" };
});
const doLayout = () => {
if (shouldUpdateHeight.value) layout.updateElsHeight();
layout.updateColumnsWidth();
if (typeof window === "undefined") return;
requestAnimationFrame(syncPosition);
};
(0, vue.onMounted)(async () => {
await (0, vue.nextTick)();
store.updateColumns();
bindEvents();
requestAnimationFrame(doLayout);
const el = table.vnode.el;
const tableHeader = table.refs.headerWrapper;
if (props.flexible && el && el.parentElement) el.parentElement.style.minWidth = "0";
resizeState.value = {
width: tableWidth.value = el.offsetWidth,
height: el.offsetHeight,
headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null
};
store.states.columns.value.forEach((column) => {
if (column.filteredValue && column.filteredValue.length) table.store.commit("filterChange", {
column,
values: column.filteredValue,
silent: true
});
});
table.$ready = true;
});
const setScrollClassByEl = (el, className) => {
if (!el) return;
const classList = Array.from(el.classList).filter((item) => !item.startsWith("is-scrolling-"));
classList.push(layout.scrollX.value ? className : "is-scrolling-none");
el.className = classList.join(" ");
};
const setScrollClass = (className) => {
const { tableWrapper } = table.refs;
setScrollClassByEl(tableWrapper, className);
};
const hasScrollClass = (className) => {
const { tableWrapper } = table.refs;
return !!(tableWrapper && tableWrapper.classList.contains(className));
};
const syncPosition = function() {
if (!table.refs.scrollBarRef) return;
if (!layout.scrollX.value) {
const scrollingNoneClass = "is-scrolling-none";
if (!hasScrollClass(scrollingNoneClass)) setScrollClass(scrollingNoneClass);
return;
}
const scrollContainer = table.refs.scrollBarRef.wrapRef;
if (!scrollContainer) return;
const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer;
const { headerWrapper, footerWrapper } = table.refs;
if (headerWrapper) headerWrapper.scrollLeft = scrollLeft;
if (footerWrapper) footerWrapper.scrollLeft = scrollLeft;
if (scrollLeft >= scrollWidth - offsetWidth - 1) setScrollClass("is-scrolling-right");
else if (scrollLeft === 0) setScrollClass("is-scrolling-left");
else setScrollClass("is-scrolling-middle");
};
const bindEvents = () => {
if (!table.refs.scrollBarRef) return;
if (table.refs.scrollBarRef.wrapRef) useEventListener(table.refs.scrollBarRef.wrapRef, "scroll", syncPosition, { passive: true });
if (props.fit) useResizeObserver(table.vnode.el, resizeListener);
else useEventListener(window, "resize", resizeListener);
useResizeObserver(table.refs.tableInnerWrapper, () => {
resizeListener();
table.refs?.scrollBarRef?.update();
});
};
const resizeListener = () => {
const el = table.vnode.el;
if (!table.$ready || !el) return;
let shouldUpdateLayout = false;
const { width: oldWidth, height: oldHeight, headerHeight: oldHeaderHeight } = resizeState.value;
const width = tableWidth.value = el.offsetWidth;
if (oldWidth !== width) shouldUpdateLayout = true;
const height = el.offsetHeight;
if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) shouldUpdateLayout = true;
const tableHeader = props.tableLayout === "fixed" ? table.refs.headerWrapper : table.refs.tableHeaderRef?.$el;
if (props.showHeader && tableHeader?.offsetHeight !== oldHeaderHeight) shouldUpdateLayout = true;
tableScrollHeight.value = table.refs.tableWrapper?.scrollHeight || 0;
headerScrollHeight.value = tableHeader?.scrollHeight || 0;
footerScrollHeight.value = table.refs.footerWrapper?.offsetHeight || 0;
appendScrollHeight.value = table.refs.appendWrapper?.offsetHeight || 0;
bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value;
if (shouldUpdateLayout) {
resizeState.value = {
width,
height,
headerHeight: props.showHeader && tableHeader?.offsetHeight || 0
};
doLayout();
}
};
const tableSize = useFormSize();
const bodyWidth = (0, vue.computed)(() => {
const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout;
return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : "";
});
const tableLayout = (0, vue.computed)(() => {
if (props.maxHeight) return "fixed";
return props.tableLayout;
});
return {
isHidden,
renderExpanded,
setDragVisible,
isGroup,
handleMouseLeave,
handleHeaderFooterMousewheel,
tableSize,
emptyBlockStyle: (0, vue.computed)(() => {
if (props.data && props.data.length) return;
let height = "100%";
if (props.height && bodyScrollHeight.value) height = `${bodyScrollHeight.value}px`;
const width = tableWidth.value;
return {
width: width ? `${width}px` : "",
height
};
}),
resizeProxyVisible,
bodyWidth,
resizeState,
doLayout,
tableBodyStyles,
tableLayout,
scrollbarViewStyle,
scrollbarStyle: (0, vue.computed)(() => {
if (props.height) return { height: "100%" };
if (props.maxHeight) if (!Number.isNaN(Number(props.maxHeight))) return { maxHeight: `${+props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px` };
else return { maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)` };
return {};
})
};
}
//#endregion
//#region ../../packages/components/table/src/table/key-render-helper.ts
function useKeyRender(table) {
let observer;
const initWatchDom = () => {
const columnsWrapper = table.vnode.el.querySelector(".hidden-columns");
const config = {
childList: true,
subtree: true
};
const updateOrderFns = table.store.states.updateOrderFns;
observer = new MutationObserver(() => {
updateOrderFns.forEach((fn) => fn());
});
observer.observe(columnsWrapper, config);
};
(0, vue.onMounted)(() => {
initWatchDom();
});
(0, vue.onUnmounted)(() => {
observer?.disconnect();
});
}
//#endregion
//#region ../../packages/components/table/src/table/defaults.ts
var defaults_default$2 = {
data: {
type: Array,
default: () => []
},
size: useSizeProp,
width: [String, Number],
height: [String, Number],
maxHeight: [String, Number],
fit: {
type: Boolean,
default: true
},
stripe: Boolean,
border: Boolean,
rowKey: [String, Function],
showHeader: {
type: Boolean,
default: true
},
showSummary: Boolean,
sumText: String,
summaryMethod: Function,
rowClassName: [String, Function],
rowStyle: [Object, Function],
cellClassName: [String, Function],
cellStyle: [Object, Function],
headerRowClassName: [String, Function],
headerRowStyle: [Object, Function],
headerCellClassName: [String, Function],
headerCellStyle: [Object, Function],
highlightCurrentRow: Boolean,
currentRowKey: [String, Number],
emptyText: String,
expandRowKeys: Array,
defaultExpandAll: Boolean,
rowExpandable: { type: Function },
defaultSort: Object,
tooltipEffect: String,
tooltipOptions: Object,
spanMethod: Function,
selectOnIndeterminate: {
type: Boolean,
default: true
},
indent: {
type: Number,
default: 16
},
treeProps: {
type: Object,
default: () => {
return {
hasChildren: "hasChildren",
children: "children",
checkStrictly: false
};
}
},
lazy: Boolean,
load: Function,
style: {
type: [
String,
Object,
Array
],
default: () => ({})
},
className: {
type: String,
default: ""
},
tableLayout: {
type: String,
default: "fixed"
},
scrollbarAlwaysOn: Boolean,
flexible: Boolean,
showOverflowTooltip: {
type: [Boolean, Object],
default: void 0
},
tooltipFormatter: Function,
appendFilterPanelTo: String,
scrollbarTabindex: {
type: [Number, String],
default: void 0
},
allowDragLastColumn: {
type: Boolean,
default: true
},
preserveExpandedContent: Boolean,
nativeScrollbar: Boolean
};
//#endregion
//#region ../../packages/components/table/src/h-helper.ts
function hColgroup(props) {
const isAuto = props.tableLayout === "auto";
let columns = props.columns || [];
if (isAuto) {
if (columns.every(({ width }) => isUndefined(width))) columns = [];
}
const getPropsData = (column) => {
const propsData = {
key: `${props.tableLayout}_${column.id}`,
style: {},
name: void 0
};
if (isAuto) propsData.style = { width: `${column.width}px` };
else propsData.name = column.id;
return propsData;
};
return (0, vue.h)("colgroup", {}, columns.map((column) => (0, vue.h)("col", getPropsData(column))));
}
hColgroup.props = ["columns", "tableLayout"];
//#endregion
//#region ../../packages/components/table/src/composables/use-scrollbar.ts
const useScrollbar$1 = () => {
const scrollBarRef = (0, vue.ref)();
const scrollTo = (options, yCoord) => {
const scrollbar = scrollBarRef.value;
if (scrollbar) scrollbar.scrollTo(options, yCoord);
};
const setScrollPosition = (position, offset) => {
const scrollbar = scrollBarRef.value;
if (scrollbar && isNumber(offset) && ["Top", "Left"].includes(position)) scrollbar[`setScroll${position}`](offset);
};
const setScrollTop = (top) => setScrollPosition("Top", top);
const setScrollLeft = (left) => setScrollPosition("Left", left);
return {
scrollBarRef,
scrollTo,
setScrollTop,
setScrollLeft
};
};
//#endregion
//#region ../../packages/components/table/src/table.vue?vue&type=script&lang.ts
let tableIdSeed = 1;
var table_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTable",
directives: { Mousewheel },
components: {
TableHeader: table_header_default,
TableBody: table_body_default,
TableFooter: table_footer_default,
ElScrollbar,
hColgroup
},
props: defaults_default$2,
emits: [
"select",
"select-all",
"selection-change",
"cell-mouse-enter",
"cell-mouse-leave",
"cell-contextmenu",
"cell-click",
"cell-dblclick",
"row-click",
"row-contextmenu",
"row-dblclick",
"header-click",
"header-contextmenu",
"sort-change",
"filter-change",
"current-change",
"header-dragend",
"expand-change",
"scroll"
],
setup(props) {
const { t } = useLocale();
const ns = useNamespace("table");
const globalConfig = useGlobalConfig("table");
const table = (0, vue.getCurrentInstance)();
(0, vue.provide)(TABLE_INJECTION_KEY, table);
const store = createStore(table, props);
table.store = store;
const layout = new TableLayout({
store: table.store,
table,
fit: props.fit,
showHeader: props.showHeader
});
table.layout = layout;
const isEmpty = (0, vue.computed)(() => (store.states.data.value || []).length === 0);
/**
* open functions
*/
const { setCurrentRow, getSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, sort, updateKeyChildren } = useUtils(store);
const { isHidden, renderExpanded, setDragVisible, isGroup, handleMouseLeave, handleHeaderFooterMousewheel, tableSize, emptyBlockStyle, resizeProxyVisible, bodyWidth, resizeState, doLayout, tableBodyStyles, tableLayout, scrollbarViewStyle, scrollbarStyle } = useStyle(props, layout, store, table);
const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar$1();
const debouncedUpdateLayout = debounce(doLayout, 50);
const tableId = `${ns.namespace.value}-table_${tableIdSeed++}`;
table.tableId = tableId;
table.state = {
isGroup,
resizeState,
doLayout,
debouncedUpdateLayout
};
const computedSumText = (0, vue.computed)(() => props.sumText ?? t("el.table.sumText"));
const computedEmptyText = (0, vue.computed)(() => {
return props.emptyText ?? t("el.table.emptyText");
});
const computedTooltipEffect = (0, vue.computed)(() => props.tooltipEffect ?? globalConfig.value?.tooltipEffect);
const computedTooltipOptions = (0, vue.computed)(() => props.tooltipOptions ?? globalConfig.value?.tooltipOptions);
const columns = (0, vue.computed)(() => {
return convertToRows(store.states.originColumns.value)[0];
});
useKeyRender(table);
(0, vue.onBeforeUnmount)(() => {
debouncedUpdateLayout.cancel();
});
return {
ns,
layout,
store,
columns,
handleHeaderFooterMousewheel,
handleMouseLeave,
tableId,
tableSize,
isHidden,
isEmpty,
renderExpanded,
resizeProxyVisible,
resizeState,
isGroup,
bodyWidth,
tableBodyStyles,
emptyBlockStyle,
debouncedUpdateLayout,
setCurrentRow,
getSelectionRows,
toggleRowSelection,
clearSelection,
clearFilter,
toggleAllSelection,
toggleRowExpansion,
clearSort,
doLayout,
sort,
updateKeyChildren,
t,
setDragVisible,
context: table,
computedSumText,
computedEmptyText,
computedTooltipEffect,
computedTooltipOptions,
tableLayout,
scrollbarViewStyle,
scrollbarStyle,
scrollBarRef,
scrollTo,
setScrollLeft,
setScrollTop,
allowDragLastColumn: props.allowDragLastColumn
};
}
});
//#endregion
//#region ../../packages/components/table/src/table.vue
const _hoisted_1$15 = ["data-prefix"];
const _hoisted_2$9 = {
ref: "hiddenColumns",
class: "hidden-columns"
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
const _component_hColgroup = (0, vue.resolveComponent)("hColgroup");
const _component_table_header = (0, vue.resolveComponent)("table-header");
const _component_table_body = (0, vue.resolveComponent)("table-body");
const _component_table_footer = (0, vue.resolveComponent)("table-footer");
const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
const _directive_mousewheel = (0, vue.resolveDirective)("mousewheel");
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: "tableWrapper",
class: (0, vue.normalizeClass)([
{
[_ctx.ns.m("fit")]: _ctx.fit,
[_ctx.ns.m("striped")]: _ctx.stripe,
[_ctx.ns.m("border")]: _ctx.border || _ctx.isGroup,
[_ctx.ns.m("hidden")]: _ctx.isHidden,
[_ctx.ns.m("group")]: _ctx.isGroup,
[_ctx.ns.m("fluid-height")]: _ctx.maxHeight,
[_ctx.ns.m("scrollable-x")]: _ctx.layout.scrollX.value,
[_ctx.ns.m("scrollable-y")]: _ctx.layout.scrollY.value,
[_ctx.ns.m("enable-row-hover")]: !_ctx.store.states.isComplex.value,
[_ctx.ns.m("enable-row-transition")]: (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100,
"has-footer": _ctx.showSummary
},
_ctx.ns.m(_ctx.tableSize),
_ctx.className,
_ctx.ns.b(),
_ctx.ns.m(`layout-${_ctx.tableLayout}`)
]),
style: (0, vue.normalizeStyle)(_ctx.style),
"data-prefix": _ctx.ns.namespace.value,
onMouseleave: _cache[1] || (_cache[1] = (...args) => _ctx.handleMouseLeave && _ctx.handleMouseLeave(...args))
}, [(0, vue.createElementVNode)("div", {
ref: "tableInnerWrapper",
class: (0, vue.normalizeClass)(_ctx.ns.e("inner-wrapper"))
}, [
(0, vue.createElementVNode)("div", _hoisted_2$9, [(0, vue.renderSlot)(_ctx.$slots, "default")], 512),
_ctx.showHeader && _ctx.tableLayout === "fixed" ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "headerWrapper",
class: (0, vue.normalizeClass)(_ctx.ns.e("header-wrapper"))
}, [(0, vue.createElementVNode)("table", {
ref: "tableHeader",
class: (0, vue.normalizeClass)(_ctx.ns.e("header")),
style: (0, vue.normalizeStyle)(_ctx.tableBodyStyles),
border: "0",
cellpadding: "0",
cellspacing: "0"
}, [(0, vue.createVNode)(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]), (0, vue.createVNode)(_component_table_header, {
ref: "tableHeaderRef",
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"append-filter-panel-to": _ctx.appendFilterPanelTo,
"allow-drag-last-column": _ctx.allowDragLastColumn,
onSetDragVisible: _ctx.setDragVisible
}, null, 8, [
"border",
"default-sort",
"store",
"append-filter-panel-to",
"allow-drag-last-column",
"onSetDragVisible"
])], 6)], 2)), [[_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]]) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
ref: "bodyWrapper",
class: (0, vue.normalizeClass)(_ctx.ns.e("body-wrapper"))
}, [(0, vue.createVNode)(_component_el_scrollbar, {
ref: "scrollBarRef",
"view-style": _ctx.scrollbarViewStyle,
"wrap-style": _ctx.scrollbarStyle,
always: _ctx.scrollbarAlwaysOn,
tabindex: _ctx.scrollbarTabindex,
native: _ctx.nativeScrollbar,
onScroll: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("scroll", $event))
}, {
default: (0, vue.withCtx)(() => [
(0, vue.createElementVNode)("table", {
ref: "tableBody",
class: (0, vue.normalizeClass)(_ctx.ns.e("body")),
cellspacing: "0",
cellpadding: "0",
border: "0",
style: (0, vue.normalizeStyle)({
width: _ctx.bodyWidth,
tableLayout: _ctx.tableLayout
})
}, [
(0, vue.createVNode)(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]),
_ctx.showHeader && _ctx.tableLayout === "auto" ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_table_header, {
key: 0,
ref: "tableHeaderRef",
class: (0, vue.normalizeClass)(_ctx.ns.e("body-header")),
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"append-filter-panel-to": _ctx.appendFilterPanelTo,
onSetDragVisible: _ctx.setDragVisible
}, null, 8, [
"class",
"border",
"default-sort",
"store",
"append-filter-panel-to",
"onSetDragVisible"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createVNode)(_component_table_body, {
context: _ctx.context,
highlight: _ctx.highlightCurrentRow,
"row-class-name": _ctx.rowClassName,
"tooltip-effect": _ctx.computedTooltipEffect,
"tooltip-options": _ctx.computedTooltipOptions,
"row-style": _ctx.rowStyle,
store: _ctx.store,
stripe: _ctx.stripe
}, null, 8, [
"context",
"highlight",
"row-class-name",
"tooltip-effect",
"tooltip-options",
"row-style",
"store",
"stripe"
]),
_ctx.showSummary && _ctx.tableLayout === "auto" ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_table_footer, {
key: 1,
class: (0, vue.normalizeClass)(_ctx.ns.e("body-footer")),
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"sum-text": _ctx.computedSumText,
"summary-method": _ctx.summaryMethod
}, null, 8, [
"class",
"border",
"default-sort",
"store",
"sum-text",
"summary-method"
])) : (0, vue.createCommentVNode)("v-if", true)
], 6),
_ctx.isEmpty ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "emptyBlock",
style: (0, vue.normalizeStyle)(_ctx.emptyBlockStyle),
class: (0, vue.normalizeClass)(_ctx.ns.e("empty-block"))
}, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.ns.e("empty-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.computedEmptyText), 1)])], 2)], 6)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.append ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
ref: "appendWrapper",
class: (0, vue.normalizeClass)(_ctx.ns.e("append-wrapper"))
}, [(0, vue.renderSlot)(_ctx.$slots, "append")], 2)) : (0, vue.createCommentVNode)("v-if", true)
]),
_: 3
}, 8, [
"view-style",
"wrap-style",
"always",
"tabindex",
"native"
])], 2),
_ctx.showSummary && _ctx.tableLayout === "fixed" ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
ref: "footerWrapper",
class: (0, vue.normalizeClass)(_ctx.ns.e("footer-wrapper"))
}, [(0, vue.createElementVNode)("table", {
class: (0, vue.normalizeClass)(_ctx.ns.e("footer")),
cellspacing: "0",
cellpadding: "0",
border: "0",
style: (0, vue.normalizeStyle)(_ctx.tableBodyStyles)
}, [(0, vue.createVNode)(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]), (0, vue.createVNode)(_component_table_footer, {
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"sum-text": _ctx.computedSumText,
"summary-method": _ctx.summaryMethod
}, null, 8, [
"border",
"default-sort",
"store",
"sum-text",
"summary-method"
])], 6)], 2)), [[vue.vShow, !_ctx.isEmpty], [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]]) : (0, vue.createCommentVNode)("v-if", true),
_ctx.border || _ctx.isGroup ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)(_ctx.ns.e("border-left-patch"))
}, null, 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2), (0, vue.withDirectives)((0, vue.createElementVNode)("div", {
ref: "resizeProxy",
class: (0, vue.normalizeClass)(_ctx.ns.e("column-resize-proxy"))
}, null, 2), [[vue.vShow, _ctx.resizeProxyVisible]])], 46, _hoisted_1$15);
}
var table_default = /* @__PURE__ */ _plugin_vue_export_helper_default(table_vue_vue_type_script_lang_default, [["render", _sfc_render$3]]);
//#endregion
//#region ../../packages/components/table/src/config.ts
const defaultClassNames = {
selection: "table-column--selection",
expand: "table__expand-column"
};
const cellStarts = {
default: { order: "" },
selection: {
width: 48,
minWidth: 48,
realWidth: 48,
order: ""
},
expand: {
width: 48,
minWidth: 48,
realWidth: 48,
order: ""
},
index: {
width: 48,
minWidth: 48,
realWidth: 48,
order: ""
}
};
const getDefaultClassName = (type) => {
return defaultClassNames[type] || "";
};
const cellForced = {
selection: {
renderHeader({ store }) {
function isDisabled() {
return store.states.data.value && store.states.data.value.length === 0;
}
return (0, vue.h)(ElCheckbox, {
disabled: isDisabled(),
size: store.states.tableSize.value,
indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value,
"onUpdate:modelValue": store.toggleAllSelection ?? void 0,
modelValue: store.states.isAllSelected.value,
ariaLabel: store.t("el.table.selectAllLabel")
});
},
renderCell({ row, column, store, $index }) {
return (0, vue.h)(ElCheckbox, {
disabled: column.selectable ? !column.selectable.call(null, row, $index) : false,
size: store.states.tableSize.value,
onChange: () => {
store.commit("rowSelectedChanged", row);
},
onClick: (event) => event.stopPropagation(),
modelValue: store.isSelected(row),
ariaLabel: store.t("el.table.selectRowLabel")
});
},
sortable: false,
resizable: false
},
index: {
renderHeader({ column }) {
return column.label || "#";
},
renderCell({ column, $index }) {
let i = $index + 1;
const index = column.index;
if (isNumber(index)) i = $index + index;
else if (isFunction$1(index)) i = index($index);
return (0, vue.h)("div", {}, [i]);
},
sortable: false
},
expand: {
renderHeader({ column }) {
return column.label || "";
},
renderCell({ column, row, store, expanded, $index }) {
const { ns } = store;
const classes = [ns.e("expand-icon")];
if (!column.renderExpand && expanded) classes.push(ns.em("expand-icon", "expanded"));
const callback = function(e) {
e.stopPropagation();
store.toggleRowExpansion(row);
};
const isRowExpandable = store.states.rowExpandable.value?.(row, $index) ?? true;
if (!isRowExpandable) classes.push(ns.is("disabled"));
return (0, vue.h)("button", {
type: "button",
disabled: !isRowExpandable,
"aria-label": store.t(expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
"aria-expanded": expanded,
class: classes,
onClick: callback
}, { default: () => {
if (column.renderExpand) return [column.renderExpand({
expanded,
expandable: isRowExpandable
})];
return [(0, vue.h)(ElIcon, null, { default: () => {
return [(0, vue.h)(arrow_right_default)];
} })];
} });
},
sortable: false,
resizable: false
}
};
function defaultRenderCell({ row, column, $index }) {
const property = column.property;
const value = property && getProp(row, property).value;
if (column && column.formatter) return column.formatter(row, column, value, $index);
return value?.toString?.() || "";
}
function treeCellPrefix({ row, treeNode, store }, createPlaceholder = false) {
const { ns } = store;
if (!treeNode) {
if (createPlaceholder) return [(0, vue.h)("span", { class: ns.e("placeholder") })];
return null;
}
const ele = [];
const callback = function(e) {
e.stopPropagation();
if (treeNode.loading) return;
store.loadOrToggle(row);
};
if (treeNode.indent) ele.push((0, vue.h)("span", {
class: ns.e("indent"),
style: { "padding-left": `${treeNode.indent}px` }
}));
if (isBoolean(treeNode.expanded) && !treeNode.noLazyChildren) {
const expandClasses = [ns.e("expand-icon"), treeNode.expanded ? ns.em("expand-icon", "expanded") : ""];
let icon = arrow_right_default;
if (treeNode.loading) icon = loading_default;
ele.push((0, vue.h)("button", {
type: "button",
"aria-label": store.t(treeNode.expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
"aria-expanded": treeNode.expanded,
class: expandClasses,
onClick: callback
}, { default: () => {
return [(0, vue.h)(ElIcon, { class: ns.is("loading", treeNode.loading) }, { default: () => [(0, vue.h)(icon)] })];
} }));
} else ele.push((0, vue.h)("span", { class: ns.e("placeholder") }));
return ele;
}
//#endregion
//#region ../../packages/components/table/src/table-column/watcher-helper.ts
function getAllAliases(props, aliases) {
return props.reduce((prev, cur) => {
prev[cur] = cur;
return prev;
}, aliases);
}
function useWatcher(owner, props_) {
const instance = (0, vue.getCurrentInstance)();
const registerComplexWatchers = () => {
const props = ["fixed"];
const aliases = {
realWidth: "width",
realMinWidth: "minWidth"
};
const allAliases = getAllAliases(props, aliases);
Object.keys(allAliases).forEach((key) => {
const columnKey = aliases[key];
if (hasOwn(props_, columnKey)) (0, vue.watch)(() => props_[columnKey], (newVal) => {
let value = newVal;
if (columnKey === "width" && key === "realWidth") value = parseWidth(newVal);
if (columnKey === "minWidth" && key === "realMinWidth") value = parseMinWidth(newVal);
instance.columnConfig.value[columnKey] = value;
instance.columnConfig.value[key] = value;
const updateColumns = columnKey === "fixed";
owner.value.store.scheduleLayout(updateColumns);
});
});
};
const registerNormalWatchers = () => {
const props = [
"label",
"filters",
"filterMultiple",
"filteredValue",
"sortable",
"index",
"formatter",
"className",
"labelClassName",
"filterClassName",
"showOverflowTooltip",
"tooltipFormatter",
"resizable"
];
const parentProps = ["showOverflowTooltip"];
const aliases = {
property: "prop",
align: "realAlign",
headerAlign: "realHeaderAlign"
};
const allAliases = getAllAliases(props, aliases);
Object.keys(allAliases).forEach((key) => {
const columnKey = aliases[key];
if (hasOwn(props_, columnKey)) (0, vue.watch)(() => props_[columnKey], (newVal) => {
instance.columnConfig.value[key] = newVal;
if (key === "filters" || key === "filterMethod") instance.columnConfig.value["filterable"] = !!(instance.columnConfig.value["filters"] || instance.columnConfig.value["filterMethod"]);
});
});
parentProps.forEach((key) => {
if (hasOwn(owner.value.props, key)) (0, vue.watch)(() => owner.value.props[key], (newVal) => {
if (instance.columnConfig.value.type === "selection") return;
if (!isUndefined(props_[key])) return;
instance.columnConfig.value[key] = newVal;
});
});
const globalConfig = useGlobalConfig("table");
if (globalConfig.value && hasOwn(globalConfig.value, "showOverflowTooltip")) (0, vue.watch)(() => globalConfig.value?.showOverflowTooltip, (newVal) => {
if (instance.columnConfig.value.type === "selection") return;
if (!isUndefined(props_.showOverflowTooltip) || !isUndefined(owner.value.props.showOverflowTooltip)) return;
instance.columnConfig.value.showOverflowTooltip = newVal;
});
};
return {
registerComplexWatchers,
registerNormalWatchers
};
}
//#endregion
//#region ../../packages/components/table/src/table-column/render-helper.ts
function useRender(props, slots, owner) {
const instance = (0, vue.getCurrentInstance)();
const columnId = (0, vue.ref)("");
const isSubColumn = (0, vue.ref)(false);
const realAlign = (0, vue.ref)();
const realHeaderAlign = (0, vue.ref)();
const ns = useNamespace("table");
(0, vue.watchEffect)(() => {
realAlign.value = props.align ? `is-${props.align}` : null;
realAlign.value;
});
(0, vue.watchEffect)(() => {
realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value;
realHeaderAlign.value;
});
const columnOrTableParent = (0, vue.computed)(() => {
let parent = instance.vnode.vParent || instance.parent;
while (parent && !parent.tableId && !parent.columnId) parent = parent.vnode.vParent || parent.parent;
return parent;
});
const hasTreeColumn = (0, vue.computed)(() => {
const { store } = instance.parent;
if (!store) return false;
const { treeData } = store.states;
const treeDataValue = treeData.value;
return treeDataValue && Object.keys(treeDataValue).length > 0;
});
const realWidth = (0, vue.ref)(parseWidth(props.width));
const realMinWidth = (0, vue.ref)(parseMinWidth(props.minWidth));
const setColumnWidth = (column) => {
if (realWidth.value) column.width = realWidth.value;
if (realMinWidth.value) column.minWidth = realMinWidth.value;
if (!realWidth.value && realMinWidth.value) column.width = void 0;
if (!column.minWidth) column.minWidth = 80;
column.realWidth = Number(isUndefined(column.width) ? column.minWidth : column.width);
return column;
};
const setColumnForcedProps = (column) => {
const type = column.type;
const source = cellForced[type] || {};
Object.keys(source).forEach((prop) => {
const value = source[prop];
if (prop !== "className" && !isUndefined(value)) column[prop] = value;
});
const className = getDefaultClassName(type);
if (className) {
const forceClass = `${(0, vue.unref)(ns.namespace)}-${className}`;
column.className = column.className ? `${column.className} ${forceClass}` : forceClass;
}
return column;
};
const checkSubColumn = (children) => {
if (isArray$1(children)) children.forEach((child) => check(child));
else check(children);
function check(item) {
if (item?.type?.name === "ElTableColumn") item.vParent = instance;
}
};
const setColumnRenders = (column) => {
if (props.renderHeader) /* @__PURE__ */ debugWarn("TableColumn", "Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.");
else if (column.type !== "selection") column.renderHeader = (scope) => {
instance.columnConfig.value["label"];
if (slots.header) {
const slotResult = slots.header(scope);
if (ensureValidVNode(slotResult)) return (0, vue.h)(vue.Fragment, slotResult);
}
return (0, vue.createTextVNode)(column.label);
};
if (slots["filter-icon"]) column.renderFilterIcon = (scope) => {
return (0, vue.renderSlot)(slots, "filter-icon", scope);
};
if (slots.expand) column.renderExpand = (scope) => {
return (0, vue.renderSlot)(slots, "expand", scope);
};
let originRenderCell = column.renderCell;
if (column.type === "expand") {
column.renderCell = (data) => (0, vue.h)("div", { class: "cell" }, [originRenderCell(data)]);
owner.value.renderExpanded = (row) => {
return slots.default ? slots.default(row) : slots.default;
};
} else {
originRenderCell = originRenderCell || defaultRenderCell;
column.renderCell = (data) => {
let children = null;
if (slots.default) {
const vnodes = slots.default(data);
children = vnodes.some((v) => v.type !== vue.Comment) ? vnodes : originRenderCell(data);
} else children = originRenderCell(data);
const { columns } = owner.value.store.states;
const firstUserColumnIndex = columns.value.findIndex((item) => item.type === "default");
const prefix = treeCellPrefix(data, hasTreeColumn.value && data.cellIndex === firstUserColumnIndex);
const props = {
class: "cell",
style: {}
};
if (column.showOverflowTooltip) {
props.class = `${props.class} ${(0, vue.unref)(ns.namespace)}-tooltip`;
props.style = { width: `${(data.column.realWidth || Number(data.column.width)) - 1}px` };
}
checkSubColumn(children);
return (0, vue.h)("div", props, [prefix, children]);
};
}
return column;
};
const getPropsData = (...propsKey) => {
return propsKey.reduce((prev, cur) => {
if (isArray$1(cur)) cur.forEach((key) => {
prev[key] = props[key];
});
return prev;
}, {});
};
const getColumnElIndex = (children, child) => {
return Array.prototype.indexOf.call(children, child);
};
const updateColumnOrder = () => {
owner.value.store.commit("updateColumnOrder", instance.columnConfig.value);
};
return {
columnId,
realAlign,
isSubColumn,
realHeaderAlign,
columnOrTableParent,
setColumnWidth,
setColumnForcedProps,
setColumnRenders,
getPropsData,
getColumnElIndex,
updateColumnOrder
};
}
//#endregion
//#region ../../packages/components/table/src/table-column/defaults.ts
var defaults_default$1 = {
type: {
type: String,
default: "default"
},
label: String,
className: String,
labelClassName: String,
property: String,
prop: String,
width: {
type: [String, Number],
default: ""
},
minWidth: {
type: [String, Number],
default: ""
},
renderHeader: Function,
sortable: {
type: [Boolean, String],
default: false
},
sortMethod: Function,
sortBy: [
String,
Function,
Array
],
resizable: {
type: Boolean,
default: true
},
columnKey: String,
align: String,
headerAlign: String,
showOverflowTooltip: {
type: [Boolean, Object],
default: void 0
},
tooltipFormatter: Function,
fixed: [Boolean, String],
formatter: Function,
selectable: Function,
reserveSelection: Boolean,
filterMethod: Function,
filteredValue: Array,
filters: Array,
filterPlacement: String,
filterMultiple: {
type: Boolean,
default: true
},
filterClassName: String,
index: [Number, Function],
sortOrders: {
type: Array,
default: () => {
return [
"ascending",
"descending",
null
];
},
validator: (val) => {
return val.every((order) => [
"ascending",
"descending",
null
].includes(order));
}
}
};
//#endregion
//#region ../../packages/components/table/src/table-column/index.ts
let columnIdSeed = 1;
var table_column_default = (0, vue.defineComponent)({
name: "ElTableColumn",
components: { ElCheckbox },
props: defaults_default$1,
setup(props, { slots }) {
const instance = (0, vue.getCurrentInstance)();
const globalConfig = useGlobalConfig("table");
const columnConfig = (0, vue.ref)({});
const owner = (0, vue.computed)(() => {
let parent = instance.parent;
while (parent && !parent.tableId) parent = parent.parent;
return parent;
});
const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props);
const { columnId, isSubColumn, realHeaderAlign, columnOrTableParent, setColumnWidth, setColumnForcedProps, setColumnRenders, getPropsData, getColumnElIndex, realAlign, updateColumnOrder } = useRender(props, slots, owner);
const parent = columnOrTableParent.value;
columnId.value = `${"tableId" in parent && parent.tableId || "columnId" in parent && parent.columnId}_column_${columnIdSeed++}`;
(0, vue.onBeforeMount)(() => {
isSubColumn.value = owner.value !== parent;
const type = props.type || "default";
const sortable = props.sortable === "" ? true : props.sortable;
const showOverflowTooltip = type === "selection" ? false : isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip ?? globalConfig.value?.showOverflowTooltip : props.showOverflowTooltip;
const tooltipFormatter = isUndefined(props.tooltipFormatter) ? parent.props.tooltipFormatter ?? globalConfig.value?.tooltipFormatter : props.tooltipFormatter;
const defaults = {
...cellStarts[type],
id: columnId.value,
type,
property: props.prop || props.property,
align: realAlign,
headerAlign: realHeaderAlign,
showOverflowTooltip,
tooltipFormatter,
filterable: props.filters || props.filterMethod,
filteredValue: [],
filterPlacement: "",
filterClassName: "",
isColumnGroup: false,
isSubColumn: false,
filterOpened: false,
sortable,
index: props.index,
rawColumnKey: instance.vnode.key
};
let column = getPropsData([
"columnKey",
"label",
"className",
"labelClassName",
"type",
"renderHeader",
"formatter",
"fixed",
"resizable"
], [
"sortMethod",
"sortBy",
"sortOrders"
], ["selectable", "reserveSelection"], [
"filterMethod",
"filters",
"filterMultiple",
"filterOpened",
"filteredValue",
"filterPlacement",
"filterClassName"
]);
column = mergeOptions(defaults, column);
column = compose(setColumnRenders, setColumnWidth, setColumnForcedProps)(column);
columnConfig.value = column;
registerNormalWatchers();
registerComplexWatchers();
});
(0, vue.onMounted)(() => {
const parent = columnOrTableParent.value;
const children = isSubColumn.value ? parent.vnode.el?.children : parent.refs.hiddenColumns?.children;
const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el);
columnConfig.value.getColumnIndex = getColumnIndex;
getColumnIndex() > -1 && owner.value.store.commit("insertColumn", columnConfig.value, isSubColumn.value ? "columnConfig" in parent && parent.columnConfig.value : null, updateColumnOrder);
});
(0, vue.onBeforeUnmount)(() => {
const getColumnIndex = columnConfig.value.getColumnIndex;
(getColumnIndex ? getColumnIndex() : -1) > -1 && owner.value.store.commit("removeColumn", columnConfig.value, isSubColumn.value ? "columnConfig" in parent && parent.columnConfig.value : null, updateColumnOrder);
});
instance.columnId = columnId.value;
instance.columnConfig = columnConfig;
},
render() {
try {
const renderDefault = this.$slots.default?.({
row: {},
column: {},
$index: -1
});
const children = [];
if (isArray$1(renderDefault)) {
for (const childNode of renderDefault) if (childNode.type?.name === "ElTableColumn" || childNode.shapeFlag & 2) children.push(childNode);
else if (childNode.type === vue.Fragment && isArray$1(childNode.children)) childNode.children.forEach((vnode) => {
if (vnode?.patchFlag !== 1024 && !isString(vnode?.children)) children.push(vnode);
});
}
return (0, vue.h)("div", children);
} catch {
return (0, vue.h)("div", []);
}
}
});
//#endregion
//#region ../../packages/components/table/src/tableColumn.ts
var tableColumn_default = table_column_default;
//#endregion
//#region ../../packages/components/table/index.ts
const ElTable = withInstall(table_default, { TableColumn: tableColumn_default });
const ElTableColumn = withNoopInstall(tableColumn_default);
//#endregion
//#region ../../packages/components/table-v2/src/constants.ts
let SortOrder = /* @__PURE__ */ function(SortOrder) {
SortOrder["ASC"] = "asc";
SortOrder["DESC"] = "desc";
return SortOrder;
}({});
let Alignment = /* @__PURE__ */ function(Alignment) {
Alignment["LEFT"] = "left";
Alignment["CENTER"] = "center";
Alignment["RIGHT"] = "right";
return Alignment;
}({});
let FixedDir = /* @__PURE__ */ function(FixedDir) {
FixedDir["LEFT"] = "left";
FixedDir["RIGHT"] = "right";
return FixedDir;
}({});
const oppositeOrderMap = {
[SortOrder.ASC]: SortOrder.DESC,
[SortOrder.DESC]: SortOrder.ASC
};
const sortOrders = [SortOrder.ASC, SortOrder.DESC];
//#endregion
//#region ../../packages/components/table-v2/src/private.ts
const placeholderSign = Symbol("placeholder");
//#endregion
//#region ../../packages/components/table-v2/src/composables/utils.ts
const calcColumnStyle = (column, fixedColumn, fixed) => {
const flex = {
flexGrow: 0,
flexShrink: 0,
...fixed ? {} : {
flexGrow: column.flexGrow ?? 0,
flexShrink: column.flexShrink ?? 1
}
};
const style = {
...column.style ?? {},
...flex,
flexBasis: "auto",
width: column.width
};
if (!fixedColumn) {
if (column.maxWidth) style.maxWidth = column.maxWidth;
if (column.minWidth) style.minWidth = column.minWidth;
}
return style;
};
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-columns.ts
function useColumns(props, columns, fixed) {
const _columns = (0, vue.computed)(() => (0, vue.unref)(columns).map((column, index) => ({
...column,
key: column.key ?? column.dataKey ?? index
})));
const visibleColumns = (0, vue.computed)(() => {
return (0, vue.unref)(_columns).filter((column) => !column.hidden);
});
const fixedColumnsOnLeft = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => column.fixed === "left" || column.fixed === true));
const fixedColumnsOnRight = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => column.fixed === "right"));
const normalColumns = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => !column.fixed));
const mainColumns = (0, vue.computed)(() => {
const ret = [];
(0, vue.unref)(fixedColumnsOnLeft).forEach((column) => {
ret.push({
...column,
placeholderSign
});
});
(0, vue.unref)(normalColumns).forEach((column) => {
ret.push(column);
});
(0, vue.unref)(fixedColumnsOnRight).forEach((column) => {
ret.push({
...column,
placeholderSign
});
});
return ret;
});
const hasFixedColumns = (0, vue.computed)(() => {
return (0, vue.unref)(fixedColumnsOnLeft).length || (0, vue.unref)(fixedColumnsOnRight).length;
});
const columnsStyles = (0, vue.computed)(() => {
return (0, vue.unref)(_columns).reduce((style, column) => {
style[column.key] = calcColumnStyle(column, (0, vue.unref)(fixed), props.fixed);
return style;
}, {});
});
const columnsTotalWidth = (0, vue.computed)(() => {
return (0, vue.unref)(visibleColumns).reduce((width, column) => width + column.width, 0);
});
const getColumn = (key) => {
return (0, vue.unref)(_columns).find((column) => column.key === key);
};
const getColumnStyle = (key) => {
return (0, vue.unref)(columnsStyles)[key];
};
const updateColumnWidth = (column, width) => {
column.width = width;
};
function onColumnSorted(e) {
const { key } = e.currentTarget.dataset;
if (!key) return;
const { sortState, sortBy } = props;
let order = SortOrder.ASC;
if (isObject$1(sortState)) order = oppositeOrderMap[sortState[key]];
else order = oppositeOrderMap[sortBy.order];
props.onColumnSort?.({
column: getColumn(key),
key,
order
});
}
return {
columns: _columns,
columnsStyles,
columnsTotalWidth,
fixedColumnsOnLeft,
fixedColumnsOnRight,
hasFixedColumns,
mainColumns,
normalColumns,
visibleColumns,
getColumn,
getColumnStyle,
updateColumnWidth,
onColumnSorted
};
}
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-scrollbar.ts
const useScrollbar = (props, { mainTableRef, leftTableRef, rightTableRef, onMaybeEndReached }) => {
const scrollPos = (0, vue.ref)({
scrollLeft: 0,
scrollTop: 0
});
function doScroll(params) {
const { scrollTop } = params;
mainTableRef.value?.scrollTo(params);
leftTableRef.value?.scrollToTop(scrollTop);
rightTableRef.value?.scrollToTop(scrollTop);
}
function scrollTo(params) {
scrollPos.value = params;
doScroll(params);
}
function scrollToTop(scrollTop) {
scrollPos.value.scrollTop = scrollTop;
doScroll((0, vue.unref)(scrollPos));
}
function scrollToLeft(scrollLeft) {
scrollPos.value.scrollLeft = scrollLeft;
mainTableRef.value?.scrollTo?.((0, vue.unref)(scrollPos));
}
function onScroll(params) {
scrollTo(params);
props.onScroll?.(params);
}
function onVerticalScroll({ scrollTop }) {
const { scrollTop: currentScrollTop } = (0, vue.unref)(scrollPos);
if (scrollTop !== currentScrollTop) scrollToTop(scrollTop);
}
function scrollToRow(row, strategy = "auto") {
mainTableRef.value?.scrollToRow(row, strategy);
}
(0, vue.watch)(() => (0, vue.unref)(scrollPos).scrollTop, (cur, prev) => {
if (cur > prev) onMaybeEndReached();
});
return {
scrollPos,
scrollTo,
scrollToLeft,
scrollToTop,
scrollToRow,
onScroll,
onVerticalScroll
};
};
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-row.ts
const useRow = (props, { mainTableRef, leftTableRef, rightTableRef, tableInstance, ns, isScrolling }) => {
const vm = (0, vue.getCurrentInstance)();
const { emit } = vm;
const isResetting = (0, vue.shallowRef)(false);
const expandedRowKeys = (0, vue.ref)(props.defaultExpandedRowKeys || []);
const lastRenderedRowIndex = (0, vue.ref)(-1);
const resetIndex = (0, vue.shallowRef)(null);
const rowHeights = (0, vue.ref)({});
const pendingRowHeights = (0, vue.ref)({});
const leftTableHeights = (0, vue.shallowRef)({});
const mainTableHeights = (0, vue.shallowRef)({});
const rightTableHeights = (0, vue.shallowRef)({});
const isDynamic = (0, vue.computed)(() => isNumber(props.estimatedRowHeight));
function onRowsRendered(params) {
props.onRowsRendered?.(params);
if (params.rowCacheEnd > (0, vue.unref)(lastRenderedRowIndex)) lastRenderedRowIndex.value = params.rowCacheEnd;
}
function onRowHovered({ hovered, rowKey }) {
if (isScrolling.value) return;
tableInstance.vnode.el.querySelectorAll(`[rowkey="${String(rowKey)}"]`).forEach((row) => {
if (hovered) row.classList.add(ns.is("hovered"));
else row.classList.remove(ns.is("hovered"));
});
}
function onRowExpanded({ expanded, rowData, rowIndex, rowKey }) {
const _expandedRowKeys = [...(0, vue.unref)(expandedRowKeys)];
const currentKeyIndex = _expandedRowKeys.indexOf(rowKey);
if (expanded) {
if (currentKeyIndex === -1) _expandedRowKeys.push(rowKey);
} else if (currentKeyIndex > -1) _expandedRowKeys.splice(currentKeyIndex, 1);
expandedRowKeys.value = _expandedRowKeys;
emit("update:expandedRowKeys", _expandedRowKeys);
props.onRowExpand?.({
expanded,
rowData,
rowIndex,
rowKey
});
props.onExpandedRowsChange?.(_expandedRowKeys);
if (tableInstance.vnode.el.querySelector(`.${ns.is("hovered")}[rowkey="${String(rowKey)}"]`)) (0, vue.nextTick)(() => onRowHovered({
hovered: true,
rowKey
}));
}
const flushingRowHeights = debounce(() => {
isResetting.value = true;
rowHeights.value = {
...(0, vue.unref)(rowHeights),
...(0, vue.unref)(pendingRowHeights)
};
resetAfterIndex((0, vue.unref)(resetIndex), false);
pendingRowHeights.value = {};
resetIndex.value = null;
mainTableRef.value?.forceUpdate();
leftTableRef.value?.forceUpdate();
rightTableRef.value?.forceUpdate();
vm.proxy?.$forceUpdate();
isResetting.value = false;
}, 0);
function resetAfterIndex(index, forceUpdate = false) {
if (!(0, vue.unref)(isDynamic)) return;
[
mainTableRef,
leftTableRef,
rightTableRef
].forEach((tableRef) => {
const table = (0, vue.unref)(tableRef);
if (table) table.resetAfterRowIndex(index, forceUpdate);
});
}
function resetHeights(rowKey, height, rowIdx) {
const resetIdx = (0, vue.unref)(resetIndex);
if (resetIdx === null) resetIndex.value = rowIdx;
else if (resetIdx > rowIdx) resetIndex.value = rowIdx;
pendingRowHeights.value[rowKey] = height;
}
function onRowHeightChange({ rowKey, height, rowIndex }, fixedDir) {
if (!fixedDir) mainTableHeights.value[rowKey] = height;
else if (fixedDir === FixedDir.RIGHT) rightTableHeights.value[rowKey] = height;
else leftTableHeights.value[rowKey] = height;
const maximumHeight = Math.max(...[
leftTableHeights,
rightTableHeights,
mainTableHeights
].map((records) => records.value[rowKey] || 0));
if ((0, vue.unref)(rowHeights)[rowKey] !== maximumHeight) {
resetHeights(rowKey, maximumHeight, rowIndex);
flushingRowHeights();
}
}
return {
expandedRowKeys,
lastRenderedRowIndex,
isDynamic,
isResetting,
rowHeights,
resetAfterIndex,
onRowExpanded,
onRowHovered,
onRowsRendered,
onRowHeightChange
};
};
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-data.ts
const useData = (props, { expandedRowKeys, lastRenderedRowIndex, resetAfterIndex }) => {
const depthMap = (0, vue.ref)({});
const flattenedData = (0, vue.computed)(() => {
const depths = {};
const { data, rowKey } = props;
const _expandedRowKeys = (0, vue.unref)(expandedRowKeys);
if (!_expandedRowKeys || !_expandedRowKeys.length) return data;
const array = [];
const keysSet = /* @__PURE__ */ new Set();
_expandedRowKeys.forEach((x) => keysSet.add(x));
let copy = data.slice();
copy.forEach((x) => depths[x[rowKey]] = 0);
while (copy.length > 0) {
const item = copy.shift();
array.push(item);
if (keysSet.has(item[rowKey]) && isArray$1(item.children) && item.children.length > 0) {
copy = [...item.children, ...copy];
item.children.forEach((child) => depths[child[rowKey]] = depths[item[rowKey]] + 1);
}
}
depthMap.value = depths;
return array;
});
const data = (0, vue.computed)(() => {
const { data, expandColumnKey } = props;
return expandColumnKey ? (0, vue.unref)(flattenedData) : data;
});
(0, vue.watch)(data, (val, prev) => {
if (val !== prev) {
lastRenderedRowIndex.value = -1;
resetAfterIndex(0, true);
}
});
return {
data,
depthMap
};
};
//#endregion
//#region ../../packages/components/table-v2/src/utils.ts
const sumReducer = (sum, num) => sum + num;
const sum = (listLike) => {
return isArray$1(listLike) ? listLike.reduce(sumReducer, 0) : listLike;
};
const tryCall = (fLike, params, defaultRet = {}) => {
return isFunction$1(fLike) ? fLike(params) : fLike ?? defaultRet;
};
const enforceUnit = (style) => {
[
"width",
"maxWidth",
"minWidth",
"height"
].forEach((key) => {
style[key] = addUnit(style[key]);
});
return style;
};
const componentToSlot = (ComponentLike) => (0, vue.isVNode)(ComponentLike) ? (props) => (0, vue.h)(ComponentLike, props) : ComponentLike;
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-styles.ts
const useStyles = (props, { columnsTotalWidth, rowsHeight, fixedColumnsOnLeft, fixedColumnsOnRight }) => {
const bodyWidth = (0, vue.computed)(() => {
const { fixed, width, vScrollbarSize } = props;
const ret = width - vScrollbarSize;
return fixed ? Math.max(Math.round((0, vue.unref)(columnsTotalWidth)), ret) : ret;
});
const mainTableHeight = (0, vue.computed)(() => {
const { height = 0, maxHeight = 0, footerHeight, hScrollbarSize } = props;
if (maxHeight > 0) {
const _fixedRowsHeight = (0, vue.unref)(fixedRowsHeight);
const _rowsHeight = (0, vue.unref)(rowsHeight);
const total = (0, vue.unref)(headerHeight) + _fixedRowsHeight + _rowsHeight + hScrollbarSize;
return Math.min(total, maxHeight - footerHeight);
}
return height - footerHeight;
});
const fixedTableHeight = (0, vue.computed)(() => {
const { maxHeight } = props;
const tableHeight = (0, vue.unref)(mainTableHeight);
if (isNumber(maxHeight) && maxHeight > 0) return tableHeight;
const totalHeight = (0, vue.unref)(rowsHeight) + (0, vue.unref)(headerHeight) + (0, vue.unref)(fixedRowsHeight);
return Math.min(tableHeight, totalHeight);
});
const mapColumn = (column) => column.width;
const leftTableWidth = (0, vue.computed)(() => sum((0, vue.unref)(fixedColumnsOnLeft).map(mapColumn)));
const rightTableWidth = (0, vue.computed)(() => sum((0, vue.unref)(fixedColumnsOnRight).map(mapColumn)));
const headerHeight = (0, vue.computed)(() => sum(props.headerHeight));
const fixedRowsHeight = (0, vue.computed)(() => {
return (props.fixedData?.length || 0) * props.rowHeight;
});
const windowHeight = (0, vue.computed)(() => {
return (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight) - (0, vue.unref)(fixedRowsHeight);
});
const rootStyle = (0, vue.computed)(() => {
const { style = {}, height, width } = props;
return enforceUnit({
...style,
height,
width
});
});
return {
bodyWidth,
fixedTableHeight,
mainTableHeight,
leftTableWidth,
rightTableWidth,
windowHeight,
footerHeight: (0, vue.computed)(() => enforceUnit({ height: props.footerHeight })),
emptyStyle: (0, vue.computed)(() => ({
top: addUnit((0, vue.unref)(headerHeight)),
bottom: addUnit(props.footerHeight),
width: addUnit(props.width)
})),
rootStyle,
headerHeight
};
};
//#endregion
//#region ../../packages/components/table-v2/src/composables/use-auto-resize.ts
const useAutoResize = (props) => {
const sizer = (0, vue.ref)();
const width$ = (0, vue.ref)(0);
const height$ = (0, vue.ref)(0);
let resizerStopper;
(0, vue.onMounted)(() => {
resizerStopper = useResizeObserver(sizer, ([entry]) => {
const { width, height } = entry.contentRect;
const { paddingLeft, paddingRight, paddingTop, paddingBottom } = getComputedStyle(entry.target);
const left = Number.parseInt(paddingLeft) || 0;
const right = Number.parseInt(paddingRight) || 0;
const top = Number.parseInt(paddingTop) || 0;
const bottom = Number.parseInt(paddingBottom) || 0;
width$.value = width - left - right;
height$.value = height - top - bottom;
}).stop;
});
(0, vue.onBeforeUnmount)(() => {
resizerStopper?.();
});
(0, vue.watch)([width$, height$], ([width, height]) => {
props.onResize?.({
width,
height
});
});
return {
sizer,
width: width$,
height: height$
};
};
//#endregion
//#region ../../packages/components/table-v2/src/use-table.ts
function useTable(props) {
const mainTableRef = (0, vue.ref)();
const leftTableRef = (0, vue.ref)();
const rightTableRef = (0, vue.ref)();
const { columns, columnsStyles, columnsTotalWidth, fixedColumnsOnLeft, fixedColumnsOnRight, hasFixedColumns, mainColumns, onColumnSorted } = useColumns(props, (0, vue.toRef)(props, "columns"), (0, vue.toRef)(props, "fixed"));
const { scrollTo, scrollToLeft, scrollToTop, scrollToRow, onScroll, onVerticalScroll, scrollPos } = useScrollbar(props, {
mainTableRef,
leftTableRef,
rightTableRef,
onMaybeEndReached
});
const ns = useNamespace("table-v2");
const instance = (0, vue.getCurrentInstance)();
const isScrolling = (0, vue.shallowRef)(false);
const { expandedRowKeys, lastRenderedRowIndex, isDynamic, isResetting, rowHeights, resetAfterIndex, onRowExpanded, onRowHeightChange, onRowHovered, onRowsRendered } = useRow(props, {
mainTableRef,
leftTableRef,
rightTableRef,
tableInstance: instance,
ns,
isScrolling
});
const { data, depthMap } = useData(props, {
expandedRowKeys,
lastRenderedRowIndex,
resetAfterIndex
});
const rowsHeight = (0, vue.computed)(() => {
const { estimatedRowHeight, rowHeight } = props;
const _data = (0, vue.unref)(data);
if (isNumber(estimatedRowHeight)) return Object.values((0, vue.unref)(rowHeights)).reduce((acc, curr) => acc + curr, 0);
return _data.length * rowHeight;
});
const { bodyWidth, fixedTableHeight, mainTableHeight, leftTableWidth, rightTableWidth, windowHeight, footerHeight, emptyStyle, rootStyle, headerHeight } = useStyles(props, {
columnsTotalWidth,
fixedColumnsOnLeft,
fixedColumnsOnRight,
rowsHeight
});
const containerRef = (0, vue.ref)();
const showEmpty = (0, vue.computed)(() => {
const noData = (0, vue.unref)(data).length === 0;
return isArray$1(props.fixedData) ? props.fixedData.length === 0 && noData : noData;
});
function getRowHeight(rowIndex) {
const { estimatedRowHeight, rowHeight, rowKey } = props;
if (!estimatedRowHeight) return rowHeight;
return (0, vue.unref)(rowHeights)[(0, vue.unref)(data)[rowIndex][rowKey]] || estimatedRowHeight;
}
const isEndReached = (0, vue.ref)(false);
function onMaybeEndReached() {
const { onEndReached } = props;
if (!onEndReached) return;
const { scrollTop } = (0, vue.unref)(scrollPos);
const _totalHeight = (0, vue.unref)(rowsHeight);
const remainDistance = _totalHeight - (scrollTop + (0, vue.unref)(windowHeight)) + props.hScrollbarSize;
if (!isEndReached.value && (0, vue.unref)(lastRenderedRowIndex) >= 0 && _totalHeight <= scrollTop + (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight)) {
isEndReached.value = true;
onEndReached(remainDistance);
} else isEndReached.value = false;
}
(0, vue.watch)(() => (0, vue.unref)(rowsHeight), () => isEndReached.value = false);
(0, vue.watch)(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, { deep: true });
return {
columns,
containerRef,
mainTableRef,
leftTableRef,
rightTableRef,
isDynamic,
isResetting,
isScrolling,
hasFixedColumns,
columnsStyles,
columnsTotalWidth,
data,
expandedRowKeys,
depthMap,
fixedColumnsOnLeft,
fixedColumnsOnRight,
mainColumns,
bodyWidth,
emptyStyle,
rootStyle,
footerHeight,
mainTableHeight,
fixedTableHeight,
leftTableWidth,
rightTableWidth,
showEmpty,
getRowHeight,
onColumnSorted,
onRowHovered,
onRowExpanded,
onRowsRendered,
onRowHeightChange,
scrollTo,
scrollToLeft,
scrollToTop,
scrollToRow,
onScroll,
onVerticalScroll
};
}
//#endregion
//#region ../../packages/components/table-v2/src/tokens.ts
const TableV2InjectionKey = Symbol("tableV2");
const TABLE_V2_GRID_INJECTION_KEY = "tableV2GridScrollLeft";
//#endregion
//#region ../../packages/components/table-v2/src/common.ts
/**
* @Note even though we can use `string[] | string` as the type but for
* convenience here we only use `string` as the acceptable value here.
*/
const classType = String;
const columns = {
type: definePropType(Array),
required: true
};
const column = { type: definePropType(Object) };
const fixedDataType = { type: definePropType(Array) };
const dataType = {
...fixedDataType,
required: true
};
const expandColumnKey = String;
const expandKeys = {
type: definePropType(Array),
default: () => mutable([])
};
const requiredNumber = {
type: Number,
required: true
};
const rowKey = {
type: definePropType([
String,
Number,
Symbol
]),
default: "id"
};
/**
* @note even though we can use `StyleValue` but that would be difficult for us to mapping them,
* so we only use `CSSProperties` as the acceptable value here.
*/
const styleType = { type: definePropType(Object) };
//#endregion
//#region ../../packages/components/table-v2/src/row.ts
const tableV2RowProps = buildProps({
class: String,
columns,
columnsStyles: {
type: definePropType(Object),
required: true
},
depth: Number,
expandColumnKey,
estimatedRowHeight: {
...virtualizedGridProps.estimatedRowHeight,
default: void 0
},
isScrolling: Boolean,
onRowExpand: { type: definePropType(Function) },
onRowHover: { type: definePropType(Function) },
onRowHeightChange: { type: definePropType(Function) },
rowData: {
type: definePropType(Object),
required: true
},
rowEventHandlers: { type: definePropType(Object) },
rowIndex: {
type: Number,
required: true
},
rowKey,
style: { type: definePropType(Object) }
});
//#endregion
//#region ../../packages/components/table-v2/src/header.ts
const requiredNumberType = {
type: Number,
required: true
};
const tableV2HeaderProps = buildProps({
class: String,
columns,
fixedHeaderData: { type: definePropType(Array) },
headerData: {
type: definePropType(Array),
required: true
},
headerHeight: {
type: definePropType([Number, Array]),
default: 50
},
rowWidth: requiredNumberType,
rowHeight: {
type: Number,
default: 50
},
height: requiredNumberType,
width: requiredNumberType
});
//#endregion
//#region ../../packages/components/table-v2/src/grid.ts
const tableV2GridProps = buildProps({
columns,
data: dataType,
fixedData: fixedDataType,
estimatedRowHeight: tableV2RowProps.estimatedRowHeight,
width: requiredNumber,
height: requiredNumber,
headerWidth: requiredNumber,
headerHeight: tableV2HeaderProps.headerHeight,
bodyWidth: requiredNumber,
rowHeight: requiredNumber,
cache: virtualizedListProps.cache,
useIsScrolling: Boolean,
scrollbarAlwaysOn: virtualizedGridProps.scrollbarAlwaysOn,
scrollbarStartGap: virtualizedGridProps.scrollbarStartGap,
scrollbarEndGap: virtualizedGridProps.scrollbarEndGap,
class: classType,
style: styleType,
containerStyle: styleType,
getRowHeight: {
type: definePropType(Function),
required: true
},
rowKey: tableV2RowProps.rowKey,
onRowsRendered: { type: definePropType(Function) },
onScroll: { type: definePropType(Function) }
});
//#endregion
//#region ../../packages/components/table-v2/src/table.ts
const tableV2Props = buildProps({
cache: tableV2GridProps.cache,
estimatedRowHeight: tableV2RowProps.estimatedRowHeight,
rowKey,
headerClass: { type: definePropType([String, Function]) },
headerProps: { type: definePropType([Object, Function]) },
headerCellProps: { type: definePropType([Object, Function]) },
headerHeight: tableV2HeaderProps.headerHeight,
footerHeight: {
type: Number,
default: 0
},
rowClass: { type: definePropType([String, Function]) },
rowProps: { type: definePropType([Object, Function]) },
rowHeight: {
type: Number,
default: 50
},
cellProps: { type: definePropType([Object, Function]) },
columns,
data: dataType,
dataGetter: { type: definePropType(Function) },
fixedData: fixedDataType,
expandColumnKey: tableV2RowProps.expandColumnKey,
expandedRowKeys: expandKeys,
defaultExpandedRowKeys: expandKeys,
class: classType,
fixed: Boolean,
style: { type: definePropType(Object) },
width: requiredNumber,
height: requiredNumber,
maxHeight: Number,
useIsScrolling: Boolean,
indentSize: {
type: Number,
default: 12
},
iconSize: {
type: Number,
default: 12
},
hScrollbarSize: virtualizedGridProps.hScrollbarSize,
vScrollbarSize: virtualizedGridProps.vScrollbarSize,
scrollbarAlwaysOn: virtualizedScrollbarProps.alwaysOn,
sortBy: {
type: definePropType(Object),
default: () => ({})
},
sortState: {
type: definePropType(Object),
default: void 0
},
onColumnSort: { type: definePropType(Function) },
onExpandedRowsChange: { type: definePropType(Function) },
onEndReached: { type: definePropType(Function) },
onRowExpand: tableV2RowProps.onRowExpand,
onScroll: tableV2GridProps.onScroll,
onRowsRendered: tableV2GridProps.onRowsRendered,
rowEventHandlers: tableV2RowProps.rowEventHandlers
});
//#endregion
//#region ../../packages/components/table-v2/src/components/cell.tsx
const TableV2Cell = (props, { slots }) => {
const { cellData, style } = props;
const displayText = cellData?.toString?.() || "";
const defaultSlot = (0, vue.renderSlot)(slots, "default", props, () => [displayText]);
return (0, vue.createVNode)("div", {
"class": props.class,
"title": displayText,
"style": style
}, [defaultSlot]);
};
TableV2Cell.displayName = "ElTableV2Cell";
TableV2Cell.inheritAttrs = false;
//#endregion
//#region ../../packages/components/table-v2/src/components/header-cell.tsx
const HeaderCell = (props, { slots }) => (0, vue.renderSlot)(slots, "default", props, () => [(0, vue.createVNode)("div", {
"class": props.class,
"title": props.column?.title
}, [props.column?.title])]);
HeaderCell.displayName = "ElTableV2HeaderCell";
HeaderCell.inheritAttrs = false;
//#endregion
//#region ../../packages/components/table-v2/src/header-row.ts
const tableV2HeaderRowProps = buildProps({
class: String,
columns,
columnsStyles: {
type: definePropType(Object),
required: true
},
headerIndex: Number,
style: { type: definePropType(Object) }
});
//#endregion
//#region ../../packages/components/table-v2/src/components/header-row.tsx
const TableV2HeaderRow = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTableV2HeaderRow",
props: tableV2HeaderRowProps,
setup(props, { slots }) {
return () => {
const { columns, columnsStyles, headerIndex, style } = props;
let Cells = columns.map((column, columnIndex) => {
return slots.cell({
columns,
column,
columnIndex,
headerIndex,
style: columnsStyles[column.key]
});
});
if (slots.header) Cells = slots.header({
cells: Cells.map((node) => {
if (isArray$1(node) && node.length === 1) return node[0];
return node;
}),
columns,
headerIndex
});
return (0, vue.createVNode)("div", {
"class": props.class,
"style": style,
"role": "row"
}, [Cells]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/src/components/header.tsx
const TableV2Header = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTableV2Header",
props: tableV2HeaderProps,
setup(props, { slots, expose }) {
const ns = useNamespace("table-v2");
const scrollLeftInfo = (0, vue.inject)(TABLE_V2_GRID_INJECTION_KEY);
const headerRef = (0, vue.ref)();
const headerStyle = (0, vue.computed)(() => enforceUnit({
width: props.width,
height: props.height
}));
const rowStyle = (0, vue.computed)(() => enforceUnit({
width: props.rowWidth,
height: props.height
}));
const headerHeights = (0, vue.computed)(() => castArray$1((0, vue.unref)(props.headerHeight)));
const scrollToLeft = (left) => {
const headerEl = (0, vue.unref)(headerRef);
(0, vue.nextTick)(() => {
headerEl?.scroll && headerEl.scroll({ left });
});
};
const renderFixedRows = () => {
const fixedRowClassName = ns.e("fixed-header-row");
const { columns, fixedHeaderData, rowHeight } = props;
return fixedHeaderData?.map((fixedRowData, fixedRowIndex) => {
const style = enforceUnit({
height: rowHeight,
width: "100%"
});
return slots.fixed?.({
class: fixedRowClassName,
columns,
rowData: fixedRowData,
rowIndex: -(fixedRowIndex + 1),
style
});
});
};
const renderDynamicRows = () => {
const dynamicRowClassName = ns.e("dynamic-header-row");
const { columns } = props;
return (0, vue.unref)(headerHeights).map((rowHeight, rowIndex) => {
const style = enforceUnit({
width: "100%",
height: rowHeight
});
return slots.dynamic?.({
class: dynamicRowClassName,
columns,
headerIndex: rowIndex,
style
});
});
};
(0, vue.onUpdated)(() => {
if (scrollLeftInfo?.value) scrollToLeft(scrollLeftInfo.value);
});
expose({ scrollToLeft });
return () => {
if (props.height <= 0) return;
return (0, vue.createVNode)("div", {
"ref": headerRef,
"class": props.class,
"style": (0, vue.unref)(headerStyle),
"role": "rowgroup"
}, [(0, vue.createVNode)("div", {
"style": (0, vue.unref)(rowStyle),
"class": ns.e("header")
}, [renderDynamicRows(), renderFixedRows()])]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/src/components/row.tsx
const useTableRow = (props) => {
const { isScrolling } = (0, vue.inject)(TableV2InjectionKey);
const measured = (0, vue.ref)(false);
const rowRef = (0, vue.ref)();
const measurable = (0, vue.computed)(() => {
return isNumber(props.estimatedRowHeight) && props.rowIndex >= 0;
});
const doMeasure = (isInit = false) => {
const $rowRef = (0, vue.unref)(rowRef);
if (!$rowRef) return;
const { columns, onRowHeightChange, rowKey, rowIndex, style } = props;
const { height } = $rowRef.getBoundingClientRect();
measured.value = true;
(0, vue.nextTick)(() => {
if (isInit || height !== Number.parseInt(style.height)) {
const firstColumn = columns[0];
const isPlaceholder = firstColumn?.placeholderSign === placeholderSign;
onRowHeightChange?.({
rowKey,
height,
rowIndex
}, firstColumn && !isPlaceholder && firstColumn.fixed);
}
});
};
const eventHandlers = (0, vue.computed)(() => {
const { rowData, rowIndex, rowKey, onRowHover } = props;
const handlers = props.rowEventHandlers || {};
const eventHandlers = {};
Object.entries(handlers).forEach(([eventName, handler]) => {
if (isFunction$1(handler)) eventHandlers[eventName] = (event) => {
handler({
event,
rowData,
rowIndex,
rowKey
});
};
});
if (onRowHover) [{
name: "onMouseleave",
hovered: false
}, {
name: "onMouseenter",
hovered: true
}].forEach(({ name, hovered }) => {
const existedHandler = eventHandlers[name];
eventHandlers[name] = (event) => {
onRowHover({
event,
hovered,
rowData,
rowIndex,
rowKey
});
existedHandler?.(event);
};
});
return eventHandlers;
});
const onExpand = (expanded) => {
const { onRowExpand, rowData, rowIndex, rowKey } = props;
onRowExpand?.({
expanded,
rowData,
rowIndex,
rowKey
});
};
(0, vue.onMounted)(() => {
if ((0, vue.unref)(measurable)) doMeasure(true);
});
return {
isScrolling,
measurable,
measured,
rowRef,
eventHandlers,
onExpand
};
};
const TableV2Row = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTableV2TableRow",
props: tableV2RowProps,
setup(props, { expose, slots, attrs }) {
const { eventHandlers, isScrolling, measurable, measured, rowRef, onExpand } = useTableRow(props);
expose({ onExpand });
return () => {
const { columns, columnsStyles, expandColumnKey, depth, rowData, rowIndex, style } = props;
let ColumnCells = columns.map((column, columnIndex) => {
const expandable = isArray$1(rowData.children) && rowData.children.length > 0 && column.key === expandColumnKey;
return slots.cell({
column,
columns,
columnIndex,
depth,
style: columnsStyles[column.key],
rowData,
rowIndex,
isScrolling: (0, vue.unref)(isScrolling),
expandIconProps: expandable ? {
rowData,
rowIndex,
onExpand
} : void 0
});
});
if (slots.row) ColumnCells = slots.row({
cells: ColumnCells.map((node) => {
if (isArray$1(node) && node.length === 1) return node[0];
return node;
}),
style,
columns,
depth,
rowData,
rowIndex,
isScrolling: (0, vue.unref)(isScrolling)
});
if ((0, vue.unref)(measurable)) {
const { height, ...exceptHeightStyle } = style || {};
const _measured = (0, vue.unref)(measured);
return (0, vue.createVNode)("div", (0, vue.mergeProps)({
"ref": rowRef,
"class": props.class,
"style": _measured ? style : exceptHeightStyle,
"role": "row"
}, attrs, (0, vue.unref)(eventHandlers)), [ColumnCells]);
}
return (0, vue.createVNode)("div", (0, vue.mergeProps)(attrs, {
"ref": rowRef,
"class": props.class,
"style": style,
"role": "row"
}, (0, vue.unref)(eventHandlers)), [ColumnCells]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/src/components/sort-icon.tsx
const SortIcon = (props) => {
const { sortOrder } = props;
return (0, vue.createVNode)("button", {
"type": "button",
"aria-label": props.ariaLabel,
"class": props.class
}, [(0, vue.createVNode)(ElIcon, { "size": 14 }, { default: () => [sortOrder === SortOrder.ASC ? (0, vue.createVNode)(sort_up_default, null, null) : (0, vue.createVNode)(sort_down_default, null, null)] })]);
};
//#endregion
//#region ../../packages/components/table-v2/src/components/expand-icon.tsx
const ExpandIcon = (props) => {
const { expanded, expandable, onExpand, style, size, ariaLabel } = props;
return (0, vue.createVNode)("button", (0, vue.mergeProps)({
onClick: expandable ? () => onExpand(!expanded) : void 0,
ariaLabel,
ariaExpanded: expanded,
class: props.class
}, { "type": "button" }), [(0, vue.createVNode)(ElIcon, {
"size": size,
"style": style
}, { default: () => [(0, vue.createVNode)(arrow_right_default, null, null)] })]);
};
ExpandIcon.inheritAttrs = false;
//#endregion
//#region ../../packages/components/table-v2/src/table-grid.tsx
const COMPONENT_NAME$5 = "ElTableV2Grid";
const useTableGrid = (props) => {
const headerRef = (0, vue.ref)();
const bodyRef = (0, vue.ref)();
const scrollLeft = (0, vue.ref)(0);
const totalHeight = (0, vue.computed)(() => {
const { data, rowHeight, estimatedRowHeight } = props;
if (estimatedRowHeight) return;
return data.length * rowHeight;
});
const fixedRowHeight = (0, vue.computed)(() => {
const { fixedData, rowHeight } = props;
return (fixedData?.length || 0) * rowHeight;
});
const headerHeight = (0, vue.computed)(() => sum(props.headerHeight));
const gridHeight = (0, vue.computed)(() => {
const { height } = props;
return Math.max(0, height - (0, vue.unref)(headerHeight) - (0, vue.unref)(fixedRowHeight));
});
const hasHeader = (0, vue.computed)(() => {
return (0, vue.unref)(headerHeight) + (0, vue.unref)(fixedRowHeight) > 0;
});
const itemKey = ({ data, rowIndex }) => data[rowIndex][props.rowKey];
function onItemRendered({ rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd }) {
props.onRowsRendered?.({
rowCacheStart,
rowCacheEnd,
rowVisibleStart,
rowVisibleEnd
});
}
function resetAfterRowIndex(index, forceUpdate) {
bodyRef.value?.resetAfterRowIndex(index, forceUpdate);
}
function scrollTo(leftOrOptions, top) {
const header$ = (0, vue.unref)(headerRef);
const body$ = (0, vue.unref)(bodyRef);
if (isObject$1(leftOrOptions)) {
header$?.scrollToLeft(leftOrOptions.scrollLeft);
scrollLeft.value = leftOrOptions.scrollLeft;
body$?.scrollTo(leftOrOptions);
} else {
header$?.scrollToLeft(leftOrOptions);
scrollLeft.value = leftOrOptions;
body$?.scrollTo({
scrollLeft: leftOrOptions,
scrollTop: top
});
}
}
function scrollToTop(scrollTop) {
(0, vue.unref)(bodyRef)?.scrollTo({ scrollTop });
}
function scrollToRow(row, strategy) {
const body = (0, vue.unref)(bodyRef);
if (!body) return;
const prevScrollLeft = scrollLeft.value;
body.scrollToItem(row, 0, strategy);
if (prevScrollLeft) scrollTo({ scrollLeft: prevScrollLeft });
}
function forceUpdate() {
(0, vue.unref)(bodyRef)?.$forceUpdate();
(0, vue.unref)(headerRef)?.$forceUpdate();
}
(0, vue.watch)(() => props.bodyWidth, () => {
if (isNumber(props.estimatedRowHeight)) bodyRef.value?.resetAfter({ columnIndex: 0 }, false);
});
return {
bodyRef,
forceUpdate,
fixedRowHeight,
gridHeight,
hasHeader,
headerHeight,
headerRef,
totalHeight,
itemKey,
onItemRendered,
resetAfterRowIndex,
scrollTo,
scrollToTop,
scrollToRow,
scrollLeft
};
};
const TableGrid = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$5,
props: tableV2GridProps,
setup(props, { slots, expose }) {
const { ns } = (0, vue.inject)(TableV2InjectionKey);
const { bodyRef, fixedRowHeight, gridHeight, hasHeader, headerRef, headerHeight, totalHeight, forceUpdate, itemKey, onItemRendered, resetAfterRowIndex, scrollTo, scrollToTop, scrollToRow, scrollLeft } = useTableGrid(props);
(0, vue.provide)(TABLE_V2_GRID_INJECTION_KEY, scrollLeft);
(0, vue.onActivated)(async () => {
await (0, vue.nextTick)();
const scrollTop = bodyRef.value?.states.scrollTop;
scrollTop && scrollToTop(Math.round(scrollTop) + 1);
});
expose({
forceUpdate,
totalHeight,
scrollTo,
scrollToTop,
scrollToRow,
resetAfterRowIndex
});
const getColumnWidth = () => props.bodyWidth;
return () => {
const { cache, columns, data, fixedData, useIsScrolling, scrollbarAlwaysOn, scrollbarEndGap, scrollbarStartGap, style, rowHeight, bodyWidth, estimatedRowHeight, headerWidth, height, width, getRowHeight, onScroll } = props;
const isDynamicRowEnabled = isNumber(estimatedRowHeight);
const Grid = isDynamicRowEnabled ? DynamicSizeGrid : FixedSizeGrid;
const _headerHeight = (0, vue.unref)(headerHeight);
return (0, vue.createVNode)("div", {
"role": "table",
"class": [ns.e("table"), props.class],
"style": style
}, [(0, vue.createVNode)(Grid, {
"ref": bodyRef,
"data": data,
"useIsScrolling": useIsScrolling,
"itemKey": itemKey,
"columnCache": 0,
"columnWidth": isDynamicRowEnabled ? getColumnWidth : bodyWidth,
"totalColumn": 1,
"totalRow": data.length,
"rowCache": cache,
"rowHeight": isDynamicRowEnabled ? getRowHeight : rowHeight,
"width": width,
"height": (0, vue.unref)(gridHeight),
"class": ns.e("body"),
"role": "rowgroup",
"scrollbarStartGap": scrollbarStartGap,
"scrollbarEndGap": scrollbarEndGap,
"scrollbarAlwaysOn": scrollbarAlwaysOn,
"onScroll": onScroll,
"onItemRendered": onItemRendered,
"perfMode": false
}, { default: (params) => {
const rowData = data[params.rowIndex];
return slots.row?.({
...params,
columns,
rowData
});
} }), (0, vue.unref)(hasHeader) && (0, vue.createVNode)(TableV2Header, {
"ref": headerRef,
"class": ns.e("header-wrapper"),
"columns": columns,
"headerData": data,
"headerHeight": props.headerHeight,
"fixedHeaderData": fixedData,
"rowWidth": headerWidth,
"rowHeight": rowHeight,
"width": width,
"height": Math.min(_headerHeight + (0, vue.unref)(fixedRowHeight), height)
}, {
dynamic: slots.header,
fixed: slots.row
})]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/src/renderers/main-table.tsx
function _isSlot$5(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const MainTable = (props, { slots }) => {
const { mainTableRef, ...rest } = props;
return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": mainTableRef }, rest), _isSlot$5(slots) ? slots : { default: () => [slots] });
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/left-table.tsx
function _isSlot$4(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const LeftTable = (props, { slots }) => {
if (!props.columns.length) return;
const { leftTableRef, ...rest } = props;
return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": leftTableRef }, rest), _isSlot$4(slots) ? slots : { default: () => [slots] });
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/right-table.tsx
function _isSlot$3(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const RightTable = (props, { slots }) => {
if (!props.columns.length) return;
const { rightTableRef, ...rest } = props;
return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": rightTableRef }, rest), _isSlot$3(slots) ? slots : { default: () => [slots] });
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/row.tsx
function _isSlot$2(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const RowRenderer = (props, { slots }) => {
const { columns, columnsStyles, depthMap, expandColumnKey, expandedRowKeys, estimatedRowHeight, hasFixedColumns, rowData, rowIndex, style, isScrolling, rowProps, rowClass, rowKey, rowEventHandlers, ns, onRowHovered, onRowExpanded } = props;
const rowKls = tryCall(rowClass, {
columns,
rowData,
rowIndex
}, "");
const additionalProps = tryCall(rowProps, {
columns,
rowData,
rowIndex
});
const _rowKey = rowData[rowKey];
const depth = depthMap[_rowKey] || 0;
const canExpand = Boolean(expandColumnKey);
const isFixedRow = rowIndex < 0;
const kls = [
ns.e("row"),
rowKls,
ns.is("expanded", canExpand && expandedRowKeys.includes(_rowKey)),
ns.is("fixed", !depth && isFixedRow),
ns.is("customized", Boolean(slots.row)),
{ [ns.e(`row-depth-${depth}`)]: canExpand && rowIndex >= 0 }
];
const onRowHover = hasFixedColumns ? onRowHovered : void 0;
const _rowProps = {
...additionalProps,
columns,
columnsStyles,
class: kls,
depth,
expandColumnKey,
estimatedRowHeight: isFixedRow ? void 0 : estimatedRowHeight,
isScrolling,
rowIndex,
rowData,
rowKey: _rowKey,
rowEventHandlers,
style
};
const handlerMouseEnter = (e) => {
onRowHover?.({
hovered: true,
rowKey: _rowKey,
event: e,
rowData,
rowIndex
});
};
const handlerMouseLeave = (e) => {
onRowHover?.({
hovered: false,
rowKey: _rowKey,
event: e,
rowData,
rowIndex
});
};
return (0, vue.createVNode)(TableV2Row, (0, vue.mergeProps)(_rowProps, {
"onRowExpand": onRowExpanded,
"onMouseenter": handlerMouseEnter,
"onMouseleave": handlerMouseLeave,
"rowkey": _rowKey
}), _isSlot$2(slots) ? slots : { default: () => [slots] });
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/cell.tsx
const CellRenderer = ({ columns, column, columnIndex, depth, expandIconProps, isScrolling, rowData, rowIndex, style, expandedRowKeys, ns, t, cellProps: _cellProps, expandColumnKey, indentSize, iconSize, rowKey }, { slots }) => {
const cellStyle = enforceUnit(style);
if (column.placeholderSign === placeholderSign) return (0, vue.createVNode)("div", {
"class": ns.em("row-cell", "placeholder"),
"style": cellStyle
}, null);
const { cellRenderer, dataKey, dataGetter } = column;
const cellData = isFunction$1(dataGetter) ? dataGetter({
columns,
column,
columnIndex,
rowData,
rowIndex
}) : get(rowData, dataKey ?? "");
const extraCellProps = tryCall(_cellProps, {
cellData,
columns,
column,
columnIndex,
rowIndex,
rowData
});
const cellProps = {
class: ns.e("cell-text"),
columns,
column,
columnIndex,
cellData,
isScrolling,
rowData,
rowIndex
};
const columnCellRenderer = componentToSlot(cellRenderer);
const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : (0, vue.renderSlot)(slots, "default", cellProps, () => [(0, vue.createVNode)(TableV2Cell, cellProps, null)]);
const kls = [
ns.e("row-cell"),
column.class,
column.align === Alignment.CENTER && ns.is("align-center"),
column.align === Alignment.RIGHT && ns.is("align-right")
];
const expandable = rowIndex >= 0 && expandColumnKey && column.key === expandColumnKey;
const expanded = rowIndex >= 0 && expandedRowKeys.includes(rowData[rowKey]);
let IconOrPlaceholder;
const iconStyle = `margin-inline-start: ${depth * indentSize}px;`;
if (expandable) if (isObject$1(expandIconProps)) IconOrPlaceholder = (0, vue.createVNode)(ExpandIcon, (0, vue.mergeProps)(expandIconProps, {
"class": [ns.e("expand-icon"), ns.is("expanded", expanded)],
"size": iconSize,
"expanded": expanded,
"ariaLabel": t(expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
"style": iconStyle,
"expandable": true
}), null);
else IconOrPlaceholder = (0, vue.createVNode)("div", { "style": [iconStyle, `width: ${iconSize}px; height: ${iconSize}px;`].join(" ") }, null);
return (0, vue.createVNode)("div", (0, vue.mergeProps)({
"class": kls,
"style": cellStyle
}, extraCellProps, { "role": "cell" }), [IconOrPlaceholder, Cell]);
};
CellRenderer.inheritAttrs = false;
//#endregion
//#region ../../packages/components/table-v2/src/renderers/header.tsx
function _isSlot$1(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const HeaderRenderer = ({ columns, columnsStyles, headerIndex, style, headerClass, headerProps, ns }, { slots }) => {
const param = {
columns,
headerIndex
};
const kls = [
ns.e("header-row"),
tryCall(headerClass, param, ""),
ns.is("customized", Boolean(slots.header))
];
return (0, vue.createVNode)(TableV2HeaderRow, {
...tryCall(headerProps, param),
columnsStyles,
class: kls,
columns,
headerIndex,
style
}, _isSlot$1(slots) ? slots : { default: () => [slots] });
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/header-cell.tsx
const HeaderCellRenderer = (props, { slots }) => {
const { column, ns, t, style, onColumnSorted } = props;
const cellStyle = enforceUnit(style);
if (column.placeholderSign === placeholderSign) return (0, vue.createVNode)("div", {
"class": ns.em("header-row-cell", "placeholder"),
"style": cellStyle
}, null);
const { headerCellRenderer, headerClass, sortable } = column;
/**
* render Cell children
*/
const cellProps = {
...props,
class: ns.e("header-cell-text")
};
const columnCellRenderer = componentToSlot(headerCellRenderer);
const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : (0, vue.renderSlot)(slots, "default", cellProps, () => [(0, vue.createVNode)(HeaderCell, cellProps, null)]);
/**
* Render cell container and sort indicator
*/
const { sortBy, sortState, headerCellProps } = props;
let sorting, sortOrder, ariaSort;
if (sortState) {
const order = sortState[column.key];
sorting = Boolean(oppositeOrderMap[order]);
sortOrder = sorting ? order : SortOrder.ASC;
} else {
sorting = column.key === sortBy.key;
sortOrder = sorting ? sortBy.order : SortOrder.ASC;
}
if (sortOrder === SortOrder.ASC) ariaSort = "ascending";
else if (sortOrder === SortOrder.DESC) ariaSort = "descending";
else ariaSort = void 0;
const cellKls = [
ns.e("header-cell"),
tryCall(headerClass, props, ""),
column.align === Alignment.CENTER && ns.is("align-center"),
column.align === Alignment.RIGHT && ns.is("align-right"),
sortable && ns.is("sortable")
];
return (0, vue.createVNode)("div", (0, vue.mergeProps)({
...tryCall(headerCellProps, props),
onClick: column.sortable ? onColumnSorted : void 0,
ariaSort: sortable ? ariaSort : void 0,
class: cellKls,
style: cellStyle,
["data-key"]: column.key
}, { "role": "columnheader" }), [Cell, sortable && (0, vue.createVNode)(SortIcon, {
"class": [ns.e("sort-icon"), sorting && ns.is("sorting")],
"sortOrder": sortOrder,
"ariaLabel": t("el.table.sortLabel", { column: column.title || "" })
}, null)]);
};
//#endregion
//#region ../../packages/components/table-v2/src/renderers/footer.tsx
const Footer$1 = (props, { slots }) => {
return (0, vue.createVNode)("div", {
"class": props.class,
"style": props.style
}, [slots.default?.()]);
};
Footer$1.displayName = "ElTableV2Footer";
//#endregion
//#region ../../packages/components/table-v2/src/renderers/empty.tsx
const Footer = (props, { slots }) => {
const defaultSlot = (0, vue.renderSlot)(slots, "default", {}, () => [(0, vue.createVNode)(ElEmpty, null, null)]);
return (0, vue.createVNode)("div", {
"class": props.class,
"style": props.style
}, [defaultSlot]);
};
Footer.displayName = "ElTableV2Empty";
//#endregion
//#region ../../packages/components/table-v2/src/renderers/overlay.tsx
const Overlay = (props, { slots }) => {
return (0, vue.createVNode)("div", {
"class": props.class,
"style": props.style
}, [slots.default?.()]);
};
Overlay.displayName = "ElTableV2Overlay";
//#endregion
//#region ../../packages/components/table-v2/src/table-v2.tsx
function _isSlot(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
}
const TableV2 = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTableV2",
props: tableV2Props,
slots: Object,
setup(props, { slots, expose }) {
const ns = useNamespace("table-v2");
const { t } = useLocale();
const { columnsStyles, fixedColumnsOnLeft, fixedColumnsOnRight, mainColumns, mainTableHeight, fixedTableHeight, leftTableWidth, rightTableWidth, data, depthMap, expandedRowKeys, hasFixedColumns, mainTableRef, leftTableRef, rightTableRef, isDynamic, isResetting, isScrolling, bodyWidth, emptyStyle, rootStyle, footerHeight, showEmpty, scrollTo, scrollToLeft, scrollToTop, scrollToRow, getRowHeight, onColumnSorted, onRowHeightChange, onRowHovered, onRowExpanded, onRowsRendered, onScroll, onVerticalScroll } = useTable(props);
expose({
scrollTo,
scrollToLeft,
scrollToTop,
scrollToRow
});
(0, vue.provide)(TableV2InjectionKey, {
ns,
isResetting,
isScrolling
});
return () => {
const { cache, cellProps, estimatedRowHeight, expandColumnKey, fixedData, headerHeight, headerClass, headerProps, headerCellProps, sortBy, sortState, rowHeight, rowClass, rowEventHandlers, rowKey, rowProps, scrollbarAlwaysOn, indentSize, iconSize, useIsScrolling, vScrollbarSize, width } = props;
const _data = (0, vue.unref)(data);
const mainTableProps = {
cache,
class: ns.e("main"),
columns: (0, vue.unref)(mainColumns),
data: _data,
fixedData,
estimatedRowHeight,
bodyWidth: (0, vue.unref)(bodyWidth),
headerHeight,
headerWidth: (0, vue.unref)(bodyWidth),
height: (0, vue.unref)(mainTableHeight),
mainTableRef,
rowKey,
rowHeight,
scrollbarAlwaysOn,
scrollbarStartGap: 2,
scrollbarEndGap: vScrollbarSize,
useIsScrolling,
width,
getRowHeight,
onRowsRendered,
onScroll
};
const leftColumnsWidth = (0, vue.unref)(leftTableWidth);
const _fixedTableHeight = (0, vue.unref)(fixedTableHeight);
const leftTableProps = {
cache,
class: ns.e("left"),
columns: (0, vue.unref)(fixedColumnsOnLeft),
data: _data,
fixedData,
estimatedRowHeight,
leftTableRef,
rowHeight,
bodyWidth: leftColumnsWidth,
headerWidth: leftColumnsWidth,
headerHeight,
height: _fixedTableHeight,
rowKey,
scrollbarAlwaysOn,
scrollbarStartGap: 2,
scrollbarEndGap: vScrollbarSize,
useIsScrolling,
width: leftColumnsWidth,
getRowHeight,
onScroll: onVerticalScroll
};
const rightColumnsWidth = (0, vue.unref)(rightTableWidth);
const rightTableProps = {
cache,
class: ns.e("right"),
columns: (0, vue.unref)(fixedColumnsOnRight),
data: _data,
fixedData,
estimatedRowHeight,
rightTableRef,
rowHeight,
bodyWidth: rightColumnsWidth,
headerWidth: rightColumnsWidth,
headerHeight,
height: _fixedTableHeight,
rowKey,
scrollbarAlwaysOn,
scrollbarStartGap: 2,
scrollbarEndGap: vScrollbarSize,
width: rightColumnsWidth,
style: `${ns.cssVarName("table-scrollbar-size")}: ${vScrollbarSize}px`,
useIsScrolling,
getRowHeight,
onScroll: onVerticalScroll
};
const _columnsStyles = (0, vue.unref)(columnsStyles);
const tableRowProps = {
ns,
depthMap: (0, vue.unref)(depthMap),
columnsStyles: _columnsStyles,
expandColumnKey,
expandedRowKeys: (0, vue.unref)(expandedRowKeys),
estimatedRowHeight,
hasFixedColumns: (0, vue.unref)(hasFixedColumns),
rowProps,
rowClass,
rowKey,
rowEventHandlers,
onRowHovered,
onRowExpanded,
onRowHeightChange
};
const tableCellProps = {
cellProps,
expandColumnKey,
indentSize,
iconSize,
rowKey,
expandedRowKeys: (0, vue.unref)(expandedRowKeys),
ns,
t
};
const tableHeaderProps = {
ns,
headerClass,
headerProps,
columnsStyles: _columnsStyles
};
const tableHeaderCellProps = {
ns,
t,
sortBy,
sortState,
headerCellProps,
onColumnSorted
};
const tableSlots = {
row: (props) => (0, vue.createVNode)(RowRenderer, (0, vue.mergeProps)(props, tableRowProps), {
row: slots.row,
cell: (props) => {
let _slot;
return slots.cell ? (0, vue.createVNode)(CellRenderer, (0, vue.mergeProps)(props, tableCellProps, { "style": _columnsStyles[props.column.key] }), _isSlot(_slot = slots.cell(props)) ? _slot : { default: () => [_slot] }) : (0, vue.createVNode)(CellRenderer, (0, vue.mergeProps)(props, tableCellProps, { "style": _columnsStyles[props.column.key] }), null);
}
}),
header: (props) => (0, vue.createVNode)(HeaderRenderer, (0, vue.mergeProps)(props, tableHeaderProps), {
header: slots.header,
cell: (props) => {
let _slot2;
return slots["header-cell"] ? (0, vue.createVNode)(HeaderCellRenderer, (0, vue.mergeProps)(props, tableHeaderCellProps, { "style": _columnsStyles[props.column.key] }), _isSlot(_slot2 = slots["header-cell"](props)) ? _slot2 : { default: () => [_slot2] }) : (0, vue.createVNode)(HeaderCellRenderer, (0, vue.mergeProps)(props, tableHeaderCellProps, { "style": _columnsStyles[props.column.key] }), null);
}
})
};
const rootKls = [
props.class,
ns.b(),
ns.e("root"),
ns.is("dynamic", (0, vue.unref)(isDynamic))
];
const footerProps = {
class: ns.e("footer"),
style: (0, vue.unref)(footerHeight)
};
return (0, vue.createVNode)("div", {
"class": rootKls,
"style": (0, vue.unref)(rootStyle)
}, [
(0, vue.createVNode)(MainTable, mainTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
(0, vue.createVNode)(LeftTable, leftTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
(0, vue.createVNode)(RightTable, rightTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
slots.footer && (0, vue.createVNode)(Footer$1, footerProps, { default: slots.footer }),
(0, vue.unref)(showEmpty) && (0, vue.createVNode)(Footer, {
"class": ns.e("empty"),
"style": (0, vue.unref)(emptyStyle)
}, { default: slots.empty }),
slots.overlay && (0, vue.createVNode)(Overlay, { "class": ns.e("overlay") }, { default: slots.overlay })
]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/src/auto-resizer.ts
const autoResizerProps = buildProps({
disableWidth: Boolean,
disableHeight: Boolean,
onResize: { type: definePropType(Function) }
});
//#endregion
//#region ../../packages/components/table-v2/src/components/auto-resizer.tsx
const AutoResizer = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAutoResizer",
props: autoResizerProps,
setup(props, { slots }) {
const ns = useNamespace("auto-resizer");
const { height, width, sizer } = useAutoResize(props);
const style = {
width: "100%",
height: "100%"
};
return () => {
return (0, vue.createVNode)("div", {
"ref": sizer,
"class": ns.b(),
"style": style
}, [slots.default?.({
height: height.value,
width: width.value
})]);
};
}
});
//#endregion
//#region ../../packages/components/table-v2/index.ts
const ElTableV2 = withInstall(TableV2);
const ElAutoResizer = withInstall(AutoResizer);
//#endregion
//#region ../../packages/components/tabs/src/constants.ts
const tabsRootContextKey = Symbol("tabsRootContextKey");
//#endregion
//#region ../../packages/components/tabs/src/tab-bar.ts
/**
* @deprecated Removed after 3.0.0, Use `TabBarProps` instead.
*/
const tabBarProps = buildProps({
tabs: {
type: definePropType(Array),
default: () => mutable([])
},
tabRefs: {
type: definePropType(Object),
default: () => mutable({})
}
});
//#endregion
//#region ../../packages/components/tabs/src/tab-bar.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$4 = "ElTabBar";
var tab_bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$4,
__name: "tab-bar",
props: tabBarProps,
setup(__props, { expose: __expose }) {
const props = __props;
const rootTabs = (0, vue.inject)(tabsRootContextKey);
if (!rootTabs) throwError(COMPONENT_NAME$4, "<el-tabs><el-tab-bar /></el-tabs>");
const ns = useNamespace("tabs");
const barRef = (0, vue.ref)();
const barStyle = (0, vue.ref)();
/**
* when defaultValue is not set, the bar is always shown.
*
* when defaultValue is set, the bar will be hidden until style is calculated
* to avoid the bar showing in the wrong position on initial render.
*/
const renderActiveBar = (0, vue.computed)(() => isUndefined(rootTabs.props.defaultValue) || Boolean(barStyle.value?.transform));
const getBarStyle = () => {
let offset = 0;
let tabSize = 0;
const sizeName = ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height";
const sizeDir = sizeName === "width" ? "x" : "y";
const position = sizeDir === "x" ? "left" : "top";
props.tabs.every((tab) => {
if (isUndefined(tab.paneName)) return false;
const $el = props.tabRefs[tab.paneName];
if (!$el) return false;
if (!tab.active) return true;
offset = $el[`offset${capitalize(position)}`];
tabSize = $el[`client${capitalize(sizeName)}`];
const tabStyles = window.getComputedStyle($el);
if (sizeName === "width") {
tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight);
offset += Number.parseFloat(tabStyles.paddingLeft);
}
return false;
});
return {
[sizeName]: `${tabSize}px`,
transform: `translate${capitalize(sizeDir)}(${offset}px)`
};
};
const update = () => barStyle.value = getBarStyle();
const tabObservers = [];
const observerTabs = () => {
tabObservers.forEach((observer) => observer.stop());
tabObservers.length = 0;
Object.values(props.tabRefs).forEach((tab) => {
tabObservers.push(useResizeObserver(tab, update));
});
};
(0, vue.watch)(() => props.tabs, async () => {
await (0, vue.nextTick)();
update();
observerTabs();
}, { immediate: true });
const barObserver = useResizeObserver(barRef, () => update());
(0, vue.onBeforeUnmount)(() => {
tabObservers.forEach((observer) => observer.stop());
tabObservers.length = 0;
barObserver.stop();
});
__expose({
ref: barRef,
update
});
return (_ctx, _cache) => {
return renderActiveBar.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref_key: "barRef",
ref: barRef,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("active-bar"), (0, vue.unref)(ns).is((0, vue.unref)(rootTabs).props.tabPosition)]),
style: (0, vue.normalizeStyle)(barStyle.value)
}, null, 6)) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/tabs/src/tab-bar.vue
var tab_bar_default = tab_bar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tabs/src/tab-nav.tsx
const tabNavProps = buildProps({
panes: {
type: definePropType(Array),
default: () => mutable([])
},
currentName: {
type: [String, Number],
default: ""
},
editable: Boolean,
type: {
type: String,
values: [
"card",
"border-card",
""
],
default: ""
},
stretch: Boolean,
tabindex: {
type: [String, Number],
default: void 0
}
});
const tabNavEmits = {
tabClick: (tab, tabName, ev) => ev instanceof Event,
tabRemove: (tab, ev) => ev instanceof Event
};
const COMPONENT_NAME$3 = "ElTabNav";
const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$3,
props: tabNavProps,
emits: tabNavEmits,
setup(props, { expose, emit }) {
const rootTabs = (0, vue.inject)(tabsRootContextKey);
if (!rootTabs) throwError(COMPONENT_NAME$3, `<el-tabs><tab-nav /></el-tabs>`);
const ns = useNamespace("tabs");
const visibility = useDocumentVisibility();
const focused = useWindowFocus();
const navScroll$ = (0, vue.ref)();
const nav$ = (0, vue.ref)();
const el$ = (0, vue.ref)();
const tabRefsMap = (0, vue.ref)({});
const tabBarRef = (0, vue.ref)();
const scrollable = (0, vue.ref)(false);
const navOffset = (0, vue.ref)(0);
const isFocus = (0, vue.ref)(false);
const focusable = (0, vue.ref)(true);
const isWheelScrolling = (0, vue.ref)(false);
const tracker = (0, vue.shallowRef)();
const isHorizontal = (0, vue.computed)(() => ["top", "bottom"].includes(rootTabs.props.tabPosition));
const sizeName = (0, vue.computed)(() => isHorizontal.value ? "width" : "height");
const navStyle = (0, vue.computed)(() => {
const dir = sizeName.value === "width" ? "X" : "Y";
return {
transition: isWheelScrolling.value ? "none" : void 0,
transform: `translate${dir}(-${navOffset.value}px)`
};
});
const { width: navContainerWidth, height: navContainerHeight } = useElementSize(navScroll$);
const { width: navWidth, height: navHeight } = useElementSize(nav$, {
width: 0,
height: 0
}, { box: "border-box" });
const navContainerSize = (0, vue.computed)(() => isHorizontal.value ? navContainerWidth.value : navContainerHeight.value);
const navSize = (0, vue.computed)(() => isHorizontal.value ? navWidth.value : navHeight.value);
const { onWheel } = useWheel({
atStartEdge: (0, vue.computed)(() => navOffset.value <= 0),
atEndEdge: (0, vue.computed)(() => navSize.value - navOffset.value <= navContainerSize.value),
layout: (0, vue.computed)(() => isHorizontal.value ? "horizontal" : "vertical")
}, (offset) => {
navOffset.value = clamp$1(navOffset.value + offset, 0, navSize.value - navContainerSize.value);
});
const handleWheel = (event) => {
isWheelScrolling.value = true;
onWheel(event);
rAF(() => {
isWheelScrolling.value = false;
});
};
const scrollPrev = () => {
if (!navScroll$.value) return;
const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
const currentOffset = navOffset.value;
if (!currentOffset) return;
navOffset.value = currentOffset > containerSize ? currentOffset - containerSize : 0;
};
const scrollNext = () => {
if (!navScroll$.value || !nav$.value) return;
const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
const currentOffset = navOffset.value;
if (!isGreaterThan(navSize - currentOffset, containerSize)) return;
navOffset.value = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;
};
const scrollToActiveTab = async () => {
const nav = nav$.value;
if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return;
await (0, vue.nextTick)();
const activeTab = tabRefsMap.value[props.currentName];
if (!activeTab) return;
const navScroll = navScroll$.value;
const activeTabBounding = activeTab.getBoundingClientRect();
const navScrollBounding = navScroll.getBoundingClientRect();
const navScrollLeft = navScrollBounding.left + 1;
const navScrollRight = navScrollBounding.right - 1;
const navBounding = nav.getBoundingClientRect();
const maxOffset = isHorizontal.value ? navBounding.width - navScrollBounding.width : navBounding.height - navScrollBounding.height;
const currentOffset = navOffset.value;
let newOffset = currentOffset;
if (isHorizontal.value) {
if (activeTabBounding.left < navScrollLeft) newOffset = currentOffset - (navScrollLeft - activeTabBounding.left);
if (activeTabBounding.right > navScrollRight) newOffset = currentOffset + activeTabBounding.right - navScrollRight;
} else {
if (activeTabBounding.top < navScrollBounding.top) newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);
if (activeTabBounding.bottom > navScrollBounding.bottom) newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);
}
newOffset = Math.max(newOffset, 0);
navOffset.value = Math.min(newOffset, maxOffset);
};
const update = () => {
if (!nav$.value || !navScroll$.value) return;
props.stretch && tabBarRef.value?.update();
const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
const currentOffset = navOffset.value;
if (containerSize < navSize) {
scrollable.value = scrollable.value || {};
scrollable.value.prev = currentOffset;
scrollable.value.next = isGreaterThan(navSize, currentOffset + containerSize);
if (isGreaterThan(containerSize, navSize - currentOffset)) navOffset.value = navSize - containerSize;
} else {
scrollable.value = false;
if (currentOffset > 0) navOffset.value = 0;
}
};
const changeTab = (event) => {
const code = getEventCode(event);
let step = 0;
switch (code) {
case EVENT_CODE.left:
case EVENT_CODE.up:
step = -1;
break;
case EVENT_CODE.right:
case EVENT_CODE.down:
step = 1;
break;
default: return;
}
const tabList = Array.from(event.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));
let nextIndex = tabList.indexOf(event.target) + step;
if (nextIndex < 0) nextIndex = tabList.length - 1;
else if (nextIndex >= tabList.length) nextIndex = 0;
tabList[nextIndex].focus({ preventScroll: true });
tabList[nextIndex].click();
setFocus();
};
const setFocus = () => {
if (focusable.value) isFocus.value = true;
};
const removeFocus = () => isFocus.value = false;
const setRefs = (el, key) => {
tabRefsMap.value[key] = el;
};
const focusActiveTab = async () => {
await (0, vue.nextTick)();
tabRefsMap.value[props.currentName]?.focus({ preventScroll: true });
};
(0, vue.watch)(visibility, (visibility) => {
if (visibility === "hidden") focusable.value = false;
else if (visibility === "visible") setTimeout(() => focusable.value = true, 50);
});
(0, vue.watch)(focused, (focused) => {
if (focused) setTimeout(() => focusable.value = true, 50);
else focusable.value = false;
});
useResizeObserver(el$, () => {
rAF(update);
});
(0, vue.onMounted)(() => setTimeout(() => scrollToActiveTab(), 0));
(0, vue.onUpdated)(() => update());
expose({
scrollToActiveTab,
removeFocus,
focusActiveTab,
tabListRef: nav$,
tabBarRef,
scheduleRender: () => (0, vue.triggerRef)(tracker)
});
return () => {
const scrollBtn = scrollable.value ? [(0, vue.createVNode)("span", {
"class": [ns.e("nav-prev"), ns.is("disabled", !scrollable.value.prev)],
"onClick": scrollPrev
}, [(0, vue.createVNode)(ElIcon, null, { default: () => [(0, vue.createVNode)(arrow_left_default, null, null)] })]), (0, vue.createVNode)("span", {
"class": [ns.e("nav-next"), ns.is("disabled", !scrollable.value.next)],
"onClick": scrollNext
}, [(0, vue.createVNode)(ElIcon, null, { default: () => [(0, vue.createVNode)(arrow_right_default, null, null)] })])] : null;
const tabs = props.panes.map((pane, index) => {
const uid = pane.uid;
const disabled = pane.props.disabled;
const tabName = pane.props.name ?? pane.index ?? `${index}`;
const closable = !disabled && (pane.isClosable || pane.props.closable !== false && props.editable);
pane.index = `${index}`;
const btnClose = closable ? (0, vue.createVNode)(ElIcon, {
"class": "is-icon-close",
"onClick": (ev) => emit("tabRemove", pane, ev)
}, { default: () => [(0, vue.createVNode)(close_default, null, null)] }) : null;
const tabLabelContent = pane.slots.label?.() || pane.props.label;
const tabindex = !disabled && pane.active ? props.tabindex ?? rootTabs.props.tabindex : -1;
return (0, vue.createVNode)("div", {
"ref": (el) => setRefs(el, tabName),
"class": [
ns.e("item"),
ns.is(rootTabs.props.tabPosition),
ns.is("active", pane.active),
ns.is("disabled", disabled),
ns.is("closable", closable),
ns.is("focus", isFocus.value)
],
"id": `tab-${tabName}`,
"key": `tab-${uid}`,
"aria-controls": `pane-${tabName}`,
"role": "tab",
"aria-selected": pane.active,
"tabindex": tabindex,
"onFocus": () => setFocus(),
"onBlur": () => removeFocus(),
"onClick": (ev) => {
removeFocus();
emit("tabClick", pane, tabName, ev);
},
"onKeydown": (ev) => {
const code = getEventCode(ev);
if (closable && (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)) emit("tabRemove", pane, ev);
}
}, [...[tabLabelContent, btnClose]]);
});
tracker.value;
return (0, vue.createVNode)("div", {
"ref": el$,
"class": [
ns.e("nav-wrap"),
ns.is("scrollable", !!scrollable.value),
ns.is(rootTabs.props.tabPosition)
]
}, [scrollBtn, (0, vue.createVNode)("div", {
"class": ns.e("nav-scroll"),
"ref": navScroll$
}, [props.panes.length > 0 ? (0, vue.createVNode)("div", {
"class": [
ns.e("nav"),
ns.is(rootTabs.props.tabPosition),
ns.is("stretch", props.stretch && ["top", "bottom"].includes(rootTabs.props.tabPosition))
],
"ref": nav$,
"style": navStyle.value,
"role": "tablist",
"onKeydown": changeTab,
"onWheel": handleWheel
}, [...[!props.type ? (0, vue.createVNode)(tab_bar_default, {
"ref": tabBarRef,
"tabs": [...props.panes],
"tabRefs": tabRefsMap.value
}, null) : null, tabs]]) : null])]);
};
}
});
//#endregion
//#region ../../packages/components/tabs/src/tabs.tsx
const tabsProps = buildProps({
type: {
type: String,
values: [
"card",
"border-card",
""
],
default: ""
},
closable: Boolean,
addable: Boolean,
modelValue: { type: [String, Number] },
defaultValue: { type: [String, Number] },
editable: Boolean,
tabPosition: {
type: String,
values: [
"top",
"right",
"bottom",
"left"
],
default: "top"
},
beforeLeave: {
type: definePropType(Function),
default: () => true
},
stretch: Boolean,
tabindex: {
type: [String, Number],
default: 0
}
});
const isPaneName = (value) => isString(value) || isNumber(value);
const tabsEmits = {
[UPDATE_MODEL_EVENT]: (name) => isPaneName(name),
tabClick: (pane, ev) => ev instanceof Event,
tabChange: (name) => isPaneName(name),
edit: (paneName, action) => ["remove", "add"].includes(action),
tabRemove: (name) => isPaneName(name),
tabAdd: () => true
};
const Tabs = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTabs",
props: tabsProps,
emits: tabsEmits,
setup(props, { emit, slots, expose }) {
const ns = useNamespace("tabs");
const isVertical = (0, vue.computed)(() => ["left", "right"].includes(props.tabPosition));
const { children: panes, addChild: registerPane, removeChild: unregisterPane, ChildrenSorter: PanesSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElTabPane");
const nav$ = (0, vue.ref)();
const currentName = (0, vue.ref)((isUndefined(props.modelValue) ? props.defaultValue : props.modelValue) ?? "0");
const setCurrentName = async (value, trigger = false) => {
if (currentName.value === value || isUndefined(value)) return;
try {
let canLeave;
if (props.beforeLeave) {
const result = props.beforeLeave(value, currentName.value);
canLeave = result instanceof Promise ? await result : result;
} else canLeave = true;
if (canLeave !== false) {
const isFocusInsidePane = panes.value.find((item) => item.paneName === currentName.value)?.isFocusInsidePane();
currentName.value = value;
if (trigger) {
emit(UPDATE_MODEL_EVENT, value);
emit("tabChange", value);
}
nav$.value?.removeFocus?.();
if (isFocusInsidePane) nav$.value?.focusActiveTab();
}
} catch {}
};
const handleTabClick = (tab, tabName, event) => {
if (tab.props.disabled) return;
emit("tabClick", tab, event);
setCurrentName(tabName, true);
};
const handleTabRemove = (pane, ev) => {
if (pane.props.disabled || isUndefined(pane.props.name)) return;
ev.stopPropagation();
emit("edit", pane.props.name, "remove");
emit("tabRemove", pane.props.name);
};
const handleTabAdd = () => {
emit("edit", void 0, "add");
emit("tabAdd");
};
const handleKeydown = (event) => {
const code = getEventCode(event);
if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code)) handleTabAdd();
};
const swapChildren = (vnode) => {
const actualFirstChild = vnode.el.firstChild;
const firstChild = ["bottom", "right"].includes(props.tabPosition) ? vnode.children[0].el : vnode.children[1].el;
if (actualFirstChild !== firstChild) actualFirstChild.before(firstChild);
};
(0, vue.watch)(() => props.modelValue, (modelValue) => setCurrentName(modelValue));
(0, vue.watch)(currentName, async () => {
await (0, vue.nextTick)();
nav$.value?.scrollToActiveTab();
});
(0, vue.provide)(tabsRootContextKey, {
props,
currentName,
registerPane,
unregisterPane,
nav$
});
expose({
currentName,
get tabNavRef() {
return omit(nav$.value, ["scheduleRender"]);
}
});
return () => {
const addSlot = slots["add-icon"];
const newButton = props.editable || props.addable ? (0, vue.createVNode)("div", {
"class": [ns.e("new-tab"), isVertical.value && ns.e("new-tab-vertical")],
"tabindex": props.tabindex,
"onClick": handleTabAdd,
"onKeydown": handleKeydown
}, [addSlot ? (0, vue.renderSlot)(slots, "add-icon") : (0, vue.createVNode)(ElIcon, { "class": ns.is("icon-plus") }, { default: () => [(0, vue.createVNode)(plus_default, null, null)] })]) : null;
const tabNav = () => (0, vue.createVNode)(TabNav, {
"ref": nav$,
"currentName": currentName.value,
"editable": props.editable,
"type": props.type,
"panes": panes.value,
"stretch": props.stretch,
"onTabClick": handleTabClick,
"onTabRemove": handleTabRemove
}, null);
const header = (0, vue.createVNode)("div", { "class": [
ns.e("header"),
isVertical.value && ns.e("header-vertical"),
ns.is(props.tabPosition)
] }, [(0, vue.createVNode)(PanesSorter, null, {
default: tabNav,
$stable: true
}), newButton]);
const panels = (0, vue.createVNode)("div", { "class": ns.e("content") }, [(0, vue.renderSlot)(slots, "default")]);
return (0, vue.createVNode)("div", {
"class": [
ns.b(),
ns.m(props.tabPosition),
{
[ns.m("card")]: props.type === "card",
[ns.m("border-card")]: props.type === "border-card"
}
],
"onVnodeMounted": swapChildren,
"onVnodeUpdated": swapChildren
}, [panels, header]);
};
}
});
//#endregion
//#region ../../packages/components/tabs/src/tab-pane.ts
/**
* @deprecated Removed after 3.0.0, Use `TabPaneProps` instead.
*/
const tabPaneProps = buildProps({
label: {
type: String,
default: ""
},
name: { type: [String, Number] },
closable: {
type: Boolean,
default: void 0
},
disabled: Boolean,
lazy: Boolean
});
//#endregion
//#region ../../packages/components/tabs/src/tab-pane.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$14 = [
"id",
"aria-hidden",
"aria-labelledby"
];
const COMPONENT_NAME$2 = "ElTabPane";
var tab_pane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$2,
__name: "tab-pane",
props: tabPaneProps,
setup(__props) {
const props = __props;
const instance = (0, vue.getCurrentInstance)();
const slots = (0, vue.useSlots)();
const tabsRoot = (0, vue.inject)(tabsRootContextKey);
if (!tabsRoot) throwError(COMPONENT_NAME$2, "usage: <el-tabs><el-tab-pane /></el-tabs/>");
const ns = useNamespace("tab-pane");
const paneRef = (0, vue.ref)();
const index = (0, vue.ref)();
const isClosable = (0, vue.computed)(() => props.closable ?? tabsRoot.props.closable);
const active = (0, vue.computed)(() => tabsRoot.currentName.value === (props.name ?? index.value));
const loaded = (0, vue.ref)(active.value);
const paneName = (0, vue.computed)(() => props.name ?? index.value);
const shouldBeRender = (0, vue.computed)(() => !props.lazy || loaded.value || active.value);
const isFocusInsidePane = () => {
return paneRef.value?.contains(document.activeElement);
};
(0, vue.watch)(active, (val) => {
if (val) loaded.value = true;
});
const pane = (0, vue.reactive)({
uid: instance.uid,
getVnode: () => instance.vnode,
slots,
props,
paneName,
active,
index,
isClosable,
isFocusInsidePane
});
tabsRoot.registerPane(pane);
(0, vue.onBeforeUnmount)(() => {
tabsRoot.unregisterPane(pane);
});
(0, vue.onBeforeUpdate)(() => {
if (slots.label) tabsRoot.nav$.value?.scheduleRender();
});
return (_ctx, _cache) => {
return shouldBeRender.value ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
id: `pane-${paneName.value}`,
ref_key: "paneRef",
ref: paneRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
role: "tabpanel",
"aria-hidden": !active.value,
"aria-labelledby": `tab-${paneName.value}`
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_1$14)), [[vue.vShow, active.value]]) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/tabs/src/tab-pane.vue
var tab_pane_default = tab_pane_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tabs/index.ts
const ElTabs = withInstall(Tabs, { TabPane: tab_pane_default });
const ElTabPane = withNoopInstall(tab_pane_default);
//#endregion
//#region ../../packages/components/text/src/text.ts
/**
* @deprecated Removed after 3.0.0, Use `TextProps` instead.
*/
const textProps = buildProps({
type: {
type: String,
values: [
"primary",
"success",
"info",
"warning",
"danger",
""
],
default: ""
},
size: {
type: String,
values: componentSizes,
default: ""
},
truncated: Boolean,
lineClamp: { type: [String, Number] },
tag: {
type: String,
default: "span"
}
});
//#endregion
//#region ../../packages/components/text/src/text.vue?vue&type=script&setup=true&lang.ts
var text_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElText",
__name: "text",
props: textProps,
setup(__props) {
const props = __props;
const textRef = (0, vue.ref)();
const textSize = useFormSize();
const ns = useNamespace("text");
const textKls = (0, vue.computed)(() => [
ns.b(),
ns.m(props.type),
ns.m(textSize.value),
ns.is("truncated", props.truncated),
ns.is("line-clamp", !isUndefined(props.lineClamp))
]);
const bindTitle = () => {
if ((0, vue.useAttrs)().title) return;
let shouldAddTitle = false;
const text = textRef.value?.textContent || "";
if (props.truncated) {
const width = textRef.value?.offsetWidth;
const scrollWidth = textRef.value?.scrollWidth;
if (width && scrollWidth && scrollWidth > width) shouldAddTitle = true;
} else if (!isUndefined(props.lineClamp)) {
const height = textRef.value?.offsetHeight;
const scrollHeight = textRef.value?.scrollHeight;
if (height && scrollHeight && scrollHeight > height) shouldAddTitle = true;
}
if (shouldAddTitle) textRef.value?.setAttribute("title", text);
else textRef.value?.removeAttribute("title");
};
(0, vue.onMounted)(bindTitle);
(0, vue.onUpdated)(bindTitle);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
ref_key: "textRef",
ref: textRef,
class: (0, vue.normalizeClass)(textKls.value),
style: (0, vue.normalizeStyle)({ "-webkit-line-clamp": __props.lineClamp })
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["class", "style"]);
};
}
});
//#endregion
//#region ../../packages/components/text/src/text.vue
var text_default = text_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/text/index.ts
const ElText = withInstall(text_default);
//#endregion
//#region ../../packages/components/time-select/src/time-select.ts
const DEFAULT_STEP = "00:30";
/**
* @deprecated Removed after 3.0.0, Use `TimeSelectProps` instead.
*/
const timeSelectProps = buildProps({
format: {
type: String,
default: "HH:mm"
},
modelValue: { type: definePropType(String) },
disabled: {
type: Boolean,
default: void 0
},
editable: {
type: Boolean,
default: true
},
effect: {
type: definePropType(String),
default: "light"
},
clearable: {
type: Boolean,
default: true
},
size: useSizeProp,
placeholder: String,
start: {
type: String,
default: "09:00"
},
end: {
type: String,
default: "18:00"
},
step: {
type: String,
default: DEFAULT_STEP
},
minTime: { type: definePropType(String) },
maxTime: { type: definePropType(String) },
includeEndTime: Boolean,
name: String,
prefixIcon: {
type: definePropType([String, Object]),
default: () => clock_default
},
clearIcon: {
type: definePropType([String, Object]),
default: () => circle_close_default
},
popperClass: {
type: String,
default: ""
},
popperStyle: { type: definePropType([String, Object]) },
...useEmptyValuesProps
});
//#endregion
//#region ../../packages/components/time-select/src/utils.ts
const parseTime = (time) => {
const values = (time || "").split(":");
if (values.length >= 2) {
let hours = Number.parseInt(values[0], 10);
const minutes = Number.parseInt(values[1], 10);
const timeUpper = time.toUpperCase();
if (timeUpper.includes("AM") && hours === 12) hours = 0;
else if (timeUpper.includes("PM") && hours !== 12) hours += 12;
return {
hours,
minutes
};
}
return null;
};
const compareTime = (time1, time2) => {
const value1 = parseTime(time1);
if (!value1) return -1;
const value2 = parseTime(time2);
if (!value2) return -1;
const minutes1 = value1.minutes + value1.hours * 60;
const minutes2 = value2.minutes + value2.hours * 60;
if (minutes1 === minutes2) return 0;
return minutes1 > minutes2 ? 1 : -1;
};
const padTime = (time) => {
return `${time}`.padStart(2, "0");
};
const formatTime = (time) => {
return `${padTime(time.hours)}:${padTime(time.minutes)}`;
};
const nextTime = (time, step) => {
const timeValue = parseTime(time);
if (!timeValue) return "";
const stepValue = parseTime(step);
if (!stepValue) return "";
const next = {
hours: timeValue.hours,
minutes: timeValue.minutes
};
next.minutes += stepValue.minutes;
next.hours += stepValue.hours;
next.hours += Math.floor(next.minutes / 60);
next.minutes = next.minutes % 60;
return formatTime(next);
};
//#endregion
//#region ../../packages/components/time-select/src/time-select.vue?vue&type=script&setup=true&lang.ts
var time_select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTimeSelect",
__name: "time-select",
props: timeSelectProps,
emits: [
CHANGE_EVENT,
"blur",
"focus",
"clear",
UPDATE_MODEL_EVENT
],
setup(__props, { expose: __expose }) {
import_dayjs_min.default.extend(import_customParseFormat.default);
const { Option: ElOption } = ElSelect;
const props = __props;
const nsInput = useNamespace("input");
const select = (0, vue.ref)();
const _disabled = useFormDisabled();
const { lang } = useLocale();
const value = (0, vue.computed)(() => props.modelValue);
const start = (0, vue.computed)(() => {
const time = parseTime(props.start);
return time ? formatTime(time) : null;
});
const end = (0, vue.computed)(() => {
const time = parseTime(props.end);
return time ? formatTime(time) : null;
});
const minTime = (0, vue.computed)(() => {
const time = parseTime(props.minTime || "");
return time ? formatTime(time) : null;
});
const maxTime = (0, vue.computed)(() => {
const time = parseTime(props.maxTime || "");
return time ? formatTime(time) : null;
});
const step = (0, vue.computed)(() => {
const time = parseTime(props.step);
const isInvalidStep = !time || time.hours < 0 || time.minutes < 0 || Number.isNaN(time.hours) || Number.isNaN(time.minutes) || time.hours === 0 && time.minutes === 0;
if (isInvalidStep) /* @__PURE__ */ debugWarn("ElTimeSelect", `invalid step, fallback to default step (${DEFAULT_STEP}).`);
return !isInvalidStep ? formatTime(time) : DEFAULT_STEP;
});
const items = (0, vue.computed)(() => {
const result = [];
const push = (formattedValue, rawValue) => {
result.push({
value: formattedValue,
rawValue,
disabled: compareTime(rawValue, minTime.value || "-1:-1") <= 0 || compareTime(rawValue, maxTime.value || "100:100") >= 0
});
};
if (props.start && props.end && props.step) {
let current = start.value;
let currentTime;
while (current && end.value && compareTime(current, end.value) <= 0) {
currentTime = (0, import_dayjs_min.default)(current, "HH:mm").locale(lang.value).format(props.format);
push(currentTime, current);
current = nextTime(current, step.value);
}
if (props.includeEndTime && end.value && result[result.length - 1]?.rawValue !== end.value) push((0, import_dayjs_min.default)(end.value, "HH:mm").locale(lang.value).format(props.format), end.value);
}
return result;
});
const blur = () => {
select.value?.blur?.();
};
const focus = () => {
select.value?.focus?.();
};
__expose({
blur,
focus
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElSelect), {
ref_key: "select",
ref: select,
name: __props.name,
"model-value": value.value,
disabled: (0, vue.unref)(_disabled),
clearable: __props.clearable,
"clear-icon": __props.clearIcon,
size: __props.size,
effect: __props.effect,
placeholder: __props.placeholder,
"default-first-option": "",
filterable: __props.editable,
"empty-values": __props.emptyValues,
"value-on-clear": __props.valueOnClear,
"popper-class": __props.popperClass,
"popper-style": __props.popperStyle,
"onUpdate:modelValue": _cache[0] || (_cache[0] = (event) => _ctx.$emit((0, vue.unref)(UPDATE_MODEL_EVENT), event)),
onChange: _cache[1] || (_cache[1] = (event) => _ctx.$emit((0, vue.unref)(CHANGE_EVENT), event)),
onBlur: _cache[2] || (_cache[2] = (event) => _ctx.$emit("blur", event)),
onFocus: _cache[3] || (_cache[3] = (event) => _ctx.$emit("focus", event)),
onClear: _cache[4] || (_cache[4] = () => _ctx.$emit("clear"))
}, {
prefix: (0, vue.withCtx)(() => [__props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix-icon"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.prefixIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(items.value, (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElOption), {
key: item.value,
label: item.value,
value: item.value,
disabled: item.disabled
}, null, 8, [
"label",
"value",
"disabled"
]);
}), 128))]),
_: 1
}, 8, [
"name",
"model-value",
"disabled",
"clearable",
"clear-icon",
"size",
"effect",
"placeholder",
"filterable",
"empty-values",
"value-on-clear",
"popper-class",
"popper-style"
]);
};
}
});
//#endregion
//#region ../../packages/components/time-select/src/time-select.vue
var time_select_default = time_select_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/time-select/index.ts
const ElTimeSelect = withInstall(time_select_default);
//#endregion
//#region ../../packages/components/timeline/src/tokens.ts
const TIMELINE_INJECTION_KEY = "timeline";
//#endregion
//#region ../../packages/components/timeline/src/timeline.ts
const timelineProps = buildProps({
mode: {
type: String,
values: [
"start",
"alternate",
"alternate-reverse",
"end"
],
default: "start"
},
reverse: Boolean
});
const Timeline = (0, vue.defineComponent)({
name: "ElTimeline",
props: timelineProps,
setup(props, { slots }) {
const ns = useNamespace("timeline");
(0, vue.provide)(TIMELINE_INJECTION_KEY, {
props,
slots
});
const timelineKls = (0, vue.computed)(() => [ns.b(), ns.is(props.mode)]);
return () => {
const children = flattedChildren(slots.default?.() ?? []);
return (0, vue.h)("ul", { class: timelineKls.value }, props.reverse ? children.reverse() : children);
};
}
});
//#endregion
//#region ../../packages/components/timeline/src/timeline-item.ts
/**
* @deprecated Removed after 3.0.0, Use `TimelineItemProps` instead.
*/
const timelineItemProps = buildProps({
timestamp: {
type: String,
default: ""
},
hideTimestamp: Boolean,
center: Boolean,
placement: {
type: String,
values: ["top", "bottom"],
default: "bottom"
},
type: {
type: String,
values: [
"primary",
"success",
"warning",
"danger",
"info"
],
default: ""
},
color: {
type: String,
default: ""
},
size: {
type: String,
values: ["normal", "large"],
default: "normal"
},
icon: { type: iconPropType },
hollow: Boolean
});
//#endregion
//#region ../../packages/components/timeline/src/timeline-item.vue?vue&type=script&setup=true&lang.ts
var timeline_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTimelineItem",
__name: "timeline-item",
props: timelineItemProps,
setup(__props) {
const props = __props;
const { props: timelineProps } = (0, vue.inject)(TIMELINE_INJECTION_KEY);
const ns = useNamespace("timeline-item");
const defaultNodeKls = (0, vue.computed)(() => [
ns.e("node"),
ns.em("node", props.size || ""),
ns.em("node", props.type || ""),
ns.is("hollow", props.hollow)
]);
const timelineItemKls = (0, vue.computed)(() => [
ns.b(),
{ [ns.e("center")]: props.center },
ns.is(timelineProps.mode)
]);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { class: (0, vue.normalizeClass)(timelineItemKls.value) }, [
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("tail")) }, null, 2),
!_ctx.$slots.dot ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)(defaultNodeKls.value),
style: (0, vue.normalizeStyle)({ backgroundColor: __props.color })
}, [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon"))
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 6)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.dot ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("dot"))
}, [(0, vue.renderSlot)(_ctx.$slots, "dot")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")) }, [
!__props.hideTimestamp && __props.placement === "top" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("timestamp"), (0, vue.unref)(ns).is("top")])
}, (0, vue.toDisplayString)(__props.timestamp), 3)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2),
!__props.hideTimestamp && __props.placement === "bottom" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("timestamp"), (0, vue.unref)(ns).is("bottom")])
}, (0, vue.toDisplayString)(__props.timestamp), 3)) : (0, vue.createCommentVNode)("v-if", true)
], 2)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/timeline/src/timeline-item.vue
var timeline_item_default = timeline_item_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/timeline/index.ts
const ElTimeline = withInstall(Timeline, { TimelineItem: timeline_item_default });
const ElTimelineItem = withNoopInstall(timeline_item_default);
//#endregion
//#region ../../packages/components/transfer/src/transfer.ts
const LEFT_CHECK_CHANGE_EVENT = "left-check-change";
const RIGHT_CHECK_CHANGE_EVENT = "right-check-change";
/**
* @deprecated Removed after 3.0.0, Use `TransferProps` instead.
*/
const transferProps = buildProps({
data: {
type: definePropType(Array),
default: () => []
},
titles: {
type: definePropType(Array),
default: () => []
},
buttonTexts: {
type: definePropType(Array),
default: () => []
},
filterPlaceholder: String,
filterMethod: { type: definePropType(Function) },
leftDefaultChecked: {
type: definePropType(Array),
default: () => []
},
rightDefaultChecked: {
type: definePropType(Array),
default: () => []
},
renderContent: { type: definePropType(Function) },
modelValue: {
type: definePropType(Array),
default: () => []
},
format: {
type: definePropType(Object),
default: () => ({})
},
filterable: Boolean,
props: {
type: definePropType(Object),
default: () => mutable({
label: "label",
key: "key",
disabled: "disabled"
})
},
targetOrder: {
type: String,
values: [
"original",
"push",
"unshift"
],
default: "original"
},
validateEvent: {
type: Boolean,
default: true
}
});
const transferCheckedChangeFn = (value, movedKeys) => [value, movedKeys].every(isArray$1) || isArray$1(value) && isNil(movedKeys);
const transferEmits = {
[CHANGE_EVENT]: (value, direction, movedKeys) => [value, movedKeys].every(isArray$1) && ["left", "right"].includes(direction),
[UPDATE_MODEL_EVENT]: (value) => isArray$1(value),
[LEFT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn,
[RIGHT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn
};
//#endregion
//#region ../../packages/components/transfer/src/transfer-panel.ts
const CHECKED_CHANGE_EVENT = "checked-change";
/**
* @deprecated Removed after 3.0.0, Use `TransferPanelProps` instead.
*/
const transferPanelProps = buildProps({
data: transferProps.data,
optionRender: { type: definePropType(Function) },
placeholder: String,
title: String,
filterable: Boolean,
format: transferProps.format,
filterMethod: transferProps.filterMethod,
defaultChecked: transferProps.leftDefaultChecked,
props: transferProps.props
});
const transferPanelEmits = { [CHECKED_CHANGE_EVENT]: transferCheckedChangeFn };
//#endregion
//#region ../../packages/components/transfer/src/composables/use-props-alias.ts
const usePropsAlias = (props) => {
const initProps = {
label: "label",
key: "key",
disabled: "disabled"
};
return (0, vue.computed)(() => ({
...initProps,
...props.props
}));
};
//#endregion
//#region ../../packages/components/transfer/src/composables/use-check.ts
const useCheck$1 = (props, panelState, emit) => {
const propsAlias = usePropsAlias(props);
const filteredData = (0, vue.computed)(() => {
return props.data.filter((item) => {
if (isFunction$1(props.filterMethod)) return props.filterMethod(panelState.query, item);
else return String(item[propsAlias.value.label] || item[propsAlias.value.key]).toLowerCase().includes(panelState.query.toLowerCase());
});
});
const checkableData = (0, vue.computed)(() => filteredData.value.filter((item) => !item[propsAlias.value.disabled]));
const checkedSummary = (0, vue.computed)(() => {
const checkedLength = panelState.checked.length;
const dataLength = props.data.length;
const { noChecked, hasChecked } = props.format;
if (noChecked && hasChecked) return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength.toString()).replace(/\${total}/g, dataLength.toString()) : noChecked.replace(/\${total}/g, dataLength.toString());
else return `${checkedLength}/${dataLength}`;
});
const isIndeterminate = (0, vue.computed)(() => {
const checkedLength = panelState.checked.length;
return checkedLength > 0 && checkedLength < checkableData.value.length;
});
const updateAllChecked = () => {
const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
panelState.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every((item) => panelState.checked.includes(item));
};
const handleAllCheckedChange = (value) => {
panelState.checked = value ? checkableData.value.map((item) => item[propsAlias.value.key]) : [];
};
(0, vue.watch)(() => panelState.checked, (val, oldVal) => {
updateAllChecked();
if (panelState.checkChangeByUser) emit(CHECKED_CHANGE_EVENT, val, val.concat(oldVal).filter((v) => !val.includes(v) || !oldVal.includes(v)));
else {
emit(CHECKED_CHANGE_EVENT, val);
panelState.checkChangeByUser = true;
}
});
(0, vue.watch)(checkableData, () => {
updateAllChecked();
});
(0, vue.watch)(() => props.data, () => {
const checked = [];
const filteredDataKeys = filteredData.value.map((item) => item[propsAlias.value.key]);
panelState.checked.forEach((item) => {
if (filteredDataKeys.includes(item)) checked.push(item);
});
panelState.checkChangeByUser = false;
panelState.checked = checked;
});
(0, vue.watch)(() => props.defaultChecked, (val, oldVal) => {
if (oldVal && val.length === oldVal.length && val.every((item) => oldVal.includes(item))) return;
const checked = [];
const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
val.forEach((item) => {
if (checkableDataKeys.includes(item)) checked.push(item);
});
panelState.checkChangeByUser = false;
panelState.checked = checked;
}, { immediate: true });
return {
filteredData,
checkableData,
checkedSummary,
isIndeterminate,
updateAllChecked,
handleAllCheckedChange
};
};
//#endregion
//#region ../../packages/components/transfer/src/composables/use-checked-change.ts
const useCheckedChange = (checkedState, emit) => {
const onSourceCheckedChange = (val, movedKeys) => {
checkedState.leftChecked = val;
if (!movedKeys) return;
emit(LEFT_CHECK_CHANGE_EVENT, val, movedKeys);
};
const onTargetCheckedChange = (val, movedKeys) => {
checkedState.rightChecked = val;
if (!movedKeys) return;
emit(RIGHT_CHECK_CHANGE_EVENT, val, movedKeys);
};
return {
onSourceCheckedChange,
onTargetCheckedChange
};
};
//#endregion
//#region ../../packages/components/transfer/src/composables/use-computed-data.ts
const useComputedData = (props) => {
const propsAlias = usePropsAlias(props);
const dataObj = (0, vue.computed)(() => props.data.reduce((o, cur) => (o[cur[propsAlias.value.key]] = cur, o), {}));
return {
sourceData: (0, vue.computed)(() => props.data.filter((item) => !props.modelValue.includes(item[propsAlias.value.key]))),
targetData: (0, vue.computed)(() => {
if (props.targetOrder === "original") return props.data.filter((item) => props.modelValue.includes(item[propsAlias.value.key]));
else return props.modelValue.reduce((arr, cur) => {
const val = dataObj.value[cur];
if (val) arr.push(val);
return arr;
}, []);
})
};
};
//#endregion
//#region ../../packages/components/transfer/src/composables/use-move.ts
const useMove = (props, checkedState, emit) => {
const propsAlias = usePropsAlias(props);
const _emit = (value, direction, movedKeys) => {
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value, direction, movedKeys);
};
const addToLeft = () => {
const currentValue = props.modelValue.slice();
checkedState.rightChecked.forEach((item) => {
const index = currentValue.indexOf(item);
if (index > -1) currentValue.splice(index, 1);
});
_emit(currentValue, "left", checkedState.rightChecked);
};
const addToRight = () => {
let currentValue = props.modelValue.slice();
const itemsToBeMoved = props.data.filter((item) => {
const itemKey = item[propsAlias.value.key];
return checkedState.leftChecked.includes(itemKey) && !props.modelValue.includes(itemKey);
}).map((item) => item[propsAlias.value.key]);
currentValue = props.targetOrder === "unshift" ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);
if (props.targetOrder === "original") currentValue = props.data.filter((item) => currentValue.includes(item[propsAlias.value.key])).map((item) => item[propsAlias.value.key]);
_emit(currentValue, "right", checkedState.leftChecked);
};
return {
addToLeft,
addToRight
};
};
//#endregion
//#region ../../packages/components/transfer/src/transfer-panel.vue?vue&type=script&setup=true&lang.ts
var transfer_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTransferPanel",
__name: "transfer-panel",
props: transferPanelProps,
emits: transferPanelEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
const OptionContent = ({ option }) => option;
const { t } = useLocale();
const ns = useNamespace("transfer");
const panelState = (0, vue.reactive)({
checked: [],
allChecked: false,
query: "",
checkChangeByUser: true
});
const propsAlias = usePropsAlias(props);
const { filteredData, checkedSummary, isIndeterminate, handleAllCheckedChange } = useCheck$1(props, panelState, emit);
const hasNoMatch = (0, vue.computed)(() => !isEmpty(panelState.query) && isEmpty(filteredData.value));
const hasFooter = (0, vue.computed)(() => !isEmpty(slots.default()[0].children));
const { checked, allChecked, query } = (0, vue.toRefs)(panelState);
__expose({ query });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("panel")) }, [
(0, vue.createElementVNode)("p", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header")) }, [(0, vue.createVNode)((0, vue.unref)(ElCheckbox), {
modelValue: (0, vue.unref)(allChecked),
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(allChecked) ? allChecked.value = $event : null),
indeterminate: (0, vue.unref)(isIndeterminate),
"validate-event": false,
onChange: (0, vue.unref)(handleAllCheckedChange)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header-title")) }, (0, vue.toDisplayString)(__props.title), 3), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header-count")) }, (0, vue.toDisplayString)((0, vue.unref)(checkedSummary)), 3)]),
_: 1
}, 8, [
"modelValue",
"indeterminate",
"onChange"
])], 2),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "body"), (0, vue.unref)(ns).is("with-footer", hasFooter.value)]) }, [
__props.filterable ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInput), {
key: 0,
modelValue: (0, vue.unref)(query),
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => (0, vue.isRef)(query) ? query.value = $event : null),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "filter")),
size: "default",
placeholder: __props.placeholder,
"prefix-icon": (0, vue.unref)(search_default),
clearable: "",
"validate-event": false
}, null, 8, [
"modelValue",
"class",
"placeholder",
"prefix-icon"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElCheckboxGroup), {
modelValue: (0, vue.unref)(checked),
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => (0, vue.isRef)(checked) ? checked.value = $event : null),
"validate-event": false,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).is("filterable", __props.filterable), (0, vue.unref)(ns).be("panel", "list")])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(filteredData), (item) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
key: item[(0, vue.unref)(propsAlias).key],
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "item")),
value: item[(0, vue.unref)(propsAlias).key],
disabled: item[(0, vue.unref)(propsAlias).disabled],
"validate-event": false
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(OptionContent, { option: __props.optionRender?.(item) }, null, 8, ["option"])]),
_: 2
}, 1032, [
"class",
"value",
"disabled"
]);
}), 128))]),
_: 1
}, 8, ["modelValue", "class"]), [[vue.vShow, !hasNoMatch.value && !(0, vue.unref)(isEmpty)(__props.data)]]),
(0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "empty")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(hasNoMatch.value ? (0, vue.unref)(t)("el.transfer.noMatch") : (0, vue.unref)(t)("el.transfer.noData")), 1)])], 2), [[vue.vShow, hasNoMatch.value || (0, vue.unref)(isEmpty)(__props.data)]])
], 2),
hasFooter.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "footer"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/transfer/src/transfer-panel.vue
var transfer_panel_default = transfer_panel_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/transfer/src/transfer.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$13 = { key: 0 };
const _hoisted_2$8 = { key: 0 };
var transfer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTransfer",
__name: "transfer",
props: transferProps,
emits: transferEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
const { t } = useLocale();
const ns = useNamespace("transfer");
const { formItem } = useFormItem();
const checkedState = (0, vue.reactive)({
leftChecked: [],
rightChecked: []
});
const propsAlias = usePropsAlias(props);
const { sourceData, targetData } = useComputedData(props);
const { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(checkedState, emit);
const { addToLeft, addToRight } = useMove(props, checkedState, emit);
const leftPanel = (0, vue.ref)();
const rightPanel = (0, vue.ref)();
const clearQuery = (which) => {
switch (which) {
case "left":
leftPanel.value.query = "";
break;
case "right":
rightPanel.value.query = "";
break;
}
};
const hasButtonTexts = (0, vue.computed)(() => props.buttonTexts.length === 2);
const leftPanelTitle = (0, vue.computed)(() => props.titles[0] || t("el.transfer.titles.0"));
const rightPanelTitle = (0, vue.computed)(() => props.titles[1] || t("el.transfer.titles.1"));
const panelFilterPlaceholder = (0, vue.computed)(() => props.filterPlaceholder || t("el.transfer.filterPlaceholder"));
(0, vue.watch)(() => props.modelValue, () => {
if (props.validateEvent) formItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
});
const optionRender = (0, vue.computed)(() => (option) => {
if (props.renderContent) return props.renderContent(vue.h, option);
const defaultSlotVNodes = (slots.default?.({ option }) || []).filter((node) => node.type !== vue.Comment);
if (defaultSlotVNodes.length) return defaultSlotVNodes;
return (0, vue.h)("span", option[propsAlias.value.label] || option[propsAlias.value.key]);
});
__expose({
clearQuery,
leftPanel,
rightPanel
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
(0, vue.createVNode)(transfer_panel_default, {
ref_key: "leftPanel",
ref: leftPanel,
data: (0, vue.unref)(sourceData),
"option-render": optionRender.value,
placeholder: panelFilterPlaceholder.value,
title: leftPanelTitle.value,
filterable: __props.filterable,
format: __props.format,
"filter-method": __props.filterMethod,
"default-checked": __props.leftDefaultChecked,
props: props.props,
onCheckedChange: (0, vue.unref)(onSourceCheckedChange)
}, {
empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "left-empty")]),
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "left-footer")]),
_: 3
}, 8, [
"data",
"option-render",
"placeholder",
"title",
"filterable",
"format",
"filter-method",
"default-checked",
"props",
"onCheckedChange"
]),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("buttons")) }, [(0, vue.createVNode)((0, vue.unref)(ElButton), {
type: "primary",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), (0, vue.unref)(ns).is("with-texts", hasButtonTexts.value)]),
disabled: (0, vue.unref)(isEmpty)(checkedState.rightChecked),
onClick: (0, vue.unref)(addToLeft)
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
_: 1
}), !(0, vue.unref)(isUndefined)(__props.buttonTexts[0]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_1$13, (0, vue.toDisplayString)(__props.buttonTexts[0]), 1)) : (0, vue.createCommentVNode)("v-if", true)]),
_: 1
}, 8, [
"class",
"disabled",
"onClick"
]), (0, vue.createVNode)((0, vue.unref)(ElButton), {
type: "primary",
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), (0, vue.unref)(ns).is("with-texts", hasButtonTexts.value)]),
disabled: (0, vue.unref)(isEmpty)(checkedState.leftChecked),
onClick: (0, vue.unref)(addToRight)
}, {
default: (0, vue.withCtx)(() => [!(0, vue.unref)(isUndefined)(__props.buttonTexts[1]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$8, (0, vue.toDisplayString)(__props.buttonTexts[1]), 1)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
_: 1
})]),
_: 1
}, 8, [
"class",
"disabled",
"onClick"
])], 2),
(0, vue.createVNode)(transfer_panel_default, {
ref_key: "rightPanel",
ref: rightPanel,
data: (0, vue.unref)(targetData),
"option-render": optionRender.value,
placeholder: panelFilterPlaceholder.value,
filterable: __props.filterable,
format: __props.format,
"filter-method": __props.filterMethod,
title: rightPanelTitle.value,
"default-checked": __props.rightDefaultChecked,
props: props.props,
onCheckedChange: (0, vue.unref)(onTargetCheckedChange)
}, {
empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "right-empty")]),
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "right-footer")]),
_: 3
}, 8, [
"data",
"option-render",
"placeholder",
"filterable",
"format",
"filter-method",
"title",
"default-checked",
"props",
"onCheckedChange"
])
], 2);
};
}
});
//#endregion
//#region ../../packages/components/transfer/src/transfer.vue
var transfer_default = transfer_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/transfer/index.ts
const ElTransfer = withInstall(transfer_default);
//#endregion
//#region ../../packages/components/tree/src/model/util.ts
const NODE_KEY = "$treeNodeId";
const markNodeData = function(node, data) {
if (!data || data[NODE_KEY]) return;
Object.defineProperty(data, NODE_KEY, {
value: node.id,
enumerable: false,
configurable: false,
writable: false
});
};
const getNodeKey = (key, data) => data?.[key || NODE_KEY];
const handleCurrentChange = (store, emit, setCurrent) => {
const preCurrentNode = store.value.currentNode;
setCurrent();
const currentNode = store.value.currentNode;
if (preCurrentNode === currentNode) return;
emit("current-change", currentNode ? currentNode.data : null, currentNode);
};
//#endregion
//#region ../../packages/components/tree/src/model/node.ts
const getChildState = (node) => {
let all = true;
let none = true;
let allWithoutDisable = true;
let isEffectivelyChecked = true;
for (let i = 0, j = node.length; i < j; i++) {
const n = node[i];
if (n.checked !== true || n.indeterminate) {
all = false;
if (!n.disabled) allWithoutDisable = false;
}
if (n.checked !== false || n.indeterminate) none = false;
if (!n.isEffectivelyChecked) isEffectivelyChecked = false;
}
return {
all,
none,
allWithoutDisable,
half: !all && !none,
isEffectivelyChecked
};
};
const reInitChecked = function(node) {
if (node.childNodes.length === 0 || node.loading) {
node.isEffectivelyChecked = node.disabled || node.checked;
return;
}
const { all, none, half, isEffectivelyChecked } = getChildState(node.childNodes);
node.isEffectivelyChecked = isEffectivelyChecked;
if (all) {
node.checked = true;
node.indeterminate = false;
} else if (half) {
node.checked = false;
node.indeterminate = true;
} else if (none) {
node.checked = false;
node.indeterminate = false;
}
const parent = node.parent;
if (!parent || parent.level === 0) return;
if (!node.store.checkStrictly) reInitChecked(parent);
};
const getPropertyFromData = function(node, prop) {
const props = node.store.props;
const data = node.data || {};
const config = props[prop];
if (isFunction$1(config)) return config(data, node);
else if (isString(config)) return data[config];
else if (isUndefined(config)) {
const dataProp = data[prop];
return isUndefined(dataProp) ? "" : dataProp;
}
};
const setCanFocus = function(childNodes, focus) {
childNodes.forEach((item) => {
item.canFocus = focus;
setCanFocus(item.childNodes, focus);
});
};
let nodeIdSeed = 0;
var Node$1 = class Node$1 {
constructor(options) {
this.isLeafByUser = void 0;
this.isLeaf = void 0;
this.isEffectivelyChecked = false;
this.id = nodeIdSeed++;
this.text = null;
this.checked = false;
this.indeterminate = false;
this.data = null;
this.expanded = false;
this.parent = null;
this.visible = true;
this.isCurrent = false;
this.canFocus = false;
for (const name in options) if (hasOwn(options, name)) this[name] = options[name];
this.level = 0;
this.loaded = false;
this.childNodes = [];
this.loading = false;
if (this.parent) this.level = this.parent.level + 1;
}
initialize() {
const store = this.store;
if (!store) throw new Error("[Node]store is required!");
store.registerNode(this);
const props = store.props;
if (props && typeof props.isLeaf !== "undefined") {
const isLeaf = getPropertyFromData(this, "isLeaf");
if (isBoolean(isLeaf)) this.isLeafByUser = isLeaf;
}
if (store.lazy !== true && this.data) {
this.setData(this.data);
if (store.defaultExpandAll) {
this.expanded = true;
this.canFocus = true;
}
} else if (this.level > 0 && store.lazy && store.defaultExpandAll && !this.isLeafByUser) this.expand();
if (!isArray$1(this.data)) markNodeData(this, this.data);
if (!this.data) return;
const defaultExpandedKeys = store.defaultExpandedKeys;
const key = store.key;
if (key && !isNil(this.key) && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) this.expand(null, store.autoExpandParent);
if (key && store.currentNodeKey !== void 0 && this.key === store.currentNodeKey) {
store.currentNode && (store.currentNode.isCurrent = false);
store.currentNode = this;
store.currentNode.isCurrent = true;
}
if (store.lazy) store._initDefaultCheckedNode(this);
this.updateLeafState();
if (this.level === 1 || this.parent?.expanded === true) this.canFocus = true;
}
setData(data) {
if (!isArray$1(data)) markNodeData(this, data);
this.data = data;
this.childNodes = [];
let children;
if (this.level === 0 && isArray$1(this.data)) children = this.data;
else children = getPropertyFromData(this, "children") || [];
for (let i = 0, j = children.length; i < j; i++) this.insertChild({ data: children[i] });
}
get label() {
return getPropertyFromData(this, "label");
}
get key() {
const nodeKey = this.store.key;
if (this.data) return this.data[nodeKey];
return null;
}
get disabled() {
return getPropertyFromData(this, "disabled");
}
get nextSibling() {
const parent = this.parent;
if (parent) {
const index = parent.childNodes.indexOf(this);
if (index > -1) return parent.childNodes[index + 1];
}
return null;
}
get previousSibling() {
const parent = this.parent;
if (parent) {
const index = parent.childNodes.indexOf(this);
if (index > -1) return index > 0 ? parent.childNodes[index - 1] : null;
}
return null;
}
contains(target, deep = true) {
return (this.childNodes || []).some((child) => child === target || deep && child.contains(target));
}
remove() {
const parent = this.parent;
if (parent) parent.removeChild(this);
}
insertChild(child, index, batch) {
if (!child) throw new Error("InsertChild error: child is required.");
if (!(child instanceof Node$1)) {
if (!batch) {
const children = this.getChildren(true);
if (!children?.includes(child.data)) if (isUndefined(index) || index < 0) children?.push(child.data);
else children?.splice(index, 0, child.data);
}
Object.assign(child, {
parent: this,
store: this.store
});
child = (0, vue.reactive)(new Node$1(child));
if (child instanceof Node$1) child.initialize();
}
child.level = this.level + 1;
if (isUndefined(index) || index < 0) this.childNodes.push(child);
else this.childNodes.splice(index, 0, child);
this.updateLeafState();
}
insertBefore(child, ref) {
let index;
if (ref) index = this.childNodes.indexOf(ref);
this.insertChild(child, index);
}
insertAfter(child, ref) {
let index;
if (ref) {
index = this.childNodes.indexOf(ref);
if (index !== -1) index += 1;
}
this.insertChild(child, index);
}
removeChild(child) {
const children = this.getChildren() || [];
const dataIndex = children.indexOf(child.data);
if (dataIndex > -1) children.splice(dataIndex, 1);
const index = this.childNodes.indexOf(child);
if (index > -1) {
this.store && this.store.deregisterNode(child);
child.parent = null;
this.childNodes.splice(index, 1);
}
this.updateLeafState();
}
removeChildByData(data) {
const targetNode = this.childNodes.find((child) => child.data === data);
if (targetNode) this.removeChild(targetNode);
}
expand(callback, expandParent) {
const done = () => {
if (expandParent) {
let parent = this.parent;
while (parent && parent.level > 0) {
parent.expanded = true;
parent = parent.parent;
}
}
this.expanded = true;
if (callback) callback();
setCanFocus(this.childNodes, true);
};
if (this.shouldLoadData()) this.loadData((data) => {
if (isArray$1(data)) {
if (this.checked) this.setChecked(true, true);
else if (!this.store.checkStrictly) reInitChecked(this);
done();
}
});
else done();
}
doCreateChildren(array, defaultProps = {}) {
array.forEach((item) => {
this.insertChild(Object.assign({ data: item }, defaultProps), void 0, true);
});
}
collapse() {
this.expanded = false;
setCanFocus(this.childNodes, false);
}
shouldLoadData() {
return Boolean(this.store.lazy === true && this.store.load && !this.loaded);
}
updateLeafState() {
if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== "undefined") {
this.isLeaf = this.isLeafByUser;
this.isEffectivelyChecked = this.isLeaf && this.disabled;
return;
}
const childNodes = this.childNodes;
if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {
this.isLeaf = !childNodes || childNodes.length === 0;
this.isEffectivelyChecked = this.isLeaf && this.disabled;
return;
}
this.isLeaf = false;
}
setChecked(value, deep, recursion, passValue) {
this.indeterminate = value === "half";
this.checked = value === true;
this.isEffectivelyChecked = !this.childNodes.length && (this.disabled || this.checked);
if (this.store.checkStrictly) return;
if (!(this.shouldLoadData() && !this.store.checkDescendants)) {
const handleDescendants = () => {
if (deep) {
const childNodes = this.childNodes;
for (let i = 0, j = childNodes.length; i < j; i++) {
const child = childNodes[i];
passValue = passValue || value !== false;
const isCheck = child.disabled && child.isLeaf ? child.checked : passValue;
child.setChecked(isCheck, deep, true, passValue);
}
const { half, all, isEffectivelyChecked } = getChildState(childNodes);
if (!all) {
this.checked = all;
this.indeterminate = half;
}
this.isEffectivelyChecked = !this.childNodes.length ? this.disabled || this.checked : isEffectivelyChecked;
}
};
if (this.shouldLoadData()) {
this.loadData(() => {
handleDescendants();
reInitChecked(this);
}, { checked: value !== false });
return;
} else handleDescendants();
}
const parent = this.parent;
if (!parent || parent.level === 0) return;
if (!recursion) reInitChecked(parent);
}
getChildren(forceInit = false) {
if (this.level === 0) return this.data;
const data = this.data;
if (!data) return null;
const props = this.store.props;
let children = "children";
if (props) children = props.children || "children";
if (isUndefined(data[children])) data[children] = null;
if (forceInit && !data[children]) data[children] = [];
return data[children];
}
updateChildren() {
const newData = this.getChildren() || [];
const oldData = this.childNodes.map((node) => node.data);
const newDataMap = {};
const newNodes = [];
newData.forEach((item, index) => {
const key = item[NODE_KEY];
if (!!key && oldData.some((data) => data?.[NODE_KEY] === key)) newDataMap[key] = {
index,
data: item
};
else newNodes.push({
index,
data: item
});
});
if (!this.store.lazy) oldData.forEach((item) => {
if (!newDataMap[item?.[NODE_KEY]]) this.removeChildByData(item);
});
newNodes.forEach(({ index, data }) => {
this.insertChild({ data }, index);
});
this.updateLeafState();
}
loadData(callback, defaultProps = {}) {
if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {
this.loading = true;
const resolve = (children) => {
this.childNodes = [];
this.doCreateChildren(children, defaultProps);
this.loaded = true;
this.loading = false;
this.updateLeafState();
if (callback) callback.call(this, children);
};
const reject = () => {
this.loading = false;
};
this.store.load(this, resolve, reject);
} else if (callback) callback.call(this);
}
eachNode(callback) {
const arr = [this];
while (arr.length) {
const node = arr.shift();
arr.unshift(...node.childNodes);
callback(node);
}
}
reInitChecked() {
if (this.store.checkStrictly) return;
reInitChecked(this);
}
};
//#endregion
//#region ../../packages/components/tree/src/model/tree-store.ts
var TreeStore = class {
constructor(options) {
this.lazy = false;
this.checkStrictly = false;
this.autoExpandParent = false;
this.defaultExpandAll = false;
this.checkDescendants = false;
this.currentNode = null;
this.currentNodeKey = null;
for (const option in options) if (hasOwn(options, option)) this[option] = options[option];
this.nodesMap = {};
}
initialize() {
this.root = new Node$1({
data: this.data,
store: this
});
this.root.initialize();
if (this.lazy && this.load) {
const loadFn = this.load;
loadFn(this.root, (data) => {
this.root.doCreateChildren(data);
this._initDefaultCheckedNodes();
}, NOOP);
} else this._initDefaultCheckedNodes();
}
filter(value) {
const filterNodeMethod = this.filterNodeMethod;
const lazy = this.lazy;
const traverse = async function(node) {
const childNodes = node.root ? node.root.childNodes : node.childNodes;
for (const [index, child] of childNodes.entries()) {
child.visible = !!filterNodeMethod?.call(child, value, child.data, child);
if (index % 80 === 0 && index > 0) await (0, vue.nextTick)();
await traverse(child);
}
if (!node.visible && childNodes.length) {
let allHidden = true;
allHidden = !childNodes.some((child) => child.visible);
if (node.root) node.root.visible = allHidden === false;
else node.visible = allHidden === false;
}
if (!value) return;
if (node.visible && !node.isLeaf) {
if (!lazy || node.loaded) node.expand();
}
};
traverse(this);
}
setData(newVal) {
if (newVal !== this.root.data) {
this.nodesMap = {};
this.root.setData(newVal);
this._initDefaultCheckedNodes();
this.setCurrentNodeKey(this.currentNodeKey);
} else this.root.updateChildren();
}
getNode(data) {
if (data instanceof Node$1) return data;
const key = isObject$1(data) ? getNodeKey(this.key, data) : data;
return this.nodesMap[key] || null;
}
insertBefore(data, refData) {
const refNode = this.getNode(refData);
refNode.parent?.insertBefore({ data }, refNode);
}
insertAfter(data, refData) {
const refNode = this.getNode(refData);
refNode.parent?.insertAfter({ data }, refNode);
}
remove(data) {
const node = this.getNode(data);
if (node && node.parent) {
if (node === this.currentNode) this.currentNode = null;
node.parent.removeChild(node);
}
}
append(data, parentData) {
const parentNode = !isPropAbsent(parentData) ? this.getNode(parentData) : this.root;
if (parentNode) parentNode.insertChild({ data });
}
_initDefaultCheckedNodes() {
const defaultCheckedKeys = this.defaultCheckedKeys || [];
const nodesMap = this.nodesMap;
defaultCheckedKeys.forEach((checkedKey) => {
const node = nodesMap[checkedKey];
if (node) node.setChecked(true, !this.checkStrictly);
});
}
_initDefaultCheckedNode(node) {
const defaultCheckedKeys = this.defaultCheckedKeys || [];
if (!isNil(node.key) && defaultCheckedKeys.includes(node.key)) node.setChecked(true, !this.checkStrictly);
}
setDefaultCheckedKey(newVal) {
if (newVal !== this.defaultCheckedKeys) {
this.defaultCheckedKeys = newVal;
this._initDefaultCheckedNodes();
}
}
registerNode(node) {
const key = this.key;
if (!node || !node.data) return;
if (!key) this.nodesMap[node.id] = node;
else {
const nodeKey = node.key;
if (!isNil(nodeKey)) this.nodesMap[nodeKey] = node;
}
}
deregisterNode(node) {
if (!this.key || !node || !node.data) return;
node.childNodes.forEach((child) => {
this.deregisterNode(child);
});
delete this.nodesMap[node.key];
}
getCheckedNodes(leafOnly = false, includeHalfChecked = false) {
const checkedNodes = [];
const traverse = function(node) {
(node.root ? node.root.childNodes : node.childNodes).forEach((child) => {
if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) checkedNodes.push(child.data);
traverse(child);
});
};
traverse(this);
return checkedNodes;
}
getCheckedKeys(leafOnly = false) {
return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key]);
}
getHalfCheckedNodes() {
const nodes = [];
const traverse = function(node) {
(node.root ? node.root.childNodes : node.childNodes).forEach((child) => {
if (child.indeterminate) nodes.push(child.data);
traverse(child);
});
};
traverse(this);
return nodes;
}
getHalfCheckedKeys() {
return this.getHalfCheckedNodes().map((data) => (data || {})[this.key]);
}
_getAllNodes() {
const allNodes = [];
const nodesMap = this.nodesMap;
for (const nodeKey in nodesMap) if (hasOwn(nodesMap, nodeKey)) allNodes.push(nodesMap[nodeKey]);
return allNodes;
}
updateChildren(key, data) {
const node = this.nodesMap[key];
if (!node) return;
const childNodes = node.childNodes;
for (let i = childNodes.length - 1; i >= 0; i--) {
const child = childNodes[i];
this.remove(child.data);
}
for (let i = 0, j = data.length; i < j; i++) {
const child = data[i];
this.append(child, node.data);
}
}
_setCheckedKeys(key, leafOnly = false, checkedKeys) {
const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level);
const cache = Object.create(null);
const keys = Object.keys(checkedKeys);
allNodes.forEach((node) => node.setChecked(false, false));
const cacheCheckedChild = (node) => {
node.childNodes.forEach((child) => {
cache[child.data[key]] = true;
if (child.childNodes?.length) cacheCheckedChild(child);
});
};
for (let i = 0, j = allNodes.length; i < j; i++) {
const node = allNodes[i];
const nodeKey = node.data[key].toString();
if (!keys.includes(nodeKey)) {
if (node.checked && !cache[nodeKey]) node.setChecked(false, false);
continue;
}
if (node.childNodes.length) cacheCheckedChild(node);
if (node.isLeaf || this.checkStrictly) {
node.setChecked(true, false);
continue;
}
node.setChecked(true, true);
if (leafOnly) {
node.setChecked(false, false, true);
const traverse = function(node) {
node.childNodes.forEach((child) => {
if (!child.isLeaf) child.setChecked(false, false, true);
traverse(child);
});
node.reInitChecked();
};
traverse(node);
}
}
}
setCheckedNodes(array, leafOnly = false) {
const key = this.key;
const checkedKeys = {};
array.forEach((item) => {
checkedKeys[(item || {})[key]] = true;
});
this._setCheckedKeys(key, leafOnly, checkedKeys);
}
setCheckedKeys(keys, leafOnly = false) {
this.defaultCheckedKeys = keys;
const key = this.key;
const checkedKeys = {};
keys.forEach((key) => {
checkedKeys[key] = true;
});
this._setCheckedKeys(key, leafOnly, checkedKeys);
}
setDefaultExpandedKeys(keys) {
keys = keys || [];
this.defaultExpandedKeys = keys;
keys.forEach((key) => {
const node = this.getNode(key);
if (node) node.expand(null, this.autoExpandParent);
});
}
setChecked(data, checked, deep) {
const node = this.getNode(data);
if (node) node.setChecked(!!checked, deep);
}
getCurrentNode() {
return this.currentNode;
}
setCurrentNode(currentNode) {
const prevCurrentNode = this.currentNode;
if (prevCurrentNode) prevCurrentNode.isCurrent = false;
this.currentNode = currentNode;
this.currentNode.isCurrent = true;
}
setUserCurrentNode(node, shouldAutoExpandParent = true) {
const key = node[this.key];
const currNode = this.nodesMap[key];
this.setCurrentNode(currNode);
if (shouldAutoExpandParent && this.currentNode && this.currentNode.level > 1) this.currentNode.parent?.expand(null, true);
}
setCurrentNodeKey(key, shouldAutoExpandParent = true) {
this.currentNodeKey = key;
if (isPropAbsent(key)) {
this.currentNode && (this.currentNode.isCurrent = false);
this.currentNode = null;
return;
}
const node = this.getNode(key);
if (node) {
this.setCurrentNode(node);
if (shouldAutoExpandParent && this.currentNode && this.currentNode.level > 1) this.currentNode.parent?.expand(null, true);
}
}
};
//#endregion
//#region ../../packages/components/tree/src/tokens.ts
const ROOT_TREE_INJECTION_KEY = "RootTree";
const NODE_INSTANCE_INJECTION_KEY = "NodeInstance";
const TREE_NODE_MAP_INJECTION_KEY = "TreeNodeMap";
//#endregion
//#region ../../packages/components/tree/src/tree-node-content.vue?vue&type=script&lang.ts
var tree_node_content_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTreeNodeContent",
props: {
node: {
type: Object,
required: true
},
renderContent: Function
},
setup(props) {
const ns = useNamespace("tree");
const nodeInstance = (0, vue.inject)(NODE_INSTANCE_INJECTION_KEY);
const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY);
return () => {
const node = props.node;
const { data, store } = node;
return props.renderContent ? props.renderContent(vue.h, {
_self: nodeInstance,
node,
data,
store
}) : (0, vue.renderSlot)(tree.ctx.slots, "default", {
node,
data
}, () => [(0, vue.h)(ElText, {
tag: "span",
truncated: true,
class: ns.be("node", "label")
}, () => [node.label])]);
};
}
});
//#endregion
//#region ../../packages/components/tree/src/tree-node-content.vue
var tree_node_content_default$1 = tree_node_content_vue_vue_type_script_lang_default;
//#endregion
//#region ../../packages/components/tree/src/model/useNodeExpandEventBroadcast.ts
function useNodeExpandEventBroadcast(props) {
const parentNodeMap = (0, vue.inject)(TREE_NODE_MAP_INJECTION_KEY, null);
let currentNodeMap = {
treeNodeExpand: (node) => {
if (props.node !== node) props.node?.collapse();
},
children: /* @__PURE__ */ new Set()
};
if (parentNodeMap) parentNodeMap.children.add(currentNodeMap);
(0, vue.onBeforeUnmount)(() => {
if (parentNodeMap) parentNodeMap.children.delete(currentNodeMap);
currentNodeMap = null;
});
(0, vue.provide)(TREE_NODE_MAP_INJECTION_KEY, currentNodeMap);
return { broadcastExpanded: (node) => {
if (!props.accordion) return;
for (const childNode of currentNodeMap.children) childNode.treeNodeExpand(node);
} };
}
//#endregion
//#region ../../packages/components/tree/src/model/useDragNode.ts
const dragEventsKey = Symbol("dragEvents");
function useDragNodeHandler({ props, ctx, el$, dropIndicator$, store }) {
const ns = useNamespace("tree");
const dragState = (0, vue.ref)({
showDropIndicator: false,
draggingNode: null,
dropNode: null,
allowDrop: true,
dropType: null
});
const treeNodeDragStart = ({ event, treeNode }) => {
if (!event.dataTransfer) return;
if (isFunction$1(props.allowDrag) && !props.allowDrag(treeNode.node)) {
event.preventDefault();
return false;
}
event.dataTransfer.effectAllowed = "move";
try {
event.dataTransfer.setData("text/plain", "");
} catch {}
dragState.value.draggingNode = treeNode;
ctx.emit("node-drag-start", treeNode.node, event);
};
const treeNodeDragOver = ({ event, treeNode }) => {
if (!event.dataTransfer) return;
const dropNode = treeNode;
const oldDropNode = dragState.value.dropNode;
if (oldDropNode && oldDropNode.node.id !== dropNode.node.id) removeClass(oldDropNode.$el, ns.is("drop-inner"));
const draggingNode = dragState.value.draggingNode;
if (!draggingNode || !dropNode) return;
let dropPrev = true;
let dropInner = true;
let dropNext = true;
let userAllowDropInner = true;
if (isFunction$1(props.allowDrop)) {
dropPrev = props.allowDrop(draggingNode.node, dropNode.node, "prev");
userAllowDropInner = dropInner = props.allowDrop(draggingNode.node, dropNode.node, "inner");
dropNext = props.allowDrop(draggingNode.node, dropNode.node, "next");
}
event.dataTransfer.dropEffect = dropInner || dropPrev || dropNext ? "move" : "none";
if ((dropPrev || dropInner || dropNext) && oldDropNode?.node.id !== dropNode.node.id) {
if (oldDropNode) ctx.emit("node-drag-leave", draggingNode.node, oldDropNode.node, event);
ctx.emit("node-drag-enter", draggingNode.node, dropNode.node, event);
}
if (dropPrev || dropInner || dropNext) dragState.value.dropNode = dropNode;
else dragState.value.dropNode = null;
if (dropNode.node.nextSibling === draggingNode.node) dropNext = false;
if (dropNode.node.previousSibling === draggingNode.node) dropPrev = false;
if (dropNode.node.contains(draggingNode.node, false)) dropInner = false;
if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) {
dropPrev = false;
dropInner = false;
dropNext = false;
}
const dropEl = dropNode.$el;
const targetPosition = dropEl.querySelector(`.${ns.be("node", "content")}`).getBoundingClientRect();
const treePosition = el$.value.getBoundingClientRect();
const treeScrollTop = el$.value.scrollTop;
let dropType;
const prevPercent = dropPrev ? dropInner ? .25 : dropNext ? .45 : 1 : Number.NEGATIVE_INFINITY;
const nextPercent = dropNext ? dropInner ? .75 : dropPrev ? .55 : 0 : Number.POSITIVE_INFINITY;
let indicatorTop = -9999;
const distance = event.clientY - targetPosition.top;
if (distance < targetPosition.height * prevPercent) dropType = "before";
else if (distance > targetPosition.height * nextPercent) dropType = "after";
else if (dropInner) dropType = "inner";
else dropType = "none";
const iconPosition = dropEl.querySelector(`.${ns.be("node", "expand-icon")}`).getBoundingClientRect();
const dropIndicator = dropIndicator$.value;
if (dropType === "before") indicatorTop = iconPosition.top - treePosition.top + treeScrollTop;
else if (dropType === "after") indicatorTop = iconPosition.bottom - treePosition.top + treeScrollTop;
dropIndicator.style.top = `${indicatorTop}px`;
dropIndicator.style.left = `${iconPosition.right - treePosition.left}px`;
if (dropType === "inner") addClass(dropEl, ns.is("drop-inner"));
else removeClass(dropEl, ns.is("drop-inner"));
dragState.value.showDropIndicator = dropType === "before" || dropType === "after";
dragState.value.allowDrop = dragState.value.showDropIndicator || userAllowDropInner;
dragState.value.dropType = dropType;
ctx.emit("node-drag-over", draggingNode.node, dropNode.node, event);
};
const treeNodeDragEnd = (event) => {
const { draggingNode, dropType, dropNode } = dragState.value;
event.preventDefault();
if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
if (draggingNode?.node.data && dropNode) {
const draggingNodeCopy = { data: draggingNode.node.data };
if (dropType !== "none") draggingNode.node.remove();
if (dropType === "before") dropNode.node.parent?.insertBefore(draggingNodeCopy, dropNode.node);
else if (dropType === "after") dropNode.node.parent?.insertAfter(draggingNodeCopy, dropNode.node);
else if (dropType === "inner") dropNode.node.insertChild(draggingNodeCopy);
if (dropType !== "none") {
store.value.registerNode(draggingNodeCopy);
if (store.value.key) draggingNode.node.eachNode((node) => {
store.value.nodesMap[node.data[store.value.key]]?.setChecked(node.checked, !store.value.checkStrictly);
});
}
removeClass(dropNode.$el, ns.is("drop-inner"));
ctx.emit("node-drag-end", draggingNode.node, dropNode.node, dropType, event);
if (dropType !== "none") ctx.emit("node-drop", draggingNode.node, dropNode.node, dropType, event);
}
if (draggingNode && !dropNode) ctx.emit("node-drag-end", draggingNode.node, null, dropType, event);
dragState.value.showDropIndicator = false;
dragState.value.draggingNode = null;
dragState.value.dropNode = null;
dragState.value.allowDrop = true;
};
(0, vue.provide)(dragEventsKey, {
treeNodeDragStart,
treeNodeDragOver,
treeNodeDragEnd
});
return { dragState };
}
//#endregion
//#region ../../packages/components/tree/src/tree-node.vue?vue&type=script&lang.ts
var tree_node_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTreeNode",
components: {
ElCollapseTransition,
ElCheckbox,
NodeContent: tree_node_content_default$1,
ElIcon,
Loading: loading_default
},
props: {
node: {
type: Node$1,
default: () => ({})
},
props: {
type: Object,
default: () => ({})
},
accordion: Boolean,
renderContent: Function,
renderAfterExpand: Boolean,
showCheckbox: Boolean
},
emits: ["node-expand"],
setup(props, ctx) {
const ns = useNamespace("tree");
const { broadcastExpanded } = useNodeExpandEventBroadcast(props);
const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY);
const expanded = (0, vue.ref)(false);
const childNodeRendered = (0, vue.ref)(false);
const oldChecked = (0, vue.ref)();
const oldIndeterminate = (0, vue.ref)();
const node$ = (0, vue.ref)();
const dragEvents = (0, vue.inject)(dragEventsKey);
const instance = (0, vue.getCurrentInstance)();
(0, vue.provide)(NODE_INSTANCE_INJECTION_KEY, instance);
if (!tree) /* @__PURE__ */ debugWarn("Tree", "Can not find node's tree.");
if (props.node.expanded) {
expanded.value = true;
childNodeRendered.value = true;
}
const childrenKey = tree.props.props["children"] || "children";
(0, vue.watch)(() => {
const children = props.node.data?.[childrenKey];
return children && [...children];
}, () => {
props.node.updateChildren();
});
(0, vue.watch)(() => props.node.indeterminate, (val) => {
handleSelectChange(props.node.checked, val);
});
(0, vue.watch)(() => props.node.checked, (val) => {
handleSelectChange(val, props.node.indeterminate);
});
(0, vue.watch)(() => props.node.childNodes.length, () => props.node.reInitChecked());
(0, vue.watch)(() => props.node.expanded, (val) => {
(0, vue.nextTick)(() => expanded.value = val);
if (val) childNodeRendered.value = true;
});
const getNodeKey$2 = (node) => {
return tree.props.nodeKey ? getNodeKey(tree.props.nodeKey, node.data) : node.id;
};
const getNodeClass = (node) => {
const nodeClassFunc = props.props.class;
if (!nodeClassFunc) return {};
let className;
if (isFunction$1(nodeClassFunc)) {
const { data } = node;
className = nodeClassFunc(data, node);
} else className = nodeClassFunc;
if (isString(className)) return { [className]: true };
else return className;
};
const handleSelectChange = (checked, indeterminate) => {
if (oldChecked.value !== checked || oldIndeterminate.value !== indeterminate) tree.ctx.emit("check-change", props.node.data, checked, indeterminate);
oldChecked.value = checked;
oldIndeterminate.value = indeterminate;
};
const handleClick = (e) => {
handleCurrentChange(tree.store, tree.ctx.emit, () => {
if (tree?.props?.nodeKey) {
const curNodeKey = getNodeKey$2(props.node);
tree.store.value.setCurrentNodeKey(curNodeKey);
} else tree.store.value.setCurrentNode(props.node);
});
tree.currentNode.value = props.node;
if (tree.props.expandOnClickNode) handleExpandIconClick();
if ((tree.props.checkOnClickNode || props.node.isLeaf && tree.props.checkOnClickLeaf && props.showCheckbox) && !props.node.disabled) handleCheckChange(!props.node.checked);
tree.ctx.emit("node-click", props.node.data, props.node, instance, e);
};
const handleContextMenu = (event) => {
if (tree.instance.vnode.props?.["onNodeContextmenu"]) {
event.stopPropagation();
event.preventDefault();
}
tree.ctx.emit("node-contextmenu", event, props.node.data, props.node, instance);
};
const handleExpandIconClick = () => {
if (props.node.isLeaf) return;
if (expanded.value) {
tree.ctx.emit("node-collapse", props.node.data, props.node, instance);
props.node.collapse();
} else props.node.expand(() => {
ctx.emit("node-expand", props.node.data, props.node, instance);
});
};
const handleCheckChange = (value) => {
const checkStrictly = tree?.props.checkStrictly;
const childNodes = props.node.childNodes;
if (!checkStrictly && childNodes.length) value = childNodes.some((node) => !node.isEffectivelyChecked);
props.node.setChecked(value, !checkStrictly);
(0, vue.nextTick)(() => {
const store = tree.store.value;
tree.ctx.emit("check", props.node.data, {
checkedNodes: store.getCheckedNodes(),
checkedKeys: store.getCheckedKeys(),
halfCheckedNodes: store.getHalfCheckedNodes(),
halfCheckedKeys: store.getHalfCheckedKeys()
});
});
};
const handleChildNodeExpand = (nodeData, node, instance) => {
broadcastExpanded(node);
tree.ctx.emit("node-expand", nodeData, node, instance);
};
const handleDragStart = (event) => {
if (!tree.props.draggable) return;
dragEvents.treeNodeDragStart({
event,
treeNode: props
});
};
const handleDragOver = (event) => {
event.preventDefault();
if (!tree.props.draggable) return;
dragEvents.treeNodeDragOver({
event,
treeNode: {
$el: node$.value,
node: props.node
}
});
};
const handleDrop = (event) => {
event.preventDefault();
};
const handleDragEnd = (event) => {
if (!tree.props.draggable) return;
dragEvents.treeNodeDragEnd(event);
};
return {
ns,
node$,
tree,
expanded,
childNodeRendered,
oldChecked,
oldIndeterminate,
getNodeKey: getNodeKey$2,
getNodeClass,
handleSelectChange,
handleClick,
handleContextMenu,
handleExpandIconClick,
handleCheckChange,
handleChildNodeExpand,
handleDragStart,
handleDragOver,
handleDrop,
handleDragEnd,
CaretRight: caret_right_default
};
}
});
//#endregion
//#region ../../packages/components/tree/src/tree-node.vue
const _hoisted_1$12 = [
"aria-expanded",
"aria-disabled",
"aria-checked",
"draggable",
"data-key"
];
const _hoisted_2$7 = ["aria-expanded"];
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_checkbox = (0, vue.resolveComponent)("el-checkbox");
const _component_loading = (0, vue.resolveComponent)("loading");
const _component_node_content = (0, vue.resolveComponent)("node-content");
const _component_el_tree_node = (0, vue.resolveComponent)("el-tree-node");
const _component_el_collapse_transition = (0, vue.resolveComponent)("el-collapse-transition");
return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: "node$",
class: (0, vue.normalizeClass)([
_ctx.ns.b("node"),
_ctx.ns.is("expanded", _ctx.expanded),
_ctx.ns.is("current", _ctx.node.isCurrent),
_ctx.ns.is("hidden", !_ctx.node.visible),
_ctx.ns.is("focusable", !_ctx.node.disabled),
_ctx.ns.is("checked", !_ctx.node.disabled && _ctx.node.checked),
_ctx.getNodeClass(_ctx.node)
]),
role: "treeitem",
tabindex: "-1",
"aria-expanded": _ctx.expanded,
"aria-disabled": _ctx.node.disabled,
"aria-checked": _ctx.node.checked,
draggable: _ctx.tree.props.draggable,
"data-key": _ctx.getNodeKey(_ctx.node),
onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleClick && _ctx.handleClick(...args), ["stop"])),
onContextmenu: _cache[3] || (_cache[3] = (...args) => _ctx.handleContextMenu && _ctx.handleContextMenu(...args)),
onDragstart: _cache[4] || (_cache[4] = (0, vue.withModifiers)((...args) => _ctx.handleDragStart && _ctx.handleDragStart(...args), ["stop"])),
onDragover: _cache[5] || (_cache[5] = (0, vue.withModifiers)((...args) => _ctx.handleDragOver && _ctx.handleDragOver(...args), ["stop"])),
onDragend: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => _ctx.handleDragEnd && _ctx.handleDragEnd(...args), ["stop"])),
onDrop: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => _ctx.handleDrop && _ctx.handleDrop(...args), ["stop"]))
}, [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)(_ctx.ns.be("node", "content")),
style: (0, vue.normalizeStyle)({ paddingLeft: (_ctx.node.level - 1) * _ctx.tree.props.indent + "px" })
}, [
_ctx.tree.props.icon || _ctx.CaretRight ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 0,
class: (0, vue.normalizeClass)([
_ctx.ns.be("node", "expand-icon"),
_ctx.ns.is("leaf", _ctx.node.isLeaf),
{ expanded: !_ctx.node.isLeaf && _ctx.expanded }
]),
onClick: (0, vue.withModifiers)(_ctx.handleExpandIconClick, ["stop"])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.tree.props.icon || _ctx.CaretRight)))]),
_: 1
}, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.showCheckbox ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_checkbox, {
key: 1,
"model-value": _ctx.node.checked,
indeterminate: _ctx.node.indeterminate,
disabled: !!_ctx.node.disabled,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"])),
onChange: _ctx.handleCheckChange
}, null, 8, [
"model-value",
"indeterminate",
"disabled",
"onChange"
])) : (0, vue.createCommentVNode)("v-if", true),
_ctx.node.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 2,
class: (0, vue.normalizeClass)([_ctx.ns.be("node", "loading-icon"), _ctx.ns.is("loading")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_loading)]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createVNode)(_component_node_content, {
node: _ctx.node,
"render-content": _ctx.renderContent
}, null, 8, ["node", "render-content"])
], 6), (0, vue.createVNode)(_component_el_collapse_transition, null, {
default: (0, vue.withCtx)(() => [!_ctx.renderAfterExpand || _ctx.childNodeRendered ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)(_ctx.ns.be("node", "children")),
role: "group",
"aria-expanded": _ctx.expanded,
onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.node.childNodes, (child) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tree_node, {
key: _ctx.getNodeKey(child),
"render-content": _ctx.renderContent,
"render-after-expand": _ctx.renderAfterExpand,
"show-checkbox": _ctx.showCheckbox,
node: child,
accordion: _ctx.accordion,
props: _ctx.props,
onNodeExpand: _ctx.handleChildNodeExpand
}, null, 8, [
"render-content",
"render-after-expand",
"show-checkbox",
"node",
"accordion",
"props",
"onNodeExpand"
]);
}), 128))], 10, _hoisted_2$7)), [[vue.vShow, _ctx.expanded]]) : (0, vue.createCommentVNode)("v-if", true)]),
_: 1
})], 42, _hoisted_1$12)), [[vue.vShow, _ctx.node.visible]]);
}
var tree_node_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(tree_node_vue_vue_type_script_lang_default, [["render", _sfc_render$2]]);
//#endregion
//#region ../../packages/components/tree/src/model/useKeydown.ts
function useKeydown({ el$ }, store) {
const ns = useNamespace("tree");
(0, vue.onMounted)(() => {
initTabIndex();
});
(0, vue.onUpdated)(() => {
el$.value?.querySelectorAll("input[type=checkbox]").forEach((checkbox) => {
checkbox.setAttribute("tabindex", "-1");
});
});
function canNodeFocus(treeItems, nextIndex) {
const currentNode = store.value.getNode(treeItems[nextIndex].dataset.key);
return currentNode.canFocus && currentNode.visible && (currentNode.parent?.expanded || currentNode.parent?.level === 0);
}
const handleKeydown = (ev) => {
const currentItem = ev.target;
if (!currentItem.className.includes(ns.b("node"))) return;
const code = getEventCode(ev);
const treeItems = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`));
const currentIndex = treeItems.indexOf(currentItem);
let nextIndex;
if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {
ev.preventDefault();
if (code === EVENT_CODE.up) {
nextIndex = currentIndex === -1 ? 0 : currentIndex !== 0 ? currentIndex - 1 : treeItems.length - 1;
const startIndex = nextIndex;
while (true) {
if (canNodeFocus(treeItems, nextIndex)) break;
nextIndex--;
if (nextIndex === startIndex) {
nextIndex = -1;
break;
}
if (nextIndex < 0) nextIndex = treeItems.length - 1;
}
} else {
nextIndex = currentIndex === -1 ? 0 : currentIndex < treeItems.length - 1 ? currentIndex + 1 : 0;
const startIndex = nextIndex;
while (true) {
if (canNodeFocus(treeItems, nextIndex)) break;
nextIndex++;
if (nextIndex === startIndex) {
nextIndex = -1;
break;
}
if (nextIndex >= treeItems.length) nextIndex = 0;
}
}
nextIndex !== -1 && treeItems[nextIndex].focus();
}
if ([EVENT_CODE.left, EVENT_CODE.right].includes(code)) {
ev.preventDefault();
currentItem.click();
}
const hasInput = currentItem.querySelector("[type=\"checkbox\"]");
if ([
EVENT_CODE.enter,
EVENT_CODE.numpadEnter,
EVENT_CODE.space
].includes(code) && hasInput) {
ev.preventDefault();
hasInput.click();
}
};
useEventListener(el$, "keydown", handleKeydown);
const initTabIndex = () => {
if (!el$.value) return;
const treeItems = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`));
Array.from(el$.value.querySelectorAll("input[type=checkbox]")).forEach((checkbox) => {
checkbox.setAttribute("tabindex", "-1");
});
const checkedItem = el$.value.querySelectorAll(`.${ns.is("checked")}[role=treeitem]`);
if (checkedItem.length) {
checkedItem[0].setAttribute("tabindex", "0");
return;
}
treeItems[0]?.setAttribute("tabindex", "0");
};
}
//#endregion
//#region ../../packages/components/tree/src/tree.ts
const treeProps = buildProps({
data: {
type: definePropType(Array),
default: () => []
},
emptyText: { type: String },
renderAfterExpand: {
type: Boolean,
default: true
},
nodeKey: String,
checkStrictly: Boolean,
defaultExpandAll: Boolean,
expandOnClickNode: {
type: Boolean,
default: true
},
checkOnClickNode: Boolean,
checkOnClickLeaf: {
type: Boolean,
default: true
},
checkDescendants: Boolean,
autoExpandParent: {
type: Boolean,
default: true
},
defaultCheckedKeys: { type: Array },
defaultExpandedKeys: { type: Array },
currentNodeKey: { type: [String, Number] },
renderContent: { type: definePropType(Function) },
showCheckbox: Boolean,
draggable: Boolean,
allowDrag: { type: definePropType(Function) },
allowDrop: { type: definePropType(Function) },
props: {
type: Object,
default: () => ({
children: "children",
label: "label",
disabled: "disabled"
})
},
lazy: Boolean,
highlightCurrent: Boolean,
load: { type: Function },
filterNodeMethod: { type: Function },
accordion: Boolean,
indent: {
type: Number,
default: 18
},
icon: { type: iconPropType }
});
const treeEmits = {
"check-change": (data, checked, indeterminate) => data && isBoolean(checked) && isBoolean(indeterminate),
"current-change": (data, node) => true,
"node-click": (data, node, nodeInstance, evt) => data && node && evt instanceof Event,
"node-contextmenu": (evt, data, node, nodeInstance) => evt instanceof Event && data && node,
"node-collapse": (data, node, nodeInstance) => data && node,
"node-expand": (data, node, nodeInstance) => data && node,
check: (data, checkedInfo) => data && checkedInfo,
"node-drag-start": (node, evt) => node && evt,
"node-drag-end": (draggingNode, dropNode, dropType, evt) => draggingNode && evt,
"node-drop": (draggingNode, dropNode, dropType, evt) => draggingNode && dropNode && evt,
"node-drag-leave": (draggingNode, oldDropNode, evt) => draggingNode && oldDropNode && evt,
"node-drag-enter": (draggingNode, dropNode, evt) => draggingNode && dropNode && evt,
"node-drag-over": (draggingNode, dropNode, evt) => draggingNode && dropNode && evt
};
//#endregion
//#region ../../packages/components/tree/src/tree.vue?vue&type=script&lang.ts
var tree_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTree",
components: { ElTreeNode: tree_node_default$1 },
props: treeProps,
emits: treeEmits,
setup(props, ctx) {
const { t } = useLocale();
const ns = useNamespace("tree");
const store = (0, vue.ref)(new TreeStore({
key: props.nodeKey,
data: props.data,
lazy: props.lazy,
props: props.props,
load: props.load,
currentNodeKey: props.currentNodeKey,
checkStrictly: props.checkStrictly,
checkDescendants: props.checkDescendants,
defaultCheckedKeys: props.defaultCheckedKeys,
defaultExpandedKeys: props.defaultExpandedKeys,
autoExpandParent: props.autoExpandParent,
defaultExpandAll: props.defaultExpandAll,
filterNodeMethod: props.filterNodeMethod
}));
store.value.initialize();
const root = (0, vue.ref)(store.value.root);
const currentNode = (0, vue.ref)(null);
const el$ = (0, vue.ref)(null);
const dropIndicator$ = (0, vue.ref)(null);
const { broadcastExpanded } = useNodeExpandEventBroadcast(props);
const { dragState } = useDragNodeHandler({
props,
ctx,
el$,
dropIndicator$,
store
});
useKeydown({ el$ }, store);
const instance = (0, vue.getCurrentInstance)();
const isSelectTree = (0, vue.computed)(() => {
let parent = instance?.parent;
while (parent) {
if (parent.type.name === "ElTreeSelect") return true;
parent = parent.parent;
}
return false;
});
const isEmpty = (0, vue.computed)(() => {
const { childNodes } = root.value;
return (!childNodes || childNodes.length === 0 || childNodes.every(({ visible }) => !visible)) && !isSelectTree.value;
});
(0, vue.watch)(() => props.currentNodeKey, (newVal) => {
store.value.setCurrentNodeKey(newVal ?? null);
});
(0, vue.watch)(() => props.defaultCheckedKeys, (newVal, oldVal) => {
if (isEqual$1(newVal, oldVal)) return;
store.value.setDefaultCheckedKey(newVal ?? []);
});
(0, vue.watch)(() => props.defaultExpandedKeys, (newVal) => {
store.value.setDefaultExpandedKeys(newVal ?? []);
});
(0, vue.watch)(() => props.data, (newVal) => {
store.value.setData(newVal);
}, { deep: true });
(0, vue.watch)(() => props.checkStrictly, (newVal) => {
store.value.checkStrictly = newVal;
});
const filter = (value) => {
if (!props.filterNodeMethod) throw new Error("[Tree] filterNodeMethod is required when filter");
store.value.filter(value);
};
const getNodeKey$1 = (node) => {
return props.nodeKey ? getNodeKey(props.nodeKey, node.data) : node.id;
};
const requireNodeKey = (methodName) => {
if (!props.nodeKey) throw new Error(`[Tree] nodeKey is required in ${methodName}`);
};
const getNodePath = (data) => {
requireNodeKey("getNodePath");
const node = store.value.getNode(data);
if (!node) return [];
const path = [node.data];
let parent = node.parent;
while (parent && parent !== root.value) {
path.push(parent.data);
parent = parent.parent;
}
return path.reverse();
};
const getCheckedNodes = (leafOnly, includeHalfChecked) => {
return store.value.getCheckedNodes(leafOnly, includeHalfChecked);
};
const getCheckedKeys = (leafOnly) => {
return store.value.getCheckedKeys(leafOnly);
};
const getCurrentNode = () => {
const currentNode = store.value.getCurrentNode();
return currentNode ? currentNode.data : null;
};
const getCurrentKey = () => {
requireNodeKey("getCurrentKey");
const currentNode = getCurrentNode();
return currentNode ? currentNode[props.nodeKey] : null;
};
const setCheckedNodes = (nodes, leafOnly) => {
requireNodeKey("setCheckedNodes");
store.value.setCheckedNodes(nodes, leafOnly);
};
const setCheckedKeys = (keys, leafOnly) => {
requireNodeKey("setCheckedKeys");
store.value.setCheckedKeys(keys, leafOnly);
};
const setChecked = (data, checked, deep) => {
store.value.setChecked(data, checked, deep);
};
const getHalfCheckedNodes = () => {
return store.value.getHalfCheckedNodes();
};
const getHalfCheckedKeys = () => {
return store.value.getHalfCheckedKeys();
};
const setCurrentNode = (node, shouldAutoExpandParent = true) => {
requireNodeKey("setCurrentNode");
handleCurrentChange(store, ctx.emit, () => {
broadcastExpanded(node);
store.value.setUserCurrentNode(node, shouldAutoExpandParent);
});
};
const setCurrentKey = (key = null, shouldAutoExpandParent = true) => {
requireNodeKey("setCurrentKey");
handleCurrentChange(store, ctx.emit, () => {
broadcastExpanded();
store.value.setCurrentNodeKey(key, shouldAutoExpandParent);
});
};
const getNode = (data) => {
return store.value.getNode(data);
};
const remove = (data) => {
store.value.remove(data);
};
const append = (data, parentNode) => {
store.value.append(data, parentNode);
};
const insertBefore = (data, refNode) => {
store.value.insertBefore(data, refNode);
};
const insertAfter = (data, refNode) => {
store.value.insertAfter(data, refNode);
};
const handleNodeExpand = (nodeData, node, instance) => {
broadcastExpanded(node);
ctx.emit("node-expand", nodeData, node, instance);
};
const updateKeyChildren = (key, data) => {
requireNodeKey("updateKeyChildren");
store.value.updateChildren(key, data);
};
(0, vue.provide)(ROOT_TREE_INJECTION_KEY, {
ctx,
props,
store,
root,
currentNode,
instance
});
(0, vue.provide)(formItemContextKey, void 0);
return {
ns,
store,
root,
currentNode,
dragState,
el$,
dropIndicator$,
isEmpty,
filter,
getNodeKey: getNodeKey$1,
getNodePath,
getCheckedNodes,
getCheckedKeys,
getCurrentNode,
getCurrentKey,
setCheckedNodes,
setCheckedKeys,
setChecked,
getHalfCheckedNodes,
getHalfCheckedKeys,
setCurrentNode,
setCurrentKey,
t,
getNode,
remove,
append,
insertBefore,
insertAfter,
handleNodeExpand,
updateKeyChildren
};
}
});
//#endregion
//#region ../../packages/components/tree/src/tree.vue
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_tree_node = (0, vue.resolveComponent)("el-tree-node");
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: "el$",
class: (0, vue.normalizeClass)([
_ctx.ns.b(),
_ctx.ns.is("dragging", !!_ctx.dragState.draggingNode),
_ctx.ns.is("drop-not-allow", !_ctx.dragState.allowDrop),
_ctx.ns.is("drop-inner", _ctx.dragState.dropType === "inner"),
{ [_ctx.ns.m("highlight-current")]: _ctx.highlightCurrent }
]),
role: "tree"
}, [
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.root.childNodes, (child) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tree_node, {
key: _ctx.getNodeKey(child),
node: child,
props: _ctx.props,
accordion: _ctx.accordion,
"render-after-expand": _ctx.renderAfterExpand,
"show-checkbox": _ctx.showCheckbox,
"render-content": _ctx.renderContent,
onNodeExpand: _ctx.handleNodeExpand
}, null, 8, [
"node",
"props",
"accordion",
"render-after-expand",
"show-checkbox",
"render-content",
"onNodeExpand"
]);
}), 128)),
_ctx.isEmpty ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)(_ctx.ns.e("empty-block"))
}, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.ns.e("empty-text")) }, (0, vue.toDisplayString)(_ctx.emptyText ?? _ctx.t("el.tree.emptyText")), 3)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
ref: "dropIndicator$",
class: (0, vue.normalizeClass)(_ctx.ns.e("drop-indicator"))
}, null, 2), [[vue.vShow, _ctx.dragState.showDropIndicator]])
], 2);
}
var tree_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(tree_vue_vue_type_script_lang_default, [["render", _sfc_render$1]]);
//#endregion
//#region ../../packages/components/tree/index.ts
const ElTree = withInstall(tree_default$1);
//#endregion
//#region ../../packages/components/tree-select/src/select.ts
const useSelect = (props, { attrs, emit }, { select, tree, key }) => {
const ns = useNamespace("tree-select");
(0, vue.watch)(() => props.data, () => {
if (props.filterable) (0, vue.nextTick)(() => {
tree.value?.filter(select.value?.states.inputValue);
});
}, { flush: "post" });
const focusLastNode = (listNode) => {
const lastNode = listNode.at(-1);
if (lastNode.expanded && lastNode.childNodes.at(-1)) focusLastNode([lastNode.childNodes.at(-1)]);
else {
(tree.value.el$?.querySelector(`[data-key="${listNode.at(-1).key}"]`))?.focus({ preventScroll: true });
return;
}
};
(0, vue.onMounted)(() => {
useEventListener(() => select.value?.$el, "keydown", async (evt) => {
const code = getEventCode(evt);
const { dropdownMenuVisible } = select.value;
if ([EVENT_CODE.down, EVENT_CODE.up].includes(code) && dropdownMenuVisible) {
await (0, vue.nextTick)();
setTimeout(() => {
if (EVENT_CODE.up === code) {
const listNode = tree.value.store.root.childNodes;
focusLastNode(listNode);
return;
}
select.value.optionsArray[select.value.states.hoveringIndex].$el?.parentNode?.parentNode?.focus({ preventScroll: true });
});
}
}, { capture: true });
});
return {
...pick((0, vue.toRefs)(props), Object.keys(ElSelect.props)),
...attrs,
class: (0, vue.computed)(() => attrs.class),
style: (0, vue.computed)(() => attrs.style),
"onUpdate:modelValue": (value) => emit(UPDATE_MODEL_EVENT, value),
valueKey: key,
popperClass: (0, vue.computed)(() => {
const classes = [ns.e("popper")];
if (props.popperClass) classes.push(props.popperClass);
return classes.join(" ");
}),
filterMethod: (keyword = "") => {
if (props.filterMethod) props.filterMethod(keyword);
else if (props.remoteMethod) props.remoteMethod(keyword);
else tree.value?.filter(keyword);
}
};
};
//#endregion
//#region ../../packages/components/tree-select/src/tree-select-option.ts
const component = (0, vue.defineComponent)({
extends: ElOption,
setup(props, ctx) {
const result = ElOption.setup(props, ctx);
delete result.selectOptionClick;
const vm = (0, vue.getCurrentInstance)().proxy;
(0, vue.nextTick)(() => {
if (!result.select.states.cachedOptions.get(vm.value)) result.select.onOptionCreate(vm);
});
(0, vue.watch)(() => ctx.attrs.visible, (val) => {
(0, vue.nextTick)(() => {
result.states.visible = val;
});
}, { immediate: true });
return result;
},
methods: { selectOptionClick() {
this.$el.parentElement.click();
} }
});
//#endregion
//#region ../../packages/components/tree-select/src/utils.ts
function isValidValue(val) {
return val || val === 0;
}
function isValidArray(val) {
return isArray$1(val) && val.length;
}
function toValidArray(val) {
return isArray$1(val) ? val : isValidValue(val) ? [val] : [];
}
function treeFind(treeData, findCallback, getChildren, resultCallback, parent) {
for (let i = 0; i < treeData.length; i++) {
const data = treeData[i];
if (findCallback(data, i, treeData, parent)) return resultCallback ? resultCallback(data, i, treeData, parent) : data;
else {
const children = getChildren(data);
if (isValidArray(children)) {
const find = treeFind(children, findCallback, getChildren, resultCallback, data);
if (find) return find;
}
}
}
}
function treeEach(treeData, callback, getChildren, parent) {
for (let i = 0; i < treeData.length; i++) {
const data = treeData[i];
callback(data, i, treeData, parent);
const children = getChildren(data);
if (isValidArray(children)) treeEach(children, callback, getChildren, data);
}
}
//#endregion
//#region ../../packages/components/tree-select/src/tree.ts
const useTree$1 = (props, { attrs, slots, emit }, { select, tree, key }) => {
(0, vue.watch)([() => props.modelValue, tree], () => {
if (props.showCheckbox) (0, vue.nextTick)(() => {
const treeInstance = tree.value;
if (treeInstance && !isEqual$1(treeInstance.getCheckedKeys(), toValidArray(props.modelValue))) treeInstance.setCheckedKeys(toValidArray(props.modelValue));
});
}, {
immediate: true,
deep: true
});
const propsMap = (0, vue.computed)(() => ({
value: key.value,
label: "label",
children: "children",
disabled: "disabled",
isLeaf: "isLeaf",
...props.props
}));
const getNodeValByProp = (prop, data) => {
const propVal = propsMap.value[prop];
if (isFunction$1(propVal)) return propVal(data, tree.value?.getNode(getNodeValByProp("value", data)));
else return data[propVal];
};
const defaultExpandedParentKeys = toValidArray(props.modelValue).map((value) => {
return treeFind(props.data || [], (data) => getNodeValByProp("value", data) === value, (data) => getNodeValByProp("children", data), (data, index, array, parent) => parent && getNodeValByProp("value", parent));
}).filter((item) => isValidValue(item));
const cacheOptions = (0, vue.computed)(() => {
if (!props.renderAfterExpand && !props.lazy) return [];
const options = [];
treeEach(props.data.concat(props.cacheData), (node) => {
const value = getNodeValByProp("value", node);
options.push({
value,
currentLabel: getNodeValByProp("label", node),
isDisabled: getNodeValByProp("disabled", node)
});
}, (data) => getNodeValByProp("children", data));
return options;
});
const getChildCheckedKeys = () => {
return tree.value?.getCheckedKeys().filter((checkedKey) => {
const node = tree.value?.getNode(checkedKey);
return !isNil(node) && isEmpty(node.childNodes);
});
};
const emitChange = (val) => {
if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
};
function update(val) {
emit(UPDATE_MODEL_EVENT, val);
emitChange(val);
}
return {
...pick((0, vue.toRefs)(props), Object.keys(ElTree.props)),
...attrs,
nodeKey: key,
expandOnClickNode: (0, vue.computed)(() => {
return !props.checkStrictly && props.expandOnClickNode;
}),
defaultExpandedKeys: (0, vue.computed)(() => {
return props.defaultExpandedKeys ? props.defaultExpandedKeys.concat(defaultExpandedParentKeys) : defaultExpandedParentKeys;
}),
renderContent: (h, { node, data, store }) => {
return h(component, {
value: getNodeValByProp("value", data),
label: getNodeValByProp("label", data),
disabled: getNodeValByProp("disabled", data),
visible: node.visible
}, props.renderContent ? () => props.renderContent(h, {
node,
data,
store
}) : slots.default ? () => slots.default({
node,
data,
store
}) : void 0);
},
filterNodeMethod: (value, data, node) => {
if (props.filterNodeMethod) return props.filterNodeMethod(value, data, node);
if (!value) return true;
return new RegExp(escapeStringRegexp(value), "i").test(getNodeValByProp("label", data) || "");
},
onNodeClick: (data, node, e) => {
attrs.onNodeClick?.(data, node, e);
if (props.showCheckbox && props.checkOnClickNode) return;
if (!props.showCheckbox && (props.checkStrictly || node.isLeaf)) {
if (!getNodeValByProp("disabled", data)) {
const option = select.value?.states.options.get(getNodeValByProp("value", data));
select.value?.handleOptionSelect(option);
}
} else if (props.expandOnClickNode) e.proxy.handleExpandIconClick();
},
onCheck: (data, params) => {
if (!props.showCheckbox) return;
const dataValue = getNodeValByProp("value", data);
const dataMap = {};
treeEach([tree.value.store.root], (node) => dataMap[node.key] = node, (node) => node.childNodes);
const uncachedCheckedKeys = params.checkedKeys;
const cachedKeys = props.multiple ? toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)) : [];
const checkedKeys = cachedKeys.concat(uncachedCheckedKeys);
if (props.checkStrictly) update(props.multiple ? checkedKeys : checkedKeys.includes(dataValue) ? dataValue : void 0);
else if (props.multiple) {
const childKeys = getChildCheckedKeys();
update(cachedKeys.concat(childKeys));
} else {
const firstLeaf = treeFind([data], (data) => !isValidArray(getNodeValByProp("children", data)) && !getNodeValByProp("disabled", data), (data) => getNodeValByProp("children", data));
const firstLeafKey = firstLeaf ? getNodeValByProp("value", firstLeaf) : void 0;
const hasCheckedChild = isValidValue(props.modelValue) && !!treeFind([data], (data) => getNodeValByProp("value", data) === props.modelValue, (data) => getNodeValByProp("children", data));
update(firstLeafKey === props.modelValue || hasCheckedChild ? void 0 : firstLeafKey);
}
(0, vue.nextTick)(() => {
const checkedKeys = toValidArray(props.modelValue);
tree.value.setCheckedKeys(checkedKeys);
attrs.onCheck?.(data, {
checkedKeys: tree.value.getCheckedKeys(),
checkedNodes: tree.value.getCheckedNodes(),
halfCheckedKeys: tree.value.getHalfCheckedKeys(),
halfCheckedNodes: tree.value.getHalfCheckedNodes()
});
});
select.value?.focus();
},
onNodeExpand: (data, node, e) => {
attrs.onNodeExpand?.(data, node, e);
(0, vue.nextTick)(() => {
if (!props.checkStrictly && props.lazy && props.multiple && node.checked) {
const dataMap = {};
const uncachedCheckedKeys = tree.value.getCheckedKeys();
treeEach([tree.value.store.root], (node) => dataMap[node.key] = node, (node) => node.childNodes);
const cachedKeys = toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item));
const childKeys = getChildCheckedKeys();
update(cachedKeys.concat(childKeys));
}
});
},
cacheOptions
};
};
//#endregion
//#region ../../packages/components/tree-select/src/cache-options.ts
var cache_options_default = (0, vue.defineComponent)({
props: { data: {
type: Array,
default: () => []
} },
setup(props) {
const select = (0, vue.inject)(selectKey);
(0, vue.watch)(() => props.data, () => {
props.data.forEach((item) => {
if (!select.states.cachedOptions.has(item.value)) select.states.cachedOptions.set(item.value, item);
});
const inputs = select.selectRef?.querySelectorAll("input") || [];
if (isClient && !Array.from(inputs).includes(document.activeElement)) select.setSelected();
}, {
flush: "post",
immediate: true
});
return () => void 0;
}
});
//#endregion
//#region ../../packages/components/tree-select/src/tree-select.vue?vue&type=script&lang.ts
var tree_select_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElTreeSelect",
inheritAttrs: false,
props: {
...selectProps,
...treeProps,
cacheData: {
type: Array,
default: () => []
}
},
setup(props, context) {
const { slots, expose, emit, attrs } = context;
const childAttrs = {
...attrs,
onChange: void 0
};
const select = (0, vue.ref)();
const tree = (0, vue.ref)();
const key = (0, vue.computed)(() => props.nodeKey || props.valueKey || "value");
const selectProps = useSelect(props, {
attrs,
emit
}, {
select,
tree,
key
});
const { cacheOptions, ...treeProps } = useTree$1(props, {
attrs: childAttrs,
slots,
emit
}, {
select,
tree,
key
});
const methods = (0, vue.reactive)({});
expose(methods);
(0, vue.onMounted)(() => {
Object.assign(methods, {
...pick(tree.value, [
"filter",
"updateKeyChildren",
"getCheckedNodes",
"setCheckedNodes",
"getCheckedKeys",
"setCheckedKeys",
"setChecked",
"getHalfCheckedNodes",
"getHalfCheckedKeys",
"getCurrentKey",
"getCurrentNode",
"setCurrentKey",
"setCurrentNode",
"getNode",
"remove",
"append",
"insertBefore",
"insertAfter"
]),
...pick(select.value, [
"focus",
"blur",
"selectedLabel"
]),
treeRef: tree.value,
selectRef: select.value
});
});
return () => (0, vue.h)(
ElSelect,
/**
* 1. The `props` is processed into `Refs`, but `v-bind` and
* render function props cannot read `Refs`, so use `reactive`
* unwrap the `Refs` and keep reactive.
* 2. The keyword `ref` requires `Ref`, but `reactive` broke it,
* so use function.
*/
(0, vue.reactive)({
...selectProps,
ref: (ref) => select.value = ref
}),
{
...slots,
default: () => [(0, vue.h)(cache_options_default, { data: cacheOptions.value }), (0, vue.h)(ElTree, (0, vue.reactive)({
...treeProps,
ref: (ref) => tree.value = ref
}))]
}
);
}
});
//#endregion
//#region ../../packages/components/tree-select/src/tree-select.vue
var tree_select_default = tree_select_vue_vue_type_script_lang_default;
//#endregion
//#region ../../packages/components/tree-select/index.ts
const ElTreeSelect = withInstall(tree_select_default);
//#endregion
//#region ../../packages/components/tree-v2/src/virtual-tree.ts
const ROOT_TREE_INJECTION_KEY$1 = Symbol();
const EMPTY_NODE = {
key: -1,
level: -1,
data: {}
};
let TreeOptionsEnum = /* @__PURE__ */ function(TreeOptionsEnum) {
TreeOptionsEnum["KEY"] = "id";
TreeOptionsEnum["LABEL"] = "label";
TreeOptionsEnum["CHILDREN"] = "children";
TreeOptionsEnum["DISABLED"] = "disabled";
TreeOptionsEnum["CLASS"] = "";
return TreeOptionsEnum;
}({});
let SetOperationEnum = /* @__PURE__ */ function(SetOperationEnum) {
SetOperationEnum["ADD"] = "add";
SetOperationEnum["DELETE"] = "delete";
return SetOperationEnum;
}({});
const itemSize = {
type: Number,
default: 26
};
/**
* @deprecated Removed after 3.0.0, Use `TreeProps` instead.
*/
const treeProps$1 = buildProps({
data: {
type: definePropType(Array),
default: () => mutable([])
},
emptyText: { type: String },
height: {
type: Number,
default: 200
},
props: {
type: definePropType(Object),
default: () => mutable({
children: TreeOptionsEnum.CHILDREN,
label: TreeOptionsEnum.LABEL,
disabled: TreeOptionsEnum.DISABLED,
value: TreeOptionsEnum.KEY,
class: TreeOptionsEnum.CLASS
})
},
highlightCurrent: Boolean,
showCheckbox: Boolean,
defaultCheckedKeys: {
type: definePropType(Array),
default: () => mutable([])
},
checkStrictly: Boolean,
defaultExpandedKeys: {
type: definePropType(Array),
default: () => mutable([])
},
indent: {
type: Number,
default: 16
},
itemSize,
icon: { type: iconPropType },
expandOnClickNode: {
type: Boolean,
default: true
},
checkOnClickNode: Boolean,
checkOnClickLeaf: {
type: Boolean,
default: true
},
currentNodeKey: { type: definePropType([String, Number]) },
accordion: Boolean,
filterMethod: { type: definePropType(Function) },
perfMode: {
type: Boolean,
default: true
},
scrollbarAlwaysOn: Boolean
});
/**
* @deprecated Removed after 3.0.0, Use `TreeNodeProps` instead.
*/
const treeNodeProps = buildProps({
node: {
type: definePropType(Object),
default: () => mutable(EMPTY_NODE)
},
expanded: Boolean,
checked: Boolean,
indeterminate: Boolean,
showCheckbox: Boolean,
disabled: Boolean,
current: Boolean,
hiddenExpandIcon: Boolean,
itemSize
});
const treeNodeContentProps = buildProps({ node: {
type: definePropType(Object),
required: true
} });
const NODE_CLICK = "node-click";
const NODE_DROP = "node-drop";
const NODE_EXPAND = "node-expand";
const NODE_COLLAPSE = "node-collapse";
const CURRENT_CHANGE = "current-change";
const NODE_CHECK = "check";
const NODE_CHECK_CHANGE = "check-change";
const NODE_CONTEXTMENU = "node-contextmenu";
const treeEmits$1 = {
[NODE_CLICK]: (data, node, e) => data && node && e,
[NODE_DROP]: (data, node, e) => data && node && e,
[NODE_EXPAND]: (data, node) => data && node,
[NODE_COLLAPSE]: (data, node) => data && node,
[CURRENT_CHANGE]: (data, node) => data && node,
[NODE_CHECK]: (data, checkedInfo) => data && checkedInfo,
[NODE_CHECK_CHANGE]: (data, checked) => data && isBoolean(checked),
[NODE_CONTEXTMENU]: (evt, data, node) => evt && data && node
};
const treeNodeEmits = {
click: (node, e) => !!(node && e),
drop: (node, e) => !!(node && e),
toggle: (node) => !!node,
check: (node, checked) => node && isBoolean(checked)
};
//#endregion
//#region ../../packages/components/tree-v2/src/composables/useCheck.ts
function useCheck(props, tree) {
const checkedKeys = (0, vue.ref)(/* @__PURE__ */ new Set());
const indeterminateKeys = (0, vue.ref)(/* @__PURE__ */ new Set());
const { emit } = (0, vue.getCurrentInstance)();
(0, vue.watch)([() => tree.value, () => props.defaultCheckedKeys], () => {
return (0, vue.nextTick)(() => {
_setCheckedKeys(props.defaultCheckedKeys);
});
}, { immediate: true });
const updateCheckedKeys = () => {
if (!tree.value || !props.showCheckbox || props.checkStrictly) return;
const { levelTreeNodeMap, maxLevel } = tree.value;
const checkedKeySet = checkedKeys.value;
const indeterminateKeySet = /* @__PURE__ */ new Set();
for (let level = maxLevel; level >= 1; --level) {
const nodes = levelTreeNodeMap.get(level);
if (!nodes) continue;
nodes.forEach((node) => {
const children = node.children;
let isEffectivelyChecked = !node.isLeaf || node.disabled || checkedKeySet.has(node.key);
if (children) {
let allChecked = true;
let hasChecked = false;
for (const childNode of children) {
const key = childNode.key;
if (!childNode.isEffectivelyChecked) isEffectivelyChecked = false;
if (checkedKeySet.has(key)) hasChecked = true;
else if (indeterminateKeySet.has(key)) {
allChecked = false;
hasChecked = true;
break;
} else allChecked = false;
}
if (allChecked) checkedKeySet.add(node.key);
else if (hasChecked) {
indeterminateKeySet.add(node.key);
checkedKeySet.delete(node.key);
} else {
checkedKeySet.delete(node.key);
indeterminateKeySet.delete(node.key);
}
}
node.isEffectivelyChecked = isEffectivelyChecked;
});
}
indeterminateKeys.value = indeterminateKeySet;
};
const isChecked = (node) => checkedKeys.value.has(node.key);
const isIndeterminate = (node) => indeterminateKeys.value.has(node.key);
const toggleCheckbox = (node, isChecked, nodeClick = true, immediateUpdate = true) => {
const checkedKeySet = checkedKeys.value;
const children = node.children;
if (!props.checkStrictly && nodeClick && children?.length) isChecked = children.some((node) => !node.isEffectivelyChecked);
const toggle = (node, checked) => {
checkedKeySet[checked ? SetOperationEnum.ADD : SetOperationEnum.DELETE](node.key);
const children = node.children;
if (!props.checkStrictly && children) children.forEach((childNode) => {
if (!childNode.disabled || childNode.children) toggle(childNode, checked);
});
};
toggle(node, isChecked);
if (immediateUpdate) updateCheckedKeys();
if (nodeClick) afterNodeCheck(node, isChecked);
};
const afterNodeCheck = (node, checked) => {
const { checkedNodes, checkedKeys } = getChecked();
const { halfCheckedNodes, halfCheckedKeys } = getHalfChecked();
emit(NODE_CHECK, node.data, {
checkedKeys,
checkedNodes,
halfCheckedKeys,
halfCheckedNodes
});
emit(NODE_CHECK_CHANGE, node.data, checked);
};
function getCheckedKeys(leafOnly = false) {
return getChecked(leafOnly).checkedKeys;
}
function getCheckedNodes(leafOnly = false) {
return getChecked(leafOnly).checkedNodes;
}
function getHalfCheckedKeys() {
return getHalfChecked().halfCheckedKeys;
}
function getHalfCheckedNodes() {
return getHalfChecked().halfCheckedNodes;
}
function getChecked(leafOnly = false) {
const checkedNodes = [];
const keys = [];
if (tree?.value && props.showCheckbox) {
const { treeNodeMap } = tree.value;
checkedKeys.value.forEach((key) => {
const node = treeNodeMap.get(key);
if (node && (!leafOnly || leafOnly && node.isLeaf)) {
keys.push(key);
checkedNodes.push(node.data);
}
});
}
return {
checkedKeys: keys,
checkedNodes
};
}
function getHalfChecked() {
const halfCheckedNodes = [];
const halfCheckedKeys = [];
if (tree?.value && props.showCheckbox) {
const { treeNodeMap } = tree.value;
indeterminateKeys.value.forEach((key) => {
const node = treeNodeMap.get(key);
if (node) {
halfCheckedKeys.push(key);
halfCheckedNodes.push(node.data);
}
});
}
return {
halfCheckedNodes,
halfCheckedKeys
};
}
function setCheckedKeys(keys) {
checkedKeys.value.clear();
indeterminateKeys.value.clear();
(0, vue.nextTick)(() => {
_setCheckedKeys(keys);
});
}
function setChecked(key, isChecked) {
if (tree?.value && props.showCheckbox) {
const node = tree.value.treeNodeMap.get(key);
if (node) toggleCheckbox(node, isChecked, false);
}
}
function _setCheckedKeys(keys) {
if (tree?.value) {
const { treeNodeMap } = tree.value;
if (props.showCheckbox && treeNodeMap && keys?.length > 0) {
for (const key of keys) {
const node = treeNodeMap.get(key);
if (node && !isChecked(node)) toggleCheckbox(node, true, false, false);
}
updateCheckedKeys();
}
}
}
return {
updateCheckedKeys,
toggleCheckbox,
isChecked,
isIndeterminate,
getCheckedKeys,
getCheckedNodes,
getHalfCheckedKeys,
getHalfCheckedNodes,
setChecked,
setCheckedKeys
};
}
//#endregion
//#region ../../packages/components/tree-v2/src/composables/useFilter.ts
function useFilter(props, tree) {
const hiddenNodeKeySet = (0, vue.ref)(/* @__PURE__ */ new Set([]));
const hiddenExpandIconKeySet = (0, vue.ref)(/* @__PURE__ */ new Set([]));
const filterable = (0, vue.computed)(() => {
return isFunction$1(props.filterMethod);
});
function doFilter(query) {
if (!filterable.value) return;
const expandKeySet = /* @__PURE__ */ new Set();
const hiddenExpandIconKeys = hiddenExpandIconKeySet.value;
const hiddenKeys = hiddenNodeKeySet.value;
const family = [];
const nodes = tree.value?.treeNodes || [];
const filter = props.filterMethod;
hiddenKeys.clear();
function traverse(nodes) {
nodes.forEach((node) => {
family.push(node);
if (filter?.(query, node.data, node)) family.forEach((member) => {
expandKeySet.add(member.key);
member.expanded = true;
});
else {
node.expanded = false;
if (node.isLeaf) hiddenKeys.add(node.key);
}
const children = node.children;
if (children) traverse(children);
if (!node.isLeaf) {
if (!expandKeySet.has(node.key)) hiddenKeys.add(node.key);
else if (children) {
let allHidden = true;
for (const childNode of children) if (!hiddenKeys.has(childNode.key)) {
allHidden = false;
break;
}
if (allHidden) hiddenExpandIconKeys.add(node.key);
else hiddenExpandIconKeys.delete(node.key);
}
}
family.pop();
});
}
traverse(nodes);
return expandKeySet;
}
function isForceHiddenExpandIcon(node) {
return hiddenExpandIconKeySet.value.has(node.key);
}
return {
hiddenExpandIconKeySet,
hiddenNodeKeySet,
doFilter,
isForceHiddenExpandIcon
};
}
//#endregion
//#region ../../packages/components/tree-v2/src/composables/useTree.ts
function useTree(props, emit) {
const expandedKeySet = (0, vue.ref)(/* @__PURE__ */ new Set());
const currentKey = (0, vue.ref)();
const tree = (0, vue.shallowRef)();
const listRef = (0, vue.ref)();
const { isIndeterminate, isChecked, toggleCheckbox, getCheckedKeys, getCheckedNodes, getHalfCheckedKeys, getHalfCheckedNodes, setChecked, setCheckedKeys } = useCheck(props, tree);
const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(props, tree);
const valueKey = (0, vue.computed)(() => {
return props.props?.value || TreeOptionsEnum.KEY;
});
const childrenKey = (0, vue.computed)(() => {
return props.props?.children || TreeOptionsEnum.CHILDREN;
});
const disabledKey = (0, vue.computed)(() => {
return props.props?.disabled || TreeOptionsEnum.DISABLED;
});
const labelKey = (0, vue.computed)(() => {
return props.props?.label || TreeOptionsEnum.LABEL;
});
const flattenTree = (0, vue.computed)(() => {
const expandedKeys = expandedKeySet.value;
const hiddenKeys = hiddenNodeKeySet.value;
const flattenNodes = [];
const nodes = tree.value?.treeNodes || [];
const stack = [];
for (let i = nodes.length - 1; i >= 0; --i) stack.push(nodes[i]);
while (stack.length) {
const node = stack.pop();
if (hiddenKeys.has(node.key)) continue;
flattenNodes.push(node);
if (node.children && expandedKeys.has(node.key)) for (let i = node.children.length - 1; i >= 0; --i) stack.push(node.children[i]);
}
return flattenNodes;
});
const isNotEmpty = (0, vue.computed)(() => {
return flattenTree.value.length > 0;
});
function createTree(data) {
const treeNodeMap = /* @__PURE__ */ new Map();
const levelTreeNodeMap = /* @__PURE__ */ new Map();
let maxLevel = 1;
function traverse(nodes, level = 1, parent = void 0) {
const siblings = [];
for (const rawNode of nodes) {
const value = getKey(rawNode);
const node = {
level,
key: value,
data: rawNode
};
node.label = getLabel(rawNode);
node.parent = parent;
const children = getChildren(rawNode);
node.disabled = getDisabled(rawNode);
node.isLeaf = !children || children.length === 0;
node.expanded = expandedKeySet.value.has(value);
if (children && children.length) node.children = traverse(children, level + 1, node);
siblings.push(node);
treeNodeMap.set(value, node);
if (!levelTreeNodeMap.has(level)) levelTreeNodeMap.set(level, []);
levelTreeNodeMap.get(level)?.push(node);
}
if (level > maxLevel) maxLevel = level;
return siblings;
}
const treeNodes = traverse(data);
return {
treeNodeMap,
levelTreeNodeMap,
maxLevel,
treeNodes
};
}
function filter(query) {
const keys = doFilter(query);
if (keys) expandedKeySet.value = keys;
}
function getChildren(node) {
return node[childrenKey.value];
}
function getKey(node) {
if (!node) return "";
return node[valueKey.value];
}
function getDisabled(node) {
return node[disabledKey.value];
}
function getLabel(node) {
return node[labelKey.value];
}
function toggleExpand(node) {
if (expandedKeySet.value.has(node.key)) collapseNode(node);
else expandNode(node);
}
function setExpandedKeys(keys) {
const expandedKeys = /* @__PURE__ */ new Set();
const nodeMap = tree.value.treeNodeMap;
expandedKeySet.value.forEach((key) => {
const node = nodeMap.get(key);
if (node) node.expanded = false;
});
keys.forEach((k) => {
let node = nodeMap.get(k);
while (node && !expandedKeys.has(node.key)) {
expandedKeys.add(node.key);
node.expanded = true;
node = node.parent;
}
});
expandedKeySet.value = expandedKeys;
}
function handleNodeClick(node, e) {
emit(NODE_CLICK, node.data, node, e);
handleCurrentChange(node);
if (props.expandOnClickNode) toggleExpand(node);
if (props.showCheckbox && (props.checkOnClickNode || node.isLeaf && props.checkOnClickLeaf) && !node.disabled) toggleCheckbox(node, !isChecked(node), true);
}
function handleNodeDrop(node, e) {
emit(NODE_DROP, node.data, node, e);
}
function handleCurrentChange(node) {
if (!isCurrent(node)) {
currentKey.value = node.key;
emit(CURRENT_CHANGE, node.data, node);
}
}
function handleNodeCheck(node, checked) {
toggleCheckbox(node, checked);
}
function expandNode(node) {
const keySet = expandedKeySet.value;
if (tree.value && props.accordion) {
const { treeNodeMap } = tree.value;
keySet.forEach((key) => {
const treeNode = treeNodeMap.get(key);
if (node && node.level === treeNode?.level) {
keySet.delete(key);
treeNode.expanded = false;
}
});
}
keySet.add(node.key);
const _node = getNode(node.key);
if (_node) {
_node.expanded = true;
emit(NODE_EXPAND, _node.data, _node);
}
}
function collapseNode(node) {
expandedKeySet.value.delete(node.key);
const _node = getNode(node.key);
if (_node) {
_node.expanded = false;
emit(NODE_COLLAPSE, _node.data, _node);
}
}
function isDisabled(node) {
return !!node.disabled;
}
function isCurrent(node) {
const current = currentKey.value;
return current !== void 0 && current === node.key;
}
function getCurrentNode() {
if (!currentKey.value) return void 0;
return tree.value?.treeNodeMap.get(currentKey.value)?.data;
}
function getCurrentKey() {
return currentKey.value;
}
function setCurrentKey(key) {
currentKey.value = key;
}
function setData(data) {
tree.value = createTree(data);
}
function getNode(data) {
const key = isObject$1(data) ? getKey(data) : data;
return tree.value?.treeNodeMap.get(key);
}
function scrollToNode(key, strategy = "auto") {
const node = getNode(key);
if (node && listRef.value) listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy);
}
function scrollTo(offset) {
listRef.value?.scrollTo(offset);
}
(0, vue.watch)(() => props.currentNodeKey, (key) => {
currentKey.value = key;
}, { immediate: true });
(0, vue.watch)(() => props.defaultExpandedKeys, (keys) => {
setExpandedKeys(keys || []);
});
(0, vue.watch)(() => props.data, (data) => {
setData(data);
setExpandedKeys(props.defaultExpandedKeys || []);
}, { immediate: true });
return {
tree,
flattenTree,
isNotEmpty,
listRef,
getKey,
getChildren,
toggleExpand,
toggleCheckbox,
isChecked,
isIndeterminate,
isDisabled,
isCurrent,
isForceHiddenExpandIcon,
handleNodeClick,
handleNodeDrop,
handleNodeCheck,
getCurrentNode,
getCurrentKey,
setCurrentKey,
getCheckedKeys,
getCheckedNodes,
getHalfCheckedKeys,
getHalfCheckedNodes,
setChecked,
setCheckedKeys,
filter,
setData,
getNode,
expandNode,
collapseNode,
setExpandedKeys,
scrollToNode,
scrollTo
};
}
//#endregion
//#region ../../packages/components/tree-v2/src/tree-node-content.ts
var tree_node_content_default = (0, vue.defineComponent)({
name: "ElTreeNodeContent",
props: treeNodeContentProps,
setup(props) {
const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY$1);
const ns = useNamespace("tree");
return () => {
const node = props.node;
const { data } = node;
return tree?.ctx.slots.default ? tree.ctx.slots.default({
node,
data
}) : (0, vue.h)(ElText, {
tag: "span",
truncated: true,
class: ns.be("node", "label")
}, () => [node?.label]);
};
}
});
//#endregion
//#region ../../packages/components/tree-v2/src/tree-node.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$11 = [
"aria-expanded",
"aria-disabled",
"aria-checked",
"data-key"
];
var tree_node_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTreeNode",
__name: "tree-node",
props: treeNodeProps,
emits: treeNodeEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY$1);
const ns = useNamespace("tree");
const indent = (0, vue.computed)(() => tree?.props.indent ?? 16);
const icon = (0, vue.computed)(() => tree?.props.icon ?? caret_right_default);
const getNodeClass = (node) => {
const nodeClassFunc = tree?.props.props?.class;
if (!nodeClassFunc) return {};
let className;
if (isFunction$1(nodeClassFunc)) {
const { data } = node;
className = nodeClassFunc(data, node);
} else className = nodeClassFunc;
return isString(className) ? { [className]: true } : className;
};
const handleClick = (e) => {
emit("click", props.node, e);
};
const handleDrop = (e) => {
emit("drop", props.node, e);
};
const handleExpandIconClick = () => {
emit("toggle", props.node);
};
const handleCheckChange = (value) => {
emit("check", props.node, value);
};
const handleContextMenu = (event) => {
if (tree?.instance?.vnode?.props?.["onNodeContextmenu"]) {
event.stopPropagation();
event.preventDefault();
}
tree?.ctx.emit(NODE_CONTEXTMENU, event, props.node?.data, props.node);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref: "node$",
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b("node"),
(0, vue.unref)(ns).is("expanded", __props.expanded),
(0, vue.unref)(ns).is("current", __props.current),
(0, vue.unref)(ns).is("focusable", !__props.disabled),
(0, vue.unref)(ns).is("checked", !__props.disabled && __props.checked),
getNodeClass(__props.node)
]),
role: "treeitem",
tabindex: "-1",
"aria-expanded": __props.expanded,
"aria-disabled": __props.disabled,
"aria-checked": __props.checked,
"data-key": __props.node?.key,
onClick: (0, vue.withModifiers)(handleClick, ["stop"]),
onContextmenu: handleContextMenu,
onDragover: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["prevent"])),
onDragenter: _cache[2] || (_cache[2] = (0, vue.withModifiers)(() => {}, ["prevent"])),
onDrop: (0, vue.withModifiers)(handleDrop, ["stop"])
}, [(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("node", "content")),
style: (0, vue.normalizeStyle)({
paddingLeft: `${(__props.node.level - 1) * indent.value}px`,
height: __props.itemSize + "px"
})
}, [
icon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).is("leaf", !!__props.node?.isLeaf),
(0, vue.unref)(ns).is("hidden", __props.hiddenExpandIcon),
{ expanded: !__props.node?.isLeaf && __props.expanded },
(0, vue.unref)(ns).be("node", "expand-icon")
]),
onClick: (0, vue.withModifiers)(handleExpandIconClick, ["stop"])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(icon.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
__props.showCheckbox ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
key: 1,
"model-value": __props.checked,
indeterminate: __props.indeterminate,
disabled: __props.disabled,
onChange: handleCheckChange,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, null, 8, [
"model-value",
"indeterminate",
"disabled"
])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createVNode)((0, vue.unref)(tree_node_content_default), { node: {
...__props.node,
expanded: __props.expanded
} }, null, 8, ["node"])
], 6)], 42, _hoisted_1$11);
};
}
});
//#endregion
//#region ../../packages/components/tree-v2/src/tree-node.vue
var tree_node_default = tree_node_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tree-v2/src/tree.vue?vue&type=script&setup=true&lang.ts
var tree_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTreeV2",
__name: "tree",
props: treeProps$1,
emits: treeEmits$1,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
const treeNodeSize = (0, vue.computed)(() => props.itemSize);
(0, vue.provide)(ROOT_TREE_INJECTION_KEY$1, {
ctx: {
emit,
slots
},
props,
instance: (0, vue.getCurrentInstance)()
});
(0, vue.provide)(formItemContextKey, void 0);
const { t } = useLocale();
const ns = useNamespace("tree");
const { flattenTree, isNotEmpty, listRef, toggleExpand, isIndeterminate, isChecked, isDisabled, isCurrent, isForceHiddenExpandIcon, handleNodeClick, handleNodeDrop, handleNodeCheck, toggleCheckbox, getCurrentNode, getCurrentKey, setCurrentKey, getCheckedKeys, getCheckedNodes, getHalfCheckedKeys, getHalfCheckedNodes, setChecked, setCheckedKeys, filter, setData, getNode, expandNode, collapseNode, setExpandedKeys, scrollToNode, scrollTo } = useTree(props, emit);
__expose({
toggleCheckbox,
getCurrentNode,
getCurrentKey,
setCurrentKey,
getCheckedKeys,
getCheckedNodes,
getHalfCheckedKeys,
getHalfCheckedNodes,
setChecked,
setCheckedKeys,
filter,
setData,
getNode,
expandNode,
collapseNode,
setExpandedKeys,
scrollToNode,
scrollTo
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), { [(0, vue.unref)(ns).m("highlight-current")]: __props.highlightCurrent }]),
role: "tree"
}, [(0, vue.unref)(isNotEmpty) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(FixedSizeList), {
key: 0,
ref_key: "listRef",
ref: listRef,
"class-name": (0, vue.unref)(ns).b("virtual-list"),
data: (0, vue.unref)(flattenTree),
total: (0, vue.unref)(flattenTree).length,
height: __props.height,
"item-size": treeNodeSize.value,
"perf-mode": __props.perfMode,
"scrollbar-always-on": __props.scrollbarAlwaysOn
}, {
default: (0, vue.withCtx)(({ data, index, style }) => [((0, vue.openBlock)(), (0, vue.createBlock)(tree_node_default, {
key: data[index].key,
style: (0, vue.normalizeStyle)(style),
node: data[index],
expanded: data[index].expanded,
"show-checkbox": __props.showCheckbox,
checked: (0, vue.unref)(isChecked)(data[index]),
indeterminate: (0, vue.unref)(isIndeterminate)(data[index]),
"item-size": treeNodeSize.value,
disabled: (0, vue.unref)(isDisabled)(data[index]),
current: (0, vue.unref)(isCurrent)(data[index]),
"hidden-expand-icon": (0, vue.unref)(isForceHiddenExpandIcon)(data[index]),
onClick: (0, vue.unref)(handleNodeClick),
onToggle: (0, vue.unref)(toggleExpand),
onCheck: (0, vue.unref)(handleNodeCheck),
onDrop: (0, vue.unref)(handleNodeDrop)
}, null, 8, [
"style",
"node",
"expanded",
"show-checkbox",
"checked",
"indeterminate",
"item-size",
"disabled",
"current",
"hidden-expand-icon",
"onClick",
"onToggle",
"onCheck",
"onDrop"
]))]),
_: 1
}, 8, [
"class-name",
"data",
"total",
"height",
"item-size",
"perf-mode",
"scrollbar-always-on"
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-block"))
}, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text")) }, (0, vue.toDisplayString)(__props.emptyText ?? (0, vue.unref)(t)("el.tree.emptyText")), 3)])], 2))], 2);
};
}
});
//#endregion
//#region ../../packages/components/tree-v2/src/tree.vue
var tree_default = tree_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tree-v2/index.ts
const ElTreeV2 = withInstall(tree_default);
//#endregion
//#region ../../packages/components/upload/src/ajax.ts
const SCOPE$3 = "ElUpload";
var UploadAjaxError = class extends Error {
constructor(message, status, method, url) {
super(message);
this.name = "UploadAjaxError";
this.status = status;
this.method = method;
this.url = url;
}
};
function getError(action, option, xhr) {
let msg;
if (xhr.response) msg = `${xhr.response.error || xhr.response}`;
else if (xhr.responseText) msg = `${xhr.responseText}`;
else msg = `fail to ${option.method} ${action} ${xhr.status}`;
return new UploadAjaxError(msg, xhr.status, option.method, action);
}
function getBody(xhr) {
const text = xhr.responseText || xhr.response;
if (!text) return text;
try {
return JSON.parse(text);
} catch {
return text;
}
}
const ajaxUpload = (option) => {
if (typeof XMLHttpRequest === "undefined") throwError(SCOPE$3, "XMLHttpRequest is undefined");
const xhr = new XMLHttpRequest();
const action = option.action;
if (xhr.upload) xhr.upload.addEventListener("progress", (evt) => {
const progressEvt = evt;
progressEvt.percent = evt.total > 0 ? evt.loaded / evt.total * 100 : 0;
option.onProgress(progressEvt);
});
const formData = new FormData();
if (option.data) for (const [key, value] of Object.entries(option.data)) if (isArray$1(value)) if (value.length === 2 && value[0] instanceof Blob && isString(value[1])) formData.append(key, value[0], value[1]);
else value.forEach((item) => {
formData.append(key, item);
});
else formData.append(key, value);
formData.append(option.filename, option.file, option.file.name);
xhr.addEventListener("error", () => {
option.onError(getError(action, option, xhr));
});
xhr.addEventListener("load", () => {
if (xhr.status < 200 || xhr.status >= 300) return option.onError(getError(action, option, xhr));
option.onSuccess(getBody(xhr));
});
xhr.open(option.method, action, true);
if (option.withCredentials && "withCredentials" in xhr) xhr.withCredentials = true;
const headers = option.headers || {};
if (headers instanceof Headers) headers.forEach((value, key) => xhr.setRequestHeader(key, value));
else for (const [key, value] of Object.entries(headers)) {
if (isNil(value)) continue;
xhr.setRequestHeader(key, String(value));
}
xhr.send(formData);
return xhr;
};
//#endregion
//#region ../../packages/components/upload/src/upload.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
const uploadListTypes = [
"text",
"picture",
"picture-card"
];
let fileId = 1;
const genFileId = () => Date.now() + fileId++;
/**
* @deprecated Removed after 3.0.0, Use `UploadBaseProps` instead.
*/
const uploadBaseProps = buildProps({
action: {
type: String,
default: "#"
},
headers: { type: definePropType(Object) },
method: {
type: String,
default: "post"
},
data: {
type: definePropType([
Object,
Function,
Promise
]),
default: () => mutable({})
},
multiple: Boolean,
name: {
type: String,
default: "file"
},
drag: Boolean,
withCredentials: Boolean,
showFileList: {
type: Boolean,
default: true
},
accept: {
type: String,
default: ""
},
fileList: {
type: definePropType(Array),
default: () => mutable([])
},
autoUpload: {
type: Boolean,
default: true
},
listType: {
type: String,
values: uploadListTypes,
default: "text"
},
httpRequest: {
type: definePropType(Function),
default: ajaxUpload
},
disabled: {
type: Boolean,
default: void 0
},
limit: Number,
directory: Boolean
});
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
const uploadProps = buildProps({
...uploadBaseProps,
beforeUpload: {
type: definePropType(Function),
default: NOOP
},
beforeRemove: { type: definePropType(Function) },
onRemove: {
type: definePropType(Function),
default: NOOP
},
onChange: {
type: definePropType(Function),
default: NOOP
},
onPreview: {
type: definePropType(Function),
default: NOOP
},
onSuccess: {
type: definePropType(Function),
default: NOOP
},
onProgress: {
type: definePropType(Function),
default: NOOP
},
onError: {
type: definePropType(Function),
default: NOOP
},
onExceed: {
type: definePropType(Function),
default: NOOP
},
crossorigin: { type: definePropType(String) }
});
const uploadBasePropsDefaults = {
action: "#",
method: "post",
data: () => mutable({}),
name: "file",
showFileList: true,
accept: "",
fileList: () => mutable([]),
autoUpload: true,
listType: "text",
httpRequest: ajaxUpload,
disabled: void 0
};
const uploadPropsDefaults = {
...uploadBasePropsDefaults,
beforeUpload: NOOP,
onRemove: NOOP,
onChange: NOOP,
onPreview: NOOP,
onSuccess: NOOP,
onProgress: NOOP,
onError: NOOP,
onExceed: NOOP
};
//#endregion
//#region ../../packages/components/upload/src/constants.ts
const uploadContextKey = Symbol("uploadContextKey");
//#endregion
//#region ../../packages/components/upload/src/upload-list.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadListProps` instead.
*/
const uploadListProps = buildProps({
files: {
type: definePropType(Array),
default: () => mutable([])
},
disabled: {
type: Boolean,
default: void 0
},
handlePreview: {
type: definePropType(Function),
default: NOOP
},
listType: {
type: String,
values: uploadListTypes,
default: "text"
},
crossorigin: { type: definePropType(String) }
});
const uploadListEmits = { remove: (file) => !!file };
//#endregion
//#region ../../packages/components/upload/src/upload-list.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$10 = [
"tabindex",
"aria-disabled",
"onKeydown"
];
const _hoisted_2$6 = ["src", "crossorigin"];
const _hoisted_3$2 = ["onClick"];
const _hoisted_4$1 = ["title"];
const _hoisted_5 = ["onClick"];
const _hoisted_6 = ["onClick"];
var upload_list_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUploadList",
__name: "upload-list",
props: uploadListProps,
emits: uploadListEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale();
const nsUpload = useNamespace("upload");
const nsIcon = useNamespace("icon");
const nsList = useNamespace("list");
const disabled = useFormDisabled();
const focusing = (0, vue.ref)(false);
const containerKls = (0, vue.computed)(() => [
nsUpload.b("list"),
nsUpload.bm("list", props.listType),
nsUpload.is("disabled", disabled.value)
]);
const handleRemove = (file) => {
emit("remove", file);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.TransitionGroup, {
tag: "ul",
class: (0, vue.normalizeClass)(containerKls.value),
name: (0, vue.unref)(nsList).b()
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.files, (file, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: file.uid || file.name,
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsUpload).be("list", "item"),
(0, vue.unref)(nsUpload).is(file.status),
{ focusing: focusing.value }
]),
tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
"aria-disabled": (0, vue.unref)(disabled),
role: "button",
onKeydown: (0, vue.withKeys)(($event) => !(0, vue.unref)(disabled) && handleRemove(file), ["delete"]),
onFocus: _cache[0] || (_cache[0] = ($event) => focusing.value = true),
onBlur: _cache[1] || (_cache[1] = ($event) => focusing.value = false),
onClick: _cache[2] || (_cache[2] = ($event) => focusing.value = false)
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {
file,
index
}, () => [
__props.listType === "picture" || file.status !== "uploading" && __props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-thumbnail")),
src: file.url,
crossorigin: __props.crossorigin,
alt: ""
}, null, 10, _hoisted_2$6)) : (0, vue.createCommentVNode)("v-if", true),
file.status === "uploading" || __props.listType !== "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-info"))
}, [(0, vue.createElementVNode)("a", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-name")),
onClick: (0, vue.withModifiers)(($event) => __props.handlePreview(file), ["prevent"])
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("document")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(document_default))]),
_: 1
}, 8, ["class"]), (0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-file-name")),
title: file.name
}, (0, vue.toDisplayString)(file.name), 11, _hoisted_4$1)], 10, _hoisted_3$2), file.status === "uploading" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElProgress), {
key: 0,
type: __props.listType === "picture-card" ? "circle" : "line",
"stroke-width": __props.listType === "picture-card" ? 6 : 2,
percentage: Number(file.percentage),
style: (0, vue.normalizeStyle)(__props.listType === "picture-card" ? "" : "margin-top: 0.5rem")
}, null, 8, [
"type",
"stroke-width",
"percentage",
"style"
])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("label", { class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-status-label")) }, [__props.listType === "text" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("circle-check")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(circle_check_default))]),
_: 1
}, 8, ["class"])) : ["picture-card", "picture"].includes(__props.listType) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("check")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 2),
!(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close")),
"aria-label": (0, vue.unref)(t)("el.upload.delete"),
role: "button",
tabindex: "0",
onClick: ($event) => handleRemove(file),
onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(($event) => handleRemove(file), ["prevent"]), ["enter", "space"])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
_: 1
}, 8, [
"class",
"aria-label",
"onClick",
"onKeydown"
])) : (0, vue.createCommentVNode)("v-if", true),
!(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("i", {
key: 3,
class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close-tip"))
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.upload.deleteTip")), 3)) : (0, vue.createCommentVNode)("v-if", true),
__props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 4,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-actions"))
}, [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-preview")),
onClick: ($event) => __props.handlePreview(file)
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("zoom-in")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_in_default))]),
_: 1
}, 8, ["class"])], 10, _hoisted_5), !(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-delete")),
onClick: ($event) => handleRemove(file)
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("delete")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(delete_default))]),
_: 1
}, 8, ["class"])], 10, _hoisted_6)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)
])], 42, _hoisted_1$10);
}), 128)), (0, vue.renderSlot)(_ctx.$slots, "append")]),
_: 3
}, 8, ["class", "name"]);
};
}
});
//#endregion
//#region ../../packages/components/upload/src/upload-list.vue
var upload_list_default = upload_list_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/upload/src/upload-content.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.
*/
const uploadContentProps = buildProps({
...uploadBaseProps,
beforeUpload: {
type: definePropType(Function),
default: NOOP
},
onRemove: {
type: definePropType(Function),
default: NOOP
},
onStart: {
type: definePropType(Function),
default: NOOP
},
onSuccess: {
type: definePropType(Function),
default: NOOP
},
onProgress: {
type: definePropType(Function),
default: NOOP
},
onError: {
type: definePropType(Function),
default: NOOP
},
onExceed: {
type: definePropType(Function),
default: NOOP
}
});
const uploadContentPropsDefaults = {
...uploadBasePropsDefaults,
beforeUpload: NOOP,
onRemove: NOOP,
onStart: NOOP,
onSuccess: NOOP,
onProgress: NOOP,
onError: NOOP,
onExceed: NOOP
};
//#endregion
//#region ../../packages/components/upload/src/upload-dragger.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.
*/
const uploadDraggerProps = buildProps({
disabled: {
type: Boolean,
default: void 0
},
directory: Boolean
});
const uploadDraggerEmits = { file: (file) => isArray$1(file) };
//#endregion
//#region ../../packages/components/upload/src/upload-dragger.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME$1 = "ElUploadDrag";
var upload_dragger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME$1,
__name: "upload-dragger",
props: uploadDraggerProps,
emits: uploadDraggerEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
if (!(0, vue.inject)(uploadContextKey)) throwError(COMPONENT_NAME$1, "usage: <el-upload><el-upload-dragger /></el-upload>");
const ns = useNamespace("upload");
const dragover = (0, vue.ref)(false);
const disabled = useFormDisabled();
const getFile = (entry) => {
return new Promise((resolve, reject) => entry.file(resolve, reject));
};
const getAllFiles = async (entry) => {
try {
if (entry.isFile) {
const file = await getFile(entry);
file.isDirectory = false;
return [file];
}
if (entry.isDirectory) {
const dirReader = entry.createReader();
const getEntries = () => {
return new Promise((resolve, reject) => dirReader.readEntries(resolve, reject));
};
const entries = [];
let readEntries = await getEntries();
/**
* In Chromium-based browsers, readEntries() will only return the first 100 FileSystemEntry instances.
* https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries#:~:text=In%20Chromium%2Dbased%20browsers%2C%20readEntries()%20will%20only%20return%20the%20first%20100%20FileSystemEntry%20instances.%20In%20order%20to%20obtain%20all%20of%20the%20instances%2C%20readEntries()%20must%20be%20called%20multiple%20times.
*/
while (readEntries.length > 0) {
entries.push(...readEntries);
readEntries = await getEntries();
}
const filePromises = entries.map((entry) => getAllFiles(entry).catch(() => []));
return flatten(await Promise.all(filePromises));
}
} catch {
return [];
}
return [];
};
const onDrop = async (e) => {
if (disabled.value) return;
dragover.value = false;
e.stopPropagation();
const files = Array.from(e.dataTransfer.files);
const items = e.dataTransfer.items || [];
if (props.directory) {
const entries = Array.from(items).map((item) => item?.webkitGetAsEntry?.()).filter((entry) => entry);
emit("file", flatten(await Promise.all(entries.map(getAllFiles))));
return;
}
files.forEach((file, index) => {
const entry = items[index]?.webkitGetAsEntry?.();
if (entry) file.isDirectory = entry.isDirectory;
});
emit("file", files);
};
const onDragover = () => {
if (!disabled.value) dragover.value = true;
};
const onDragleave = (e) => {
if (!e.currentTarget.contains(e.relatedTarget)) dragover.value = false;
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("dragger"), (0, vue.unref)(ns).is("dragover", dragover.value)]),
onDrop: (0, vue.withModifiers)(onDrop, ["prevent"]),
onDragover: (0, vue.withModifiers)(onDragover, ["prevent"]),
onDragleave: (0, vue.withModifiers)(onDragleave, ["prevent"])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 34);
};
}
});
//#endregion
//#region ../../packages/components/upload/src/upload-dragger.vue
var upload_dragger_default = upload_dragger_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/upload/src/upload-content.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$9 = [
"tabindex",
"aria-disabled",
"onKeydown"
];
const _hoisted_2$5 = [
"name",
"disabled",
"multiple",
"accept",
"webkitdirectory"
];
var upload_content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUploadContent",
inheritAttrs: false,
__name: "upload-content",
props: uploadContentProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("upload");
const disabled = useFormDisabled();
const requests = (0, vue.shallowRef)({});
const inputRef = (0, vue.shallowRef)();
const uploadFiles = (files) => {
if (files.length === 0) return;
const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props;
if (limit && fileList.length + files.length > limit) {
onExceed(files, fileList);
return;
}
if (!multiple) files = files.slice(0, 1);
for (const file of files) {
const rawFile = file;
rawFile.uid = genFileId();
onStart(rawFile);
if (autoUpload) upload(rawFile);
}
};
const upload = async (rawFile) => {
inputRef.value.value = "";
if (!props.beforeUpload) return doUpload(rawFile);
let hookResult;
let beforeData = {};
try {
const originData = props.data;
const beforeUploadPromise = props.beforeUpload(rawFile);
beforeData = isPlainObject$1(props.data) ? cloneDeep(props.data) : props.data;
hookResult = await beforeUploadPromise;
if (isPlainObject$1(props.data) && isEqual$1(originData, beforeData)) beforeData = cloneDeep(props.data);
} catch {
hookResult = false;
}
if (hookResult === false) {
props.onRemove(rawFile);
return;
}
let file = rawFile;
if (hookResult instanceof Blob) if (hookResult instanceof File) file = hookResult;
else file = new File([hookResult], rawFile.name, { type: rawFile.type });
doUpload(Object.assign(file, { uid: rawFile.uid }), beforeData);
};
const resolveData = async (data, rawFile) => {
if (isFunction$1(data)) return data(rawFile);
return data;
};
const doUpload = async (rawFile, beforeData) => {
const { headers, data, method, withCredentials, name: filename, action, onProgress, onSuccess, onError, httpRequest } = props;
try {
beforeData = await resolveData(beforeData ?? data, rawFile);
} catch {
props.onRemove(rawFile);
return;
}
const { uid } = rawFile;
const options = {
headers: headers || {},
withCredentials,
file: rawFile,
data: beforeData,
method,
filename,
action,
onProgress: (evt) => {
onProgress(evt, rawFile);
},
onSuccess: (res) => {
onSuccess(res, rawFile);
delete requests.value[uid];
},
onError: (err) => {
onError(err, rawFile);
delete requests.value[uid];
}
};
const request = httpRequest(options);
requests.value[uid] = request;
if (request instanceof Promise) request.then(options.onSuccess, options.onError);
};
const handleChange = (e) => {
const files = e.target.files;
if (!files) return;
uploadFiles(Array.from(files));
};
const handleClick = () => {
if (!disabled.value) {
inputRef.value.value = "";
inputRef.value.click();
}
};
const handleKeydown = () => {
handleClick();
};
const abort = (file) => {
entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true).forEach(([uid, req]) => {
if (req instanceof XMLHttpRequest) req.abort();
delete requests.value[uid];
});
};
__expose({
abort,
upload
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).m(__props.listType),
(0, vue.unref)(ns).is("drag", __props.drag),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled))
]),
tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
"aria-disabled": (0, vue.unref)(disabled),
role: "button",
onClick: handleClick,
onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(handleKeydown, ["self"]), ["enter", "space"])
}, [__props.drag ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_dragger_default, {
key: 0,
disabled: (0, vue.unref)(disabled),
directory: __props.directory,
onFile: uploadFiles
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["disabled", "directory"])) : (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }), (0, vue.createElementVNode)("input", {
ref_key: "inputRef",
ref: inputRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
name: __props.name,
disabled: (0, vue.unref)(disabled),
multiple: __props.multiple,
accept: __props.accept,
webkitdirectory: __props.directory || void 0,
type: "file",
onChange: handleChange,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, null, 42, _hoisted_2$5)], 42, _hoisted_1$9);
};
}
});
//#endregion
//#region ../../packages/components/upload/src/upload-content.vue
var upload_content_default = upload_content_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/upload/src/use-handlers.ts
const SCOPE$2 = "ElUpload";
const revokeFileObjectURL = (file) => {
if (file.url?.startsWith("blob:")) URL.revokeObjectURL(file.url);
};
const useHandlers = (props, uploadRef) => {
const uploadFiles = useVModel(props, "fileList", void 0, { passive: true });
const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid);
function abort(file) {
uploadRef.value?.abort(file);
}
function clearFiles(states = [
"ready",
"uploading",
"success",
"fail"
]) {
uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status));
}
function removeFile(file) {
uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile.uid !== file.uid);
}
const emitChange = (file) => {
(0, vue.nextTick)(() => props.onChange(file, uploadFiles.value));
};
const handleError = (err, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
console.error(err);
file.status = "fail";
removeFile(file);
props.onError(err, file, uploadFiles.value);
emitChange(file);
};
const handleProgress = (evt, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
props.onProgress(evt, file, uploadFiles.value);
file.status = "uploading";
file.percentage = Math.round(evt.percent);
};
const handleSuccess = (response, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
file.status = "success";
file.response = response;
props.onSuccess(response, file, uploadFiles.value);
emitChange(file);
};
const handleStart = (file) => {
if (isNil(file.uid)) file.uid = genFileId();
const uploadFile = {
name: file.name,
percentage: 0,
status: "ready",
size: file.size,
raw: file,
uid: file.uid
};
if (props.listType === "picture-card" || props.listType === "picture") try {
uploadFile.url = URL.createObjectURL(file);
} catch (err) {
/* @__PURE__ */ debugWarn(SCOPE$2, err.message);
props.onError(err, uploadFile, uploadFiles.value);
}
uploadFiles.value = [...uploadFiles.value, uploadFile];
emitChange(uploadFile);
};
const handleRemove = async (file) => {
const uploadFile = file instanceof File ? getFile(file) : file;
if (!uploadFile) throwError(SCOPE$2, "file to be removed not found");
const doRemove = (file) => {
abort(file);
removeFile(file);
props.onRemove(file, uploadFiles.value);
revokeFileObjectURL(file);
};
if (props.beforeRemove) {
if (await props.beforeRemove(uploadFile, uploadFiles.value) !== false) doRemove(uploadFile);
} else doRemove(uploadFile);
};
function submit() {
uploadFiles.value.filter(({ status }) => status === "ready").forEach(({ raw }) => raw && uploadRef.value?.upload(raw));
}
(0, vue.watch)(() => props.listType, (val) => {
if (val !== "picture-card" && val !== "picture") return;
uploadFiles.value = uploadFiles.value.map((file) => {
const { raw, url } = file;
if (!url && raw) try {
file.url = URL.createObjectURL(raw);
} catch (err) {
props.onError(err, file, uploadFiles.value);
}
return file;
});
});
(0, vue.watch)(uploadFiles, (files) => {
for (const file of files) {
file.uid ||= genFileId();
file.status ||= "success";
}
}, {
immediate: true,
deep: true
});
return {
uploadFiles,
abort,
clearFiles,
handleError,
handleProgress,
handleStart,
handleSuccess,
handleRemove,
submit,
revokeFileObjectURL
};
};
//#endregion
//#region ../../packages/components/upload/src/upload.vue?vue&type=script&setup=true&lang.ts
var upload_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUpload",
__name: "upload",
props: uploadProps,
setup(__props, { expose: __expose }) {
const props = __props;
const disabled = useFormDisabled();
const uploadRef = (0, vue.shallowRef)();
const { abort, submit, clearFiles, uploadFiles, handleStart, handleError, handleRemove, handleSuccess, handleProgress, revokeFileObjectURL } = useHandlers(props, uploadRef);
const isPictureCard = (0, vue.computed)(() => props.listType === "picture-card");
const uploadContentProps = (0, vue.computed)(() => ({
...props,
fileList: uploadFiles.value,
onStart: handleStart,
onProgress: handleProgress,
onSuccess: handleSuccess,
onError: handleError,
onRemove: handleRemove
}));
(0, vue.onBeforeUnmount)(() => {
uploadFiles.value.forEach(revokeFileObjectURL);
});
(0, vue.provide)(uploadContextKey, { accept: (0, vue.toRef)(props, "accept") });
__expose({
abort,
submit,
clearFiles,
handleStart,
handleRemove
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", null, [
isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_list_default, {
key: 0,
disabled: (0, vue.unref)(disabled),
"list-type": __props.listType,
files: (0, vue.unref)(uploadFiles),
crossorigin: __props.crossorigin,
"handle-preview": __props.onPreview,
onRemove: (0, vue.unref)(handleRemove)
}, (0, vue.createSlots)({
append: (0, vue.withCtx)(() => [(0, vue.createVNode)(upload_content_default, (0, vue.mergeProps)({
ref_key: "uploadRef",
ref: uploadRef
}, uploadContentProps.value), {
default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16)]),
_: 2
}, [_ctx.$slots.file ? {
name: "default",
fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
file,
index
})]),
key: "0"
} : void 0]), 1032, [
"disabled",
"list-type",
"files",
"crossorigin",
"handle-preview",
"onRemove"
])) : (0, vue.createCommentVNode)("v-if", true),
!isPictureCard.value || isPictureCard.value && !__props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_content_default, (0, vue.mergeProps)({
key: 1,
ref_key: "uploadRef",
ref: uploadRef
}, uploadContentProps.value), {
default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 2 }) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.renderSlot)(_ctx.$slots, "tip"),
!isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_list_default, {
key: 3,
disabled: (0, vue.unref)(disabled),
"list-type": __props.listType,
files: (0, vue.unref)(uploadFiles),
crossorigin: __props.crossorigin,
"handle-preview": __props.onPreview,
onRemove: (0, vue.unref)(handleRemove)
}, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots.file ? {
name: "default",
fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
file,
index
})]),
key: "0"
} : void 0]), 1032, [
"disabled",
"list-type",
"files",
"crossorigin",
"handle-preview",
"onRemove"
])) : (0, vue.createCommentVNode)("v-if", true)
]);
};
}
});
//#endregion
//#region ../../packages/components/upload/src/upload.vue
var upload_default = upload_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/upload/index.ts
const ElUpload = withInstall(upload_default);
//#endregion
//#region ../../packages/components/watermark/src/watermark.ts
/**
* @deprecated Removed after 3.0.0, Use `WatermarkProps` instead.
*/
const watermarkProps = buildProps({
zIndex: {
type: Number,
default: 9
},
rotate: {
type: Number,
default: -22
},
width: Number,
height: Number,
image: String,
content: {
type: definePropType([String, Array]),
default: "Element Plus"
},
font: { type: definePropType(Object) },
gap: {
type: definePropType(Array),
default: () => [100, 100]
},
offset: { type: definePropType(Array) }
});
//#endregion
//#region ../../packages/components/watermark/src/utils.ts
/** converting camel-cased strings to be lowercase and link it with Separator */
function toLowercaseSeparator(key) {
return key.replace(/([A-Z])/g, "-$1").toLowerCase();
}
function getStyleStr(style) {
return Object.keys(style).map((key) => `${toLowercaseSeparator(key)}: ${style[key]};`).join(" ");
}
/** Returns the ratio of the device's physical pixel resolution to the css pixel resolution */
function getPixelRatio() {
return window.devicePixelRatio || 1;
}
/** Whether to re-render the watermark */
const reRendering = (mutation, watermarkElement) => {
let flag = false;
if (mutation.removedNodes.length && watermarkElement) flag = Array.from(mutation.removedNodes).includes(watermarkElement);
if (mutation.type === "attributes" && mutation.target === watermarkElement) flag = true;
return flag;
};
//#endregion
//#region ../../packages/components/watermark/src/useClips.ts
const TEXT_ALIGN_RATIO_MAP = {
left: [0, .5],
start: [0, .5],
center: [.5, 0],
right: [1, -.5],
end: [1, -.5]
};
function prepareCanvas(width, height, ratio = 1) {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
const realWidth = width * ratio;
const realHeight = height * ratio;
canvas.setAttribute("width", `${realWidth}px`);
canvas.setAttribute("height", `${realHeight}px`);
ctx.save();
return [
ctx,
canvas,
realWidth,
realHeight
];
}
/**
* Get the clips of text content.
* This is a lazy hook function since SSR no need this
*/
function useClips() {
function getClips(content, rotate, ratio, width, height, font, gapX, gapY, space) {
const [ctx, canvas, contentWidth, contentHeight] = prepareCanvas(width, height, ratio);
let baselineOffset = 0;
if (content instanceof HTMLImageElement) ctx.drawImage(content, 0, 0, contentWidth, contentHeight);
else {
const { color, fontSize, fontStyle, fontWeight, fontFamily, textAlign, textBaseline } = font;
const mergedFontSize = Number(fontSize) * ratio;
ctx.font = `${fontStyle} normal ${fontWeight} ${mergedFontSize}px/${height}px ${fontFamily}`;
ctx.fillStyle = color;
ctx.textAlign = textAlign;
ctx.textBaseline = textBaseline;
const contents = isArray$1(content) ? content : [content];
if (textBaseline !== "top" && contents[0]) {
const argumentMetrics = ctx.measureText(contents[0]);
ctx.textBaseline = "top";
const topMetrics = ctx.measureText(contents[0]);
baselineOffset = argumentMetrics.actualBoundingBoxAscent - topMetrics.actualBoundingBoxAscent;
}
contents?.forEach((item, index) => {
const [alignRatio, spaceRatio] = TEXT_ALIGN_RATIO_MAP[textAlign];
ctx.fillText(item ?? "", contentWidth * alignRatio + space * spaceRatio, index * (mergedFontSize + font.fontGap * ratio));
});
}
const angle = Math.PI / 180 * Number(rotate);
const maxSize = Math.max(width, height);
const [rCtx, rCanvas, realMaxSize] = prepareCanvas(maxSize, maxSize, ratio);
rCtx.translate(realMaxSize / 2, realMaxSize / 2);
rCtx.rotate(angle);
if (contentWidth > 0 && contentHeight > 0) rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2);
function getRotatePos(x, y) {
return [x * Math.cos(angle) - y * Math.sin(angle), x * Math.sin(angle) + y * Math.cos(angle)];
}
let left = 0;
let right = 0;
let top = 0;
let bottom = 0;
const halfWidth = contentWidth / 2;
const halfHeight = contentHeight / 2;
[
[0 - halfWidth, 0 - halfHeight],
[0 + halfWidth, 0 - halfHeight],
[0 + halfWidth, 0 + halfHeight],
[0 - halfWidth, 0 + halfHeight]
].forEach(([x, y]) => {
const [targetX, targetY] = getRotatePos(x, y);
left = Math.min(left, targetX);
right = Math.max(right, targetX);
top = Math.min(top, targetY);
bottom = Math.max(bottom, targetY);
});
const cutLeft = left + realMaxSize / 2;
const cutTop = top + realMaxSize / 2;
const cutWidth = right - left;
const cutHeight = bottom - top;
const realGapX = gapX * ratio;
const realGapY = gapY * ratio;
const filledWidth = (cutWidth + realGapX) * 2;
const filledHeight = cutHeight + realGapY;
const [fCtx, fCanvas] = prepareCanvas(filledWidth, filledHeight);
function drawImg(targetX = 0, targetY = 0) {
fCtx.drawImage(rCanvas, cutLeft, cutTop, cutWidth, cutHeight, targetX, targetY + baselineOffset, cutWidth, cutHeight);
}
drawImg();
drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2);
drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2);
return [
fCanvas.toDataURL(),
filledWidth / ratio,
filledHeight / ratio
];
}
return getClips;
}
//#endregion
//#region ../../packages/components/watermark/src/watermark.vue?vue&type=script&setup=true&lang.ts
var watermark_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElWatermark",
__name: "watermark",
props: watermarkProps,
setup(__props) {
const style = { position: "relative" };
const props = __props;
const fontGap = (0, vue.computed)(() => props.font?.fontGap ?? 3);
const color = (0, vue.computed)(() => props.font?.color ?? "rgba(0,0,0,.15)");
const fontSize = (0, vue.computed)(() => props.font?.fontSize ?? 16);
const fontWeight = (0, vue.computed)(() => props.font?.fontWeight ?? "normal");
const fontStyle = (0, vue.computed)(() => props.font?.fontStyle ?? "normal");
const fontFamily = (0, vue.computed)(() => props.font?.fontFamily ?? "sans-serif");
const textAlign = (0, vue.computed)(() => props.font?.textAlign ?? "center");
const textBaseline = (0, vue.computed)(() => props.font?.textBaseline ?? "hanging");
const gapX = (0, vue.computed)(() => props.gap[0]);
const gapY = (0, vue.computed)(() => props.gap[1]);
const gapXCenter = (0, vue.computed)(() => gapX.value / 2);
const gapYCenter = (0, vue.computed)(() => gapY.value / 2);
const offsetLeft = (0, vue.computed)(() => props.offset?.[0] ?? gapXCenter.value);
const offsetTop = (0, vue.computed)(() => props.offset?.[1] ?? gapYCenter.value);
const getMarkStyle = () => {
const markStyle = {
zIndex: props.zIndex,
position: "absolute",
left: 0,
top: 0,
width: "100%",
height: "100%",
pointerEvents: "none",
backgroundRepeat: "repeat"
};
/** Calculate the style of the offset */
let positionLeft = offsetLeft.value - gapXCenter.value;
let positionTop = offsetTop.value - gapYCenter.value;
if (positionLeft > 0) {
markStyle.left = `${positionLeft}px`;
markStyle.width = `calc(100% - ${positionLeft}px)`;
positionLeft = 0;
}
if (positionTop > 0) {
markStyle.top = `${positionTop}px`;
markStyle.height = `calc(100% - ${positionTop}px)`;
positionTop = 0;
}
markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`;
return markStyle;
};
const containerRef = (0, vue.shallowRef)(null);
const watermarkRef = (0, vue.shallowRef)();
const stopObservation = (0, vue.ref)(false);
const destroyWatermark = () => {
if (watermarkRef.value) {
watermarkRef.value.remove();
watermarkRef.value = void 0;
}
};
const appendWatermark = (base64Url, markWidth) => {
if (containerRef.value && watermarkRef.value) {
stopObservation.value = true;
watermarkRef.value.setAttribute("style", getStyleStr({
...getMarkStyle(),
backgroundImage: `url('${base64Url}')`,
backgroundSize: `${Math.floor(markWidth)}px`
}));
containerRef.value?.append(watermarkRef.value);
setTimeout(() => {
stopObservation.value = false;
});
}
};
/**
* Get the width and height of the watermark. The default values are as follows
* Image: [120, 64]; Content: It's calculated by content;
*/
const getMarkSize = (ctx) => {
let defaultWidth = 120;
let defaultHeight = 64;
let space = 0;
const { image, content, width, height, rotate } = props;
if (!image && ctx.measureText) {
ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`;
const contents = isArray$1(content) ? content : [content];
let maxWidth = 0;
let maxHeight = 0;
contents.forEach((item) => {
const { width, fontBoundingBoxAscent, fontBoundingBoxDescent, actualBoundingBoxAscent, actualBoundingBoxDescent } = ctx.measureText(item);
const height = isUndefined(fontBoundingBoxAscent) ? actualBoundingBoxAscent + actualBoundingBoxDescent : fontBoundingBoxAscent + fontBoundingBoxDescent;
if (width > maxWidth) maxWidth = Math.ceil(width);
if (height > maxHeight) maxHeight = Math.ceil(height);
});
defaultWidth = maxWidth;
defaultHeight = maxHeight * contents.length + (contents.length - 1) * fontGap.value;
const angle = Math.PI / 180 * Number(rotate);
space = Math.ceil(Math.abs(Math.sin(angle) * defaultHeight) / 2);
defaultWidth += space;
}
return [
width ?? defaultWidth,
height ?? defaultHeight,
space
];
};
const getClips = useClips();
const renderWatermark = () => {
const ctx = document.createElement("canvas").getContext("2d");
const image = props.image;
const content = props.content;
const rotate = props.rotate;
if (ctx) {
if (!watermarkRef.value) watermarkRef.value = document.createElement("div");
const ratio = getPixelRatio();
const [markWidth, markHeight, space] = getMarkSize(ctx);
const drawCanvas = (drawContent) => {
const [textClips, clipWidth] = getClips(drawContent || "", rotate, ratio, markWidth, markHeight, {
color: color.value,
fontSize: fontSize.value,
fontStyle: fontStyle.value,
fontWeight: fontWeight.value,
fontFamily: fontFamily.value,
fontGap: fontGap.value,
textAlign: textAlign.value,
textBaseline: textBaseline.value
}, gapX.value, gapY.value, space);
appendWatermark(textClips, clipWidth);
};
if (image) {
const img = new Image();
img.onload = () => {
drawCanvas(img);
};
img.onerror = () => {
drawCanvas(content);
};
img.crossOrigin = "anonymous";
img.referrerPolicy = "no-referrer";
img.src = image;
} else drawCanvas(content);
}
};
(0, vue.onMounted)(() => {
renderWatermark();
});
(0, vue.watch)(() => props, () => {
renderWatermark();
}, {
deep: true,
flush: "post"
});
(0, vue.onBeforeUnmount)(() => {
destroyWatermark();
});
const onMutate = (mutations) => {
if (stopObservation.value) return;
mutations.forEach((mutation) => {
if (reRendering(mutation, watermarkRef.value)) {
destroyWatermark();
renderWatermark();
}
});
};
useMutationObserver(containerRef, onMutate, {
attributes: true,
subtree: true,
childList: true
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "containerRef",
ref: containerRef,
style: (0, vue.normalizeStyle)([style])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 4);
};
}
});
//#endregion
//#region ../../packages/components/watermark/src/watermark.vue
var watermark_default = watermark_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/watermark/index.ts
const ElWatermark = withInstall(watermark_default);
//#endregion
//#region ../../packages/components/tour/src/content.ts
const tourStrategies = ["absolute", "fixed"];
const tourPlacements = [
"top-start",
"top-end",
"top",
"bottom-start",
"bottom-end",
"bottom",
"left-start",
"left-end",
"left",
"right-start",
"right-end",
"right"
];
/**
* @deprecated Removed after 3.0.0, Use `TourContentProps` instead.
*/
const tourContentProps = buildProps({
placement: {
type: definePropType(String),
values: tourPlacements,
default: "bottom"
},
reference: {
type: definePropType(Object),
default: null
},
strategy: {
type: definePropType(String),
values: tourStrategies,
default: "absolute"
},
offset: {
type: Number,
default: 10
},
showArrow: Boolean,
zIndex: {
type: Number,
default: 2001
}
});
const tourContentEmits = { close: () => true };
//#endregion
//#region ../../packages/components/tour/src/tour.ts
/**
* @deprecated Removed after 3.0.0, Use `TourProps` instead.
*/
const tourProps = buildProps({
modelValue: Boolean,
current: {
type: Number,
default: 0
},
showArrow: {
type: Boolean,
default: true
},
showClose: {
type: Boolean,
default: true
},
closeIcon: { type: iconPropType },
placement: tourContentProps.placement,
contentStyle: { type: definePropType([Object]) },
mask: {
type: definePropType([Boolean, Object]),
default: true
},
gap: {
type: definePropType(Object),
default: () => ({
offset: 6,
radius: 2
})
},
zIndex: { type: Number },
scrollIntoViewOptions: {
type: definePropType([Boolean, Object]),
default: () => ({ block: "center" })
},
type: { type: definePropType(String) },
appendTo: {
type: teleportProps.to.type,
default: "body"
},
closeOnPressEscape: {
type: Boolean,
default: true
},
targetAreaClickable: {
type: Boolean,
default: true
}
});
const tourEmits = {
[UPDATE_MODEL_EVENT]: (value) => isBoolean(value),
["update:current"]: (current) => isNumber(current),
close: (current) => isNumber(current),
finish: () => true,
change: (current) => isNumber(current)
};
//#endregion
//#region ../../packages/components/tour/src/mask.ts
/**
* @deprecated Removed after 3.0.0, Use `MaskProps` instead.
*/
const maskProps = buildProps({
zIndex: {
type: Number,
default: 1001
},
visible: Boolean,
fill: {
type: String,
default: "rgba(0,0,0,0.5)"
},
pos: { type: definePropType(Object) },
targetAreaClickable: {
type: Boolean,
default: true
}
});
//#endregion
//#region ../../packages/components/tour/src/helper.ts
const useTarget = (target, open, gap, mergedMask, scrollIntoViewOptions) => {
const posInfo = (0, vue.ref)(null);
const getTargetEl = () => {
let targetEl;
if (isString(target.value)) targetEl = document.querySelector(target.value);
else if (isFunction$1(target.value)) targetEl = target.value();
else targetEl = target.value;
return targetEl;
};
const updatePosInfo = () => {
const targetEl = getTargetEl();
if (!targetEl || !open.value) {
posInfo.value = null;
return;
}
if (!isInViewPort(targetEl)) targetEl.scrollIntoView(scrollIntoViewOptions.value);
const { left, top, width, height } = targetEl.getBoundingClientRect();
posInfo.value = {
left,
top,
width,
height,
radius: 0
};
};
(0, vue.onMounted)(() => {
(0, vue.watch)([open, target], () => {
updatePosInfo();
}, { immediate: true });
window.addEventListener("resize", updatePosInfo);
});
(0, vue.onBeforeUnmount)(() => {
window.removeEventListener("resize", updatePosInfo);
});
const getGapOffset = (index) => (isArray$1(gap.value.offset) ? gap.value.offset[index] : gap.value.offset) ?? 6;
const mergedPosInfo = (0, vue.computed)(() => {
if (!posInfo.value) return posInfo.value;
const gapOffsetX = getGapOffset(0);
const gapOffsetY = getGapOffset(1);
const gapRadius = gap.value?.radius || 2;
return {
left: posInfo.value.left - gapOffsetX,
top: posInfo.value.top - gapOffsetY,
width: posInfo.value.width + gapOffsetX * 2,
height: posInfo.value.height + gapOffsetY * 2,
radius: gapRadius
};
});
return {
mergedPosInfo,
triggerTarget: (0, vue.computed)(() => {
const targetEl = getTargetEl();
if (!mergedMask.value || !targetEl || !window.DOMRect) return targetEl || void 0;
return { getBoundingClientRect() {
return window.DOMRect.fromRect({
width: mergedPosInfo.value?.width || 0,
height: mergedPosInfo.value?.height || 0,
x: mergedPosInfo.value?.left || 0,
y: mergedPosInfo.value?.top || 0
});
} };
})
};
};
const tourKey = Symbol("ElTour");
function isInViewPort(element) {
const viewWidth = window.innerWidth || document.documentElement.clientWidth;
const viewHeight = window.innerHeight || document.documentElement.clientHeight;
const { top, right, bottom, left } = element.getBoundingClientRect();
return top >= 0 && left >= 0 && right <= viewWidth && bottom <= viewHeight;
}
const useFloating$1 = (referenceRef, contentRef, arrowRef, placement, strategy, offset$2, zIndex, showArrow) => {
const x = (0, vue.ref)();
const y = (0, vue.ref)();
const middlewareData = (0, vue.ref)({});
const states = {
x,
y,
placement,
strategy,
middlewareData
};
const middleware = (0, vue.computed)(() => {
const _middleware = [
offset((0, vue.unref)(offset$2)),
flip(),
shift(),
overflowMiddleware()
];
if ((0, vue.unref)(showArrow) && (0, vue.unref)(arrowRef)) _middleware.push(arrow({ element: (0, vue.unref)(arrowRef) }));
return _middleware;
});
const update = async () => {
if (!isClient) return;
const referenceEl = (0, vue.unref)(referenceRef);
const contentEl = (0, vue.unref)(contentRef);
if (!referenceEl || !contentEl) return;
const data = await computePosition(referenceEl, contentEl, {
placement: (0, vue.unref)(placement),
strategy: (0, vue.unref)(strategy),
middleware: (0, vue.unref)(middleware)
});
keysOf(states).forEach((key) => {
states[key].value = data[key];
});
};
const contentStyle = (0, vue.computed)(() => {
if (!(0, vue.unref)(referenceRef)) return {
position: "fixed",
top: "50%",
left: "50%",
transform: "translate3d(-50%, -50%, 0)",
maxWidth: "100vw",
zIndex: (0, vue.unref)(zIndex)
};
const { overflow } = (0, vue.unref)(middlewareData);
return {
position: (0, vue.unref)(strategy),
zIndex: (0, vue.unref)(zIndex),
top: (0, vue.unref)(y) != null ? `${(0, vue.unref)(y)}px` : "",
left: (0, vue.unref)(x) != null ? `${(0, vue.unref)(x)}px` : "",
maxWidth: overflow?.maxWidth ? `${overflow?.maxWidth}px` : ""
};
});
const arrowStyle = (0, vue.computed)(() => {
if (!(0, vue.unref)(showArrow)) return {};
const { arrow } = (0, vue.unref)(middlewareData);
return {
left: arrow?.x != null ? `${arrow?.x}px` : "",
top: arrow?.y != null ? `${arrow?.y}px` : ""
};
});
let cleanup;
(0, vue.onMounted)(() => {
const referenceEl = (0, vue.unref)(referenceRef);
const contentEl = (0, vue.unref)(contentRef);
if (referenceEl && contentEl) cleanup = autoUpdate(referenceEl, contentEl, update);
(0, vue.watchEffect)(() => {
update();
});
});
(0, vue.onBeforeUnmount)(() => {
cleanup && cleanup();
});
return {
update,
contentStyle,
arrowStyle
};
};
const overflowMiddleware = () => {
return {
name: "overflow",
async fn(state) {
const overflow = await detectOverflow(state);
let overWidth = 0;
if (overflow.left > 0) overWidth = overflow.left;
if (overflow.right > 0) overWidth = overflow.right;
return { data: { maxWidth: state.rects.floating.width - overWidth } };
}
};
};
//#endregion
//#region ../../packages/components/tour/src/mask.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$8 = { style: {
width: "100%",
height: "100%"
} };
const _hoisted_2$4 = ["d"];
var mask_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTourMask",
inheritAttrs: false,
__name: "mask",
props: maskProps,
setup(__props) {
const props = __props;
const { ns } = (0, vue.inject)(tourKey);
const radius = (0, vue.computed)(() => props.pos?.radius ?? 2);
const roundInfo = (0, vue.computed)(() => {
const v = radius.value;
const baseInfo = `a${v},${v} 0 0 1`;
return {
topRight: `${baseInfo} ${v},${v}`,
bottomRight: `${baseInfo} ${-v},${v}`,
bottomLeft: `${baseInfo} ${-v},${-v}`,
topLeft: `${baseInfo} ${v},${-v}`
};
});
const { width: windowWidth, height: windowHeight } = useWindowSize();
const path = (0, vue.computed)(() => {
const width = windowWidth.value;
const height = windowHeight.value;
const info = roundInfo.value;
const _path = `M${width},0 L0,0 L0,${height} L${width},${height} L${width},0 Z`;
const _radius = radius.value;
return props.pos ? `${_path} M${props.pos.left + _radius},${props.pos.top} h${props.pos.width - _radius * 2} ${info.topRight} v${props.pos.height - _radius * 2} ${info.bottomRight} h${-props.pos.width + _radius * 2} ${info.bottomLeft} v${-props.pos.height + _radius * 2} ${info.topLeft} z` : _path;
});
const maskStyle = (0, vue.computed)(() => ({
position: "fixed",
left: 0,
right: 0,
top: 0,
bottom: 0,
zIndex: props.zIndex,
pointerEvents: props.pos && props.targetAreaClickable ? "none" : "auto"
}));
const pathStyle = (0, vue.computed)(() => ({
fill: props.fill,
pointerEvents: "auto",
cursor: "auto"
}));
useLockscreen((0, vue.toRef)(props, "visible"), { ns });
return (_ctx, _cache) => {
return __props.visible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
key: 0,
class: (0, vue.unref)(ns).e("mask"),
style: maskStyle.value
}, _ctx.$attrs), [((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_1$8, [(0, vue.createElementVNode)("path", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hollow")),
style: (0, vue.normalizeStyle)(pathStyle.value),
d: path.value
}, null, 14, _hoisted_2$4)]))], 16)) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/tour/src/mask.vue
var mask_default = mask_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tour/src/content.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$7 = ["data-side"];
var content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTourContent",
__name: "content",
props: tourContentProps,
emits: tourContentEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const placement = (0, vue.ref)(props.placement);
const strategy = (0, vue.ref)(props.strategy);
const contentRef = (0, vue.ref)(null);
const arrowRef = (0, vue.ref)(null);
(0, vue.watch)(() => props.placement, () => {
placement.value = props.placement;
});
const { contentStyle, arrowStyle } = useFloating$1((0, vue.toRef)(props, "reference"), contentRef, arrowRef, placement, strategy, (0, vue.toRef)(props, "offset"), (0, vue.toRef)(props, "zIndex"), (0, vue.toRef)(props, "showArrow"));
const side = (0, vue.computed)(() => {
return placement.value.split("-")[0];
});
const { ns } = (0, vue.inject)(tourKey);
const onCloseRequested = () => {
emit("close");
};
const onFocusoutPrevented = (event) => {
if (event.detail.focusReason === "pointer") event.preventDefault();
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "contentRef",
ref: contentRef,
style: (0, vue.normalizeStyle)((0, vue.unref)(contentStyle)),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
"data-side": side.value,
tabindex: "-1"
}, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
loop: "",
trapped: "",
"focus-start-el": "container",
"focus-trap-el": contentRef.value || void 0,
onReleaseRequested: onCloseRequested,
onFocusoutPrevented
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["focus-trap-el"]), __props.showArrow ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
ref_key: "arrowRef",
ref: arrowRef,
style: (0, vue.normalizeStyle)((0, vue.unref)(arrowStyle)),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow"))
}, null, 6)) : (0, vue.createCommentVNode)("v-if", true)], 14, _hoisted_1$7);
};
}
});
//#endregion
//#region ../../packages/components/tour/src/content.vue
var content_default$1 = content_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tour/src/steps.ts
var steps_default = (0, vue.defineComponent)({
name: "ElTourSteps",
props: { current: {
type: Number,
default: 0
} },
emits: ["update-total"],
setup(props, { slots, emit }) {
let cacheTotal = 0;
return () => {
const children = slots.default?.();
const result = [];
let total = 0;
function filterSteps(children) {
if (!isArray$1(children)) return;
children.forEach((item) => {
if ((item?.type || {})?.name === "ElTourStep") {
result.push(item);
total += 1;
}
});
}
if (children.length) filterSteps(flattedChildren(children[0]?.children));
if (cacheTotal !== total) {
cacheTotal = total;
emit("update-total", total);
}
if (result.length) return result[props.current];
return null;
};
}
});
//#endregion
//#region ../../packages/components/tour/src/tour.vue?vue&type=script&setup=true&lang.ts
var tour_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTour",
inheritAttrs: false,
__name: "tour",
props: tourProps,
emits: tourEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("tour");
const total = (0, vue.ref)(0);
const currentStep = (0, vue.ref)();
const current = useVModel(props, "current", emit, { passive: true });
const currentTarget = (0, vue.computed)(() => currentStep.value?.target);
const kls = (0, vue.computed)(() => [ns.b(), mergedType.value === "primary" ? ns.m("primary") : ""]);
const mergedPlacement = (0, vue.computed)(() => currentStep.value?.placement || props.placement);
const mergedContentStyle = (0, vue.computed)(() => currentStep.value?.contentStyle ?? props.contentStyle);
const mergedMask = (0, vue.computed)(() => currentStep.value?.mask ?? props.mask);
const mergedShowMask = (0, vue.computed)(() => !!mergedMask.value && props.modelValue);
const mergedMaskStyle = (0, vue.computed)(() => isBoolean(mergedMask.value) ? void 0 : mergedMask.value);
const mergedShowArrow = (0, vue.computed)(() => !!currentTarget.value && (currentStep.value?.showArrow ?? props.showArrow));
const mergedScrollIntoViewOptions = (0, vue.computed)(() => currentStep.value?.scrollIntoViewOptions ?? props.scrollIntoViewOptions);
const mergedType = (0, vue.computed)(() => currentStep.value?.type ?? props.type);
const { nextZIndex } = useZIndex();
const nowZIndex = nextZIndex();
const mergedZIndex = (0, vue.computed)(() => props.zIndex ?? nowZIndex);
const { mergedPosInfo: pos, triggerTarget } = useTarget(currentTarget, (0, vue.toRef)(props, "modelValue"), (0, vue.toRef)(props, "gap"), mergedMask, mergedScrollIntoViewOptions);
(0, vue.watch)(() => props.modelValue, (val) => {
if (!val) current.value = 0;
});
const onEscClose = () => {
if (props.closeOnPressEscape) {
emit(UPDATE_MODEL_EVENT, false);
emit("close", current.value);
}
};
const onUpdateTotal = (val) => {
total.value = val;
};
const slots = (0, vue.useSlots)();
(0, vue.provide)(tourKey, {
currentStep,
current,
total,
showClose: (0, vue.toRef)(props, "showClose"),
closeIcon: (0, vue.toRef)(props, "closeIcon"),
mergedType,
ns,
slots,
updateModelValue(modelValue) {
emit(UPDATE_MODEL_EVENT, modelValue);
},
onClose() {
emit("close", current.value);
},
onFinish() {
emit("finish");
},
onChange() {
emit(CHANGE_EVENT, current.value);
}
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
(0, vue.createVNode)((0, vue.unref)(ElTeleport), { to: __props.appendTo }, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({ class: kls.value }, _ctx.$attrs), [(0, vue.createVNode)(mask_default, {
visible: mergedShowMask.value,
fill: mergedMaskStyle.value?.color,
style: (0, vue.normalizeStyle)(mergedMaskStyle.value?.style),
pos: (0, vue.unref)(pos),
"z-index": mergedZIndex.value,
"target-area-clickable": __props.targetAreaClickable
}, null, 8, [
"visible",
"fill",
"style",
"pos",
"z-index",
"target-area-clickable"
]), __props.modelValue ? ((0, vue.openBlock)(), (0, vue.createBlock)(content_default$1, {
key: (0, vue.unref)(current),
reference: (0, vue.unref)(triggerTarget),
placement: mergedPlacement.value,
"show-arrow": mergedShowArrow.value,
"z-index": mergedZIndex.value,
style: (0, vue.normalizeStyle)(mergedContentStyle.value),
onClose: onEscClose
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(steps_default), {
current: (0, vue.unref)(current),
onUpdateTotal
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["current"])]),
_: 3
}, 8, [
"reference",
"placement",
"show-arrow",
"z-index",
"style"
])) : (0, vue.createCommentVNode)("v-if", true)], 16)]),
_: 3
}, 8, ["to"]),
(0, vue.createCommentVNode)(" just for IDE "),
(0, vue.createCommentVNode)("v-if", true)
], 64);
};
}
});
//#endregion
//#region ../../packages/components/tour/src/tour.vue
var tour_default = tour_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tour/src/step.ts
/**
* @deprecated Removed after 3.0.0, Use `TourStepProps` instead.
*/
const tourStepProps = buildProps({
target: { type: definePropType([
String,
Object,
Function
]) },
title: String,
description: String,
showClose: {
type: Boolean,
default: void 0
},
closeIcon: { type: iconPropType },
showArrow: {
type: Boolean,
default: void 0
},
placement: tourContentProps.placement,
mask: {
type: definePropType([Boolean, Object]),
default: void 0
},
contentStyle: { type: definePropType([Object]) },
prevButtonProps: { type: definePropType(Object) },
nextButtonProps: { type: definePropType(Object) },
scrollIntoViewOptions: {
type: definePropType([Boolean, Object]),
default: void 0
},
type: { type: definePropType(String) }
});
const tourStepEmits = { close: () => true };
//#endregion
//#region ../../packages/components/tour/src/step.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$6 = ["aria-label"];
var step_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElTourStep",
__name: "step",
props: tourStepProps,
emits: tourStepEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { Close } = CloseComponents;
const { t } = useLocale();
const { currentStep, current, total, showClose, closeIcon, mergedType, ns, slots: tourSlots, updateModelValue, onClose: tourOnClose, onFinish: tourOnFinish, onChange } = (0, vue.inject)(tourKey);
(0, vue.watch)(props, (val) => {
currentStep.value = val;
}, { immediate: true });
const mergedShowClose = (0, vue.computed)(() => props.showClose ?? showClose.value);
const mergedCloseIcon = (0, vue.computed)(() => props.closeIcon ?? closeIcon.value ?? Close);
const filterButtonProps = (btnProps) => {
if (!btnProps) return;
return omit(btnProps, ["children", "onClick"]);
};
const onPrev = () => {
current.value -= 1;
if (props.prevButtonProps?.onClick) props.prevButtonProps?.onClick();
onChange();
};
const onNext = () => {
if (current.value >= total.value - 1) onFinish();
else current.value += 1;
if (props.nextButtonProps?.onClick) props.nextButtonProps.onClick();
onChange();
};
const onFinish = () => {
onClose();
tourOnFinish();
};
const onClose = () => {
updateModelValue(false);
tourOnClose();
emit("close");
};
const handleKeydown = (e) => {
if (e.target?.isContentEditable) return;
switch (getEventCode(e)) {
case EVENT_CODE.left:
e.preventDefault();
current.value > 0 && onPrev();
break;
case EVENT_CODE.right:
e.preventDefault();
onNext();
break;
}
};
(0, vue.onMounted)(() => {
window.addEventListener("keydown", handleKeydown);
});
(0, vue.onBeforeUnmount)(() => {
window.removeEventListener("keydown", handleKeydown);
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
mergedShowClose.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
"aria-label": (0, vue.unref)(t)("el.tour.close"),
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closebtn")),
type: "button",
onClick: onClose
}, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(mergedCloseIcon.value)))]),
_: 1
}, 8, ["class"])], 10, _hoisted_1$6)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("header", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), { "show-close": (0, vue.unref)(showClose) }]) }, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createElementVNode)("span", {
role: "heading",
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
}, (0, vue.toDisplayString)(__props.title), 3)])], 2),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body")) }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.description), 1)])], 2),
(0, vue.createElementVNode)("footer", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("indicators")) }, [(0, vue.unref)(tourSlots).indicators ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tourSlots).indicators), {
key: 0,
current: (0, vue.unref)(current),
total: (0, vue.unref)(total)
}, null, 8, ["current", "total"])) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)((0, vue.unref)(total), (item, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: item,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("indicator"), (0, vue.unref)(ns).is("active", index === (0, vue.unref)(current))])
}, null, 2);
}), 128))], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("buttons")) }, [(0, vue.unref)(current) > 0 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), (0, vue.mergeProps)({
key: 0,
size: "small",
type: (0, vue.unref)(mergedType)
}, filterButtonProps(__props.prevButtonProps), { onClick: onPrev }), {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.prevButtonProps?.children ?? (0, vue.unref)(t)("el.tour.previous")), 1)]),
_: 1
}, 16, ["type"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.unref)(current) <= (0, vue.unref)(total) - 1 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), (0, vue.mergeProps)({
key: 1,
size: "small",
type: (0, vue.unref)(mergedType) === "primary" ? "default" : "primary"
}, filterButtonProps(__props.nextButtonProps), { onClick: onNext }), {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.nextButtonProps?.children ?? ((0, vue.unref)(current) === (0, vue.unref)(total) - 1 ? (0, vue.unref)(t)("el.tour.finish") : (0, vue.unref)(t)("el.tour.next"))), 1)]),
_: 1
}, 16, ["type"])) : (0, vue.createCommentVNode)("v-if", true)], 2)], 2)
], 64);
};
}
});
//#endregion
//#region ../../packages/components/tour/src/step.vue
var step_default = step_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/tour/index.ts
const ElTour = withInstall(tour_default, { TourStep: step_default });
const ElTourStep = withNoopInstall(step_default);
//#endregion
//#region ../../packages/components/anchor/src/anchor.ts
/**
* @deprecated Removed after 3.0.0, Use `AnchorProps` instead.
*/
const anchorProps = buildProps({
container: { type: definePropType([String, Object]) },
offset: {
type: Number,
default: 0
},
bound: {
type: Number,
default: 15
},
duration: {
type: Number,
default: 300
},
marker: {
type: Boolean,
default: true
},
type: {
type: definePropType(String),
default: "default"
},
direction: {
type: definePropType(String),
default: "vertical"
},
selectScrollTop: Boolean
});
const anchorEmits = {
change: (href) => isString(href),
click: (e, href) => e instanceof MouseEvent && (isString(href) || isUndefined(href))
};
//#endregion
//#region ../../packages/components/anchor/src/constants.ts
const anchorKey = Symbol("anchor");
//#endregion
//#region ../../packages/components/anchor/src/anchor.vue?vue&type=script&setup=true&lang.ts
var anchor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAnchor",
__name: "anchor",
props: anchorProps,
emits: anchorEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const slots = (0, vue.useSlots)();
const currentAnchor = (0, vue.ref)("");
const markerStyle = (0, vue.ref)({});
const anchorRef = (0, vue.ref)(null);
const markerRef = (0, vue.ref)(null);
const containerEl = (0, vue.ref)();
const links = {};
let isScrolling = false;
let currentScrollTop = 0;
const ns = useNamespace("anchor");
const cls = (0, vue.computed)(() => [
ns.b(),
props.type === "underline" ? ns.m("underline") : "",
ns.m(props.direction)
]);
const addLink = (state) => {
links[state.href] = state.el;
};
const removeLink = (href) => {
delete links[href];
};
const setCurrentAnchor = (href) => {
if (currentAnchor.value !== href) {
currentAnchor.value = href;
emit(CHANGE_EVENT, href);
}
};
let clearAnimate = null;
let currentTargetHref = "";
const scrollToAnchor = (href) => {
if (!containerEl.value) return;
const target = getElement(href);
if (!target) return;
if (clearAnimate) {
if (currentTargetHref === href) return;
clearAnimate();
}
currentTargetHref = href;
isScrolling = true;
const scrollEle = getScrollElement(target, containerEl.value);
const distance = getOffsetTopDistance(target, scrollEle);
const max = scrollEle.scrollHeight - scrollEle.clientHeight;
const to = Math.min(distance - props.offset, max);
clearAnimate = animateScrollTo(containerEl.value, currentScrollTop, to, props.duration, () => {
setTimeout(() => {
isScrolling = false;
currentTargetHref = "";
}, 20);
});
};
const scrollTo = (href) => {
if (href) {
setCurrentAnchor(href);
scrollToAnchor(href);
}
};
const handleClick = (e, href) => {
emit("click", e, href);
scrollTo(href);
};
const handleScroll = throttleByRaf(() => {
if (containerEl.value) currentScrollTop = getScrollTop(containerEl.value);
const currentHref = getCurrentHref();
if (isScrolling || isUndefined(currentHref)) return;
setCurrentAnchor(currentHref);
});
const getCurrentHref = () => {
if (!containerEl.value) return;
const scrollTop = getScrollTop(containerEl.value);
const anchorTopList = [];
for (const href of Object.keys(links)) {
const target = getElement(href);
if (!target) continue;
const distance = getOffsetTopDistance(target, getScrollElement(target, containerEl.value));
anchorTopList.push({
top: distance - props.offset - props.bound,
href
});
}
anchorTopList.sort((prev, next) => prev.top - next.top);
for (let i = 0; i < anchorTopList.length; i++) {
const item = anchorTopList[i];
const next = anchorTopList[i + 1];
if (i === 0 && scrollTop === 0) return props.selectScrollTop ? item.href : "";
if (item.top <= scrollTop && (!next || next.top > scrollTop)) return item.href;
}
};
const getContainer = () => {
const el = getElement(props.container);
if (!el || isWindow(el)) containerEl.value = window;
else containerEl.value = el;
};
useEventListener(containerEl, "scroll", handleScroll);
const updateMarkerStyle = () => {
(0, vue.nextTick)(() => {
if (!anchorRef.value || !markerRef.value || !currentAnchor.value) {
markerStyle.value = {};
return;
}
const currentLinkEl = links[currentAnchor.value];
if (!currentLinkEl) {
markerStyle.value = {};
return;
}
const anchorRect = anchorRef.value.getBoundingClientRect();
const markerRect = markerRef.value.getBoundingClientRect();
const linkRect = currentLinkEl.getBoundingClientRect();
if (props.direction === "horizontal") markerStyle.value = {
left: `${linkRect.left - anchorRect.left}px`,
width: `${linkRect.width}px`,
opacity: 1
};
else markerStyle.value = {
top: `${linkRect.top - anchorRect.top + (linkRect.height - markerRect.height) / 2}px`,
opacity: 1
};
});
};
(0, vue.watch)(currentAnchor, updateMarkerStyle);
(0, vue.watch)(() => slots.default?.(), updateMarkerStyle);
(0, vue.onMounted)(() => {
getContainer();
const hash = decodeURIComponent(window.location.hash);
if (getElement(hash)) scrollTo(hash);
else handleScroll();
});
(0, vue.watch)(() => props.container, () => {
getContainer();
});
(0, vue.provide)(anchorKey, {
ns,
direction: props.direction,
currentAnchor,
addLink,
removeLink,
handleClick
});
__expose({ scrollTo });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "anchorRef",
ref: anchorRef,
class: (0, vue.normalizeClass)(cls.value)
}, [__props.marker ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref_key: "markerRef",
ref: markerRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("marker")),
style: (0, vue.normalizeStyle)(markerStyle.value)
}, null, 6)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("list")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)], 2);
};
}
});
//#endregion
//#region ../../packages/components/anchor/src/anchor.vue
var anchor_default = anchor_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/anchor/src/anchor-link.ts
/**
* @deprecated Removed after 3.0.0, Use `AnchorLinkProps` instead.
*/
const anchorLinkProps = buildProps({
title: String,
href: String
});
//#endregion
//#region ../../packages/components/anchor/src/anchor-link.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$5 = ["href"];
var anchor_link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElAnchorLink",
__name: "anchor-link",
props: anchorLinkProps,
setup(__props) {
const props = __props;
const linkRef = (0, vue.ref)(null);
const { ns, direction, currentAnchor, addLink, removeLink, handleClick: contextHandleClick } = (0, vue.inject)(anchorKey);
const cls = (0, vue.computed)(() => [ns.e("link"), ns.is("active", currentAnchor.value === props.href)]);
const handleClick = (e) => {
contextHandleClick(e, props.href);
};
(0, vue.watch)(() => props.href, (val, oldVal) => {
(0, vue.nextTick)(() => {
if (oldVal) removeLink(oldVal);
if (val) addLink({
href: val,
el: linkRef.value
});
});
});
(0, vue.onMounted)(() => {
const { href } = props;
if (href) addLink({
href,
el: linkRef.value
});
});
(0, vue.onBeforeUnmount)(() => {
const { href } = props;
if (href) removeLink(href);
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")) }, [(0, vue.createElementVNode)("a", {
ref_key: "linkRef",
ref: linkRef,
class: (0, vue.normalizeClass)(cls.value),
href: __props.href,
onClick: handleClick
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 10, _hoisted_1$5), _ctx.$slots["sub-link"] && (0, vue.unref)(direction) === "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("list"))
}, [(0, vue.renderSlot)(_ctx.$slots, "sub-link")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
};
}
});
//#endregion
//#region ../../packages/components/anchor/src/anchor-link.vue
var anchor_link_default = anchor_link_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/anchor/index.ts
const ElAnchor = withInstall(anchor_default, { AnchorLink: anchor_link_default });
const ElAnchorLink = withNoopInstall(anchor_link_default);
//#endregion
//#region ../../packages/components/segmented/src/segmented.ts
const defaultProps = {
label: "label",
value: "value",
disabled: "disabled"
};
/**
* @deprecated Removed after 3.0.0, Use `SegmentedProps` instead.
*/
const segmentedProps = buildProps({
direction: {
type: definePropType(String),
default: "horizontal"
},
options: {
type: definePropType(Array),
default: () => []
},
modelValue: {
type: [
String,
Number,
Boolean
],
default: void 0
},
props: {
type: definePropType(Object),
default: () => defaultProps
},
block: Boolean,
size: useSizeProp,
disabled: {
type: Boolean,
default: void 0
},
validateEvent: {
type: Boolean,
default: true
},
id: String,
name: String,
...useAriaProps(["ariaLabel"])
});
const segmentedEmits = {
[UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
[CHANGE_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val)
};
//#endregion
//#region ../../packages/components/segmented/src/segmented.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$4 = [
"id",
"aria-label",
"aria-labelledby"
];
const _hoisted_2$3 = [
"name",
"disabled",
"checked",
"onChange"
];
var segmented_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSegmented",
__name: "segmented",
props: segmentedProps,
emits: segmentedEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("segmented");
const segmentedId = useId();
const segmentedSize = useFormSize();
const _disabled = useFormDisabled();
const { formItem } = useFormItem();
const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
const segmentedRef = (0, vue.ref)(null);
const activeElement = useActiveElement();
const state = (0, vue.reactive)({
isInit: false,
width: 0,
height: 0,
translateX: 0,
translateY: 0,
focusVisible: false
});
const handleChange = (evt, item) => {
const value = getValue(item);
emit(UPDATE_MODEL_EVENT, value);
emit(CHANGE_EVENT, value);
evt.target.checked = value === props.modelValue;
};
const aliasProps = (0, vue.computed)(() => ({
...defaultProps,
...props.props
}));
const getValue = (item) => {
return isObject$1(item) ? item[aliasProps.value.value] : item;
};
const getLabel = (item) => {
return isObject$1(item) ? item[aliasProps.value.label] : item;
};
const getDisabled = (item) => {
return !!(_disabled.value || (isObject$1(item) ? item[aliasProps.value.disabled] : false));
};
const getSelected = (item) => {
return props.modelValue === getValue(item);
};
const getOption = (value) => {
return props.options.find((item) => getValue(item) === value);
};
const getItemCls = (item) => {
return [
ns.e("item"),
ns.is("selected", getSelected(item)),
ns.is("disabled", getDisabled(item))
];
};
const updateSelect = () => {
if (!segmentedRef.value) return;
const selectedItem = segmentedRef.value.querySelector(".is-selected");
const selectedItemInput = segmentedRef.value.querySelector(".is-selected input");
if (!selectedItem || !selectedItemInput) {
state.width = 0;
state.height = 0;
state.translateX = 0;
state.translateY = 0;
state.focusVisible = false;
return;
}
state.isInit = true;
if (props.direction === "vertical") {
state.height = selectedItem.offsetHeight;
state.translateY = selectedItem.offsetTop;
} else {
state.width = selectedItem.offsetWidth;
state.translateX = selectedItem.offsetLeft;
}
try {
state.focusVisible = selectedItemInput.matches(":focus-visible");
} catch {}
};
const segmentedCls = (0, vue.computed)(() => [
ns.b(),
ns.m(segmentedSize.value),
ns.is("block", props.block)
]);
const selectedStyle = (0, vue.computed)(() => ({
width: props.direction === "vertical" ? "100%" : `${state.width}px`,
height: props.direction === "vertical" ? `${state.height}px` : "100%",
transform: props.direction === "vertical" ? `translateY(${state.translateY}px)` : `translateX(${state.translateX}px)`,
display: state.isInit ? "block" : "none"
}));
const selectedCls = (0, vue.computed)(() => [
ns.e("item-selected"),
ns.is("disabled", getDisabled(getOption(props.modelValue))),
ns.is("focus-visible", state.focusVisible)
]);
const name = (0, vue.computed)(() => {
return props.name || segmentedId.value;
});
useResizeObserver(segmentedRef, updateSelect);
(0, vue.watch)(activeElement, updateSelect);
(0, vue.watch)(() => props.modelValue, () => {
updateSelect();
if (props.validateEvent) formItem?.validate?.("change").catch((err) => /* @__PURE__ */ debugWarn(err));
}, { flush: "post" });
return (_ctx, _cache) => {
return __props.options.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
id: (0, vue.unref)(inputId),
ref_key: "segmentedRef",
ref: segmentedRef,
class: (0, vue.normalizeClass)(segmentedCls.value),
role: "radiogroup",
"aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "segmented" : void 0,
"aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem).labelId : void 0
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("group"), (0, vue.unref)(ns).m(__props.direction)]) }, [(0, vue.createElementVNode)("div", {
style: (0, vue.normalizeStyle)(selectedStyle.value),
class: (0, vue.normalizeClass)(selectedCls.value)
}, null, 6), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", {
key: index,
class: (0, vue.normalizeClass)(getItemCls(item))
}, [(0, vue.createElementVNode)("input", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item-input")),
type: "radio",
name: name.value,
disabled: getDisabled(item),
checked: getSelected(item),
onChange: ($event) => handleChange($event, item)
}, null, 42, _hoisted_2$3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item-label")) }, [(0, vue.renderSlot)(_ctx.$slots, "default", { item }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(getLabel(item)), 1)])], 2)], 2);
}), 128))], 2)], 10, _hoisted_1$4)) : (0, vue.createCommentVNode)("v-if", true);
};
}
});
//#endregion
//#region ../../packages/components/segmented/src/segmented.vue
var segmented_default = segmented_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/segmented/index.ts
const ElSegmented = withInstall(segmented_default);
//#endregion
//#region ../../packages/components/mention/src/helper.ts
const filterOption = (pattern, option) => {
const lowerCase = pattern.toLowerCase();
return (option.label || option.value || "").toLowerCase().includes(lowerCase);
};
const getMentionCtx = (inputEl, prefix, split) => {
const { selectionEnd } = inputEl;
if (selectionEnd === null) return;
const inputValue = inputEl.value;
const prefixArray = castArray$1(prefix);
let splitIndex = -1;
let mentionCtx;
for (let i = selectionEnd - 1; i >= 0; --i) {
const char = inputValue[i];
if (splitIndex === -1 && (char === split || char === "\n" || char === "\r")) {
splitIndex = i;
continue;
}
if (prefixArray.includes(char)) {
const end = splitIndex === -1 ? selectionEnd : splitIndex;
mentionCtx = {
pattern: inputValue.slice(i + 1, end),
start: i + 1,
end,
prefix: char,
prefixIndex: i,
splitIndex,
selectionEnd
};
break;
}
}
return mentionCtx;
};
/**
* fork from textarea-caret-position
* https://github.com/component/textarea-caret-position
* The MIT License (MIT)
* Copyright (c) 2015 Jonathan Ong me@jongleberry.com
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
const getCursorPosition = (element, options = {
debug: false,
useSelectionEnd: false
}) => {
const selectionStart = element.selectionStart !== null ? element.selectionStart : 0;
const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0;
const position = options.useSelectionEnd ? selectionEnd : selectionStart;
const properties = [
"direction",
"boxSizing",
"width",
"height",
"overflowX",
"overflowY",
"borderTopWidth",
"borderRightWidth",
"borderBottomWidth",
"borderLeftWidth",
"borderStyle",
"paddingTop",
"paddingRight",
"paddingBottom",
"paddingLeft",
"fontStyle",
"fontVariant",
"fontWeight",
"fontStretch",
"fontSize",
"fontSizeAdjust",
"lineHeight",
"fontFamily",
"textAlign",
"textTransform",
"textIndent",
"textDecoration",
"letterSpacing",
"wordSpacing",
"tabSize",
"MozTabSize"
];
if (options.debug) {
const el = document.querySelector("#input-textarea-caret-position-mirror-div");
if (el?.parentNode) el.parentNode.removeChild(el);
}
const div = document.createElement("div");
div.id = "input-textarea-caret-position-mirror-div";
document.body.appendChild(div);
const style = div.style;
const computed = window.getComputedStyle(element);
const isInput = element.nodeName === "INPUT";
style.whiteSpace = isInput ? "nowrap" : "pre-wrap";
if (!isInput) style.wordWrap = "break-word";
style.position = "absolute";
if (!options.debug) style.visibility = "hidden";
properties.forEach((prop) => {
if (isInput && prop === "lineHeight") if (computed.boxSizing === "border-box") {
const height = Number.parseInt(computed.height);
const outerHeight = Number.parseInt(computed.paddingTop) + Number.parseInt(computed.paddingBottom) + Number.parseInt(computed.borderTopWidth) + Number.parseInt(computed.borderBottomWidth);
const targetHeight = outerHeight + Number.parseInt(computed.lineHeight);
if (height > targetHeight) style.lineHeight = `${height - outerHeight}px`;
else if (height === targetHeight) style.lineHeight = computed.lineHeight;
else style.lineHeight = "0";
} else style.lineHeight = computed.height;
else style[prop] = computed[prop];
});
if (isFirefox()) {
if (element.scrollHeight > Number.parseInt(computed.height)) style.overflowY = "scroll";
} else style.overflow = "hidden";
div.textContent = element.value.slice(0, Math.max(0, position));
if (isInput && div.textContent) div.textContent = div.textContent.replace(/\s/g, "\xA0");
const span = document.createElement("span");
span.textContent = element.value.slice(Math.max(0, position)) || ".";
span.style.position = "relative";
span.style.left = `${-element.scrollLeft}px`;
span.style.top = `${-element.scrollTop}px`;
div.appendChild(span);
const relativePosition = {
top: span.offsetTop + Number.parseInt(computed.borderTopWidth),
left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth),
height: Number.parseInt(computed.fontSize) * 1.5
};
if (options.debug) span.style.backgroundColor = "#aaa";
else document.body.removeChild(div);
if (relativePosition.left >= element.clientWidth) relativePosition.left = element.clientWidth;
return relativePosition;
};
//#endregion
//#region ../../packages/components/mention/src/mention.ts
/**
* @deprecated Removed after 3.0.0, Use `MentionProps` instead.
*/
const mentionProps = buildProps({
...inputProps,
options: {
type: definePropType(Array),
default: () => []
},
prefix: {
type: definePropType([String, Array]),
default: "@",
validator: (val) => {
if (isString(val)) return val.length === 1;
return val.every((v) => isString(v) && v.length === 1);
}
},
split: {
type: String,
default: " ",
validator: (val) => val.length === 1
},
filterOption: {
type: definePropType([Boolean, Function]),
default: () => filterOption,
validator: (val) => {
if (val === false) return true;
return isFunction$1(val);
}
},
placement: {
type: definePropType(String),
default: "bottom"
},
showArrow: Boolean,
offset: {
type: Number,
default: 0
},
whole: Boolean,
checkIsWhole: { type: definePropType(Function) },
modelValue: String,
loading: Boolean,
popperClass: useTooltipContentProps.popperClass,
popperStyle: useTooltipContentProps.popperStyle,
popperOptions: {
type: definePropType(Object),
default: () => ({})
},
props: {
type: definePropType(Object),
default: () => mentionDefaultProps
}
});
const mentionEmits = {
[UPDATE_MODEL_EVENT]: (value) => isString(value),
"whole-remove": (pattern, prefix) => isString(pattern) && isString(prefix),
input: (value) => isString(value),
search: (pattern, prefix) => isString(pattern) && isString(prefix),
select: (option, prefix) => isObject$1(option) && isString(prefix),
focus: (evt) => evt instanceof FocusEvent,
blur: (evt) => evt instanceof FocusEvent
};
const mentionDefaultProps = {
value: "value",
label: "label",
disabled: "disabled"
};
//#endregion
//#region ../../packages/components/mention/src/mention-dropdown.ts
/**
* @deprecated Removed after 3.0.0, Use `MentionDropdownProps` instead.
*/
const mentionDropdownProps = buildProps({
options: {
type: definePropType(Array),
default: () => []
},
loading: Boolean,
disabled: Boolean,
contentId: String,
ariaLabel: String
});
const mentionDropdownEmits = { select: (option) => isString(option.value) };
//#endregion
//#region ../../packages/components/mention/src/mention-dropdown.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$3 = [
"id",
"aria-disabled",
"aria-selected",
"onMousemove",
"onClick"
];
var mention_dropdown_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMentionDropdown",
__name: "mention-dropdown",
props: mentionDropdownProps,
emits: mentionDropdownEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const ns = useNamespace("mention");
const { t } = useLocale();
const hoveringIndex = (0, vue.ref)(-1);
const scrollbarRef = (0, vue.ref)();
const optionRefs = (0, vue.ref)();
const dropdownRef = (0, vue.ref)();
const optionkls = (item, index) => [
ns.be("dropdown", "item"),
ns.is("hovering", hoveringIndex.value === index),
ns.is("disabled", item.disabled || props.disabled)
];
const handleSelect = (item) => {
if (item.disabled || props.disabled) return;
emit("select", item);
};
const handleMouseEnter = (index) => {
hoveringIndex.value = index;
};
const filteredAllDisabled = (0, vue.computed)(() => props.disabled || props.options.every((item) => item.disabled));
const hoverOption = (0, vue.computed)(() => props.options[hoveringIndex.value]);
const selectHoverOption = () => {
if (!hoverOption.value || hoverOption.value.disabled || props.disabled) return;
emit("select", hoverOption.value);
};
const navigateOptions = (direction) => {
const { options } = props;
if (options.length === 0 || filteredAllDisabled.value) return;
if (direction === "next") {
hoveringIndex.value++;
if (hoveringIndex.value === options.length) hoveringIndex.value = 0;
} else if (direction === "prev") {
hoveringIndex.value--;
if (hoveringIndex.value < 0) hoveringIndex.value = options.length - 1;
}
const option = options[hoveringIndex.value];
if (option.disabled) {
navigateOptions(direction);
return;
}
(0, vue.nextTick)(() => scrollToOption(option));
};
const scrollToOption = (option) => {
const { options } = props;
const index = options.findIndex((item) => item.value === option.value);
const target = optionRefs.value?.[index];
if (target) {
const menu = dropdownRef.value?.querySelector?.(`.${ns.be("dropdown", "wrap")}`);
if (menu) scrollIntoView(menu, target);
}
scrollbarRef.value?.handleScroll();
};
const resetHoveringIndex = () => {
if (filteredAllDisabled.value || props.options.length === 0) hoveringIndex.value = -1;
else hoveringIndex.value = props.options.findIndex((item) => !item.disabled);
};
(0, vue.watch)(() => props.options, resetHoveringIndex, { immediate: true });
__expose({
hoveringIndex,
navigateOptions,
selectHoverOption,
hoverOption
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "dropdownRef",
ref: dropdownRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("dropdown"))
}, [
_ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "header"))
}, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElScrollbar), {
id: __props.contentId,
ref_key: "scrollbarRef",
ref: scrollbarRef,
tag: "ul",
"wrap-class": (0, vue.unref)(ns).be("dropdown", "wrap"),
"view-class": (0, vue.unref)(ns).be("dropdown", "list"),
role: "listbox",
"aria-label": __props.ariaLabel,
"aria-orientation": "vertical"
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
id: `${__props.contentId}-${index}`,
ref_for: true,
ref_key: "optionRefs",
ref: optionRefs,
key: index,
class: (0, vue.normalizeClass)(optionkls(item, index)),
role: "option",
"aria-disabled": item.disabled || __props.disabled || void 0,
"aria-selected": hoveringIndex.value === index,
onMousemove: ($event) => handleMouseEnter(index),
onClick: (0, vue.withModifiers)(($event) => handleSelect(item), ["stop"])
}, [(0, vue.renderSlot)(_ctx.$slots, "label", {
item,
index
}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.label ?? item.value), 1)])], 42, _hoisted_1$3);
}), 128))]),
_: 3
}, 8, [
"id",
"wrap-class",
"view-class",
"aria-label"
]), [[vue.vShow, __props.options.length > 0 && !__props.loading]]),
__props.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "loading"))
}, [(0, vue.renderSlot)(_ctx.$slots, "loading", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.mention.loading")), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "footer"))
}, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 2);
};
}
});
//#endregion
//#region ../../packages/components/mention/src/mention-dropdown.vue
var mention_dropdown_default = mention_dropdown_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/mention/src/mention.vue?vue&type=script&setup=true&lang.ts
var mention_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMention",
inheritAttrs: false,
__name: "mention",
props: mentionProps,
emits: mentionEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emit = __emit;
const passInputProps = (0, vue.computed)(() => {
const inputProps = ElInput.props ?? [];
return pick(props, isArray$1(inputProps) ? inputProps : Object.keys(inputProps));
});
const ns = useNamespace("mention");
const disabled = useFormDisabled();
const contentId = useId();
const elInputRef = (0, vue.ref)();
const tooltipRef = (0, vue.ref)();
const dropdownRef = (0, vue.ref)();
const visible = (0, vue.ref)(false);
const cursorStyle = (0, vue.ref)();
const mentionCtx = (0, vue.ref)();
const computedPlacement = (0, vue.computed)(() => props.showArrow ? props.placement : `${props.placement}-start`);
const computedFallbackPlacements = (0, vue.computed)(() => props.showArrow ? ["bottom", "top"] : ["bottom-start", "top-start"]);
const aliasProps = (0, vue.computed)(() => ({
...mentionDefaultProps,
...props.props
}));
const mapOption = (option) => {
const base = {
label: option[aliasProps.value.label],
value: option[aliasProps.value.value],
disabled: option[aliasProps.value.disabled]
};
return {
...option,
...base
};
};
const options = (0, vue.computed)(() => props.options.map(mapOption));
const filteredOptions = (0, vue.computed)(() => {
const { filterOption } = props;
if (!mentionCtx.value || !filterOption) return options.value;
return options.value.filter((option) => filterOption(mentionCtx.value.pattern, option));
});
const dropdownVisible = (0, vue.computed)(() => {
return visible.value && (!!filteredOptions.value.length || props.loading);
});
const hoveringId = (0, vue.computed)(() => {
return `${contentId.value}-${dropdownRef.value?.hoveringIndex}`;
});
const handleInputChange = (value) => {
emit(UPDATE_MODEL_EVENT, value);
emit(INPUT_EVENT, value);
syncAfterCursorMove();
};
const handleInputKeyDown = (event) => {
if (elInputRef.value?.isComposing) return;
const code = getEventCode(event);
switch (code) {
case EVENT_CODE.left:
case EVENT_CODE.right:
syncAfterCursorMove();
break;
case EVENT_CODE.up:
case EVENT_CODE.down:
if (!visible.value) return;
event.preventDefault();
dropdownRef.value?.navigateOptions(code === EVENT_CODE.up ? "prev" : "next");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
if (!visible.value) {
props.type !== "textarea" && syncAfterCursorMove();
return;
}
event.preventDefault();
if (dropdownRef.value?.hoverOption) dropdownRef.value?.selectHoverOption();
else visible.value = false;
break;
case EVENT_CODE.esc:
if (!visible.value) return;
event.preventDefault();
visible.value = false;
break;
case EVENT_CODE.backspace: if (props.whole && mentionCtx.value) {
const { splitIndex, selectionEnd, pattern, prefixIndex, prefix } = mentionCtx.value;
const inputEl = getInputEl();
if (!inputEl) return;
const inputValue = inputEl.value;
const matchOption = options.value.find((item) => item.value === pattern);
if ((isFunction$1(props.checkIsWhole) ? props.checkIsWhole(pattern, prefix) : matchOption) && splitIndex !== -1 && splitIndex + 1 === selectionEnd) {
event.preventDefault();
const newValue = inputValue.slice(0, prefixIndex) + inputValue.slice(splitIndex + 1);
emit(UPDATE_MODEL_EVENT, newValue);
emit(INPUT_EVENT, newValue);
emit("whole-remove", pattern, prefix);
const newSelectionEnd = prefixIndex;
(0, vue.nextTick)(() => {
inputEl.selectionStart = newSelectionEnd;
inputEl.selectionEnd = newSelectionEnd;
syncDropdownVisible();
});
}
}
}
};
const { wrapperRef } = useFocusController(elInputRef, {
disabled,
afterFocus() {
syncAfterCursorMove();
},
beforeBlur(event) {
return tooltipRef.value?.isFocusInsideContent(event);
},
afterBlur() {
visible.value = false;
}
});
const handleInputMouseDown = () => {
syncAfterCursorMove();
};
const getOriginalOption = (mentionOption) => {
return props.options.find((option) => {
return mentionOption.value === option[aliasProps.value.value];
});
};
const handleSelect = (item) => {
if (!mentionCtx.value) return;
const inputEl = getInputEl();
if (!inputEl) return;
const inputValue = inputEl.value;
const { split } = props;
const newEndPart = inputValue.slice(mentionCtx.value.end);
const alreadySeparated = newEndPart.startsWith(split);
const newMiddlePart = `${item.value}${alreadySeparated ? "" : split}`;
const newValue = inputValue.slice(0, mentionCtx.value.start) + newMiddlePart + newEndPart;
emit(UPDATE_MODEL_EVENT, newValue);
emit(INPUT_EVENT, newValue);
emit("select", getOriginalOption(item), mentionCtx.value.prefix);
const newSelectionEnd = mentionCtx.value.start + newMiddlePart.length + (alreadySeparated ? 1 : 0);
(0, vue.nextTick)(() => {
inputEl.selectionStart = newSelectionEnd;
inputEl.selectionEnd = newSelectionEnd;
inputEl.focus();
syncDropdownVisible();
});
};
const getInputEl = () => props.type === "textarea" ? elInputRef.value?.textarea : elInputRef.value?.input;
const syncAfterCursorMove = () => {
setTimeout(() => {
syncCursor();
syncDropdownVisible();
(0, vue.nextTick)(() => tooltipRef.value?.updatePopper());
}, 0);
};
const syncCursor = () => {
const inputEl = getInputEl();
if (!inputEl) return;
const caretPosition = getCursorPosition(inputEl);
const inputRect = inputEl.getBoundingClientRect();
const wrapperRect = wrapperRef.value.getBoundingClientRect();
cursorStyle.value = {
position: "absolute",
width: 0,
height: `${caretPosition.height}px`,
left: `${caretPosition.left + inputRect.left - wrapperRect.left}px`,
top: `${caretPosition.top + inputRect.top - wrapperRect.top}px`
};
};
const syncDropdownVisible = () => {
const inputEl = getInputEl();
if (document.activeElement !== inputEl) {
visible.value = false;
return;
}
const { prefix, split } = props;
mentionCtx.value = getMentionCtx(inputEl, prefix, split);
if (mentionCtx.value && mentionCtx.value.splitIndex === -1) {
visible.value = true;
emit("search", mentionCtx.value.pattern, mentionCtx.value.prefix);
return;
}
visible.value = false;
};
__expose({
input: elInputRef,
tooltip: tooltipRef,
dropdownVisible
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "wrapperRef",
ref: wrapperRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
}, [(0, vue.createVNode)((0, vue.unref)(ElInput), (0, vue.mergeProps)((0, vue.mergeProps)(passInputProps.value, _ctx.$attrs), {
ref_key: "elInputRef",
ref: elInputRef,
"model-value": __props.modelValue,
disabled: (0, vue.unref)(disabled),
role: dropdownVisible.value ? "combobox" : void 0,
"aria-activedescendant": dropdownVisible.value ? hoveringId.value || "" : void 0,
"aria-controls": dropdownVisible.value ? (0, vue.unref)(contentId) : void 0,
"aria-expanded": dropdownVisible.value || void 0,
"aria-label": __props.ariaLabel,
"aria-autocomplete": dropdownVisible.value ? "none" : void 0,
"aria-haspopup": dropdownVisible.value ? "listbox" : void 0,
onInput: handleInputChange,
onKeydown: handleInputKeyDown,
onMousedown: handleInputMouseDown
}), (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
return {
name,
fn: (0, vue.withCtx)((slotProps) => [(0, vue.renderSlot)(_ctx.$slots, name, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(slotProps)))])
};
})]), 1040, [
"model-value",
"disabled",
"role",
"aria-activedescendant",
"aria-controls",
"aria-expanded",
"aria-label",
"aria-autocomplete",
"aria-haspopup"
]), (0, vue.createVNode)((0, vue.unref)(ElTooltip), {
ref_key: "tooltipRef",
ref: tooltipRef,
visible: dropdownVisible.value,
"popper-class": [(0, vue.unref)(ns).e("popper"), __props.popperClass],
"popper-style": __props.popperStyle,
"popper-options": __props.popperOptions,
placement: computedPlacement.value,
"fallback-placements": computedFallbackPlacements.value,
effect: "light",
pure: "",
offset: __props.offset,
"show-arrow": __props.showArrow
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { style: (0, vue.normalizeStyle)(cursorStyle.value) }, null, 4)]),
content: (0, vue.withCtx)(() => [(0, vue.createVNode)(mention_dropdown_default, {
ref_key: "dropdownRef",
ref: dropdownRef,
options: filteredOptions.value,
disabled: (0, vue.unref)(disabled),
loading: __props.loading,
"content-id": (0, vue.unref)(contentId),
"aria-label": __props.ariaLabel,
onSelect: handleSelect,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => elInputRef.value?.focus(), ["stop"]))
}, (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
return {
name,
fn: (0, vue.withCtx)((slotProps) => [(0, vue.renderSlot)(_ctx.$slots, name, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(slotProps)))])
};
})]), 1032, [
"options",
"disabled",
"loading",
"content-id",
"aria-label"
])]),
_: 3
}, 8, [
"visible",
"popper-class",
"popper-style",
"popper-options",
"placement",
"fallback-placements",
"offset",
"show-arrow"
])], 2);
};
}
});
//#endregion
//#region ../../packages/components/mention/src/mention.vue
var mention_default = mention_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/mention/index.ts
const ElMention = withInstall(mention_default);
//#endregion
//#region ../../packages/components/splitter/src/splitter.ts
/**
* @deprecated Removed after 3.0.0, Use `SplitterProps` instead.
*/
const splitterProps = buildProps({
layout: {
type: String,
default: "horizontal",
values: ["horizontal", "vertical"]
},
lazy: Boolean
});
const splitterEmits = {
resizeStart: (index, sizes) => true,
resize: (index, sizes) => true,
resizeEnd: (index, sizes) => true,
collapse: (index, type, sizes) => true
};
//#endregion
//#region ../../packages/components/splitter/src/hooks/useContainer.ts
function useContainer(layout) {
const containerEl = (0, vue.ref)();
const { width, height } = useElementSize(containerEl);
return {
containerEl,
containerSize: (0, vue.computed)(() => {
return layout.value === "horizontal" ? width.value : height.value;
})
};
}
//#endregion
//#region ../../packages/components/splitter/src/hooks/useSize.ts
function getPct(str) {
return Number(str.slice(0, -1)) / 100;
}
function getPx(str) {
return Number(str.slice(0, -2));
}
function isPct(itemSize) {
return isString(itemSize) && itemSize.endsWith("%");
}
function isPx(itemSize) {
return isString(itemSize) && itemSize.endsWith("px");
}
function useSize$1(panels, containerSize) {
const propSizes = (0, vue.computed)(() => panels.value.map((i) => i.size));
const panelCounts = (0, vue.computed)(() => panels.value.length);
const percentSizes = (0, vue.ref)([]);
(0, vue.watch)([
propSizes,
panelCounts,
containerSize
], () => {
let ptgList = [];
let emptyCount = 0;
for (let i = 0; i < panelCounts.value; i += 1) {
const itemSize = panels.value[i]?.size;
if (isPct(itemSize)) ptgList[i] = getPct(itemSize);
else if (isPx(itemSize)) ptgList[i] = getPx(itemSize) / containerSize.value;
else if (itemSize || itemSize === 0) {
const num = Number(itemSize);
if (!Number.isNaN(num)) ptgList[i] = num / containerSize.value;
} else {
emptyCount += 1;
ptgList[i] = void 0;
}
}
const totalPtg = ptgList.reduce((acc, ptg) => acc + (ptg || 0), 0);
if (totalPtg > 1 || !emptyCount) {
const scale = 1 / totalPtg;
ptgList = ptgList.map((ptg) => ptg === void 0 ? 0 : ptg * scale);
} else {
const avgRest = (1 - totalPtg) / emptyCount;
ptgList = ptgList.map((ptg) => ptg === void 0 ? avgRest : ptg);
}
percentSizes.value = ptgList;
});
const ptg2px = (ptg) => ptg * containerSize.value;
return {
percentSizes,
pxSizes: (0, vue.computed)(() => percentSizes.value.map(ptg2px))
};
}
//#endregion
//#region ../../packages/components/splitter/src/hooks/useResize.ts
function useResize(panels, containerSize, pxSizes, lazy) {
const ptg2px = (ptg) => ptg * containerSize.value || 0;
function getLimitSize(str, defaultLimit) {
if (isPct(str)) return ptg2px(getPct(str));
else if (isPx(str)) return getPx(str);
return str ?? defaultLimit;
}
const lazyOffset = (0, vue.ref)(0);
const movingIndex = (0, vue.ref)(null);
let cachePxSizes = [];
let updatePanelSizes = NOOP;
const limitSizes = (0, vue.computed)(() => panels.value.map((item) => [item.min, item.max]));
(0, vue.watch)(lazy, () => {
if (lazyOffset.value) {
const mouseup = new MouseEvent("mouseup", { bubbles: true });
window.dispatchEvent(mouseup);
}
});
const onMoveStart = (index) => {
lazyOffset.value = 0;
movingIndex.value = {
index,
confirmed: false
};
cachePxSizes = pxSizes.value;
};
const onMoving = (index, offset) => {
let confirmedIndex = null;
if ((!movingIndex.value || !movingIndex.value.confirmed) && offset !== 0) {
if (offset > 0) {
confirmedIndex = index;
movingIndex.value = {
index,
confirmed: true
};
} else for (let i = index; i >= 0; i -= 1) if (cachePxSizes[i] > 0) {
confirmedIndex = i;
movingIndex.value = {
index: i,
confirmed: true
};
break;
}
}
const mergedIndex = confirmedIndex ?? movingIndex.value?.index ?? index;
const numSizes = [...cachePxSizes];
const nextIndex = mergedIndex + 1;
const startMinSize = getLimitSize(limitSizes.value[mergedIndex][0], 0);
const endMinSize = getLimitSize(limitSizes.value[nextIndex][0], 0);
const startMaxSize = getLimitSize(limitSizes.value[mergedIndex][1], containerSize.value || 0);
const endMaxSize = getLimitSize(limitSizes.value[nextIndex][1], containerSize.value || 0);
let mergedOffset = offset;
if (numSizes[mergedIndex] + mergedOffset < startMinSize) mergedOffset = startMinSize - numSizes[mergedIndex];
if (numSizes[nextIndex] - mergedOffset < endMinSize) mergedOffset = numSizes[nextIndex] - endMinSize;
if (numSizes[mergedIndex] + mergedOffset > startMaxSize) mergedOffset = startMaxSize - numSizes[mergedIndex];
if (numSizes[nextIndex] - mergedOffset > endMaxSize) mergedOffset = numSizes[nextIndex] - endMaxSize;
numSizes[mergedIndex] += mergedOffset;
numSizes[nextIndex] -= mergedOffset;
lazyOffset.value = mergedOffset;
updatePanelSizes = () => {
panels.value.forEach((panel, index) => {
panel.size = numSizes[index];
});
updatePanelSizes = NOOP;
};
if (!lazy.value) updatePanelSizes();
};
const onMoveEnd = () => {
if (lazy.value) updatePanelSizes();
lazyOffset.value = 0;
movingIndex.value = null;
cachePxSizes = [];
};
const cacheCollapsedSize = [];
const onCollapse = (index, type) => {
if (!cacheCollapsedSize.length) cacheCollapsedSize.push(...pxSizes.value);
const currentSizes = pxSizes.value;
const currentIndex = type === "start" ? index : index + 1;
const targetIndex = type === "start" ? index + 1 : index;
const currentSize = currentSizes[currentIndex];
const targetSize = currentSizes[targetIndex];
if (currentSize !== 0 && targetSize !== 0) {
currentSizes[currentIndex] = 0;
currentSizes[targetIndex] += currentSize;
cacheCollapsedSize[index] = currentSize;
} else {
const totalSize = currentSize + targetSize;
const targetCacheCollapsedSize = cacheCollapsedSize[index];
const currentCacheCollapsedSize = totalSize - targetCacheCollapsedSize;
currentSizes[targetIndex] = targetCacheCollapsedSize;
currentSizes[currentIndex] = currentCacheCollapsedSize;
}
panels.value.forEach((panel, index) => {
panel.size = currentSizes[index];
});
};
return {
lazyOffset,
onMoveStart,
onMoving,
onMoveEnd,
movingIndex,
onCollapse
};
}
//#endregion
//#region ../../packages/components/splitter/src/type.ts
const splitterRootContextKey = Symbol("splitterRootContextKey");
//#endregion
//#region ../../packages/components/splitter/src/splitter.vue?vue&type=script&setup=true&lang.ts
var splitter_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSplitter",
__name: "splitter",
props: splitterProps,
emits: splitterEmits,
setup(__props, { emit: __emit }) {
const ns = useNamespace("splitter");
const emits = __emit;
const props = __props;
const layout = (0, vue.toRef)(props, "layout");
const lazy = (0, vue.toRef)(props, "lazy");
const { containerEl, containerSize } = useContainer(layout);
const { removeChild: unregisterPanel, children: panels, addChild: registerPanel, ChildrenSorter: PanelsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElSplitterPanel");
(0, vue.watch)(panels, () => {
movingIndex.value = null;
panels.value.forEach((instance, index) => {
instance.setIndex(index);
});
});
const { percentSizes, pxSizes } = useSize$1(panels, containerSize);
const { lazyOffset, movingIndex, onMoveStart, onMoving, onMoveEnd, onCollapse } = useResize(panels, containerSize, pxSizes, lazy);
const splitterStyles = (0, vue.computed)(() => {
return { [ns.cssVarBlockName("bar-offset")]: lazy.value ? `${lazyOffset.value}px` : void 0 };
});
const onResizeStart = (index) => {
onMoveStart(index);
emits("resizeStart", index, pxSizes.value);
};
const onResize = (index, offset) => {
onMoving(index, offset);
if (!lazy.value) emits("resize", index, pxSizes.value);
};
const onResizeEnd = async (index) => {
onMoveEnd();
await (0, vue.nextTick)();
emits("resizeEnd", index, pxSizes.value);
};
const onCollapsible = (index, type) => {
onCollapse(index, type);
emits("collapse", index, type, pxSizes.value);
};
(0, vue.provide)(splitterRootContextKey, (0, vue.reactive)({
panels,
percentSizes,
pxSizes,
layout,
lazy,
movingIndex,
containerSize,
onMoveStart: onResizeStart,
onMoving: onResize,
onMoveEnd: onResizeEnd,
onCollapse: onCollapsible,
registerPanel,
unregisterPanel
}));
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
ref_key: "containerEl",
ref: containerEl,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).e(layout.value)]),
style: (0, vue.normalizeStyle)(splitterStyles.value)
}, [
(0, vue.renderSlot)(_ctx.$slots, "default"),
(0, vue.createVNode)((0, vue.unref)(PanelsSorter)),
(0, vue.createCommentVNode)(" Prevent iframe touch events from breaking "),
(0, vue.unref)(movingIndex) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("mask"), (0, vue.unref)(ns).e(`mask-${layout.value}`)])
}, null, 2)) : (0, vue.createCommentVNode)("v-if", true)
], 6);
};
}
});
//#endregion
//#region ../../packages/components/splitter/src/splitter.vue
var splitter_default = splitter_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/splitter/src/split-panel.ts
/**
* @deprecated Removed after 3.0.0, Use `SplitterPanelProps` instead.
*/
const splitterPanelProps = buildProps({
min: { type: [String, Number] },
max: { type: [String, Number] },
size: { type: [String, Number] },
resizable: {
type: Boolean,
default: true
},
collapsible: Boolean
});
const splitterPanelEmits = { "update:size": (value) => typeof value === "number" || typeof value === "string" };
//#endregion
//#region ../../packages/components/splitter/src/hooks/usePanel.ts
function getCollapsible(collapsible) {
if (collapsible && isObject$1(collapsible)) return collapsible;
return {
start: !!collapsible,
end: !!collapsible
};
}
function isCollapsible(panel, size, nextPanel, nextSize) {
if (panel?.collapsible.end && size > 0) return true;
if (nextPanel?.collapsible.start && nextSize === 0 && size > 0) return true;
return false;
}
//#endregion
//#region ../../packages/components/splitter/src/split-bar.vue?vue&type=script&setup=true&lang.ts
var split_bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElSplitterBar",
__name: "split-bar",
props: {
index: {
type: Number,
required: true
},
layout: {
type: String,
values: ["horizontal", "vertical"],
default: "horizontal"
},
resizable: {
type: Boolean,
default: true
},
lazy: Boolean,
startCollapsible: Boolean,
endCollapsible: Boolean
},
emits: [
"moveStart",
"moving",
"moveEnd",
"collapse"
],
setup(__props, { emit: __emit }) {
const ns = useNamespace("splitter-bar");
const props = __props;
const emit = __emit;
const isHorizontal = (0, vue.computed)(() => props.layout === "horizontal");
const barWrapStyles = (0, vue.computed)(() => {
if (isHorizontal.value) return { width: 0 };
return { height: 0 };
});
const draggerStyles = (0, vue.computed)(() => {
return {
width: isHorizontal.value ? "16px" : "100%",
height: isHorizontal.value ? "100%" : "16px",
cursor: !props.resizable ? "auto" : isHorizontal.value ? "ew-resize" : "ns-resize",
touchAction: "none"
};
});
const draggerPseudoClass = (0, vue.computed)(() => {
const prefix = ns.e("dragger");
return {
[`${prefix}-horizontal`]: isHorizontal.value,
[`${prefix}-vertical`]: !isHorizontal.value,
[`${prefix}-active`]: !!startPos.value
};
});
const startPos = (0, vue.ref)(null);
const onMousedown = (e) => {
if (!props.resizable) return;
startPos.value = [e.pageX, e.pageY];
emit("moveStart", props.index);
window.addEventListener("mouseup", onMouseUp);
window.addEventListener("mousemove", onMouseMove);
};
const onTouchStart = (e) => {
if (props.resizable && e.touches.length === 1) {
e.preventDefault();
const touch = e.touches[0];
startPos.value = [touch.pageX, touch.pageY];
emit("moveStart", props.index);
window.addEventListener("touchend", onTouchEnd);
window.addEventListener("touchmove", onTouchMove);
}
};
const onMouseMove = (e) => {
const { pageX, pageY } = e;
const offsetX = pageX - startPos.value[0];
const offsetY = pageY - startPos.value[1];
const offset = isHorizontal.value ? offsetX : offsetY;
emit("moving", props.index, offset);
};
const onTouchMove = (e) => {
if (e.touches.length === 1) {
e.preventDefault();
const touch = e.touches[0];
const offsetX = touch.pageX - startPos.value[0];
const offsetY = touch.pageY - startPos.value[1];
const offset = isHorizontal.value ? offsetX : offsetY;
emit("moving", props.index, offset);
}
};
const onMouseUp = () => {
startPos.value = null;
window.removeEventListener("mouseup", onMouseUp);
window.removeEventListener("mousemove", onMouseMove);
emit("moveEnd", props.index);
};
const onTouchEnd = () => {
startPos.value = null;
window.removeEventListener("touchend", onTouchEnd);
window.removeEventListener("touchmove", onTouchMove);
emit("moveEnd", props.index);
};
const StartIcon = (0, vue.computed)(() => isHorizontal.value ? arrow_left_default : arrow_up_default);
const EndIcon = (0, vue.computed)(() => isHorizontal.value ? arrow_right_default : arrow_down_default);
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b()]),
style: (0, vue.normalizeStyle)(barWrapStyles.value)
}, [
__props.startCollapsible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("collapse-icon"), (0, vue.unref)(ns).e(`${__props.layout}-collapse-icon-start`)]),
onClick: _cache[0] || (_cache[0] = ($event) => emit("collapse", __props.index, "start"))
}, [(0, vue.renderSlot)(_ctx.$slots, "start-collapsible", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(StartIcon.value), { style: {
"width": "12px",
"height": "12px"
} }))])], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).e("dragger"),
draggerPseudoClass.value,
(0, vue.unref)(ns).is("disabled", !__props.resizable),
(0, vue.unref)(ns).is("lazy", __props.resizable && __props.lazy)
]),
style: (0, vue.normalizeStyle)(draggerStyles.value),
onMousedown,
onTouchstart: onTouchStart
}, null, 38),
__props.endCollapsible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("collapse-icon"), (0, vue.unref)(ns).e(`${__props.layout}-collapse-icon-end`)]),
onClick: _cache[1] || (_cache[1] = ($event) => emit("collapse", __props.index, "end"))
}, [(0, vue.renderSlot)(_ctx.$slots, "end-collapsible", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(EndIcon.value), { style: {
"width": "12px",
"height": "12px"
} }))])], 2)) : (0, vue.createCommentVNode)("v-if", true)
], 6);
};
}
});
//#endregion
//#region ../../packages/components/splitter/src/split-bar.vue
var split_bar_default = split_bar_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/splitter/src/split-panel.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME = "ElSplitterPanel";
var split_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME,
__name: "split-panel",
props: splitterPanelProps,
emits: splitterPanelEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const ns = useNamespace("splitter-panel");
const props = __props;
const emits = __emit;
const splitterContext = (0, vue.inject)(splitterRootContextKey);
if (!splitterContext) throwError(COMPONENT_NAME, "usage: <el-splitter><el-splitter-panel /></el-splitter/>");
const { panels, layout, lazy, containerSize, pxSizes } = (0, vue.toRefs)(splitterContext);
const { registerPanel, unregisterPanel, onCollapse, onMoveEnd, onMoveStart, onMoving } = splitterContext;
const panelEl = (0, vue.ref)();
const instance = (0, vue.getCurrentInstance)();
const uid = instance.uid;
const index = (0, vue.ref)(0);
const panel = (0, vue.computed)(() => panels.value[index.value]);
const setIndex = (val) => {
index.value = val;
};
const panelSize = (0, vue.computed)(() => {
if (!panel.value) return 0;
return pxSizes.value[index.value] ?? 0;
});
const nextSize = (0, vue.computed)(() => {
if (!panel.value) return 0;
return pxSizes.value[index.value + 1] ?? 0;
});
const nextPanel = (0, vue.computed)(() => {
if (panel.value) return panels.value[index.value + 1];
return null;
});
const isResizable = (0, vue.computed)(() => {
if (!nextPanel.value) return false;
return props.resizable && nextPanel.value?.resizable && (panelSize.value !== 0 || !props.min) && (nextSize.value !== 0 || !nextPanel.value.min);
});
const isShowBar = (0, vue.computed)(() => {
if (!panel.value) return false;
return index.value !== panels.value.length - 1;
});
const startCollapsible = (0, vue.computed)(() => isCollapsible(panel.value, panelSize.value, nextPanel.value, nextSize.value));
const endCollapsible = (0, vue.computed)(() => isCollapsible(nextPanel.value, nextSize.value, panel.value, panelSize.value));
function sizeToPx(str) {
if (isPct(str)) return getPct(str) * containerSize.value || 0;
else if (isPx(str)) return getPx(str);
return str ?? 0;
}
let isSizeUpdating = false;
(0, vue.watch)(() => props.size, () => {
if (!isSizeUpdating && panel.value) {
if (!containerSize.value) {
panel.value.size = props.size;
return;
}
const size = sizeToPx(props.size);
const maxSize = sizeToPx(props.max);
const minSize = sizeToPx(props.min);
const finalSize = Math.min(Math.max(size, minSize || 0), maxSize || size);
if (finalSize !== size) emits("update:size", finalSize);
panel.value.size = finalSize;
}
});
(0, vue.watch)(() => panel.value?.size, (val) => {
if (val !== props.size) {
isSizeUpdating = true;
emits("update:size", val);
(0, vue.nextTick)(() => isSizeUpdating = false);
}
});
(0, vue.watch)(() => props.resizable, (val) => {
if (panel.value) panel.value.resizable = val;
});
const _panel = (0, vue.reactive)({
uid,
getVnode: () => instance.vnode,
setIndex,
...props,
collapsible: (0, vue.computed)(() => getCollapsible(props.collapsible))
});
registerPanel(_panel);
(0, vue.onBeforeUnmount)(() => unregisterPanel(_panel));
__expose({ splitterPanelRef: panelEl });
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
ref_key: "panelEl",
ref: panelEl,
class: [(0, vue.unref)(ns).b()],
style: { flexBasis: `${panelSize.value}px` }
}, _ctx.$attrs), [(0, vue.renderSlot)(_ctx.$slots, "default")], 16), isShowBar.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(split_bar_default, {
key: 0,
index: index.value,
layout: (0, vue.unref)(layout),
lazy: (0, vue.unref)(lazy),
resizable: isResizable.value,
"start-collapsible": startCollapsible.value,
"end-collapsible": endCollapsible.value,
onMoveStart: (0, vue.unref)(onMoveStart),
onMoving: (0, vue.unref)(onMoving),
onMoveEnd: (0, vue.unref)(onMoveEnd),
onCollapse: (0, vue.unref)(onCollapse)
}, {
"start-collapsible": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "start-collapsible")]),
"end-collapsible": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "end-collapsible")]),
_: 3
}, 8, [
"index",
"layout",
"lazy",
"resizable",
"start-collapsible",
"end-collapsible",
"onMoveStart",
"onMoving",
"onMoveEnd",
"onCollapse"
])) : (0, vue.createCommentVNode)("v-if", true)], 64);
};
}
});
//#endregion
//#region ../../packages/components/splitter/src/split-panel.vue
var split_panel_default = split_panel_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/splitter/index.ts
const ElSplitter = withInstall(splitter_default, { SplitPanel: split_panel_default });
const ElSplitterPanel = withNoopInstall(split_panel_default);
//#endregion
//#region ../../packages/element-plus/component.ts
var component_default = [
ElAffix,
ElAlert,
ElAutocomplete,
ElAutoResizer,
ElAvatar,
ElAvatarGroup,
ElBacktop,
ElBadge,
ElBreadcrumb,
ElBreadcrumbItem,
ElButton,
ElButtonGroup,
ElCalendar,
ElCard,
ElCarousel,
ElCarouselItem,
ElCascader,
ElCascaderPanel,
ElCheckTag,
ElCheckbox,
ElCheckboxButton,
ElCheckboxGroup,
ElCol,
ElCollapse,
ElCollapseItem,
ElCollapseTransition,
ElColorPickerPanel,
ElColorPicker,
ElConfigProvider,
ElContainer,
ElAside,
ElFooter,
ElHeader,
ElMain,
ElDatePicker,
ElDatePickerPanel,
ElDescriptions,
ElDescriptionsItem,
ElDialog,
ElDivider,
ElDrawer,
ElDropdown,
ElDropdownItem,
ElDropdownMenu,
ElEmpty,
ElForm,
ElFormItem,
ElIcon,
ElImage,
ElImageViewer,
ElInput,
ElInputNumber,
ElInputTag,
ElLink,
ElMenu,
ElMenuItem,
ElMenuItemGroup,
ElSubMenu,
ElPageHeader,
ElPagination,
ElPopconfirm,
ElPopover,
ElPopper,
ElProgress,
ElRadio,
ElRadioButton,
ElRadioGroup,
ElRate,
ElResult,
ElRow,
ElScrollbar,
ElSelect,
ElOption,
ElOptionGroup,
ElSelectV2,
ElSkeleton,
ElSkeletonItem,
ElSlider,
ElSpace,
ElStatistic,
ElCountdown,
ElSteps,
ElStep,
ElSwitch,
ElTable,
ElTableColumn,
ElTableV2,
ElTabs,
ElTabPane,
ElTag,
ElText,
ElTimePicker,
ElTimeSelect,
ElTimeline,
ElTimelineItem,
ElTooltip,
ElTransfer,
ElTree,
ElTreeSelect,
ElTreeV2,
ElUpload,
ElWatermark,
ElTour,
ElTourStep,
ElAnchor,
ElAnchorLink,
ElSegmented,
ElMention,
ElSplitter,
ElSplitterPanel
];
//#endregion
//#region ../../packages/components/infinite-scroll/src/index.ts
const SCOPE$1 = "ElInfiniteScroll";
const CHECK_INTERVAL = 50;
const DEFAULT_DELAY = 200;
const DEFAULT_DISTANCE = 0;
const attributes = {
delay: {
type: Number,
default: DEFAULT_DELAY
},
distance: {
type: Number,
default: DEFAULT_DISTANCE
},
disabled: {
type: Boolean,
default: false
},
immediate: {
type: Boolean,
default: true
}
};
const getScrollOptions = (el, instance) => {
return Object.entries(attributes).reduce((acm, [name, option]) => {
const { type, default: defaultValue } = option;
const attrVal = el.getAttribute(`infinite-scroll-${name}`);
let value = instance[attrVal] ?? attrVal ?? defaultValue;
value = value === "false" ? false : value;
value = type(value);
acm[name] = Number.isNaN(value) ? defaultValue : value;
return acm;
}, {});
};
const destroyObserver = (el) => {
const { observer } = el[SCOPE$1];
if (observer) {
observer.disconnect();
delete el[SCOPE$1].observer;
}
};
const handleScroll = (el, cb) => {
const { container, containerEl, instance, observer, lastScrollTop } = el[SCOPE$1];
const { disabled, distance } = getScrollOptions(el, instance);
const { clientHeight, scrollHeight, scrollTop } = containerEl;
const delta = scrollTop - lastScrollTop;
el[SCOPE$1].lastScrollTop = scrollTop;
if (observer || disabled || delta < 0) return;
let shouldTrigger = false;
if (container === el) shouldTrigger = scrollHeight - (clientHeight + scrollTop) <= distance;
else {
const { clientTop, scrollHeight: height } = el;
const offsetTop = getOffsetTopDistance(el, containerEl);
shouldTrigger = scrollTop + clientHeight >= offsetTop + clientTop + height - distance;
}
if (shouldTrigger) cb.call(instance);
};
function checkFull(el, cb) {
const { containerEl, instance } = el[SCOPE$1];
const { disabled } = getScrollOptions(el, instance);
if (disabled || containerEl.clientHeight === 0) return;
if (containerEl.scrollHeight <= containerEl.clientHeight) cb.call(instance);
else destroyObserver(el);
}
const InfiniteScroll = {
async mounted(el, binding) {
const { instance, value: cb } = binding;
useDeprecated({
scope: SCOPE$1,
from: "the directive v-infinite-scroll",
replacement: "the el-scrollbar infinite scroll",
version: "3.0.0",
ref: "https://element-plus.org/en-US/component/scrollbar#infinite-scroll"
}, true);
if (!isFunction$1(cb)) throwError(SCOPE$1, "'v-infinite-scroll' binding value must be a function");
await (0, vue.nextTick)();
const { delay, immediate } = getScrollOptions(el, instance);
const container = getScrollContainer(el, true);
const containerEl = container === window ? document.documentElement : container;
const onScroll = throttle(handleScroll.bind(null, el, cb), delay);
if (!container) return;
el[SCOPE$1] = {
instance,
container,
containerEl,
delay,
cb,
onScroll,
lastScrollTop: containerEl.scrollTop
};
if (immediate) {
const observer = new MutationObserver(throttle(checkFull.bind(null, el, cb), CHECK_INTERVAL));
el[SCOPE$1].observer = observer;
observer.observe(el, {
childList: true,
subtree: true
});
checkFull(el, cb);
}
container.addEventListener("scroll", onScroll);
},
unmounted(el) {
if (!el[SCOPE$1]) return;
const { container, onScroll } = el[SCOPE$1];
container?.removeEventListener("scroll", onScroll);
destroyObserver(el);
},
async updated(el) {
if (!el[SCOPE$1]) await (0, vue.nextTick)();
else {
const { containerEl, cb, observer } = el[SCOPE$1];
if (containerEl.clientHeight && observer) checkFull(el, cb);
}
}
};
//#endregion
//#region ../../packages/components/infinite-scroll/index.ts
const _InfiniteScroll = InfiniteScroll;
_InfiniteScroll.install = (app) => {
app.directive("InfiniteScroll", _InfiniteScroll);
};
const ElInfiniteScroll = _InfiniteScroll;
//#endregion
//#region ../../packages/components/loading/src/loading.ts
function createLoadingComponent(options, appContext) {
let afterLeaveTimer;
const afterLeaveFlag = (0, vue.ref)(false);
const data = (0, vue.reactive)({
...options,
originalPosition: "",
originalOverflow: "",
visible: false
});
function setText(text) {
data.text = text;
}
function destroySelf() {
const target = data.parent;
const ns = vm.ns;
if (!target.vLoadingAddClassList) {
let loadingNumber = target.getAttribute("loading-number");
loadingNumber = Number.parseInt(loadingNumber) - 1;
if (!loadingNumber) {
removeClass(target, ns.bm("parent", "relative"));
target.removeAttribute("loading-number");
} else target.setAttribute("loading-number", loadingNumber.toString());
removeClass(target, ns.bm("parent", "hidden"));
}
removeElLoadingChild();
loadingInstance.unmount();
}
function removeElLoadingChild() {
vm.$el?.parentNode?.removeChild(vm.$el);
}
function close() {
if (options.beforeClose && !options.beforeClose()) return;
afterLeaveFlag.value = true;
clearTimeout(afterLeaveTimer);
afterLeaveTimer = setTimeout(handleAfterLeave, 400);
data.visible = false;
options.closed?.();
}
function handleAfterLeave() {
if (!afterLeaveFlag.value) return;
const target = data.parent;
afterLeaveFlag.value = false;
target.vLoadingAddClassList = void 0;
destroySelf();
}
const loadingInstance = (0, vue.createApp)((0, vue.defineComponent)({
name: "ElLoading",
setup(_, { expose }) {
const { ns, zIndex } = useGlobalComponentSettings("loading");
expose({
ns,
zIndex
});
return () => {
const svg = data.spinner || data.svg;
const spinner = (0, vue.h)("svg", {
class: "circular",
viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50",
...svg ? { innerHTML: svg } : {}
}, [(0, vue.h)("circle", {
class: "path",
cx: "25",
cy: "25",
r: "20",
fill: "none"
})]);
const spinnerText = data.text ? (0, vue.h)("p", { class: ns.b("text") }, [data.text]) : void 0;
return (0, vue.h)(vue.Transition, {
name: ns.b("fade"),
onAfterLeave: handleAfterLeave
}, { default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)("div", {
style: { backgroundColor: data.background || "" },
class: [
ns.b("mask"),
data.customClass,
ns.is("fullscreen", data.fullscreen)
]
}, [(0, vue.h)("div", { class: ns.b("spinner") }, [spinner, spinnerText])]), [[vue.vShow, data.visible]])]) });
};
}
}));
Object.assign(loadingInstance._context, appContext ?? {});
const vm = loadingInstance.mount(document.createElement("div"));
return {
...(0, vue.toRefs)(data),
setText,
removeElLoadingChild,
close,
handleAfterLeave,
vm,
get $el() {
return vm.$el;
}
};
}
//#endregion
//#region ../../packages/components/loading/src/service.ts
let fullscreenInstance = void 0;
const Loading = function(options = {}, context) {
if (!isClient) return void 0;
const resolved = resolveOptions(options);
if (resolved.fullscreen && fullscreenInstance) return fullscreenInstance;
const instance = createLoadingComponent({
...resolved,
closed: () => {
resolved.closed?.();
if (resolved.fullscreen) fullscreenInstance = void 0;
}
}, context ?? Loading._context);
addStyle(resolved, resolved.parent, instance);
addClassList(resolved, resolved.parent, instance);
resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance);
/**
* add loading-number to parent.
* because if a fullscreen loading is triggered when somewhere
* a v-loading.body was triggered before and it's parent is
* document.body which with a margin , the fullscreen loading's
* destroySelf function will remove 'el-loading-parent--relative',
* and then the position of v-loading.body will be error.
*/
let loadingNumber = resolved.parent.getAttribute("loading-number");
if (!loadingNumber) loadingNumber = "1";
else loadingNumber = `${Number.parseInt(loadingNumber) + 1}`;
resolved.parent.setAttribute("loading-number", loadingNumber);
resolved.parent.appendChild(instance.$el);
(0, vue.nextTick)(() => instance.visible.value = resolved.visible);
if (resolved.fullscreen) fullscreenInstance = instance;
return instance;
};
const resolveOptions = (options) => {
let target;
if (isString(options.target)) target = document.querySelector(options.target) ?? document.body;
else target = options.target || document.body;
return {
parent: target === document.body || options.body ? document.body : target,
background: options.background || "",
svg: options.svg || "",
svgViewBox: options.svgViewBox || "",
spinner: options.spinner || false,
text: options.text || "",
fullscreen: target === document.body && (options.fullscreen ?? true),
lock: options.lock ?? false,
customClass: options.customClass || "",
visible: options.visible ?? true,
beforeClose: options.beforeClose,
closed: options.closed,
target
};
};
const addStyle = async (options, parent, instance) => {
const { nextZIndex } = instance.vm.zIndex || instance.vm._.exposed.zIndex;
const maskStyle = {};
if (options.fullscreen) {
instance.originalPosition.value = getStyle(document.body, "position");
instance.originalOverflow.value = getStyle(document.body, "overflow");
maskStyle.zIndex = nextZIndex();
} else if (options.parent === document.body) {
instance.originalPosition.value = getStyle(document.body, "position");
/**
* await dom render when visible is true in init,
* because some component's height maybe 0.
* e.g. el-table.
*/
await (0, vue.nextTick)();
for (const property of ["top", "left"]) {
const scroll = property === "top" ? "scrollTop" : "scrollLeft";
maskStyle[property] = `${options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property}`), 10)}px`;
}
for (const property of ["height", "width"]) maskStyle[property] = `${options.target.getBoundingClientRect()[property]}px`;
} else instance.originalPosition.value = getStyle(parent, "position");
for (const [key, value] of Object.entries(maskStyle)) instance.$el.style[key] = value;
};
const addClassList = (options, parent, instance) => {
const ns = instance.vm.ns || instance.vm._.exposed.ns;
if (![
"absolute",
"fixed",
"sticky"
].includes(instance.originalPosition.value)) addClass(parent, ns.bm("parent", "relative"));
else removeClass(parent, ns.bm("parent", "relative"));
if (options.fullscreen && options.lock) addClass(parent, ns.bm("parent", "hidden"));
else removeClass(parent, ns.bm("parent", "hidden"));
};
Loading._context = null;
//#endregion
//#region ../../packages/components/loading/src/directive.ts
const INSTANCE_KEY = Symbol("ElLoading");
const getAttributeName = (name) => {
return `element-loading-${hyphenate(name)}`;
};
const createInstance = (el, binding) => {
const vm = binding.instance;
const getBindingProp = (key) => isObject$1(binding.value) ? binding.value[key] : void 0;
const resolveExpression = (key) => {
return (0, vue.ref)(isString(key) && vm?.[key] || key);
};
const getProp = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(getAttributeName(name)));
const fullscreen = getBindingProp("fullscreen") ?? binding.modifiers.fullscreen;
const options = {
text: getProp("text"),
svg: getProp("svg"),
svgViewBox: getProp("svgViewBox"),
spinner: getProp("spinner"),
background: getProp("background"),
customClass: getProp("customClass"),
fullscreen,
target: getBindingProp("target") ?? (fullscreen ? void 0 : el),
body: getBindingProp("body") ?? binding.modifiers.body,
lock: getBindingProp("lock") ?? binding.modifiers.lock
};
const instance = Loading(options);
instance._context = vLoading._context;
el[INSTANCE_KEY] = {
options,
instance
};
};
const updateOptions = (originalOptions, newOptions) => {
for (const key of Object.keys(originalOptions)) if ((0, vue.isRef)(originalOptions[key])) originalOptions[key].value = newOptions[key];
};
const vLoading = {
mounted(el, binding) {
if (binding.value) createInstance(el, binding);
},
updated(el, binding) {
const instance = el[INSTANCE_KEY];
if (!binding.value) {
instance?.instance.close();
el[INSTANCE_KEY] = null;
return;
}
if (!instance) createInstance(el, binding);
else updateOptions(instance.options, isObject$1(binding.value) ? binding.value : {
text: el.getAttribute(getAttributeName("text")),
svg: el.getAttribute(getAttributeName("svg")),
svgViewBox: el.getAttribute(getAttributeName("svgViewBox")),
spinner: el.getAttribute(getAttributeName("spinner")),
background: el.getAttribute(getAttributeName("background")),
customClass: el.getAttribute(getAttributeName("customClass"))
});
},
unmounted(el) {
el[INSTANCE_KEY]?.instance.close();
el[INSTANCE_KEY] = null;
}
};
vLoading._context = null;
//#endregion
//#region ../../packages/components/loading/index.ts
const ElLoading = {
install(app) {
Loading._context = app._context;
vLoading._context = app._context;
app.directive("loading", vLoading);
app.config.globalProperties.$loading = Loading;
},
directive: vLoading,
service: Loading
};
//#endregion
//#region ../../packages/components/message/src/message.ts
const messageTypes = [
"primary",
"success",
"info",
"warning",
"error"
];
const messagePlacement = [
"top",
"top-left",
"top-right",
"bottom",
"bottom-left",
"bottom-right"
];
const MESSAGE_DEFAULT_PLACEMENT = "top";
const messageDefaults = mutable({
customClass: "",
dangerouslyUseHTMLString: false,
duration: 3e3,
icon: void 0,
id: "",
message: "",
onClose: void 0,
showClose: false,
type: "info",
plain: false,
offset: 16,
placement: void 0,
zIndex: 0,
grouping: false,
repeatNum: 1,
appendTo: isClient ? document.body : void 0
});
/**
* @deprecated Removed after 3.0.0, Use `MessageProps` instead.
*/
const messageProps = buildProps({
customClass: {
type: String,
default: messageDefaults.customClass
},
dangerouslyUseHTMLString: {
type: Boolean,
default: messageDefaults.dangerouslyUseHTMLString
},
duration: {
type: Number,
default: messageDefaults.duration
},
icon: {
type: iconPropType,
default: messageDefaults.icon
},
id: {
type: String,
default: messageDefaults.id
},
message: {
type: definePropType([
String,
Object,
Function
]),
default: messageDefaults.message
},
onClose: {
type: definePropType(Function),
default: messageDefaults.onClose
},
showClose: {
type: Boolean,
default: messageDefaults.showClose
},
type: {
type: String,
values: messageTypes,
default: messageDefaults.type
},
plain: {
type: Boolean,
default: messageDefaults.plain
},
offset: {
type: Number,
default: messageDefaults.offset
},
placement: {
type: String,
values: messagePlacement,
default: messageDefaults.placement
},
zIndex: {
type: Number,
default: messageDefaults.zIndex
},
grouping: {
type: Boolean,
default: messageDefaults.grouping
},
repeatNum: {
type: Number,
default: messageDefaults.repeatNum
}
});
const messageEmits = { destroy: () => true };
//#endregion
//#region ../../packages/components/message/src/instance.ts
const placementInstances = (0, vue.shallowReactive)({});
const getOrCreatePlacementInstances = (placement) => {
if (!placementInstances[placement]) placementInstances[placement] = (0, vue.shallowReactive)([]);
return placementInstances[placement];
};
const getInstance = (id, placement) => {
const instances = placementInstances[placement] || [];
const idx = instances.findIndex((instance) => instance.id === id);
const current = instances[idx];
let prev;
if (idx > 0) prev = instances[idx - 1];
return {
current,
prev
};
};
const getLastOffset = (id, placement) => {
const { prev } = getInstance(id, placement);
if (!prev) return 0;
return prev.vm.exposed.bottom.value;
};
const getOffsetOrSpace = (id, offset, placement) => {
return (placementInstances[placement] || []).findIndex((instance) => instance.id === id) > 0 ? 16 : offset;
};
//#endregion
//#region ../../packages/components/message/src/message.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1$2 = ["id"];
const _hoisted_2$2 = ["innerHTML"];
var message_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElMessage",
__name: "message",
props: messageProps,
emits: messageEmits,
setup(__props, { expose: __expose, emit: __emit }) {
const { Close } = TypeComponents;
const props = __props;
const emit = __emit;
const isStartTransition = (0, vue.ref)(false);
const { ns, zIndex } = useGlobalComponentSettings("message");
const { currentZIndex, nextZIndex } = zIndex;
const messageRef = (0, vue.ref)();
const visible = (0, vue.ref)(false);
const height = (0, vue.ref)(0);
let stopTimer = void 0;
const badgeType = (0, vue.computed)(() => props.type ? props.type === "error" ? "danger" : props.type : "info");
const typeClass = (0, vue.computed)(() => {
const type = props.type;
return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] };
});
const iconComponent = (0, vue.computed)(() => props.icon || TypeComponentsMap[props.type] || "");
const placement = (0, vue.computed)(() => props.placement || MESSAGE_DEFAULT_PLACEMENT);
const lastOffset = (0, vue.computed)(() => getLastOffset(props.id, placement.value));
const offset = (0, vue.computed)(() => {
return Math.max(getOffsetOrSpace(props.id, props.offset, placement.value) + lastOffset.value, props.offset);
});
const bottom = (0, vue.computed)(() => height.value + offset.value);
const horizontalClass = (0, vue.computed)(() => {
if (placement.value.includes("left")) return ns.is("left");
if (placement.value.includes("right")) return ns.is("right");
return ns.is("center");
});
const verticalProperty = (0, vue.computed)(() => placement.value.startsWith("top") ? "top" : "bottom");
const customStyle = (0, vue.computed)(() => ({
[verticalProperty.value]: `${offset.value}px`,
zIndex: currentZIndex.value
}));
function startTimer() {
if (props.duration === 0) return;
({stop: stopTimer} = useTimeoutFn(() => {
close();
}, props.duration));
}
function clearTimer() {
stopTimer?.();
}
function close() {
visible.value = false;
(0, vue.nextTick)(() => {
if (!isStartTransition.value) {
props.onClose?.();
emit("destroy");
}
});
}
function keydown(event) {
if (getEventCode(event) === EVENT_CODE.esc) close();
}
(0, vue.onMounted)(() => {
startTimer();
nextZIndex();
visible.value = true;
});
(0, vue.watch)(() => props.repeatNum, () => {
clearTimer();
startTimer();
});
useEventListener(document, "keydown", keydown);
useResizeObserver(messageRef, () => {
height.value = messageRef.value.getBoundingClientRect().height;
});
__expose({
visible,
bottom,
close
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
name: (0, vue.unref)(ns).b("fade"),
onBeforeEnter: _cache[0] || (_cache[0] = ($event) => isStartTransition.value = true),
onBeforeLeave: __props.onClose,
onAfterLeave: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("destroy")),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
id: __props.id,
ref_key: "messageRef",
ref: messageRef,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
{ [(0, vue.unref)(ns).m(__props.type)]: __props.type },
(0, vue.unref)(ns).is("closable", __props.showClose),
(0, vue.unref)(ns).is("plain", __props.plain),
(0, vue.unref)(ns).is("bottom", verticalProperty.value === "bottom"),
horizontalClass.value,
__props.customClass
]),
style: (0, vue.normalizeStyle)(customStyle.value),
role: "alert",
onMouseenter: clearTimer,
onMouseleave: startTimer
}, [
__props.repeatNum > 1 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElBadge), {
key: 0,
value: __props.repeatNum,
type: badgeType.value,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("badge"))
}, null, 8, [
"value",
"type",
"class"
])) : (0, vue.createCommentVNode)("v-if", true),
iconComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), typeClass.value])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [!__props.dangerouslyUseHTMLString ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content"))
}, (0, vue.toDisplayString)(__props.message), 3)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createCommentVNode)(" Caution here, message could've been compromised, never use user's input as message "), (0, vue.createElementVNode)("p", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
innerHTML: __props.message
}, null, 10, _hoisted_2$2)], 2112))]),
__props.showClose ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closeBtn")),
onClick: (0, vue.withModifiers)(close, ["stop"])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(Close))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 46, _hoisted_1$2), [[vue.vShow, visible.value]])]),
_: 3
}, 8, ["name", "onBeforeLeave"]);
};
}
});
//#endregion
//#region ../../packages/components/message/src/message.vue
var message_default = message_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/message/src/method.ts
let seed$1 = 1;
const normalizeAppendTo = (normalized) => {
if (!normalized.appendTo) normalized.appendTo = document.body;
else if (isString(normalized.appendTo)) {
let appendTo = document.querySelector(normalized.appendTo);
if (!isElement$1(appendTo)) {
/* @__PURE__ */ debugWarn("ElMessage", "the appendTo option is not an HTMLElement. Falling back to document.body.");
appendTo = document.body;
}
normalized.appendTo = appendTo;
}
};
const normalizePlacement = (normalized) => {
if (!normalized.placement && isString(messageConfig.placement) && messageConfig.placement) normalized.placement = messageConfig.placement;
if (!normalized.placement) normalized.placement = MESSAGE_DEFAULT_PLACEMENT;
if (!messagePlacement.includes(normalized.placement)) {
/* @__PURE__ */ debugWarn("ElMessage", `Invalid placement: ${normalized.placement}. Falling back to '${MESSAGE_DEFAULT_PLACEMENT}'.`);
normalized.placement = MESSAGE_DEFAULT_PLACEMENT;
}
};
const normalizeOptions = (params) => {
const options = !params || isString(params) || (0, vue.isVNode)(params) || isFunction$1(params) ? { message: params } : params;
const normalized = {
...messageDefaults,
...options
};
normalizeAppendTo(normalized);
normalizePlacement(normalized);
if (isBoolean(messageConfig.grouping) && !normalized.grouping) normalized.grouping = messageConfig.grouping;
if (isNumber(messageConfig.duration) && normalized.duration === 3e3) normalized.duration = messageConfig.duration;
if (isNumber(messageConfig.offset) && normalized.offset === 16) normalized.offset = messageConfig.offset;
if (isBoolean(messageConfig.showClose) && !normalized.showClose) normalized.showClose = messageConfig.showClose;
if (isBoolean(messageConfig.plain) && !normalized.plain) normalized.plain = messageConfig.plain;
return normalized;
};
const closeMessage = (instance) => {
const instances = placementInstances[instance.props.placement || MESSAGE_DEFAULT_PLACEMENT];
const idx = instances.indexOf(instance);
if (idx === -1) return;
instances.splice(idx, 1);
const { handler } = instance;
handler.close();
};
const createMessage = ({ appendTo, ...options }, context) => {
const id = `message_${seed$1++}`;
const userOnClose = options.onClose;
const container = document.createElement("div");
const props = {
...options,
id,
onClose: () => {
userOnClose?.();
closeMessage(instance);
},
onDestroy: () => {
(0, vue.render)(null, container);
}
};
const vnode = (0, vue.createVNode)(message_default, props, isFunction$1(props.message) || (0, vue.isVNode)(props.message) ? { default: isFunction$1(props.message) ? props.message : () => props.message } : null);
vnode.appContext = context || message._context;
(0, vue.render)(vnode, container);
appendTo.appendChild(container.firstElementChild);
const vm = vnode.component;
const instance = {
id,
vnode,
vm,
handler: { close: () => {
vm.exposed.close();
} },
props: vnode.component.props
};
return instance;
};
const message = (options = {}, context) => {
if (!isClient) return { close: () => void 0 };
const normalized = normalizeOptions(options);
const instances = getOrCreatePlacementInstances(normalized.placement || MESSAGE_DEFAULT_PLACEMENT);
if (normalized.grouping && instances.length) {
const instance = instances.find(({ vnode: vm }) => vm.props?.message === normalized.message);
if (instance) {
instance.props.repeatNum += 1;
instance.props.type = normalized.type;
return instance.handler;
}
}
if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) return { close: () => void 0 };
const instance = createMessage(normalized, context);
instances.push(instance);
return instance.handler;
};
messageTypes.forEach((type) => {
message[type] = (options = {}, appContext) => {
return message({
...normalizeOptions(options),
type
}, appContext);
};
});
function closeAll$1(type) {
for (const placement in placementInstances) if (hasOwn(placementInstances, placement)) {
const instances = [...placementInstances[placement]];
for (const instance of instances) if (!type || type === instance.props.type) instance.handler.close();
}
}
function closeAllByPlacement(placement) {
if (!placementInstances[placement]) return;
[...placementInstances[placement]].forEach((instance) => instance.handler.close());
}
message.closeAll = closeAll$1;
message.closeAllByPlacement = closeAllByPlacement;
message._context = null;
//#endregion
//#region ../../packages/components/message/index.ts
const ElMessage = withInstallFunction(message, "$message");
//#endregion
//#region ../../packages/components/message-box/src/index.vue?vue&type=script&lang.ts
var index_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
name: "ElMessageBox",
directives: { TrapFocus },
components: {
ElButton,
ElFocusTrap: focus_trap_default,
ElInput,
ElOverlay,
ElIcon,
...TypeComponents
},
inheritAttrs: false,
props: {
buttonSize: {
type: String,
validator: isValidComponentSize
},
modal: {
type: Boolean,
default: true
},
lockScroll: {
type: Boolean,
default: true
},
showClose: {
type: Boolean,
default: true
},
closeOnClickModal: {
type: Boolean,
default: true
},
closeOnPressEscape: {
type: Boolean,
default: true
},
closeOnHashChange: {
type: Boolean,
default: true
},
center: Boolean,
draggable: Boolean,
overflow: Boolean,
roundButton: Boolean,
container: {
type: String,
default: "body"
},
boxType: {
type: String,
default: ""
}
},
emits: ["vanish", "action"],
setup(props, { emit }) {
const { locale, zIndex, ns, size: btnSize } = useGlobalComponentSettings("message-box", (0, vue.computed)(() => props.buttonSize));
const { t } = locale;
const { nextZIndex } = zIndex;
const visible = (0, vue.ref)(false);
const state = (0, vue.reactive)({
autofocus: true,
beforeClose: null,
callback: null,
cancelButtonText: "",
cancelButtonClass: "",
confirmButtonText: "",
confirmButtonClass: "",
cancelButtonType: "",
confirmButtonType: "primary",
customClass: "",
customStyle: {},
dangerouslyUseHTMLString: false,
distinguishCancelAndClose: false,
icon: "",
closeIcon: "",
inputPattern: null,
inputPlaceholder: "",
inputType: "text",
inputValue: "",
inputValidator: void 0,
inputErrorMessage: "",
message: "",
modalFade: true,
modalClass: "",
showCancelButton: false,
showConfirmButton: true,
type: "",
title: void 0,
showInput: false,
action: "",
confirmButtonLoading: false,
cancelButtonLoading: false,
confirmButtonLoadingIcon: (0, vue.markRaw)(loading_default),
cancelButtonLoadingIcon: (0, vue.markRaw)(loading_default),
confirmButtonDisabled: false,
editorErrorMessage: "",
validateError: false,
zIndex: nextZIndex()
});
const typeClass = (0, vue.computed)(() => {
const type = state.type;
return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] };
});
const contentId = useId();
const inputId = useId();
const iconComponent = (0, vue.computed)(() => {
const type = state.type;
return state.icon || type && TypeComponentsMap[type] || "";
});
const hasMessage = (0, vue.computed)(() => !!state.message);
const rootRef = (0, vue.ref)();
const headerRef = (0, vue.ref)();
const focusStartRef = (0, vue.ref)();
const inputRef = (0, vue.ref)();
const confirmRef = (0, vue.ref)();
const confirmButtonClasses = (0, vue.computed)(() => state.confirmButtonClass);
(0, vue.watch)(() => state.inputValue, async (val) => {
await (0, vue.nextTick)();
if (props.boxType === "prompt" && val) validate();
}, { immediate: true });
(0, vue.watch)(() => visible.value, (val) => {
if (val) {
if (props.boxType !== "prompt") if (state.autofocus) focusStartRef.value = confirmRef.value?.$el ?? rootRef.value;
else focusStartRef.value = rootRef.value;
state.zIndex = nextZIndex();
}
if (props.boxType !== "prompt") return;
if (val) (0, vue.nextTick)().then(() => {
if (inputRef.value && inputRef.value.$el) if (state.autofocus) focusStartRef.value = getInputElement() ?? rootRef.value;
else focusStartRef.value = rootRef.value;
});
else {
state.editorErrorMessage = "";
state.validateError = false;
}
});
const { isDragging } = useDraggable(rootRef, headerRef, (0, vue.computed)(() => props.draggable), (0, vue.computed)(() => props.overflow));
(0, vue.onMounted)(async () => {
await (0, vue.nextTick)();
if (props.closeOnHashChange) window.addEventListener("hashchange", doClose);
});
(0, vue.onBeforeUnmount)(() => {
if (props.closeOnHashChange) window.removeEventListener("hashchange", doClose);
});
function doClose() {
if (!visible.value) return;
visible.value = false;
(0, vue.nextTick)(() => {
if (state.action) emit("action", state.action);
});
}
const handleWrapperClick = () => {
if (props.closeOnClickModal) handleAction(state.distinguishCancelAndClose ? "close" : "cancel");
};
const overlayEvent = useSameTarget(handleWrapperClick);
const handleInputEnter = (e) => {
if (state.inputType !== "textarea" && !inputRef.value?.isComposing) {
e.preventDefault();
return handleAction("confirm");
}
};
const handleAction = (action) => {
if (props.boxType === "prompt" && action === "confirm" && !validate()) return;
state.action = action;
if (state.beforeClose) state.beforeClose?.(action, state, doClose);
else doClose();
};
const validate = () => {
if (props.boxType === "prompt") {
const inputPattern = state.inputPattern;
if (inputPattern && !inputPattern.test(state.inputValue || "")) {
state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error");
state.validateError = true;
return false;
}
const inputValidator = state.inputValidator;
if (isFunction$1(inputValidator)) {
const validateResult = inputValidator(state.inputValue);
if (validateResult === false) {
state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error");
state.validateError = true;
return false;
}
if (isString(validateResult)) {
state.editorErrorMessage = validateResult;
state.validateError = true;
return false;
}
}
}
state.editorErrorMessage = "";
state.validateError = false;
return true;
};
const getInputElement = () => {
const inputRefs = inputRef.value?.$refs;
return inputRefs?.input ?? inputRefs?.textarea;
};
const handleClose = () => {
handleAction("close");
};
const onCloseRequested = () => {
if (props.closeOnPressEscape) handleClose();
};
if (props.lockScroll) useLockscreen(visible, { ns });
return {
...(0, vue.toRefs)(state),
ns,
overlayEvent,
visible,
hasMessage,
typeClass,
contentId,
inputId,
btnSize,
iconComponent,
confirmButtonClasses,
rootRef,
focusStartRef,
headerRef,
inputRef,
isDragging,
confirmRef,
doClose,
handleClose,
onCloseRequested,
handleWrapperClick,
handleInputEnter,
handleAction,
t
};
}
});
//#endregion
//#region ../../packages/components/message-box/src/index.vue
const _hoisted_1$1 = ["aria-label", "aria-describedby"];
const _hoisted_2$1 = ["aria-label"];
const _hoisted_3$1 = ["id"];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_icon = (0, vue.resolveComponent)("el-icon");
const _component_el_input = (0, vue.resolveComponent)("el-input");
const _component_el_button = (0, vue.resolveComponent)("el-button");
const _component_el_focus_trap = (0, vue.resolveComponent)("el-focus-trap");
const _component_el_overlay = (0, vue.resolveComponent)("el-overlay");
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
name: "fade-in-linear",
onAfterLeave: _cache[11] || (_cache[11] = ($event) => _ctx.$emit("vanish")),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)(_component_el_overlay, {
"z-index": _ctx.zIndex,
"overlay-class": [_ctx.ns.is("message-box"), _ctx.modalClass],
mask: _ctx.modal
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
role: "dialog",
"aria-label": _ctx.title,
"aria-modal": "true",
"aria-describedby": !_ctx.showInput ? _ctx.contentId : void 0,
class: (0, vue.normalizeClass)(`${_ctx.ns.namespace.value}-overlay-message-box`),
onClick: _cache[8] || (_cache[8] = (...args) => _ctx.overlayEvent.onClick && _ctx.overlayEvent.onClick(...args)),
onMousedown: _cache[9] || (_cache[9] = (...args) => _ctx.overlayEvent.onMousedown && _ctx.overlayEvent.onMousedown(...args)),
onMouseup: _cache[10] || (_cache[10] = (...args) => _ctx.overlayEvent.onMouseup && _ctx.overlayEvent.onMouseup(...args))
}, [(0, vue.createVNode)(_component_el_focus_trap, {
loop: "",
trapped: _ctx.visible,
"focus-trap-el": _ctx.rootRef,
"focus-start-el": _ctx.focusStartRef,
onReleaseRequested: _ctx.onCloseRequested
}, {
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
ref: "rootRef",
class: (0, vue.normalizeClass)([
_ctx.ns.b(),
_ctx.customClass,
_ctx.ns.is("draggable", _ctx.draggable),
_ctx.ns.is("dragging", _ctx.isDragging),
{ [_ctx.ns.m("center")]: _ctx.center }
]),
style: (0, vue.normalizeStyle)(_ctx.customStyle),
tabindex: "-1",
onClick: _cache[7] || (_cache[7] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, [
_ctx.title !== null && _ctx.title !== void 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 0,
ref: "headerRef",
class: (0, vue.normalizeClass)([_ctx.ns.e("header"), { "show-close": _ctx.showClose }])
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("title")) }, [_ctx.iconComponent && _ctx.center ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 0,
class: (0, vue.normalizeClass)([_ctx.ns.e("status"), _ctx.typeClass])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.title), 1)], 2), _ctx.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
key: 0,
type: "button",
class: (0, vue.normalizeClass)(_ctx.ns.e("headerbtn")),
"aria-label": _ctx.t("el.messagebox.close"),
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel")),
onKeydown: _cache[1] || (_cache[1] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), ["prevent"]), ["enter"]))
}, [(0, vue.createVNode)(_component_el_icon, { class: (0, vue.normalizeClass)(_ctx.ns.e("close")) }, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.closeIcon || "close")))]),
_: 1
}, 8, ["class"])], 42, _hoisted_2$1)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("div", {
id: _ctx.contentId,
class: (0, vue.normalizeClass)(_ctx.ns.e("content"))
}, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("container")) }, [_ctx.iconComponent && !_ctx.center && _ctx.hasMessage ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
key: 0,
class: (0, vue.normalizeClass)([_ctx.ns.e("status"), _ctx.typeClass])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), _ctx.hasMessage ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)(_ctx.ns.e("message"))
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [!_ctx.dangerouslyUseHTMLString ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.showInput ? "label" : "p"), {
key: 0,
for: _ctx.showInput ? _ctx.inputId : void 0,
textContent: (0, vue.toDisplayString)(_ctx.message)
}, null, 8, ["for", "textContent"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.showInput ? "label" : "p"), {
key: 1,
for: _ctx.showInput ? _ctx.inputId : void 0,
innerHTML: _ctx.message
}, null, 8, ["for", "innerHTML"]))])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2), (0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("input")) }, [(0, vue.createVNode)(_component_el_input, {
id: _ctx.inputId,
ref: "inputRef",
modelValue: _ctx.inputValue,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.inputValue = $event),
type: _ctx.inputType,
placeholder: _ctx.inputPlaceholder,
"aria-invalid": _ctx.validateError,
class: (0, vue.normalizeClass)({ invalid: _ctx.validateError }),
onKeydown: (0, vue.withKeys)(_ctx.handleInputEnter, ["enter"])
}, null, 8, [
"id",
"modelValue",
"type",
"placeholder",
"aria-invalid",
"class",
"onKeydown"
]), (0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)(_ctx.ns.e("errormsg")),
style: (0, vue.normalizeStyle)({ visibility: !!_ctx.editorErrorMessage ? "visible" : "hidden" })
}, (0, vue.toDisplayString)(_ctx.editorErrorMessage), 7)], 2), [[vue.vShow, _ctx.showInput]])], 10, _hoisted_3$1),
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("btns")) }, [_ctx.showCancelButton ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_button, {
key: 0,
type: _ctx.cancelButtonType === "text" ? "" : _ctx.cancelButtonType,
text: _ctx.cancelButtonType === "text",
loading: _ctx.cancelButtonLoading,
"loading-icon": _ctx.cancelButtonLoadingIcon,
class: (0, vue.normalizeClass)([_ctx.cancelButtonClass]),
round: _ctx.roundButton,
size: _ctx.btnSize,
onClick: _cache[3] || (_cache[3] = ($event) => _ctx.handleAction("cancel")),
onKeydown: _cache[4] || (_cache[4] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction("cancel"), ["prevent"]), ["enter"]))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.cancelButtonText || _ctx.t("el.messagebox.cancel")), 1)]),
_: 1
}, 8, [
"type",
"text",
"loading",
"loading-icon",
"class",
"round",
"size"
])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.withDirectives)((0, vue.createVNode)(_component_el_button, {
ref: "confirmRef",
type: _ctx.confirmButtonType === "text" ? "" : _ctx.confirmButtonType,
text: _ctx.confirmButtonType === "text",
loading: _ctx.confirmButtonLoading,
"loading-icon": _ctx.confirmButtonLoadingIcon,
class: (0, vue.normalizeClass)([_ctx.confirmButtonClasses]),
round: _ctx.roundButton,
disabled: _ctx.confirmButtonDisabled,
size: _ctx.btnSize,
onClick: _cache[5] || (_cache[5] = ($event) => _ctx.handleAction("confirm")),
onKeydown: _cache[6] || (_cache[6] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction("confirm"), ["prevent"]), ["enter"]))
}, {
default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.confirmButtonText || _ctx.t("el.messagebox.confirm")), 1)]),
_: 1
}, 8, [
"type",
"text",
"loading",
"loading-icon",
"class",
"round",
"disabled",
"size"
]), [[vue.vShow, _ctx.showConfirmButton]])], 2)
], 6)]),
_: 3
}, 8, [
"trapped",
"focus-trap-el",
"focus-start-el",
"onReleaseRequested"
])], 42, _hoisted_1$1)]),
_: 3
}, 8, [
"z-index",
"overlay-class",
"mask"
]), [[vue.vShow, _ctx.visible]])]),
_: 3
});
}
var src_default = /* @__PURE__ */ _plugin_vue_export_helper_default(index_vue_vue_type_script_lang_default, [["render", _sfc_render]]);
//#endregion
//#region ../../packages/components/message-box/src/messageBox.ts
const messageInstance = /* @__PURE__ */ new Map();
const getAppendToElement = (props) => {
let appendTo = document.body;
if (props.appendTo) {
if (isString(props.appendTo)) appendTo = document.querySelector(props.appendTo);
if (isElement$1(props.appendTo)) appendTo = props.appendTo;
if (!isElement$1(appendTo)) {
/* @__PURE__ */ debugWarn("ElMessageBox", "the appendTo option is not an HTMLElement. Falling back to document.body.");
appendTo = document.body;
}
}
return appendTo;
};
const initInstance = (props, container, appContext = null) => {
const vnode = (0, vue.createVNode)(src_default, props, isFunction$1(props.message) || (0, vue.isVNode)(props.message) ? { default: isFunction$1(props.message) ? props.message : () => props.message } : null);
vnode.appContext = appContext;
(0, vue.render)(vnode, container);
getAppendToElement(props).appendChild(container.firstElementChild);
return vnode.component;
};
const genContainer = () => {
return document.createElement("div");
};
const showMessage = (options, appContext) => {
const container = genContainer();
options.onVanish = () => {
(0, vue.render)(null, container);
messageInstance.delete(vm);
};
options.onAction = (action) => {
const currentMsg = messageInstance.get(vm);
let resolve;
if (options.showInput) resolve = {
value: vm.inputValue,
action
};
else resolve = action;
if (options.callback) options.callback(resolve, instance.proxy);
else if (action === "cancel" || action === "close") if (options.distinguishCancelAndClose && action !== "cancel") currentMsg.reject("close");
else currentMsg.reject("cancel");
else currentMsg.resolve(resolve);
};
const instance = initInstance(options, container, appContext);
const vm = instance.proxy;
for (const prop in options) if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) if (prop === "closeIcon" && isObject$1(options[prop])) vm[prop] = (0, vue.markRaw)(options[prop]);
else vm[prop] = options[prop];
vm.visible = true;
return vm;
};
function MessageBox(options, appContext = null) {
if (!isClient) return Promise.reject();
let callback;
if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
else callback = options.callback;
return new Promise((resolve, reject) => {
const vm = showMessage(options, appContext ?? MessageBox._context);
messageInstance.set(vm, {
options,
callback,
resolve,
reject
});
});
}
const MESSAGE_BOX_VARIANTS = [
"alert",
"confirm",
"prompt"
];
const MESSAGE_BOX_DEFAULT_OPTS = {
alert: {
closeOnPressEscape: false,
closeOnClickModal: false
},
confirm: { showCancelButton: true },
prompt: {
showCancelButton: true,
showInput: true
}
};
MESSAGE_BOX_VARIANTS.forEach((boxType) => {
MessageBox[boxType] = messageBoxFactory(boxType);
});
function messageBoxFactory(boxType) {
return (message, title, options, appContext) => {
let titleOrOpts = "";
if (isObject$1(title)) {
options = title;
titleOrOpts = "";
} else if (isUndefined(title)) titleOrOpts = "";
else titleOrOpts = title;
return MessageBox(Object.assign({
title: titleOrOpts,
message,
type: "",
...MESSAGE_BOX_DEFAULT_OPTS[boxType]
}, options, { boxType }), appContext);
};
}
MessageBox.close = () => {
messageInstance.forEach((_, vm) => {
vm.doClose();
});
messageInstance.clear();
};
MessageBox._context = null;
//#endregion
//#region ../../packages/components/message-box/index.ts
const _MessageBox = MessageBox;
_MessageBox.install = (app) => {
_MessageBox._context = app._context;
app.config.globalProperties.$msgbox = _MessageBox;
app.config.globalProperties.$messageBox = _MessageBox;
app.config.globalProperties.$alert = _MessageBox.alert;
app.config.globalProperties.$confirm = _MessageBox.confirm;
app.config.globalProperties.$prompt = _MessageBox.prompt;
};
const ElMessageBox = _MessageBox;
//#endregion
//#region ../../packages/components/notification/src/notification.ts
const notificationTypes = [
"primary",
"success",
"info",
"warning",
"error"
];
/**
* @deprecated Removed after 3.0.0, Use `NotificationProps` instead.
*/
const notificationProps = buildProps({
customClass: {
type: String,
default: ""
},
dangerouslyUseHTMLString: Boolean,
duration: {
type: Number,
default: 4500
},
icon: { type: iconPropType },
id: {
type: String,
default: ""
},
message: {
type: definePropType([
String,
Object,
Function
]),
default: ""
},
offset: {
type: Number,
default: 0
},
onClick: {
type: definePropType(Function),
default: () => void 0
},
onClose: {
type: definePropType(Function),
required: true
},
position: {
type: String,
values: [
"top-right",
"top-left",
"bottom-right",
"bottom-left"
],
default: "top-right"
},
showClose: {
type: Boolean,
default: true
},
title: {
type: String,
default: ""
},
type: {
type: String,
values: [...notificationTypes, ""],
default: ""
},
zIndex: Number,
closeIcon: {
type: iconPropType,
default: close_default
}
});
const notificationEmits = { destroy: () => true };
//#endregion
//#region ../../packages/components/notification/src/notification.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1 = ["id"];
const _hoisted_2 = ["textContent"];
const _hoisted_3 = { key: 0 };
const _hoisted_4 = ["innerHTML"];
var notification_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElNotification",
__name: "notification",
props: notificationProps,
emits: notificationEmits,
setup(__props, { expose: __expose }) {
const props = __props;
const { ns, zIndex } = useGlobalComponentSettings("notification");
const { nextZIndex, currentZIndex } = zIndex;
const visible = (0, vue.ref)(false);
let timer = void 0;
const typeClass = (0, vue.computed)(() => {
const type = props.type;
return type && TypeComponentsMap[props.type] ? ns.m(type) : "";
});
const iconComponent = (0, vue.computed)(() => {
if (!props.type) return props.icon;
return TypeComponentsMap[props.type] || props.icon;
});
const horizontalClass = (0, vue.computed)(() => props.position.endsWith("right") ? "right" : "left");
const verticalProperty = (0, vue.computed)(() => props.position.startsWith("top") ? "top" : "bottom");
const positionStyle = (0, vue.computed)(() => {
return {
[verticalProperty.value]: `${props.offset}px`,
zIndex: props.zIndex ?? currentZIndex.value
};
});
function startTimer() {
if (props.duration > 0) ({stop: timer} = useTimeoutFn(() => {
if (visible.value) close();
}, props.duration));
}
function clearTimer() {
timer?.();
}
function close() {
visible.value = false;
}
function onKeydown(event) {
switch (getEventCode(event)) {
case EVENT_CODE.delete:
case EVENT_CODE.backspace:
clearTimer();
break;
case EVENT_CODE.esc:
if (visible.value) close();
break;
default:
startTimer();
break;
}
}
(0, vue.onMounted)(() => {
startTimer();
nextZIndex();
visible.value = true;
});
useEventListener(document, "keydown", onKeydown);
__expose({
visible,
close
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
name: (0, vue.unref)(ns).b("fade"),
onBeforeLeave: __props.onClose,
onAfterLeave: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("destroy")),
persisted: ""
}, {
default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
id: __props.id,
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
__props.customClass,
horizontalClass.value
]),
style: (0, vue.normalizeStyle)(positionStyle.value),
role: "alert",
onMouseenter: clearTimer,
onMouseleave: startTimer,
onClick: _cache[0] || (_cache[0] = (...args) => __props.onClick && __props.onClick(...args))
}, [iconComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), typeClass.value])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("group")) }, [
(0, vue.createElementVNode)("h2", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")),
textContent: (0, vue.toDisplayString)(__props.title)
}, null, 10, _hoisted_2),
(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
style: (0, vue.normalizeStyle)(!!__props.title ? void 0 : { margin: 0 })
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [!__props.dangerouslyUseHTMLString ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_3, (0, vue.toDisplayString)(__props.message), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createCommentVNode)(" Caution here, message could've been compromised, never use user's input as message "), (0, vue.createElementVNode)("p", { innerHTML: __props.message }, null, 8, _hoisted_4)], 2112))])], 6), [[vue.vShow, __props.message]]),
__props.showClose ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closeBtn")),
onClick: (0, vue.withModifiers)(close, ["stop"])
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.closeIcon)))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
], 2)], 46, _hoisted_1), [[vue.vShow, visible.value]])]),
_: 3
}, 8, ["name", "onBeforeLeave"]);
};
}
});
//#endregion
//#region ../../packages/components/notification/src/notification.vue
var notification_default = notification_vue_vue_type_script_setup_true_lang_default;
//#endregion
//#region ../../packages/components/notification/src/notify.ts
const notifications = {
"top-left": [],
"top-right": [],
"bottom-left": [],
"bottom-right": []
};
const GAP_SIZE = 16;
let seed = 1;
const notify = function(options = {}, context) {
if (!isClient) return { close: () => void 0 };
if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
const position = options.position || "top-right";
let verticalOffset = options.offset || 0;
notifications[position].forEach(({ vm }) => {
verticalOffset += (vm.el?.offsetHeight || 0) + GAP_SIZE;
});
verticalOffset += GAP_SIZE;
const id = `notification_${seed++}`;
const userOnClose = options.onClose;
const props = {
...options,
offset: verticalOffset,
id,
onClose: () => {
close(id, position, userOnClose);
}
};
let appendTo = document.body;
if (isElement$1(options.appendTo)) appendTo = options.appendTo;
else if (isString(options.appendTo)) appendTo = document.querySelector(options.appendTo);
if (!isElement$1(appendTo)) {
/* @__PURE__ */ debugWarn("ElNotification", "the appendTo option is not an HTMLElement. Falling back to document.body.");
appendTo = document.body;
}
const container = document.createElement("div");
const vm = (0, vue.createVNode)(notification_default, props, isFunction$1(props.message) ? props.message : (0, vue.isVNode)(props.message) ? () => props.message : null);
vm.appContext = isUndefined(context) ? notify._context : context;
vm.props.onDestroy = () => {
(0, vue.render)(null, container);
};
(0, vue.render)(vm, container);
notifications[position].push({ vm });
appendTo.appendChild(container.firstElementChild);
return { close: () => {
vm.component.exposed.visible.value = false;
} };
};
notificationTypes.forEach((type) => {
notify[type] = (options = {}, appContext) => {
if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
return notify({
...options,
type
}, appContext);
};
});
/**
* This function gets called when user click `x` button or press `esc` or the time reached its limitation.
* Emitted by transition@before-leave event so that we can fetch the current notification.offsetHeight, if this was called
* by @after-leave the DOM element will be removed from the page thus we can no longer fetch the offsetHeight.
* @param {String} id notification id to be closed
* @param {Position} position the positioning strategy
* @param {Function} userOnClose the callback called when close passed by user
*/
function close(id, position, userOnClose) {
const orientedNotifications = notifications[position];
const idx = orientedNotifications.findIndex(({ vm }) => vm.component?.props.id === id);
if (idx === -1) return;
const { vm } = orientedNotifications[idx];
if (!vm) return;
userOnClose?.(vm);
const removedHeight = vm.el.offsetHeight;
const verticalPos = position.split("-")[0];
orientedNotifications.splice(idx, 1);
const len = orientedNotifications.length;
if (len < 1) return;
for (let i = idx; i < len; i++) {
const { el, component } = orientedNotifications[i].vm;
const pos = Number.parseInt(el.style[verticalPos], 10) - removedHeight - GAP_SIZE;
component.props.offset = pos;
}
}
function closeAll() {
for (const orientedNotifications of Object.values(notifications)) orientedNotifications.forEach(({ vm }) => {
vm.component.exposed.visible.value = false;
});
}
function updateOffsets(position = "top-right") {
let verticalOffset = notifications[position][0]?.vm.component?.props?.offset || 0;
for (const { vm } of notifications[position]) {
vm.component.props.offset = verticalOffset;
verticalOffset += (vm.el?.offsetHeight || 0) + GAP_SIZE;
}
}
notify.closeAll = closeAll;
notify.updateOffsets = updateOffsets;
notify._context = null;
//#endregion
//#region ../../packages/components/notification/index.ts
const ElNotification = withInstallFunction(notify, "$notify");
//#endregion
//#region ../../packages/element-plus/plugin.ts
var plugin_default = [
ElInfiniteScroll,
ElLoading,
ElMessage,
ElMessageBox,
ElNotification,
ElPopoverDirective
];
//#endregion
//#region ../../packages/element-plus/defaults.ts
var defaults_default = makeInstaller([...component_default, ...plugin_default]);
//#endregion
//#region ../../packages/element-plus/index.ts
const install = defaults_default.install;
const version = defaults_default.version;
var element_plus_default = defaults_default;
//#endregion
exports.BAR_MAP = BAR_MAP;
exports.BORDER_HORIZONTAL_WIDTH = BORDER_HORIZONTAL_WIDTH;
exports.CAROUSEL_ITEM_NAME = CAROUSEL_ITEM_NAME;
exports.CASCADER_PANEL_INJECTION_KEY = CASCADER_PANEL_INJECTION_KEY;
exports.CHANGE_EVENT = CHANGE_EVENT;
exports.ClickOutside = ClickOutside;
exports.CommonPicker = picker_default;
exports.CommonProps = CommonProps;
exports.DEFAULT_DIALOG_TRANSITION = DEFAULT_DIALOG_TRANSITION;
exports.DEFAULT_EMPTY_VALUES = DEFAULT_EMPTY_VALUES;
exports.DEFAULT_FORMATS_DATE = DEFAULT_FORMATS_DATE;
exports.DEFAULT_FORMATS_DATEPICKER = DEFAULT_FORMATS_DATEPICKER;
exports.DEFAULT_FORMATS_TIME = DEFAULT_FORMATS_TIME;
exports.DEFAULT_STEP = DEFAULT_STEP;
exports.DEFAULT_VALUE_ON_CLEAR = DEFAULT_VALUE_ON_CLEAR;
exports.DROPDOWN_INJECTION_KEY = DROPDOWN_INJECTION_KEY;
exports.DROPDOWN_INSTANCE_INJECTION_KEY = DROPDOWN_INSTANCE_INJECTION_KEY;
exports.DefaultProps = DefaultProps;
exports.DynamicSizeGrid = DynamicSizeGrid;
exports.DynamicSizeList = DynamicSizeList;
exports.EVENT_CODE = EVENT_CODE;
exports.Effect = Effect;
exports.ElAffix = ElAffix;
exports.ElAlert = ElAlert;
exports.ElAnchor = ElAnchor;
exports.ElAnchorLink = ElAnchorLink;
exports.ElAside = ElAside;
exports.ElAutoResizer = ElAutoResizer;
exports.ElAutocomplete = ElAutocomplete;
exports.ElAvatar = ElAvatar;
exports.ElAvatarGroup = ElAvatarGroup;
exports.ElBacktop = ElBacktop;
exports.ElBadge = ElBadge;
exports.ElBreadcrumb = ElBreadcrumb;
exports.ElBreadcrumbItem = ElBreadcrumbItem;
exports.ElButton = ElButton;
exports.ElButtonGroup = ElButtonGroup;
exports.ElCalendar = ElCalendar;
exports.ElCard = ElCard;
exports.ElCarousel = ElCarousel;
exports.ElCarouselItem = ElCarouselItem;
exports.ElCascader = ElCascader;
exports.ElCascaderPanel = ElCascaderPanel;
exports.ElCheckTag = ElCheckTag;
exports.ElCheckbox = ElCheckbox;
exports.ElCheckboxButton = ElCheckboxButton;
exports.ElCheckboxGroup = ElCheckboxGroup;
exports.ElCol = ElCol;
exports.ElCollapse = ElCollapse;
exports.ElCollapseItem = ElCollapseItem;
exports.ElCollapseTransition = ElCollapseTransition;
exports.ElColorPicker = ElColorPicker;
exports.ElColorPickerPanel = ElColorPickerPanel;
exports.ElConfigProvider = ElConfigProvider;
exports.ElContainer = ElContainer;
exports.ElCountdown = ElCountdown;
exports.ElDatePicker = ElDatePicker;
exports.ElDatePickerPanel = ElDatePickerPanel;
exports.ElDescriptions = ElDescriptions;
exports.ElDescriptionsItem = ElDescriptionsItem;
exports.ElDialog = ElDialog;
exports.ElDivider = ElDivider;
exports.ElDrawer = ElDrawer;
exports.ElDropdown = ElDropdown;
exports.ElDropdownItem = ElDropdownItem;
exports.ElDropdownMenu = ElDropdownMenu;
exports.ElEmpty = ElEmpty;
exports.ElFooter = ElFooter;
exports.ElForm = ElForm;
exports.ElFormItem = ElFormItem;
exports.ElHeader = ElHeader;
exports.ElIcon = ElIcon;
exports.ElImage = ElImage;
exports.ElImageViewer = ElImageViewer;
exports.ElInfiniteScroll = ElInfiniteScroll;
exports.ElInput = ElInput;
exports.ElInputNumber = ElInputNumber;
exports.ElInputTag = ElInputTag;
exports.ElLink = ElLink;
exports.ElLoading = ElLoading;
exports.ElLoadingDirective = vLoading;
exports.vLoading = vLoading;
exports.ElLoadingService = Loading;
exports.ElMain = ElMain;
exports.ElMention = ElMention;
exports.ElMenu = ElMenu;
exports.ElMenuItem = ElMenuItem;
exports.ElMenuItemGroup = ElMenuItemGroup;
exports.ElMessage = ElMessage;
exports.ElMessageBox = ElMessageBox;
exports.ElNotification = ElNotification;
exports.ElOption = ElOption;
exports.ElOptionGroup = ElOptionGroup;
exports.ElOverlay = ElOverlay;
exports.ElPageHeader = ElPageHeader;
exports.ElPagination = ElPagination;
exports.ElPopconfirm = ElPopconfirm;
exports.ElPopover = ElPopover;
exports.ElPopoverDirective = ElPopoverDirective;
exports.ElPopper = ElPopper;
exports.ElPopperArrow = arrow_default;
exports.ElPopperContent = content_default;
exports.ElPopperTrigger = trigger_default;
exports.ElProgress = ElProgress;
exports.ElRadio = ElRadio;
exports.ElRadioButton = ElRadioButton;
exports.ElRadioGroup = ElRadioGroup;
exports.ElRate = ElRate;
exports.ElResult = ElResult;
exports.ElRow = ElRow;
exports.ElScrollbar = ElScrollbar;
exports.ElSegmented = ElSegmented;
exports.ElSelect = ElSelect;
exports.ElSelectV2 = ElSelectV2;
exports.ElSkeleton = ElSkeleton;
exports.ElSkeletonItem = ElSkeletonItem;
exports.ElSlider = ElSlider;
exports.ElSpace = ElSpace;
exports.ElSplitter = ElSplitter;
exports.ElSplitterPanel = ElSplitterPanel;
exports.ElStatistic = ElStatistic;
exports.ElStep = ElStep;
exports.ElSteps = ElSteps;
exports.ElSubMenu = ElSubMenu;
exports.ElSwitch = ElSwitch;
exports.ElTabPane = ElTabPane;
exports.ElTable = ElTable;
exports.ElTableColumn = ElTableColumn;
exports.ElTableV2 = ElTableV2;
exports.ElTabs = ElTabs;
exports.ElTag = ElTag;
exports.ElText = ElText;
exports.ElTimePicker = ElTimePicker;
exports.ElTimeSelect = ElTimeSelect;
exports.ElTimeline = ElTimeline;
exports.ElTimelineItem = ElTimelineItem;
exports.ElTooltip = ElTooltip;
exports.ElTour = ElTour;
exports.ElTourStep = ElTourStep;
exports.ElTransfer = ElTransfer;
exports.ElTree = ElTree;
exports.ElTreeSelect = ElTreeSelect;
exports.ElTreeV2 = ElTreeV2;
exports.ElUpload = ElUpload;
exports.ElWatermark = ElWatermark;
exports.FIRST_KEYS = FIRST_KEYS;
exports.FIRST_LAST_KEYS = FIRST_LAST_KEYS;
exports.FORWARD_REF_INJECTION_KEY = FORWARD_REF_INJECTION_KEY;
exports.FixedSizeGrid = FixedSizeGrid;
exports.FixedSizeList = FixedSizeList;
exports.GAP = GAP;
exports.ID_INJECTION_KEY = ID_INJECTION_KEY;
exports.INPUT_EVENT = INPUT_EVENT;
exports.INSTALLED_KEY = INSTALLED_KEY;
exports.IconComponentMap = IconComponentMap;
exports.IconMap = IconMap;
exports.LAST_KEYS = LAST_KEYS;
exports.LEFT_CHECK_CHANGE_EVENT = LEFT_CHECK_CHANGE_EVENT;
exports.MENU_INJECTION_KEY = MENU_INJECTION_KEY;
exports.MESSAGE_DEFAULT_PLACEMENT = MESSAGE_DEFAULT_PLACEMENT;
exports.MINIMUM_INPUT_WIDTH = MINIMUM_INPUT_WIDTH;
exports.Mousewheel = Mousewheel;
exports.NODE_INSTANCE_INJECTION_KEY = NODE_INSTANCE_INJECTION_KEY;
exports.PICKER_BASE_INJECTION_KEY = PICKER_BASE_INJECTION_KEY;
exports.PICKER_POPPER_OPTIONS_INJECTION_KEY = PICKER_POPPER_OPTIONS_INJECTION_KEY;
exports.POPPER_CONTENT_INJECTION_KEY = POPPER_CONTENT_INJECTION_KEY;
exports.POPPER_INJECTION_KEY = POPPER_INJECTION_KEY;
exports.RIGHT_CHECK_CHANGE_EVENT = RIGHT_CHECK_CHANGE_EVENT;
exports.ROOT_COMMON_COLOR_INJECTION_KEY = ROOT_COMMON_COLOR_INJECTION_KEY;
exports.ROOT_COMMON_PICKER_INJECTION_KEY = ROOT_COMMON_PICKER_INJECTION_KEY;
exports.ROOT_PICKER_INJECTION_KEY = ROOT_PICKER_INJECTION_KEY;
exports.ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY = ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY;
exports.ROOT_TREE_INJECTION_KEY = ROOT_TREE_INJECTION_KEY;
exports.RowAlign = RowAlign;
exports.RowJustify = RowJustify;
exports.SCOPE = SCOPE;
exports.SIZE_INJECTION_KEY = SIZE_INJECTION_KEY;
exports.STEPS_INJECTION_KEY = STEPS_INJECTION_KEY;
exports.SUB_MENU_INJECTION_KEY = SUB_MENU_INJECTION_KEY;
exports.TIMELINE_INJECTION_KEY = TIMELINE_INJECTION_KEY;
exports.TOOLTIP_INJECTION_KEY = TOOLTIP_INJECTION_KEY;
exports.TREE_NODE_MAP_INJECTION_KEY = TREE_NODE_MAP_INJECTION_KEY;
exports.TableV2 = TableV2;
exports.TableV2Alignment = Alignment;
exports.TableV2FixedDir = FixedDir;
exports.TableV2Placeholder = placeholderSign;
exports.TableV2SortOrder = SortOrder;
exports.TimePickPanel = panel_time_pick_default;
exports.TrapFocus = TrapFocus;
exports.UPDATE_MODEL_EVENT = UPDATE_MODEL_EVENT;
exports.WEEK_DAYS = WEEK_DAYS;
exports.ZINDEX_INJECTION_KEY = ZINDEX_INJECTION_KEY;
exports.affixEmits = affixEmits;
exports.affixProps = affixProps;
exports.alertEffects = alertEffects;
exports.alertEmits = alertEmits;
exports.alertProps = alertProps;
exports.anchorEmits = anchorEmits;
exports.anchorProps = anchorProps;
exports.ariaProps = ariaProps;
exports.arrowMiddleware = arrowMiddleware;
exports.autoResizerProps = autoResizerProps;
exports.autocompleteEmits = autocompleteEmits;
exports.autocompleteProps = autocompleteProps;
exports.avatarEmits = avatarEmits;
exports.avatarGroupContextKey = avatarGroupContextKey;
exports.avatarGroupProps = avatarGroupProps;
exports.avatarProps = avatarProps;
exports.backtopEmits = backtopEmits;
exports.backtopProps = backtopProps;
exports.badgeProps = badgeProps;
exports.breadcrumbItemProps = breadcrumbItemProps;
exports.breadcrumbKey = breadcrumbKey;
exports.breadcrumbProps = breadcrumbProps;
exports.buildLocaleContext = buildLocaleContext;
exports.buildTimeList = buildTimeList;
exports.buildTranslator = buildTranslator;
exports.buttonEmits = buttonEmits;
exports.buttonGroupContextKey = buttonGroupContextKey;
exports.buttonNativeTypes = buttonNativeTypes;
exports.buttonProps = buttonProps;
exports.buttonTypes = buttonTypes;
exports.calendarEmits = calendarEmits;
exports.calendarProps = calendarProps;
exports.cardContextKey = cardContextKey;
exports.cardProps = cardProps;
exports.carouselContextKey = carouselContextKey;
exports.carouselEmits = carouselEmits;
exports.carouselItemProps = carouselItemProps;
exports.carouselProps = carouselProps;
exports.cascaderEmits = cascaderEmits;
exports.cascaderPanelEmits = cascaderPanelEmits;
exports.cascaderPanelProps = cascaderPanelProps;
exports.cascaderProps = cascaderProps;
exports.checkTagEmits = checkTagEmits;
exports.checkTagProps = checkTagProps;
exports.checkboxDefaultProps = checkboxDefaultProps;
exports.checkboxEmits = checkboxEmits;
exports.checkboxGroupContextKey = checkboxGroupContextKey;
exports.checkboxGroupEmits = checkboxGroupEmits;
exports.checkboxGroupProps = checkboxGroupProps;
exports.checkboxProps = checkboxProps;
exports.checkboxPropsDefaults = checkboxPropsDefaults;
exports.colProps = colProps;
exports.collapseContextKey = collapseContextKey;
exports.collapseEmits = collapseEmits;
exports.collapseItemProps = collapseItemProps;
exports.collapseProps = collapseProps;
exports.colorPickerEmits = colorPickerEmits;
exports.colorPickerPanelContextKey = colorPickerPanelContextKey;
exports.colorPickerPanelEmits = colorPickerPanelEmits;
exports.colorPickerPanelProps = colorPickerPanelProps;
exports.colorPickerProps = colorPickerProps;
exports.colorPickerPropsDefaults = colorPickerPropsDefaults;
exports.columnAlignment = columnAlignment;
exports.componentSizeMap = componentSizeMap;
exports.componentSizes = componentSizes;
exports.configProviderContextKey = configProviderContextKey;
exports.configProviderProps = configProviderProps;
exports.countdownEmits = countdownEmits;
exports.countdownProps = countdownProps;
exports.createModelToggleComposable = createModelToggleComposable;
exports.dateEquals = dateEquals;
exports.datePickTypes = datePickTypes;
exports.datePickerPanelProps = datePickerPanelProps;
exports.datePickerProps = datePickerProps;
exports.dayOrDaysToDate = dayOrDaysToDate;
Object.defineProperty(exports, 'dayjs', {
enumerable: true,
get: function () {
return import_dayjs_min.default;
}
});
exports.default = element_plus_default;
exports.defaultInitialZIndex = defaultInitialZIndex;
exports.defaultNamespace = defaultNamespace;
exports.defaultProps = defaultProps;
exports.descriptionItemProps = descriptionItemProps;
exports.descriptionProps = descriptionProps;
exports.dialogContextKey = dialogContextKey;
exports.dialogEmits = dialogEmits;
exports.dialogInjectionKey = dialogInjectionKey;
exports.dialogProps = dialogProps;
exports.dialogPropsDefaults = dialogPropsDefaults;
exports.dividerProps = dividerProps;
exports.drawerEmits = drawerEmits;
exports.drawerProps = drawerProps;
exports.dropdownItemProps = dropdownItemProps;
exports.dropdownMenuProps = dropdownMenuProps;
exports.dropdownProps = dropdownProps;
exports.elPaginationKey = elPaginationKey;
exports.emitChangeFn = emitChangeFn;
exports.emptyProps = emptyProps;
exports.emptyValuesContextKey = emptyValuesContextKey;
exports.extractDateFormat = extractDateFormat;
exports.extractTimeFormat = extractTimeFormat;
exports.formContextKey = formContextKey;
exports.formEmits = formEmits;
exports.formItemContextKey = formItemContextKey;
exports.formItemProps = formItemProps;
exports.formItemValidateStates = formItemValidateStates;
exports.formMetaProps = formMetaProps;
exports.formProps = formProps;
exports.formatter = formatter;
exports.genFileId = genFileId;
exports.getPositionDataWithUnit = getPositionDataWithUnit;
exports.iconProps = iconProps;
exports.imageEmits = imageEmits;
exports.imageProps = imageProps;
exports.imageViewerEmits = imageViewerEmits;
exports.imageViewerProps = imageViewerProps;
exports.inputEmits = inputEmits;
exports.inputNumberEmits = inputNumberEmits;
exports.inputNumberProps = inputNumberProps;
exports.inputProps = inputProps;
exports.inputPropsDefaults = inputPropsDefaults;
exports.inputTagEmits = inputTagEmits;
exports.inputTagProps = inputTagProps;
exports.install = install;
exports.linkEmits = linkEmits;
exports.linkProps = linkProps;
exports.localeContextKey = localeContextKey;
exports.makeInstaller = makeInstaller;
exports.makeList = makeList;
exports.mentionDefaultProps = mentionDefaultProps;
exports.mentionEmits = mentionEmits;
exports.mentionProps = mentionProps;
exports.menuEmits = menuEmits;
exports.menuItemEmits = menuItemEmits;
exports.menuItemGroupProps = menuItemGroupProps;
exports.menuItemProps = menuItemProps;
exports.menuProps = menuProps;
exports.messageConfig = messageConfig;
exports.messageDefaults = messageDefaults;
exports.messageEmits = messageEmits;
exports.messagePlacement = messagePlacement;
exports.messageProps = messageProps;
exports.messageTypes = messageTypes;
exports.namespaceContextKey = namespaceContextKey;
exports.notificationEmits = notificationEmits;
exports.notificationProps = notificationProps;
exports.notificationTypes = notificationTypes;
exports.overlayEmits = overlayEmits;
exports.overlayProps = overlayProps;
exports.pageHeaderEmits = pageHeaderEmits;
exports.pageHeaderProps = pageHeaderProps;
exports.paginationEmits = paginationEmits;
exports.paginationProps = paginationProps;
exports.parseDate = parseDate;
exports.popconfirmEmits = popconfirmEmits;
exports.popconfirmProps = popconfirmProps;
exports.popoverEmits = popoverEmits;
exports.popoverProps = popoverProps;
exports.popoverPropsDefaults = popoverPropsDefaults;
exports.popperArrowProps = popperArrowProps;
exports.popperArrowPropsDefaults = popperArrowPropsDefaults;
exports.popperContentEmits = popperContentEmits;
exports.popperContentProps = popperContentProps;
exports.popperContentPropsDefaults = popperContentPropsDefaults;
exports.popperCoreConfigProps = popperCoreConfigProps;
exports.popperCoreConfigPropsDefaults = popperCoreConfigPropsDefaults;
exports.popperProps = popperProps;
exports.popperTriggerProps = popperTriggerProps;
exports.progressProps = progressProps;
exports.provideGlobalConfig = provideGlobalConfig;
exports.radioButtonProps = radioButtonProps;
exports.radioButtonPropsDefaults = radioButtonPropsDefaults;
exports.radioDefaultProps = radioDefaultProps;
exports.radioEmits = radioEmits;
exports.radioGroupEmits = radioGroupEmits;
exports.radioGroupKey = radioGroupKey;
exports.radioGroupProps = radioGroupProps;
exports.radioGroupPropsDefaults = radioGroupPropsDefaults;
exports.radioProps = radioProps;
exports.radioPropsBase = radioPropsBase;
exports.radioPropsDefaults = radioPropsDefaults;
exports.rangeArr = rangeArr;
exports.rateEmits = rateEmits;
exports.rateProps = rateProps;
exports.renderThumbStyle = renderThumbStyle;
exports.resultProps = resultProps;
exports.roleTypes = roleTypes;
exports.rowContextKey = rowContextKey;
exports.rowProps = rowProps;
exports.scrollbarContextKey = scrollbarContextKey;
exports.scrollbarEmits = scrollbarEmits;
exports.scrollbarProps = scrollbarProps;
exports.segmentedEmits = segmentedEmits;
exports.segmentedProps = segmentedProps;
exports.selectEmits = selectEmits;
exports.selectGroupKey = selectGroupKey;
exports.selectKey = selectKey;
exports.selectProps = selectProps;
exports.selectV2InjectionKey = selectV2InjectionKey;
exports.skeletonItemProps = skeletonItemProps;
exports.skeletonProps = skeletonProps;
exports.sliderContextKey = sliderContextKey;
exports.sliderEmits = sliderEmits;
exports.sliderProps = sliderProps;
exports.spaceItemProps = spaceItemProps;
exports.spaceProps = spaceProps;
exports.splitterEmits = splitterEmits;
exports.splitterPanelEmits = splitterPanelEmits;
exports.splitterPanelProps = splitterPanelProps;
exports.splitterProps = splitterProps;
exports.statisticProps = statisticProps;
exports.stepProps = stepProps;
exports.stepsEmits = stepsEmits;
exports.stepsProps = stepsProps;
exports.subMenuProps = subMenuProps;
exports.switchEmits = switchEmits;
exports.switchProps = switchProps;
exports.tabBarProps = tabBarProps;
exports.tabNavEmits = tabNavEmits;
exports.tabNavProps = tabNavProps;
exports.tabPaneProps = tabPaneProps;
exports.tableV2Props = tableV2Props;
exports.tableV2RowProps = tableV2RowProps;
exports.tabsEmits = tabsEmits;
exports.tabsProps = tabsProps;
exports.tabsRootContextKey = tabsRootContextKey;
exports.tagEmits = tagEmits;
exports.tagProps = tagProps;
exports.textProps = textProps;
exports.thumbProps = thumbProps;
exports.timePickerDefaultProps = timePickerDefaultProps;
exports.timePickerRangeTriggerProps = timePickerRangeTriggerProps;
exports.timePickerRngeTriggerProps = timePickerRngeTriggerProps;
exports.timeSelectProps = timeSelectProps;
exports.timeUnits = timeUnits;
exports.timelineItemProps = timelineItemProps;
exports.timelineProps = timelineProps;
exports.tooltipEmits = tooltipEmits;
exports.tourContentEmits = tourContentEmits;
exports.tourContentProps = tourContentProps;
exports.tourEmits = tourEmits;
exports.tourPlacements = tourPlacements;
exports.tourProps = tourProps;
exports.tourStepEmits = tourStepEmits;
exports.tourStepProps = tourStepProps;
exports.tourStrategies = tourStrategies;
exports.transferCheckedChangeFn = transferCheckedChangeFn;
exports.transferEmits = transferEmits;
exports.transferProps = transferProps;
exports.translate = translate;
exports.treeEmits = treeEmits;
exports.treeProps = treeProps;
exports.uploadBaseProps = uploadBaseProps;
exports.uploadBasePropsDefaults = uploadBasePropsDefaults;
exports.uploadContentProps = uploadContentProps;
exports.uploadContentPropsDefaults = uploadContentPropsDefaults;
exports.uploadContextKey = uploadContextKey;
exports.uploadDraggerEmits = uploadDraggerEmits;
exports.uploadDraggerProps = uploadDraggerProps;
exports.uploadListEmits = uploadListEmits;
exports.uploadListProps = uploadListProps;
exports.uploadListTypes = uploadListTypes;
exports.uploadProps = uploadProps;
exports.uploadPropsDefaults = uploadPropsDefaults;
exports.useAriaProps = useAriaProps;
exports.useAttrs = useAttrs;
exports.useCalcInputWidth = useCalcInputWidth;
exports.useCascaderConfig = useCascaderConfig;
exports.useComposition = useComposition;
exports.useCursor = useCursor;
exports.useDelayedRender = useDelayedRender;
exports.useDelayedToggle = useDelayedToggle;
exports.useDelayedToggleProps = useDelayedToggleProps;
exports.useDelayedTogglePropsDefaults = useDelayedTogglePropsDefaults;
exports.useDeprecated = useDeprecated;
exports.useDialog = useDialog;
exports.useDisabled = useDisabled;
exports.useDraggable = useDraggable;
exports.useEmptyValues = useEmptyValues;
exports.useEmptyValuesProps = useEmptyValuesProps;
exports.useEscapeKeydown = useEscapeKeydown;
exports.useFloating = useFloating;
exports.useFloatingProps = useFloatingProps;
exports.useFocus = useFocus;
exports.useFocusController = useFocusController;
exports.useFormDisabled = useFormDisabled;
exports.useFormItem = useFormItem;
exports.useFormItemInputId = useFormItemInputId;
exports.useFormSize = useFormSize;
exports.useForwardRef = useForwardRef;
exports.useForwardRefDirective = useForwardRefDirective;
exports.useGetDerivedNamespace = useGetDerivedNamespace;
exports.useGlobalComponentSettings = useGlobalComponentSettings;
exports.useGlobalConfig = useGlobalConfig;
exports.useGlobalSize = useGlobalSize;
exports.useId = useId;
exports.useIdInjection = useIdInjection;
exports.useLocale = useLocale;
exports.useLockscreen = useLockscreen;
exports.useModal = useModal;
exports.useModelToggle = useModelToggle;
exports.useModelToggleEmits = useModelToggleEmits;
exports.useModelToggleProps = useModelToggleProps;
exports.useNamespace = useNamespace;
exports.useOrderedChildren = useOrderedChildren;
exports.usePopper = usePopper;
exports.usePopperArrowProps = usePopperArrowProps;
exports.usePopperContainer = usePopperContainer;
exports.usePopperContainerId = usePopperContainerId;
exports.usePopperContentEmits = usePopperContentEmits;
exports.usePopperContentProps = usePopperContentProps;
exports.usePopperCoreConfigProps = usePopperCoreConfigProps;
exports.usePopperProps = usePopperProps;
exports.usePopperTriggerProps = usePopperTriggerProps;
exports.usePreventGlobal = usePreventGlobal;
exports.useProp = useProp;
exports.useSameTarget = useSameTarget;
exports.useSize = useSize;
exports.useSizeProp = useSizeProp;
exports.useSizeProps = useSizeProps;
exports.useSpace = useSpace;
exports.useTeleport = useTeleport;
exports.useThrottleRender = useThrottleRender;
exports.useTimeout = useTimeout;
exports.useTooltipContentProps = useTooltipContentProps;
exports.useTooltipContentPropsDefaults = useTooltipContentPropsDefaults;
exports.useTooltipModelToggle = useTooltipModelToggle;
exports.useTooltipModelToggleEmits = useTooltipModelToggleEmits;
exports.useTooltipModelToggleProps = useTooltipModelToggleProps;
exports.useTooltipProps = useTooltipProps;
exports.useTooltipTriggerProps = useTooltipTriggerProps;
exports.useTooltipTriggerPropsDefaults = useTooltipTriggerPropsDefaults;
exports.useTransitionFallthrough = useTransitionFallthrough;
exports.useTransitionFallthroughEmits = useTransitionFallthroughEmits;
exports.useZIndex = useZIndex;
exports.vRepeatClick = vRepeatClick;
exports.valueEquals = valueEquals;
exports.version = version;
exports.virtualizedGridProps = virtualizedGridProps;
exports.virtualizedListProps = virtualizedListProps;
exports.virtualizedProps = virtualizedProps;
exports.virtualizedScrollbarProps = virtualizedScrollbarProps;
exports.watermarkProps = watermarkProps;
exports.zIndexContextKey = zIndexContextKey;
});