import { BORDER_HORIZONTAL_WIDTH, ElTag, MINIMUM_INPUT_WIDTH, cAF, defaultProps, escapeStringRegexp, rAF, tagProps, useCalcInputWidth, useProps } from "./chunk-LZ2AJP2V.js"; import { ClickOutside } from "./chunk-SSCO4CCM.js"; import { BAR_MAP, Ee, ElTooltip, useTooltipContentProps } from "./chunk-7F6Y7TML.js"; import { EVENT_CODE, getEventCode } from "./chunk-BUVJOKYK.js"; import { isFirefox, useComposition, useFocusController } from "./chunk-6KKRONM6.js"; import { mutable } from "./chunk-VJPYMOVT.js"; import { useEmptyValues, useEmptyValuesProps } from "./chunk-22HKH5YS.js"; import { useLocale } from "./chunk-APPTXKCZ.js"; import { ValidateComponentsMap, iconPropType } from "./chunk-R665FMDM.js"; import { ElIcon } from "./chunk-3DJYPQW6.js"; import { CHANGE_EVENT, UPDATE_MODEL_EVENT, useAriaProps } from "./chunk-6VHTGKN7.js"; import { useFormItem, useFormItemInputId, useId } from "./chunk-DIGHH22S.js"; import { isClient, isIOS, useDebounceFn, useEventListener, useFormSize, useResizeObserver, useSizeProp } from "./chunk-FYPMSKES.js"; import { debugWarn, isBoolean, isEmpty, isNumber, isUndefined } from "./chunk-UFIWN4M6.js"; import { _export_sfc } from "./chunk-MUJDDH7P.js"; import { buildProp, buildProps, definePropType, findLastIndex_default, get_default, isEqual_default, memoize_default, useNamespace, withInstall } from "./chunk-R2OGZABH.js"; import { arrow_down_default, circle_close_default } from "./chunk-3C23FNYW.js"; import { Fragment, computed, createBaseVNode, createBlock, createCommentVNode, createElementBlock, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, inject, mergeProps, nextTick, onActivated, onBeforeUnmount, onMounted, onUpdated, openBlock, provide, reactive, ref, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, toRaw, toRefs, unref, vModelText, vShow, watch, watchEffect, withCtx, withDirectives, withKeys, withModifiers } from "./chunk-AAHVYXXY.js"; import { hasOwn, init_shared_esm_bundler, isArray, isFunction, isObject, isString, normalizeClass, normalizeProps, normalizeStyle, toDisplayString } from "./chunk-OWZYVOTZ.js"; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/group-item.mjs var _sfc_main = defineComponent({ props: { item: { type: Object, required: true }, style: { type: Object }, height: Number }, setup() { const ns = useNamespace("select"); return { ns }; } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.ns.be("group", "title")), style: normalizeStyle({ ..._ctx.style, lineHeight: `${_ctx.height}px` }) }, toDisplayString(_ctx.item.label), 7); } var GroupItem = _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "group-item.vue"]]); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/useOption.mjs function useOption(props2, { emit }) { return { hoverItem: () => { if (!props2.disabled) { emit("hover", props2.index); } }, selectOptionClick: () => { if (!props2.disabled) { emit("select", props2.item, props2.index); } } }; } // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/defaults.mjs var 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, maxCollapseTags: { type: Number, default: 1 }, defaultFirstOption: Boolean, disabled: Boolean, 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 }, valueKey: { type: String, default: "value" }, scrollbarAlwaysOn: Boolean, validateEvent: { type: Boolean, default: true }, offset: { type: Number, default: 12 }, 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"]) }); var optionV2Props = buildProps({ data: Array, disabled: Boolean, hovering: Boolean, item: { type: definePropType(Object), required: true }, index: Number, style: Object, selected: Boolean, created: Boolean }); var 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 }; var optionV2Emits = { hover: (index) => isNumber(index), select: (val, index) => true }; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/token.mjs var selectV2InjectionKey = Symbol("ElSelectV2Injection"); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/option-item.mjs var _sfc_main2 = defineComponent({ props: optionV2Props, emits: optionV2Emits, setup(props2, { emit }) { const select = inject(selectV2InjectionKey); const ns = useNamespace("select"); const { hoverItem, selectOptionClick } = useOption(props2, { emit }); const { getLabel } = useProps(select.props); const contentId = select.contentId; return { ns, contentId, hoverItem, selectOptionClick, getLabel }; } }); function _sfc_render2(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("li", { id: `${_ctx.contentId}-${_ctx.index}`, role: "option", "aria-selected": _ctx.selected, "aria-disabled": _ctx.disabled || void 0, style: normalizeStyle(_ctx.style), class: 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: _ctx.hoverItem, onClick: withModifiers(_ctx.selectOptionClick, ["stop"]) }, [ renderSlot(_ctx.$slots, "default", { item: _ctx.item, index: _ctx.index, disabled: _ctx.disabled }, () => [ createBaseVNode("span", null, toDisplayString(_ctx.getLabel(_ctx.item)), 1) ]) ], 46, ["id", "aria-selected", "aria-disabled", "onMousemove", "onClick"]); } var OptionItem = _export_sfc(_sfc_main2, [["render", _sfc_render2], ["__file", "option-item.vue"]]); // ../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, isEqual2) { if (isEqual2 === void 0) { isEqual2 = areInputsEqual; } var cache2 = null; function memoized() { var newArgs = []; for (var _i = 0; _i < arguments.length; _i++) { newArgs[_i] = arguments[_i]; } if (cache2 && cache2.lastThis === this && isEqual2(newArgs, cache2.lastArgs)) { return cache2.lastResult; } var lastResult = resultFn.apply(this, newArgs); cache2 = { lastResult, lastArgs: newArgs, lastThis: this }; return lastResult; } memoized.clear = function clear() { cache2 = null; }; return memoized; } // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/hooks/use-cache.mjs var useCache = () => { const vm = getCurrentInstance(); const props2 = vm.proxy.$props; return computed(() => { const _getItemStyleCache = (_, __, ___) => ({}); return props2.perfMode ? memoize_default(_getItemStyleCache) : memoizeOne(_getItemStyleCache); }); }; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/defaults.mjs var DEFAULT_DYNAMIC_LIST_ITEM_SIZE = 50; var ITEM_RENDER_EVT = "itemRendered"; var SCROLL_EVT = "scroll"; var FORWARD = "forward"; var BACKWARD = "backward"; var AUTO_ALIGNMENT = "auto"; var SMART_ALIGNMENT = "smart"; var START_ALIGNMENT = "start"; var CENTERED_ALIGNMENT = "center"; var END_ALIGNMENT = "end"; var HORIZONTAL = "horizontal"; var VERTICAL = "vertical"; var LTR = "ltr"; var RTL = "rtl"; var RTL_OFFSET_NAG = "negative"; var RTL_OFFSET_POS_ASC = "positive-ascending"; var RTL_OFFSET_POS_DESC = "positive-descending"; var ScrollbarSizeKey = { [HORIZONTAL]: "height", [VERTICAL]: "width" }; var ScrollbarDirKey = { [HORIZONTAL]: "left", [VERTICAL]: "top" }; var SCROLLBAR_MIN_SIZE = 20; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/hooks/use-wheel.mjs var LayoutKeys = { [HORIZONTAL]: "deltaX", [VERTICAL]: "deltaY" }; var useWheel = ({ atEndEdge, atStartEdge, layout: layout2 }, onWheelDelta) => { let frameHandle; let offset = 0; const hasReachedEdge = (offset2) => { const edgeReached = offset2 < 0 && atStartEdge.value || offset2 > 0 && atEndEdge.value; return edgeReached; }; const onWheel = (e) => { cAF(frameHandle); const newOffset = e[LayoutKeys[layout2.value]]; if (hasReachedEdge(offset) && hasReachedEdge(offset + newOffset)) return; offset += newOffset; if (!isFirefox()) { e.preventDefault(); } frameHandle = rAF(() => { onWheelDelta(offset); offset = 0; }); }; return { hasReachedEdge, onWheel }; }; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/props.mjs var itemSize = buildProp({ type: definePropType([Number, Function]), required: true }); var estimatedItemSize = buildProp({ type: Number }); var cache = buildProp({ type: Number, default: 2 }); var direction = buildProp({ type: String, values: ["ltr", "rtl"], default: "ltr" }); var initScrollOffset = buildProp({ type: Number, default: 0 }); var total = buildProp({ type: Number, required: true }); var layout = buildProp({ type: String, values: ["horizontal", "vertical"], default: VERTICAL }); var 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 }); var virtualizedListProps = buildProps({ cache, estimatedItemSize, layout, initScrollOffset, total, itemSize, ...virtualizedProps }); var scrollbarSize = { type: Number, default: 6 }; var startGap = { type: Number, default: 0 }; var endGap = { type: Number, default: 2 }; var virtualizedGridProps = buildProps({ columnCache: cache, columnWidth: itemSize, estimatedColumnWidth: estimatedItemSize, estimatedRowHeight: estimatedItemSize, initScrollLeft: initScrollOffset, initScrollTop: initScrollOffset, itemKey: { type: definePropType(Function), default: ({ columnIndex, rowIndex }) => `${rowIndex}:${columnIndex}` }, rowCache: cache, rowHeight: itemSize, totalColumn: total, totalRow: total, hScrollbarSize: scrollbarSize, vScrollbarSize: scrollbarSize, scrollbarStartGap: startGap, scrollbarEndGap: endGap, role: String, ...virtualizedProps }); var 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 }); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/utils.mjs var getScrollDir = (prev, cur) => prev < cur ? FORWARD : BACKWARD; var isHorizontal = (dir) => dir === LTR || dir === RTL || dir === HORIZONTAL; var isRTL = (dir) => dir === RTL; var 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({ move, size, bar }, layout2) { const style = {}; const translate = `translate${bar.axis}(${move}px)`; style[bar.size] = size; style.transform = translate; if (layout2 === "horizontal") { style.height = "100%"; } else { style.width = "100%"; } return style; } // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/components/scrollbar.mjs var ScrollBar = defineComponent({ name: "ElVirtualScrollBar", props: virtualizedScrollbarProps, emits: ["scroll", "start-move", "stop-move"], setup(props2, { emit }) { const GAP = computed(() => props2.startGap + props2.endGap); const nsVirtualScrollbar = useNamespace("virtual-scrollbar"); const nsScrollbar = useNamespace("scrollbar"); const trackRef = ref(); const thumbRef = ref(); let frameHandle = null; let onselectstartStore = null; const state = reactive({ isDragging: false, traveled: 0 }); const bar = computed(() => BAR_MAP[props2.layout]); const trackSize = computed(() => props2.clientSize - unref(GAP)); const trackStyle = computed(() => ({ position: "absolute", width: `${HORIZONTAL === props2.layout ? trackSize.value : props2.scrollbarSize}px`, height: `${HORIZONTAL === props2.layout ? props2.scrollbarSize : trackSize.value}px`, [ScrollbarDirKey[props2.layout]]: "2px", right: "2px", bottom: "2px", borderRadius: "4px" })); const thumbSize = computed(() => { const ratio = props2.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 = computed(() => { if (!Number.isFinite(thumbSize.value)) { return { display: "none" }; } const thumb = `${thumbSize.value}px`; const style = renderThumbStyle({ bar: bar.value, size: thumb, move: state.traveled }, props2.layout); return style; }); const totalSteps = computed(() => Math.ceil(props2.clientSize - thumbSize.value - unref(GAP))); const attachEvents = () => { window.addEventListener("mousemove", onMouseMove); window.addEventListener("mouseup", onMouseUp); const thumbEl = 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 = 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); const offset = (trackRef.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1; const thumbClickPosition = thumbRef.value[bar.value.offset] - prevPage; const distance = offset - thumbClickPosition; frameHandle = rAF(() => { state.traveled = Math.max(0, Math.min(distance, totalSteps.value)); emit("scroll", distance, totalSteps.value); }); }; const clickTrackHandler = (e) => { const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); const thumbHalf = thumbRef.value[bar.value.offset] / 2; const distance = offset - thumbHalf; state.traveled = Math.max(0, Math.min(distance, totalSteps.value)); emit("scroll", distance, totalSteps.value); }; watch(() => props2.scrollFrom, (v) => { if (state.isDragging) return; state.traveled = Math.ceil(v * totalSteps.value); }); onBeforeUnmount(() => { detachEvents(); }); return () => { return h("div", { role: "presentation", ref: trackRef, class: [ nsVirtualScrollbar.b(), props2.class, (props2.alwaysOn || state.isDragging) && "always-on" ], style: trackStyle.value, onMousedown: withModifiers(clickTrackHandler, ["stop", "prevent"]), onTouchstartPrevent: onThumbMouseDown }, h("div", { ref: thumbRef, class: nsScrollbar.e("thumb"), style: thumbStyle.value, onMousedown: onThumbMouseDown }, [])); }; } }); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/builders/build-list.mjs init_shared_esm_bundler(); var createList = ({ name, getOffset, getItemSize, getItemOffset, getEstimatedTotalSize: getEstimatedTotalSize2, getStartIndexForOffset, getStopIndexForStartIndex, initCache, clearCache, validateProps }) => { return defineComponent({ name: name != null ? name : "ElVirtualList", props: virtualizedListProps, emits: [ITEM_RENDER_EVT, SCROLL_EVT], setup(props2, { emit, expose }) { validateProps(props2); const instance = getCurrentInstance(); const ns = useNamespace("vl"); const dynamicSizeCache = ref(initCache(props2, instance)); const getItemStyleCache = useCache(); const windowRef = ref(); const innerRef = ref(); const scrollbarRef = ref(); const states = ref({ isScrolling: false, scrollDir: "forward", scrollOffset: isNumber(props2.initScrollOffset) ? props2.initScrollOffset : 0, updateRequested: false, isScrollbarDragging: false, scrollbarAlwaysOn: props2.scrollbarAlwaysOn }); const itemsToRender = computed(() => { const { total: total2, cache: cache2 } = props2; const { isScrolling, scrollDir, scrollOffset } = unref(states); if (total2 === 0) { return [0, 0, 0, 0]; } const startIndex = getStartIndexForOffset(props2, scrollOffset, unref(dynamicSizeCache)); const stopIndex = getStopIndexForStartIndex(props2, startIndex, scrollOffset, unref(dynamicSizeCache)); const cacheBackward = !isScrolling || scrollDir === BACKWARD ? Math.max(1, cache2) : 1; const cacheForward = !isScrolling || scrollDir === FORWARD ? Math.max(1, cache2) : 1; return [ Math.max(0, startIndex - cacheBackward), Math.max(0, Math.min(total2 - 1, stopIndex + cacheForward)), startIndex, stopIndex ]; }); const estimatedTotalSize = computed(() => getEstimatedTotalSize2(props2, unref(dynamicSizeCache))); const _isHorizontal = computed(() => isHorizontal(props2.layout)); const windowStyle = computed(() => [ { position: "relative", [`overflow-${_isHorizontal.value ? "x" : "y"}`]: "scroll", WebkitOverflowScrolling: "touch", willChange: "transform" }, { direction: props2.direction, height: isNumber(props2.height) ? `${props2.height}px` : props2.height, width: isNumber(props2.width) ? `${props2.width}px` : props2.width }, props2.style ]); const innerStyle = computed(() => { const size = unref(estimatedTotalSize); const horizontal = unref(_isHorizontal); return { height: horizontal ? "100%" : `${size}px`, pointerEvents: unref(states).isScrolling ? "none" : void 0, width: horizontal ? `${size}px` : "100%" }; }); const clientSize = computed(() => _isHorizontal.value ? props2.width : props2.height); const { onWheel } = useWheel({ atStartEdge: computed(() => states.value.scrollOffset <= 0), atEndEdge: computed(() => states.value.scrollOffset >= estimatedTotalSize.value), layout: computed(() => props2.layout) }, (offset) => { var _a, _b; (_b = (_a = scrollbarRef.value).onMouseUp) == null ? void 0 : _b.call(_a); scrollTo(Math.min(states.value.scrollOffset + offset, estimatedTotalSize.value - clientSize.value)); }); useEventListener(windowRef, "wheel", onWheel, { passive: false }); const emitEvents = () => { const { total: total2 } = props2; if (total2 > 0) { const [cacheStart, cacheEnd, visibleStart, visibleEnd] = unref(itemsToRender); emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd); } const { scrollDir, scrollOffset, updateRequested } = unref(states); emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested); }; const scrollVertically = (e) => { const { clientHeight, scrollHeight, scrollTop } = e.currentTarget; const _states = 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 }; nextTick(resetIsScrolling); }; const scrollHorizontally = (e) => { const { clientWidth, scrollLeft, scrollWidth } = e.currentTarget; const _states = unref(states); if (_states.scrollOffset === scrollLeft) { return; } const { direction: direction2 } = props2; let scrollOffset = scrollLeft; if (direction2 === 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 }; nextTick(resetIsScrolling); }; const onScroll = (e) => { 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 === unref(states).scrollOffset) { return; } states.value = { ...unref(states), scrollOffset: offset, scrollDir: getScrollDir(unref(states).scrollOffset, offset), updateRequested: true }; nextTick(resetIsScrolling); }; const scrollToItem = (idx, alignment = AUTO_ALIGNMENT) => { const { scrollOffset } = unref(states); idx = Math.max(0, Math.min(idx, props2.total - 1)); scrollTo(getOffset(props2, idx, alignment, scrollOffset, unref(dynamicSizeCache))); }; const getItemStyle = (idx) => { const { direction: direction2, itemSize: itemSize2, layout: layout2 } = props2; const itemStyleCache = getItemStyleCache.value(clearCache && itemSize2, clearCache && layout2, clearCache && direction2); let style; if (hasOwn(itemStyleCache, String(idx))) { style = itemStyleCache[idx]; } else { const offset = getItemOffset(props2, idx, unref(dynamicSizeCache)); const size = getItemSize(props2, idx, unref(dynamicSizeCache)); const horizontal = unref(_isHorizontal); const isRtl = direction2 === 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; nextTick(() => { getItemStyleCache.value(-1, null, null); }); }; const resetScrollTop = () => { const window2 = windowRef.value; if (window2) { window2.scrollTop = 0; } }; onMounted(() => { if (!isClient) return; const { initScrollOffset: initScrollOffset2 } = props2; const windowElement = unref(windowRef); if (isNumber(initScrollOffset2) && windowElement) { if (unref(_isHorizontal)) { windowElement.scrollLeft = initScrollOffset2; } else { windowElement.scrollTop = initScrollOffset2; } } emitEvents(); }); onUpdated(() => { const { direction: direction2, layout: layout2 } = props2; const { scrollOffset, updateRequested } = unref(states); const windowElement = unref(windowRef); if (updateRequested && windowElement) { if (layout2 === HORIZONTAL) { if (direction2 === 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; } } }); onActivated(() => { unref(windowRef).scrollTop = 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) { var _a; const { $slots, className, clientSize, containerElement, data, getItemStyle, innerElement, itemsToRender, innerStyle, layout: layout2, total: total2, onScroll, onScrollbarScroll, states, useIsScrolling, windowStyle, ns } = ctx; const [start, end] = itemsToRender; const Container = resolveDynamicComponent(containerElement); const Inner = resolveDynamicComponent(innerElement); const children = []; if (total2 > 0) { for (let i = start; i <= end; i++) { children.push(h(Fragment, { key: i }, (_a = $slots.default) == null ? void 0 : _a.call($slots, { data, index: i, isScrolling: useIsScrolling ? states.isScrolling : void 0, style: getItemStyle(i) }))); } } const InnerNode = [ h(Inner, mergeProps(ctx.innerProps, { style: innerStyle, ref: "innerRef" }), !isString(Inner) ? { default: () => children } : children) ]; const scrollbar = h(ScrollBar, { ref: "scrollbarRef", clientSize, layout: layout2, onScroll: onScrollbarScroll, ratio: clientSize * 100 / this.estimatedTotalSize, scrollFrom: states.scrollOffset / (this.estimatedTotalSize - clientSize), total: total2, alwaysOn: states.scrollbarAlwaysOn }); const listContainer = h(Container, { class: [ns.e("window"), className], style: windowStyle, onScroll, ref: "windowRef", key: 0 }, !isString(Container) ? { default: () => [InnerNode] } : [InnerNode]); return h("div", { key: 0, class: [ns.e("wrapper"), states.scrollbarAlwaysOn ? "always-on" : ""] }, [listContainer, scrollbar]); } }); }; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/components/fixed-size-list.mjs var FixedSizeList = createList({ name: "ElFixedSizeList", getItemOffset: ({ itemSize: itemSize2 }, index) => index * itemSize2, getItemSize: ({ itemSize: itemSize2 }) => itemSize2, getEstimatedTotalSize: ({ total: total2, itemSize: itemSize2 }) => itemSize2 * total2, getOffset: ({ height, total: total2, itemSize: itemSize2, layout: layout2, width }, index, alignment, scrollOffset) => { const size = isHorizontal(layout2) ? width : height; const lastItemOffset = Math.max(0, total2 * itemSize2 - size); const maxOffset = Math.min(lastItemOffset, index * itemSize2); const minOffset = Math.max(0, (index + 1) * itemSize2 - 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: total2, itemSize: itemSize2 }, offset) => Math.max(0, Math.min(total2 - 1, Math.floor(offset / itemSize2))), getStopIndexForStartIndex: ({ height, total: total2, itemSize: itemSize2, layout: layout2, width }, startIndex, scrollOffset) => { const offset = startIndex * itemSize2; const size = isHorizontal(layout2) ? width : height; const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize2); return Math.max(0, Math.min(total2 - 1, startIndex + numVisibleItems - 1)); }, initCache() { return void 0; }, clearCache: true, validateProps() { } }); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/virtual-list/src/components/dynamic-size-list.mjs var getItemFromCache = (props2, index, listCache) => { const { itemSize: itemSize2 } = props2; 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 = itemSize2(i); items[i] = { offset, size }; offset += size; } listCache.lastVisitedIndex = index; } return items[index]; }; var findItem = (props2, listCache, offset) => { const { items, lastVisitedIndex } = listCache; const lastVisitedOffset = lastVisitedIndex > 0 ? items[lastVisitedIndex].offset : 0; if (lastVisitedOffset >= offset) { return bs(props2, listCache, 0, lastVisitedIndex, offset); } return es(props2, listCache, Math.max(0, lastVisitedIndex), offset); }; var bs = (props2, listCache, low, high, offset) => { while (low <= high) { const mid = low + Math.floor((high - low) / 2); const currentOffset = getItemFromCache(props2, 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); }; var es = (props2, listCache, index, offset) => { const { total: total2 } = props2; let exponent = 1; while (index < total2 && getItemFromCache(props2, index, listCache).offset < offset) { index += exponent; exponent *= 2; } return bs(props2, listCache, Math.floor(index / 2), Math.min(index, total2 - 1), offset); }; var getEstimatedTotalSize = ({ total: total2 }, { items, estimatedItemSize: estimatedItemSize2, lastVisitedIndex }) => { let totalSizeOfMeasuredItems = 0; if (lastVisitedIndex >= total2) { lastVisitedIndex = total2 - 1; } if (lastVisitedIndex >= 0) { const item = items[lastVisitedIndex]; totalSizeOfMeasuredItems = item.offset + item.size; } const numUnmeasuredItems = total2 - lastVisitedIndex - 1; const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize2; return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems; }; var DynamicSizeList = createList({ name: "ElDynamicSizeList", getItemOffset: (props2, index, listCache) => getItemFromCache(props2, index, listCache).offset, getItemSize: (_, index, { items }) => items[index].size, getEstimatedTotalSize, getOffset: (props2, index, alignment, scrollOffset, listCache) => { const { height, layout: layout2, width } = props2; const size = isHorizontal(layout2) ? width : height; const item = getItemFromCache(props2, index, listCache); const estimatedTotalSize = getEstimatedTotalSize(props2, 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: (props2, offset, listCache) => findItem(props2, listCache, offset), getStopIndexForStartIndex: (props2, startIndex, scrollOffset, listCache) => { const { height, total: total2, layout: layout2, width } = props2; const size = isHorizontal(layout2) ? width : height; const item = getItemFromCache(props2, startIndex, listCache); const maxOffset = scrollOffset + size; let offset = item.offset + item.size; let stopIndex = startIndex; while (stopIndex < total2 - 1 && offset < maxOffset) { stopIndex++; offset += getItemFromCache(props2, stopIndex, listCache).size; } return stopIndex; }, initCache({ estimatedItemSize: estimatedItemSize2 = DEFAULT_DYNAMIC_LIST_ITEM_SIZE }, instance) { const cache2 = { items: {}, estimatedItemSize: estimatedItemSize2, lastVisitedIndex: -1 }; cache2.clearCacheAfterIndex = (index, forceUpdate = true) => { var _a, _b; cache2.lastVisitedIndex = Math.min(cache2.lastVisitedIndex, index - 1); (_a = instance.exposed) == null ? void 0 : _a.getItemStyleCache(-1); if (forceUpdate) { (_b = instance.proxy) == null ? void 0 : _b.$forceUpdate(); } }; return cache2; }, clearCache: false, validateProps: ({ itemSize: itemSize2 }) => { } }); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/select-dropdown.mjs init_shared_esm_bundler(); var props = { loading: Boolean, data: { type: Array, required: true }, hoveringIndex: Number, width: Number, id: String, ariaLabel: String }; var ElSelectMenu = defineComponent({ name: "ElSelectDropdown", props, setup(props2, { slots, expose }) { const select = inject(selectV2InjectionKey); const ns = useNamespace("select"); const { getLabel, getValue, getDisabled } = useProps(select.props); const cachedHeights = ref([]); const listRef = ref(); const size = computed(() => props2.data.length); watch(() => size.value, () => { var _a, _b; (_b = (_a = select.tooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); }); const isSized = computed(() => isUndefined(select.props.estimatedOptionHeight)); const listProps = 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(target)) { return arr.includes(target); } return arr && arr.some((item) => { return toRaw(get_default(item, valueKey)) === get_default(target, valueKey); }); }; const isEqual2 = (selected, target) => { if (!isObject(target)) { return selected === target; } else { const { valueKey } = select.props; return get_default(selected, valueKey) === get_default(target, valueKey); } }; const isItemSelected = (modelValue, target) => { if (select.props.multiple) { return contains(modelValue, getValue(target)); } return isEqual2(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) => props2.hoveringIndex === target; const scrollToItem = (index) => { const list = listRef.value; if (list) { list.scrollToItem(index); } }; const resetScrollTop = () => { const list = listRef.value; if (list) { list.resetScrollTop(); } }; const exposed = { listRef, isSized, isItemDisabled, isItemHovering, isItemSelected, scrollToItem, resetScrollTop }; expose(exposed); const Item = (itemProps) => { const { index, data, style } = itemProps; const sized = unref(isSized); const { itemSize: itemSize2, estimatedSize } = unref(listProps); const { modelValue } = select.props; const { onSelect, onHover } = select; const item = data[index]; if (item.type === "Group") { return createVNode(GroupItem, { "item": item, "style": style, "height": sized ? itemSize2 : estimatedSize }, null); } const isSelected = isItemSelected(modelValue, item); const isDisabled = isItemDisabled(modelValue, isSelected); const isHovering = isItemHovering(index); return createVNode(OptionItem, mergeProps(itemProps, { "selected": isSelected, "disabled": getDisabled(item) || isDisabled, "created": !!item.created, "hovering": isHovering, "item": item, "onSelect": onSelect, "onHover": onHover }), { default: (props3) => { var _a; return ((_a = slots.default) == null ? void 0 : _a.call(slots, props3)) || createVNode("span", null, [getLabel(item)]); } }); }; const { onKeyboardNavigate, onKeyboardSelect } = select; const onForward = () => { onKeyboardNavigate("forward"); }; const onBackward = () => { onKeyboardNavigate("backward"); }; 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: break; case down: onForward(); break; case up: onBackward(); break; case enter: case numpadEnter: onKeyboardSelect(); break; } }; return () => { var _a, _b, _c, _d; const { data, width } = props2; const { height, multiple, scrollbarAlwaysOn } = select.props; const isScrollbarAlwaysOn = computed(() => { return isIOS ? true : scrollbarAlwaysOn; }); const List = unref(isSized) ? FixedSizeList : DynamicSizeList; return createVNode("div", { "class": [ns.b("dropdown"), ns.is("multiple", multiple)], "style": { width: `${width}px` } }, [(_a = slots.header) == null ? void 0 : _a.call(slots), ((_b = slots.loading) == null ? void 0 : _b.call(slots)) || ((_c = slots.empty) == null ? void 0 : _c.call(slots)) || createVNode(List, mergeProps({ "ref": listRef }, unref(listProps), { "className": ns.be("dropdown", "list"), "scrollbarAlwaysOn": isScrollbarAlwaysOn.value, "data": data, "height": height, "width": width, "total": data.length, "innerElement": "ul", "innerProps": { id: props2.id, role: "listbox", "aria-label": props2.ariaLabel, "aria-orientation": "vertical" }, "onKeydown": onKeydown }), { default: (props3) => createVNode(Item, props3, null) }), (_d = slots.footer) == null ? void 0 : _d.call(slots)]); }; } }); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/useAllowCreate.mjs function useAllowCreate(props2, states) { const { aliasProps, getLabel, getValue } = useProps(props2); const createOptionCount = ref(0); const cachedSelectedOption = ref(); const enableAllowCreateMode = computed(() => { return props2.allowCreate && props2.filterable; }); watch(() => props2.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 props2.options && props2.options.some(hasOption) || states.createdOptions.some(hasOption); } function selectNewOption(option) { if (!enableAllowCreateMode.value) { return; } if (props2.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 (props2.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 && props2.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 }; } // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/useSelect.mjs init_shared_esm_bundler(); var useSelect = (props2, emit) => { const { t } = useLocale(); const nsSelect = useNamespace("select"); const nsInput = useNamespace("input"); const { form: elForm, formItem: elFormItem } = useFormItem(); const { inputId } = useFormItemInputId(props2, { formItemContext: elFormItem }); const { aliasProps, getLabel, getValue, getDisabled, getOptions } = useProps(props2); const { valueOnClear, isEmptyValue } = useEmptyValues(props2); const states = reactive({ inputValue: "", cachedOptions: [], createdOptions: [], hoveringIndex: -1, inputHovering: false, selectionWidth: 0, collapseItemWidth: 0, previousQuery: null, previousValue: void 0, selectedLabel: "", menuVisibleOnFocus: false, isBeforeHide: false }); const popperSize = ref(-1); const debouncing = ref(false); const selectRef = ref(); const selectionRef = ref(); const tooltipRef = ref(); const tagTooltipRef = ref(); const inputRef = ref(); const prefixRef = ref(); const suffixRef = ref(); const menuRef = ref(); const tagMenuRef = ref(); const collapseItemRef = ref(); const { isComposing, handleCompositionStart, handleCompositionEnd, handleCompositionUpdate } = useComposition({ afterComposition: (e) => onInput(e) }); const selectDisabled = computed(() => props2.disabled || !!(elForm == null ? void 0 : elForm.disabled)); const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, { disabled: selectDisabled, afterFocus() { if (props2.automaticDropdown && !expanded.value) { expanded.value = true; states.menuVisibleOnFocus = true; } }, beforeBlur(event) { var _a, _b; return ((_a = tooltipRef.value) == null ? void 0 : _a.isFocusInsideContent(event)) || ((_b = tagTooltipRef.value) == null ? void 0 : _b.isFocusInsideContent(event)); }, afterBlur() { var _a; expanded.value = false; states.menuVisibleOnFocus = false; if (props2.validateEvent) { (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "blur").catch((err) => debugWarn(err)); } } }); const allOptions = computed(() => filterOptions("")); const hasOptions = computed(() => { if (props2.loading) return false; return props2.options.length > 0 || states.createdOptions.length > 0; }); const filteredOptions = ref([]); const expanded = ref(false); const needStatusIcon = computed(() => { var _a; return (_a = elForm == null ? void 0 : elForm.statusIcon) != null ? _a : false; }); const popupHeight = computed(() => { const totalHeight = filteredOptions.value.length * props2.itemHeight; return totalHeight > props2.height ? props2.height : totalHeight; }); const hasModelValue = computed(() => { return props2.multiple ? isArray(props2.modelValue) && props2.modelValue.length > 0 : !isEmptyValue(props2.modelValue); }); const showClearBtn = computed(() => { return props2.clearable && !selectDisabled.value && hasModelValue.value && (isFocused.value || states.inputHovering); }); const iconComponent = computed(() => props2.remote && props2.filterable ? "" : props2.suffixIcon); const iconReverse = computed(() => iconComponent.value && nsSelect.is("reverse", expanded.value)); const validateState = computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || ""); const validateIcon = computed(() => { if (!validateState.value) return; return ValidateComponentsMap[validateState.value]; }); const debounce = computed(() => props2.remote ? props2.debounce : 0); const isRemoteSearchEmpty = computed(() => props2.remote && !states.inputValue && !hasOptions.value); const emptyText = computed(() => { if (props2.loading) { return props2.loadingText || t("el.select.loading"); } else { if (props2.filterable && states.inputValue && hasOptions.value && filteredOptions.value.length === 0) { return props2.noMatchText || t("el.select.noMatch"); } if (!hasOptions.value) { return props2.noDataText || t("el.select.noData"); } } return null; }); const isFilterMethodValid = computed(() => props2.filterable && isFunction(props2.filterMethod)); const isRemoteMethodValid = computed(() => props2.filterable && props2.remote && isFunction(props2.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 (props2.loading) { return []; } return [...states.createdOptions, ...props2.options].reduce((all, item) => { const options = getOptions(item); if (isArray(options)) { const filtered = options.filter(isValidOption); if (filtered.length > 0) { all.push({ label: getLabel(item), type: "Group" }, ...filtered); } } else if (props2.remote || isValidOption(item)) { all.push(item); } return all; }, []); }; const updateOptions = () => { filteredOptions.value = filterOptions(states.inputValue); }; const allOptionsValueMap = computed(() => { const valueMap = /* @__PURE__ */ new Map(); allOptions.value.forEach((option, index) => { valueMap.set(getValueKey(getValue(option)), { option, index }); }); return valueMap; }); const filteredOptionsValueMap = computed(() => { const valueMap = /* @__PURE__ */ new Map(); filteredOptions.value.forEach((option, index) => { valueMap.set(getValueKey(getValue(option)), { option, index }); }); return valueMap; }); const optionsAllDisabled = computed(() => filteredOptions.value.every((option) => getDisabled(option))); const selectSize = useFormSize(); const collapseTagSize = computed(() => selectSize.value === "small" ? "small" : "default"); const calculatePopperSize = () => { var _a; if (isNumber(props2.fitInputWidth)) { popperSize.value = props2.fitInputWidth; return; } const width = ((_a = selectRef.value) == null ? void 0 : _a.offsetWidth) || 200; if (!props2.fitInputWidth && hasOptions.value) { nextTick(() => { popperSize.value = Math.max(width, calculateLabelMaxWidth()); }); } else { popperSize.value = width; } }; const calculateLabelMaxWidth = () => { var _a, _b; const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); const selector = nsSelect.be("dropdown", "item"); const dom = ((_b = (_a = menuRef.value) == null ? void 0 : _a.listRef) == null ? void 0 : _b.innerRef) || document; const dropdownItemEl = dom.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`), "")}`; const maxWidth = filteredOptions.value.reduce((max, option) => { const metrics = ctx.measureText(getLabel(option)); return Math.max(metrics.width, max); }, 0); return maxWidth + padding; }; const getGapWidth = () => { if (!selectionRef.value) return 0; const style = window.getComputedStyle(selectionRef.value); return Number.parseFloat(style.gap || "6px"); }; const tagStyle = computed(() => { const gapWidth = getGapWidth(); const inputSlotWidth = props2.filterable ? gapWidth + MINIMUM_INPUT_WIDTH : 0; const maxWidth = collapseItemRef.value && props2.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.selectionWidth - inputSlotWidth; return { maxWidth: `${maxWidth}px` }; }); const collapseTagStyle = computed(() => { return { maxWidth: `${states.selectionWidth}px` }; }); const shouldShowPlaceholder = computed(() => { if (isArray(props2.modelValue)) { return props2.modelValue.length === 0 && !states.inputValue; } return props2.filterable ? !states.inputValue : true; }); const currentPlaceholder = computed(() => { var _a; const _placeholder = (_a = props2.placeholder) != null ? _a : t("el.select.placeholder"); return props2.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel; }); const popperRef = computed(() => { var _a, _b; return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; }); const indexRef = computed(() => { if (props2.multiple) { const len = props2.modelValue.length; if (props2.modelValue.length > 0 && filteredOptionsValueMap.value.has(props2.modelValue[len - 1])) { const { index } = filteredOptionsValueMap.value.get(props2.modelValue[len - 1]); return index; } } else { if (!isEmptyValue(props2.modelValue) && filteredOptionsValueMap.value.has(props2.modelValue)) { const { index } = filteredOptionsValueMap.value.get(props2.modelValue); return index; } } return -1; }); const dropdownMenuVisible = computed({ get() { return expanded.value && (props2.loading || !isRemoteSearchEmpty.value) && (!debouncing.value || !isEmpty(states.previousQuery)); }, set(val) { expanded.value = val; } }); const showTagList = computed(() => { if (!props2.multiple) { return []; } return props2.collapseTags ? states.cachedOptions.slice(0, props2.maxCollapseTags) : states.cachedOptions; }); const collapseTagList = computed(() => { if (!props2.multiple) { return []; } return props2.collapseTags ? states.cachedOptions.slice(props2.maxCollapseTags) : []; }); const { createNewOption, removeNewOption, selectNewOption, clearAllNewOption } = useAllowCreate(props2, states); const toggleMenu = () => { if (selectDisabled.value) 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); 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 (props2.filterable && isFunction(props2.filterMethod)) { props2.filterMethod(val); } else if (props2.filterable && props2.remote && isFunction(props2.remoteMethod)) { props2.remoteMethod(val); } if (props2.defaultFirstOption && (props2.filterable || props2.remote) && filteredOptions.value.length) { nextTick(checkDefaultFirstOption); } else { nextTick(updateHoveringIndex); } }; 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_default(props2.modelValue, val)) { emit(CHANGE_EVENT, val); } }; const update = (val) => { emit(UPDATE_MODEL_EVENT, val); emitChange(val); states.previousValue = props2.multiple ? String(val) : val; nextTick(() => { if (props2.multiple && isArray(props2.modelValue)) { const cachedOptions = states.cachedOptions.slice(); const selectedOptions = props2.modelValue.map((value) => getOption(value, cachedOptions)); if (!isEqual_default(states.cachedOptions, selectedOptions)) { states.cachedOptions = selectedOptions; } } else { initStates(true); } }); }; const getValueIndex = (arr = [], value) => { if (!isObject(value)) { return arr.indexOf(value); } const valueKey = props2.valueKey; let index = -1; arr.some((item, i) => { if (get_default(item, valueKey) === get_default(value, valueKey)) { index = i; return true; } return false; }); return index; }; const getValueKey = (item) => { return isObject(item) ? get_default(item, props2.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 = () => { var _a, _b; (_b = (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); }; const updateTagTooltip = () => { var _a, _b; (_b = (_a = tagTooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); }; const onSelect = (option) => { const optionValue = getValue(option); if (props2.multiple) { let selectedOptions = props2.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 (props2.multipleLimit <= 0 || selectedOptions.length < props2.multipleLimit) { selectedOptions = [...selectedOptions, optionValue]; states.cachedOptions.push(option); selectNewOption(option); } update(selectedOptions); if (option.created) { handleQueryChange(""); } if (props2.filterable && !props2.reserveKeyword) { states.inputValue = ""; } } else { states.selectedLabel = getLabel(option); !isEqual_default(props2.modelValue, optionValue) && update(optionValue); expanded.value = false; selectNewOption(option); if (!option.created) { clearAllNewOption(); } } focus(); }; const deleteTag = (event, option) => { let selectedOptions = props2.modelValue.slice(); const index = getValueIndex(selectedOptions, getValue(option)); if (index > -1 && !selectDisabled.value) { selectedOptions = [ ...props2.modelValue.slice(0, index), ...props2.modelValue.slice(index + 1) ]; states.cachedOptions.splice(index, 1); update(selectedOptions); emit("remove-tag", getValue(option)); removeNewOption(option); } event.stopPropagation(); focus(); }; const focus = () => { var _a; (_a = inputRef.value) == null ? void 0 : _a.focus(); }; const blur = () => { var _a; if (expanded.value) { expanded.value = false; nextTick(() => { var _a2; return (_a2 = inputRef.value) == null ? void 0 : _a2.blur(); }); return; } (_a = inputRef.value) == null ? void 0 : _a.blur(); }; const handleEsc = () => { if (states.inputValue.length > 0) { states.inputValue = ""; } else { expanded.value = false; } }; const getLastNotDisabledIndex = (value) => findLastIndex_default(value, (it) => !states.cachedOptions.some((option) => getValue(option) === it && getDisabled(option))); const handleDel = (e) => { const code = getEventCode(e); if (!props2.multiple) return; if (code === EVENT_CODE.delete) return; if (states.inputValue.length === 0) { e.preventDefault(); const selected = props2.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(props2.modelValue)) { emptyValue = []; } else { emptyValue = valueOnClear.value; } states.selectedLabel = ""; expanded.value = false; update(emptyValue); emit("clear"); clearAllNewOption(); focus(); }; const onKeyboardNavigate = (direction2, hoveringIndex = void 0) => { const options = filteredOptions.value; if (!["forward", "backward"].includes(direction2) || 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 (direction2 === "forward") { newIndex = hoveringIndex + 1; if (newIndex >= options.length) { newIndex = 0; } } else if (direction2 === "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(direction2, 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 != null ? idx : -1; }; const updateHoveringIndex = () => { if (!props2.multiple) { states.hoveringIndex = filteredOptions.value.findIndex((item) => { return getValueKey(getValue(item)) === getValueKey(props2.modelValue); }); } else { states.hoveringIndex = filteredOptions.value.findIndex((item) => props2.modelValue.some((modelValue) => getValueKey(modelValue) === getValueKey(getValue(item)))); } }; const onInput = (event) => { states.inputValue = event.target.value; if (props2.remote) { debouncing.value = true; debouncedOnInputChange(); } else { return onInputChange(); } }; const handleClickOutside = (event) => { expanded.value = false; if (isFocused.value) { const _event = new FocusEvent("blur", event); handleBlur(_event); } }; const handleMenuEnter = () => { states.isBeforeHide = false; return nextTick(() => { if (~indexRef.value) { scrollToItem(states.hoveringIndex); } }); }; 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((option2) => getValueKey(getValue(option2)) === selectValue); if (option) { return option; } } return { [aliasProps.value.value]: value, [aliasProps.value.label]: value }; }; const getIndex = (option) => { var _a, _b; return (_b = (_a = allOptionsValueMap.value.get(getValue(option))) == null ? void 0 : _a.index) != null ? _b : -1; }; const initStates = (needUpdateSelectedLabel = false) => { if (props2.multiple) { if (props2.modelValue.length > 0) { const cachedOptions = states.cachedOptions.slice(); states.cachedOptions.length = 0; states.previousValue = props2.modelValue.toString(); for (const value of props2.modelValue) { const option = getOption(value, cachedOptions); states.cachedOptions.push(option); } } else { states.cachedOptions = []; states.previousValue = void 0; } } else { if (hasModelValue.value) { states.previousValue = props2.modelValue; const options = filteredOptions.value; const selectedItemIndex = options.findIndex((option) => getValueKey(getValue(option)) === getValueKey(props2.modelValue)); if (~selectedItemIndex) { states.selectedLabel = getLabel(options[selectedItemIndex]); } else { if (!states.selectedLabel || needUpdateSelectedLabel) { states.selectedLabel = getValueKey(props2.modelValue); } } } else { states.selectedLabel = ""; states.previousValue = void 0; } } clearAllNewOption(); calculatePopperSize(); }; watch(() => props2.fitInputWidth, () => { calculatePopperSize(); }); watch(expanded, (val) => { if (val) { if (!props2.persistent) { calculatePopperSize(); } handleQueryChange(""); } else { states.inputValue = ""; states.previousQuery = null; states.isBeforeHide = true; createNewOption(""); } emit("visible-change", val); }); watch(() => props2.modelValue, (val, oldVal) => { var _a; const isValEmpty = !val || isArray(val) && val.length === 0; if (isValEmpty || props2.multiple && !isEqual_default(val.toString(), states.previousValue) || !props2.multiple && getValueKey(val) !== getValueKey(states.previousValue)) { initStates(true); } if (!isEqual_default(val, oldVal) && props2.validateEvent) { (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => debugWarn(err)); } }, { deep: true }); watch(() => props2.options, () => { const input = inputRef.value; if (!input || input && document.activeElement !== input) { initStates(); } }, { deep: true, flush: "post" }); watch(() => filteredOptions.value, () => { calculatePopperSize(); return menuRef.value && nextTick(menuRef.value.resetScrollTop); }); watchEffect(() => { if (states.isBeforeHide) return; updateOptions(); }); watchEffect(() => { const { valueKey, options } = props2; const duplicateValue = /* @__PURE__ */ new Map(); for (const item of options) { const optionValue = getValue(item); let v = optionValue; if (isObject(v)) { v = get_default(optionValue, valueKey); } if (duplicateValue.get(v)) { debugWarn("ElSelectV2", `The option values you provided seem to be duplicated, which may cause some problems, please check.`); break; } else { duplicateValue.set(v, true); } } }); onMounted(() => { initStates(); }); useResizeObserver(selectRef, handleResize); useResizeObserver(selectionRef, resetSelectionWidth); useResizeObserver(menuRef, updateTooltip); useResizeObserver(wrapperRef, updateTooltip); useResizeObserver(tagMenuRef, updateTagTooltip); useResizeObserver(collapseItemRef, resetCollapseItemWidth); 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 }; }; // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/src/select.mjs init_shared_esm_bundler(); var _sfc_main3 = defineComponent({ name: "ElSelectV2", components: { ElSelectMenu, ElTag, ElTooltip, ElIcon }, directives: { ClickOutside }, props: selectV2Props, emits: selectV2Emits, setup(props2, { emit }) { const modelValue = computed(() => { const { modelValue: rawModelValue, multiple } = props2; const fallback = multiple ? [] : void 0; if (isArray(rawModelValue)) { return multiple ? rawModelValue : fallback; } return multiple ? fallback : rawModelValue; }); const API = useSelect(reactive({ ...toRefs(props2), modelValue }), emit); const { calculatorRef, inputStyle } = useCalcInputWidth(); const contentId = useId(); provide(selectV2InjectionKey, { props: reactive({ ...toRefs(props2), 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 = computed(() => { if (!props2.multiple) { return API.states.selectedLabel; } return API.states.cachedOptions.map((i) => API.getLabel(i)); }); return { ...API, modelValue, selectedLabel, calculatorRef, inputStyle, contentId, BORDER_HORIZONTAL_WIDTH }; } }); function _sfc_render3(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_tag = resolveComponent("el-tag"); const _component_el_tooltip = resolveComponent("el-tooltip"); const _component_el_icon = resolveComponent("el-icon"); const _component_el_select_menu = resolveComponent("el-select-menu"); const _directive_click_outside = resolveDirective("click-outside"); return withDirectives((openBlock(), createElementBlock("div", { ref: "selectRef", class: normalizeClass([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]), onMouseenter: ($event) => _ctx.states.inputHovering = true, onMouseleave: ($event) => _ctx.states.inputHovering = false }, [ 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: ($event) => _ctx.states.isBeforeHide = false }, { default: withCtx(() => { var _a, _b; return [ createBaseVNode("div", { ref: "wrapperRef", class: 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: withModifiers(_ctx.toggleMenu, ["prevent"]) }, [ _ctx.$slots.prefix ? (openBlock(), createElementBlock("div", { key: 0, ref: "prefixRef", class: normalizeClass(_ctx.nsSelect.e("prefix")) }, [ renderSlot(_ctx.$slots, "prefix") ], 2)) : createCommentVNode("v-if", true), createBaseVNode("div", { ref: "selectionRef", class: normalizeClass([ _ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.modelValue.length) ]) }, [ _ctx.multiple ? renderSlot(_ctx.$slots, "tag", { key: 0, data: _ctx.states.cachedOptions, deleteTag: _ctx.deleteTag, selectDisabled: _ctx.selectDisabled }, () => [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.showTagList, (item) => { return openBlock(), createElementBlock("div", { key: _ctx.getValueKey(_ctx.getValue(item)), class: normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ createVNode(_component_el_tag, { closable: !_ctx.selectDisabled && !_ctx.getDisabled(item), size: _ctx.collapseTagSize, type: _ctx.tagType, effect: _ctx.tagEffect, "disable-transitions": "", style: normalizeStyle(_ctx.tagStyle), onClose: ($event) => _ctx.deleteTag($event, item) }, { default: withCtx(() => [ createBaseVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")) }, [ renderSlot(_ctx.$slots, "label", { index: _ctx.getIndex(item), label: _ctx.getLabel(item), value: _ctx.getValue(item) }, () => [ createTextVNode(toDisplayString(_ctx.getLabel(item)), 1) ]) ], 2) ]), _: 2 }, 1032, ["closable", "size", "type", "effect", "style", "onClose"]) ], 2); }), 128)), _ctx.collapseTags && _ctx.modelValue.length > _ctx.maxCollapseTags ? (openBlock(), createBlock(_component_el_tooltip, { key: 0, ref: "tagTooltipRef", disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip, "fallback-placements": ["bottom", "top", "right", "left"], effect: _ctx.effect, placement: "bottom", "popper-class": _ctx.popperClass, "popper-style": _ctx.popperStyle, teleported: _ctx.teleported }, { default: withCtx(() => [ createBaseVNode("div", { ref: "collapseItemRef", class: normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ createVNode(_component_el_tag, { closable: false, size: _ctx.collapseTagSize, type: _ctx.tagType, effect: _ctx.tagEffect, style: normalizeStyle(_ctx.collapseTagStyle), "disable-transitions": "" }, { default: withCtx(() => [ createBaseVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")) }, " + " + toDisplayString(_ctx.modelValue.length - _ctx.maxCollapseTags), 3) ]), _: 1 }, 8, ["size", "type", "effect", "style"]) ], 2) ]), content: withCtx(() => [ createBaseVNode("div", { ref: "tagMenuRef", class: normalizeClass(_ctx.nsSelect.e("selection")) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.collapseTagList, (selected) => { return openBlock(), createElementBlock("div", { key: _ctx.getValueKey(_ctx.getValue(selected)), class: normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ 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: withCtx(() => [ createBaseVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")) }, [ renderSlot(_ctx.$slots, "label", { index: _ctx.getIndex(selected), label: _ctx.getLabel(selected), value: _ctx.getValue(selected) }, () => [ createTextVNode(toDisplayString(_ctx.getLabel(selected)), 1) ]) ], 2) ]), _: 2 }, 1032, ["closable", "size", "type", "effect", "onClose"]) ], 2); }), 128)) ], 2) ]), _: 3 }, 8, ["disabled", "effect", "popper-class", "popper-style", "teleported"])) : createCommentVNode("v-if", true) ]) : createCommentVNode("v-if", true), createBaseVNode("div", { class: normalizeClass([ _ctx.nsSelect.e("selected-item"), _ctx.nsSelect.e("input-wrapper"), _ctx.nsSelect.is("hidden", !_ctx.filterable) ]) }, [ withDirectives(createBaseVNode("input", { id: _ctx.inputId, ref: "inputRef", "onUpdate:modelValue": ($event) => _ctx.states.inputValue = $event, style: 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: 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: _ctx.onInput, onCompositionstart: _ctx.handleCompositionStart, onCompositionupdate: _ctx.handleCompositionUpdate, onCompositionend: _ctx.handleCompositionEnd, onKeydown: [ withKeys(withModifiers(($event) => _ctx.onKeyboardNavigate("backward"), ["stop", "prevent"]), ["up"]), withKeys(withModifiers(($event) => _ctx.onKeyboardNavigate("forward"), ["stop", "prevent"]), ["down"]), withKeys(withModifiers(_ctx.onKeyboardSelect, ["stop", "prevent"]), ["enter"]), withKeys(withModifiers(_ctx.handleEsc, ["stop", "prevent"]), ["esc"]), withKeys(withModifiers(_ctx.handleDel, ["stop"]), ["delete"]) ], onClick: withModifiers(_ctx.toggleMenu, ["stop"]) }, null, 46, ["id", "onUpdate:modelValue", "autocomplete", "tabindex", "aria-expanded", "aria-label", "disabled", "aria-controls", "aria-activedescendant", "readonly", "name", "onInput", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onKeydown", "onClick"]), [ [vModelText, _ctx.states.inputValue] ]), _ctx.filterable ? (openBlock(), createElementBlock("span", { key: 0, ref: "calculatorRef", "aria-hidden": "true", class: normalizeClass(_ctx.nsSelect.e("input-calculator")), textContent: toDisplayString(_ctx.states.inputValue) }, null, 10, ["textContent"])) : createCommentVNode("v-if", true) ], 2), _ctx.shouldShowPlaceholder ? (openBlock(), createElementBlock("div", { key: 1, class: normalizeClass([ _ctx.nsSelect.e("selected-item"), _ctx.nsSelect.e("placeholder"), _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue) ]) }, [ _ctx.hasModelValue ? renderSlot(_ctx.$slots, "label", { key: 0, index: (_b = (_a = _ctx.allOptionsValueMap.get(_ctx.modelValue)) == null ? void 0 : _a.index) != null ? _b : -1, label: _ctx.currentPlaceholder, value: _ctx.modelValue }, () => [ createBaseVNode("span", null, toDisplayString(_ctx.currentPlaceholder), 1) ]) : (openBlock(), createElementBlock("span", { key: 1 }, toDisplayString(_ctx.currentPlaceholder), 1)) ], 2)) : createCommentVNode("v-if", true) ], 2), createBaseVNode("div", { ref: "suffixRef", class: normalizeClass(_ctx.nsSelect.e("suffix")) }, [ _ctx.iconComponent ? withDirectives((openBlock(), createBlock(_component_el_icon, { key: 0, class: normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsInput.e("icon"), _ctx.iconReverse]) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.iconComponent))) ]), _: 1 }, 8, ["class"])), [ [vShow, !_ctx.showClearBtn] ]) : createCommentVNode("v-if", true), _ctx.showClearBtn && _ctx.clearIcon ? (openBlock(), createBlock(_component_el_icon, { key: 1, class: normalizeClass([ _ctx.nsSelect.e("caret"), _ctx.nsInput.e("icon"), _ctx.nsSelect.e("clear") ]), onClick: withModifiers(_ctx.handleClear, ["prevent", "stop"]) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon))) ]), _: 1 }, 8, ["class", "onClick"])) : createCommentVNode("v-if", true), _ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? (openBlock(), createBlock(_component_el_icon, { key: 2, class: normalizeClass([ _ctx.nsInput.e("icon"), _ctx.nsInput.e("validateIcon"), _ctx.nsInput.is("loading", _ctx.validateState === "validating") ]) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.validateIcon))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 2) ], 10, ["onClick"]) ]; }), content: withCtx(() => [ 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 }, createSlots({ default: withCtx((scope) => [ renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(scope))) ]), _: 2 }, [ _ctx.$slots.header ? { name: "header", fn: withCtx(() => [ createBaseVNode("div", { class: normalizeClass(_ctx.nsSelect.be("dropdown", "header")), onClick: withModifiers(() => { }, ["stop"]) }, [ renderSlot(_ctx.$slots, "header") ], 10, ["onClick"]) ]) } : void 0, _ctx.$slots.loading && _ctx.loading ? { name: "loading", fn: withCtx(() => [ createBaseVNode("div", { class: normalizeClass(_ctx.nsSelect.be("dropdown", "loading")) }, [ renderSlot(_ctx.$slots, "loading") ], 2) ]) } : _ctx.loading || _ctx.filteredOptions.length === 0 ? { name: "empty", fn: withCtx(() => [ createBaseVNode("div", { class: normalizeClass(_ctx.nsSelect.be("dropdown", "empty")) }, [ renderSlot(_ctx.$slots, "empty", {}, () => [ createBaseVNode("span", null, toDisplayString(_ctx.emptyText), 1) ]) ], 2) ]) } : void 0, _ctx.$slots.footer ? { name: "footer", fn: withCtx(() => [ createBaseVNode("div", { class: normalizeClass(_ctx.nsSelect.be("dropdown", "footer")), onClick: withModifiers(() => { }, ["stop"]) }, [ renderSlot(_ctx.$slots, "footer") ], 10, ["onClick"]) ]) } : 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", "onHide"]) ], 42, ["onMouseenter", "onMouseleave"])), [ [_directive_click_outside, _ctx.handleClickOutside, _ctx.popperRef] ]); } var Select = _export_sfc(_sfc_main3, [["render", _sfc_render3], ["__file", "select.vue"]]); // ../node_modules/.pnpm/element-plus@2.11.7_vue@3.5.24_typescript@5.9.3_/node_modules/element-plus/es/components/select-v2/index.mjs var ElSelectV2 = withInstall(Select); export { selectV2InjectionKey, useCache, DEFAULT_DYNAMIC_LIST_ITEM_SIZE, ITEM_RENDER_EVT, SCROLL_EVT, FORWARD, BACKWARD, AUTO_ALIGNMENT, SMART_ALIGNMENT, START_ALIGNMENT, CENTERED_ALIGNMENT, END_ALIGNMENT, RTL, RTL_OFFSET_NAG, RTL_OFFSET_POS_ASC, RTL_OFFSET_POS_DESC, useWheel, virtualizedProps, virtualizedListProps, virtualizedGridProps, virtualizedScrollbarProps, getScrollDir, isRTL, getRTLOffsetType, ScrollBar, FixedSizeList, DynamicSizeList, ElSelectV2 }; //# sourceMappingURL=chunk-D4Z6ZKNZ.js.map