{"version":3,"file":"select.mjs","sources":["../../../../../../packages/components/select-v2/src/select.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"selectRef\"\n    v-click-outside:[popperRef]=\"handleClickOutside\"\n    :class=\"[nsSelectV2.b(), nsSelectV2.m(selectSize)]\"\n    @click.stop=\"toggleMenu\"\n    @mouseenter=\"states.comboBoxHovering = true\"\n    @mouseleave=\"states.comboBoxHovering = false\"\n  >\n    <el-tooltip\n      ref=\"popper\"\n      v-model:visible=\"dropdownMenuVisible\"\n      :teleported=\"compatTeleported\"\n      :popper-class=\"[nsSelectV2.e('popper'), popperClass]\"\n      :gpu-acceleration=\"false\"\n      :stop-popper-mouse-event=\"false\"\n      :popper-options=\"popperOptions\"\n      :fallback-placements=\"['bottom-start', 'top-start', 'right', 'left']\"\n      :effect=\"effect\"\n      placement=\"bottom-start\"\n      pure\n      :transition=\"`${nsSelectV2.namespace.value}-zoom-in-top`\"\n      trigger=\"click\"\n      persistent\n      @show=\"handleMenuEnter\"\n      @hide=\"states.inputValue = states.displayInputValue\"\n    >\n      <template #default>\n        <div\n          ref=\"selectionRef\"\n          :class=\"[\n            nsSelectV2.e('wrapper'),\n            nsSelectV2.is('focused', states.isComposing),\n            nsSelectV2.is('hovering', states.comboBoxHovering),\n            nsSelectV2.is('filterable', filterable),\n            nsSelectV2.is('disabled', disabled),\n          ]\"\n        >\n          <div v-if=\"$slots.prefix\">\n            <slot name=\"prefix\"></slot>\n          </div>\n          <div v-if=\"multiple\" :class=\"nsSelectV2.e('selection')\">\n            <template v-if=\"collapseTags && modelValue.length > 0\">\n              <div :class=\"nsSelectV2.e('selected-item')\">\n                <el-tag\n                  :closable=\"\n                    !selectDisabled && !states.cachedOptions[0]?.disable\n                  \"\n                  :size=\"collapseTagSize\"\n                  type=\"info\"\n                  disable-transitions\n                  @close=\"deleteTag($event, states.cachedOptions[0])\"\n                >\n                  <span\n                    :class=\"nsSelectV2.e('tags-text')\"\n                    :style=\"{\n                      maxWidth: `${tagMaxWidth}px`,\n                    }\"\n                    >{{ states.cachedOptions[0]?.label }}</span\n                  >\n                </el-tag>\n                <el-tag\n                  v-if=\"modelValue.length > 1\"\n                  :closable=\"false\"\n                  :size=\"collapseTagSize\"\n                  type=\"info\"\n                  disable-transitions\n                >\n                  <span\n                    :class=\"nsSelectV2.e('tags-text')\"\n                    :style=\"{\n                      maxWidth: `${tagMaxWidth}px`,\n                    }\"\n                    >+ {{ modelValue.length - 1 }}</span\n                  >\n                </el-tag>\n              </div>\n            </template>\n\n            <template v-else>\n              <div\n                v-for=\"(selected, idx) in states.cachedOptions\"\n                :key=\"idx\"\n                :class=\"nsSelectV2.e('selected-item')\"\n              >\n                <el-tag\n                  :key=\"getValueKey(selected)\"\n                  :closable=\"!selectDisabled && !selected.disabled\"\n                  :size=\"collapseTagSize\"\n                  type=\"info\"\n                  disable-transitions\n                  @close=\"deleteTag($event, selected)\"\n                >\n                  <span\n                    :class=\"nsSelectV2.e('tags-text')\"\n                    :style=\"{\n                      maxWidth: `${tagMaxWidth}px`,\n                    }\"\n                    >{{ getLabel(selected) }}</span\n                  >\n                </el-tag>\n              </div>\n            </template>\n            <div\n              :class=\"[\n                nsSelectV2.e('selected-item'),\n                nsSelectV2.e('input-wrapper'),\n              ]\"\n              :style=\"inputWrapperStyle\"\n            >\n              <input\n                :id=\"id\"\n                ref=\"inputRef\"\n                v-model-text=\"states.displayInputValue\"\n                :autocomplete=\"autocomplete\"\n                aria-autocomplete=\"list\"\n                aria-haspopup=\"listbox\"\n                autocapitalize=\"off\"\n                :aria-expanded=\"expanded\"\n                :aria-labelledby=\"label\"\n                :class=\"[\n                  nsSelectV2.is(selectSize),\n                  nsSelectV2.e('combobox-input'),\n                ]\"\n                :disabled=\"disabled\"\n                role=\"combobox\"\n                :readonly=\"!filterable\"\n                spellcheck=\"false\"\n                type=\"text\"\n                :name=\"name\"\n                :unselectable=\"expanded ? 'on' : undefined\"\n                @update:modelValue=\"onUpdateInputValue\"\n                @focus=\"handleFocus\"\n                @input=\"onInput\"\n                @compositionstart=\"handleCompositionStart\"\n                @compositionupdate=\"handleCompositionUpdate\"\n                @compositionend=\"handleCompositionEnd\"\n                @keydown.up.stop.prevent=\"onKeyboardNavigate('backward')\"\n                @keydown.down.stop.prevent=\"onKeyboardNavigate('forward')\"\n                @keydown.enter.stop.prevent=\"onKeyboardSelect\"\n                @keydown.esc.stop.prevent=\"handleEsc\"\n                @keydown.delete.stop=\"handleDel\"\n              />\n              <span\n                v-if=\"filterable\"\n                ref=\"calculatorRef\"\n                aria-hidden=\"true\"\n                :class=\"nsSelectV2.e('input-calculator')\"\n                v-text=\"states.displayInputValue\"\n              >\n              </span>\n            </div>\n          </div>\n          <template v-else>\n            <div\n              :class=\"[\n                nsSelectV2.e('selected-item'),\n                nsSelectV2.e('input-wrapper'),\n              ]\"\n            >\n              <input\n                :id=\"id\"\n                ref=\"inputRef\"\n                v-model-text=\"states.displayInputValue\"\n                aria-autocomplete=\"list\"\n                aria-haspopup=\"listbox\"\n                :aria-labelledby=\"label\"\n                :aria-expanded=\"expanded\"\n                autocapitalize=\"off\"\n                :autocomplete=\"autocomplete\"\n                :class=\"nsSelectV2.e('combobox-input')\"\n                :disabled=\"disabled\"\n                :name=\"name\"\n                role=\"combobox\"\n                :readonly=\"!filterable\"\n                spellcheck=\"false\"\n                type=\"text\"\n                :unselectable=\"expanded ? 'on' : undefined\"\n                @compositionstart=\"handleCompositionStart\"\n                @compositionupdate=\"handleCompositionUpdate\"\n                @compositionend=\"handleCompositionEnd\"\n                @focus=\"handleFocus\"\n                @input=\"onInput\"\n                @keydown.up.stop.prevent=\"onKeyboardNavigate('backward')\"\n                @keydown.down.stop.prevent=\"onKeyboardNavigate('forward')\"\n                @keydown.enter.stop.prevent=\"onKeyboardSelect\"\n                @keydown.esc.stop.prevent=\"handleEsc\"\n                @update:modelValue=\"onUpdateInputValue\"\n              />\n            </div>\n            <span\n              v-if=\"filterable\"\n              ref=\"calculatorRef\"\n              aria-hidden=\"true\"\n              :class=\"[\n                nsSelectV2.e('selected-item'),\n                nsSelectV2.e('input-calculator'),\n              ]\"\n              v-text=\"states.displayInputValue\"\n            >\n            </span>\n          </template>\n          <span\n            v-if=\"shouldShowPlaceholder\"\n            :class=\"[\n              nsSelectV2.e('placeholder'),\n              nsSelectV2.is(\n                'transparent',\n                states.isComposing ||\n                  (placeholder && multiple\n                    ? modelValue.length === 0\n                    : !hasModelValue)\n              ),\n            ]\"\n          >\n            {{ currentPlaceholder }}\n          </span>\n          <span :class=\"nsSelectV2.e('suffix')\">\n            <el-icon\n              v-if=\"iconComponent\"\n              v-show=\"!showClearBtn\"\n              :class=\"[nsSelectV2.e('caret'), nsInput.e('icon'), iconReverse]\"\n            >\n              <component :is=\"iconComponent\" />\n            </el-icon>\n            <el-icon\n              v-if=\"showClearBtn && clearIcon\"\n              :class=\"[nsSelectV2.e('caret'), nsInput.e('icon')]\"\n              @click.prevent.stop=\"handleClear\"\n            >\n              <component :is=\"clearIcon\" />\n            </el-icon>\n            <el-icon\n              v-if=\"validateState && validateIcon\"\n              :class=\"[nsInput.e('icon'), nsInput.e('validateIcon')]\"\n            >\n              <component :is=\"validateIcon\" />\n            </el-icon>\n          </span>\n        </div>\n      </template>\n      <template #content>\n        <el-select-menu\n          ref=\"menuRef\"\n          :data=\"filteredOptions\"\n          :width=\"popperSize\"\n          :hovering-index=\"states.hoveringIndex\"\n          :scrollbar-always-on=\"scrollbarAlwaysOn\"\n        >\n          <template #default=\"scope\">\n            <slot v-bind=\"scope\"></slot>\n          </template>\n          <template #empty>\n            <slot name=\"empty\">\n              <p :class=\"nsSelectV2.e('empty')\">\n                {{ emptyText ? emptyText : '' }}\n              </p>\n            </slot>\n          </template>\n        </el-select-menu>\n      </template>\n    </el-tooltip>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, provide, toRefs, reactive, vModelText } from 'vue'\nimport { ClickOutside } from '@element-plus/directives'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/constants'\nimport ElSelectMenu from './select-dropdown.vue'\nimport useSelect from './useSelect'\nimport { selectV2InjectionKey } from './token'\nimport { SelectProps } from './defaults'\nexport default defineComponent({\n  name: 'ElSelectV2',\n  components: {\n    ElSelectMenu,\n    ElTag,\n    ElTooltip,\n    ElIcon,\n  },\n  directives: { ClickOutside, ModelText: vModelText },\n  props: SelectProps,\n  emits: [\n    UPDATE_MODEL_EVENT,\n    CHANGE_EVENT,\n    'remove-tag',\n    'clear',\n    'visible-change',\n    'focus',\n    'blur',\n  ],\n\n  setup(props, { emit }) {\n    const API = useSelect(props, emit)\n    // TODO, remove the any cast to align the actual API.\n    provide(selectV2InjectionKey, {\n      props: reactive({\n        ...toRefs(props),\n        height: API.popupHeight,\n      }),\n      onSelect: API.onSelect,\n      onHover: API.onHover,\n      onKeyboardNavigate: API.onKeyboardNavigate,\n      onKeyboardSelect: API.onKeyboardSelect,\n    } as any)\n\n    return API\n  },\n})\n</script>\n"],"names":["ElSelectMenu","_withDirectives","_normalizeClass","_withCtx","_createVNode","_openBlock"],"mappings":"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"}