/*! Element Plus v2.13.6 */ (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_typescript@5.5.4_/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} */ 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 = window.setTimeout(fn, delay); }; const cancelTimeout = () => window.clearTimeout(timeoutHandle); 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: * * * */ 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.6"; //#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) => { 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) => { if (field.prop) fields.splice(fields.indexOf(field), 1); }; 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: "); 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); }; (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 }); (0, vue.provide)(formItemContextKey, 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({}) }, 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 attrs = 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 { 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 _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 && !!props.maxlength && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword); const textLength = (0, vue.computed)(() => nativeInputValue.value.length); const inputExceed = (0, vue.computed)(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength)); 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; if (lazy) { emit(INPUT_EVENT, value); return; } value = formatValue(value); if (String(value) === nativeInputValue.value) { if (props.formatter) setNativeInputValue(); return; } 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, (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, 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.minlength, maxlength: __props.maxlength, 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)(__props.maxlength), 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.minlength, maxlength: __props.maxlength, 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)(__props.maxlength), 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: wrapScrollTop + wrapRef.value.clientHeight >= wrapRef.value.scrollHeight - props.distance, top: wrapScrollTop <= props.distance && prevTop !== 0, right: wrapScrollLeft + wrapRef.value.clientWidth >= wrapRef.value.scrollWidth - props.distance && 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; }; (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(); if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value); }); }); (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)(() => pick(props, 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 * * @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 * * *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 { 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; if (userInput.value) { const value = parseUserInputToDayjs(displayValue.value); if (value) { if (isValidValue(value)) emitInput(dayOrDaysToDate(value)); userInput.value = null; } } if (userInput.value === "") { 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("YYYY-MM-DD"), 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: "); 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); } return { ns, id, containerKls, currentLabel, itemSelected, isDisabled, select, visible, hover, states, hoverItem, 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)), onClick: _cache[1] || (_cache[1] = (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: "); 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 } = (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 model = (0, vue.computed)({ get() { return isGroup.value ? checkboxGroup?.modelValue?.value : props.modelValue ?? selfModel.value; }, 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 = ` `; } 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(); !filtering.value && 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; val ? handleFilter() : 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` 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 || "HH:mm:ss") : 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 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(); } (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, titleId, bodyId, closed, style, overlayDialogStyle, rendered, visible, zIndex, transitionConfig, _draggable, _alignCenter, _overflow, closing }; }; //#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, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented, closing } = useDialog(props, dialogRef); (0, vue.provide)(dialogInjectionKey, { dialogRef, headerRef, bodyId, ns, rendered, style }); const overlayEvent = useSameTarget(onModalClick); const penetrable = (0, vue.computed)(() => props.modalPenetrable && !props.modal && !props.fullscreen); 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", penetrable.value) ], "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) }), (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" ])) : (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); return { ns, contentId: select.contentId, hoverItem, 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)), onClick: _cache[1] || (_cache[1] = (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` 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, 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, ""); 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, ``); 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: "); 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: "); 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: { direction: { type: String, required: false, default: "horizontal" }, options: { type: Array, required: false, default: () => [] }, modelValue: { type: [ String, Number, Boolean ], required: false, default: void 0 }, props: { type: Object, required: false, default: () => defaultProps }, block: { type: Boolean, required: false }, size: { type: null, required: false }, disabled: { type: Boolean, required: false, default: void 0 }, validateEvent: { type: Boolean, required: false, default: true }, id: { type: String, required: false }, name: { type: String, required: false }, ariaLabel: { type: String, required: false } }, 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)(() => pick(props, 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: "); 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 getOffsetOrSpace(props.id, props.offset, placement.value) + lastOffset.value; }); 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; });