{"version":3,"file":"cascader2.mjs","sources":["../../../../../../packages/components/cascader/src/cascader.vue"],"sourcesContent":["<template>\r\n  <sg-tooltip\r\n    ref=\"tooltipRef\"\r\n    :show-arrow = \"false\"\r\n    v-model:visible=\"popperVisible\"\r\n    :transfer=\"transfer\"\r\n    :popper-class=\"`sg-cascader__dropdown ${popperClass}`\"\r\n    :popper-options=\"popperOptions\"\r\n    theme=\"light\"\r\n    :fallback-placements=\"[\r\n      'bottom-start',\r\n      'bottom',\r\n      'top-start',\r\n      'top',\r\n      'right',\r\n      'left',\r\n    ]\"\r\n    :stop-popper-mouse-event=\"false\"\r\n    :gpu-acceleration=\"false\"\r\n    :placement=\"placement\"\r\n    transition=\"sg-zoom-in-top\"\r\n    effect=\"light\"\r\n    pure\r\n    persistent\r\n    @hide=\"hideSuggestionPanel\"\r\n  >\r\n    <template #default>\r\n      <div\r\n        v-clickoutside:[popperPaneRef]=\"() => togglePopperVisible(false)\"\r\n        :class=\"[\r\n          'sg-cascader',\r\n          {'sg-cascader-fixedHeight' : fixedHeight},\r\n          realSize && `sg-cascader--${realSize}`,\r\n          { 'is-disabled': isDisabled },\r\n          $attrs.class,\r\n        ]\"\r\n        :style=\"($attrs.style as any)\"\r\n        @click=\"() => togglePopperVisible(isReadonly ? undefined : true)\"\r\n        @keydown=\"handleKeyDown\"\r\n        @mouseenter=\"inputHover = true\"\r\n        @mouseleave=\"inputHover = false\"\r\n      >\r\n        <sg-input\r\n          ref=\"input\"\r\n          v-model=\"inputValue\"\r\n          :placeholder=\"inputPlaceholder\"\r\n          :readonly=\"readonly || isReadonly\"\r\n          :disabled=\"isDisabled\"\r\n          :validate-event=\"false\"\r\n          :size=\"realSize\"\r\n          :class=\"{ 'is-focus': popperVisible }\"\r\n          @compositionstart=\"handleComposition\"\r\n          @compositionupdate=\"handleComposition\"\r\n          @compositionend=\"handleComposition\"\r\n          @on-focus=\"(e) => $emit('focus', e)\"\r\n          @on-blur=\"(e) => $emit('blur', e)\"\r\n          @on-input=\"handleInput\"\r\n        >\r\n          <template #suffix>\r\n            <sg-icon\r\n              v-if=\"clearBtnVisible\"\r\n              key=\"clear\"\r\n              class=\"sg-input__icon icon-circle-close\"\r\n              @click.stop=\"handleClear\"\r\n            >\r\n              <Close />\r\n            </sg-icon>\r\n            <sg-icon\r\n              v-else\r\n              key=\"arrow-down\"\r\n              :class=\"[\r\n                'sg-input__icon',\r\n                'icon-arrow-down',\r\n                popperVisible && 'is-reverse',\r\n              ]\"\r\n              @click.stop=\"togglePopperVisible()\"\r\n            >\r\n             <ArrowDown />\r\n            </sg-icon>\r\n          </template>\r\n        </sg-input>\r\n\r\n        <div v-if=\"multiple && !readonly\" ref=\"tagWrapper\" class=\"sg-cascader__tags\">\r\n          <sg-tag\r\n            v-for=\"tag in presentTags\"\r\n            :key=\"tag.key\"\r\n            type=\"info\"\r\n            :size=\"tagSize\"\r\n            :hit=\"tag.hitState\"\r\n            :closable=\"tag.closable\"\r\n            disable-transitions\r\n            @on-close=\"deleteTag(tag)\"\r\n          >\r\n            <template v-if=\"tag.isCollapseTag === false\">\r\n              <span>{{ tag.text }}</span>\r\n            </template>\r\n            <template v-else>\r\n              <sg-tooltip\r\n                :transfer=\"false\"\r\n                :disabled=\"popperVisible || !collapseTagsTooltip\"\r\n                :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\r\n                :placement=\"tooltipPlacement\"\r\n                :effect=\"tooltipEffect\"\r\n                theme=\"light\"\r\n                :verticalOffset=\"tooltipOffset\"\r\n                :popperClass=\"tooltipPopperClass\"\r\n              >\r\n                <template #default>\r\n                  <span>{{ tag.text }}</span>\r\n                </template>\r\n                <template #content>\r\n                  <div class=\"sg-cascader__collapse-tags\">\r\n                    <div\r\n                      v-for=\"(tag2, idx) in PresentRestTags\"\r\n                      :key=\"idx\"\r\n                      class=\"sg-cascader__collapse-tag\"\r\n                    >\r\n                      <sg-tag\r\n                        :key=\"tag2.key\"\r\n                        class=\"in-tooltip\"\r\n                        type=\"info\"\r\n                        :size=\"tagSize\"\r\n                        :hit=\"tag2.hitState\"\r\n                        :closable=\"tag2.closable\"\r\n                        disable-transitions\r\n                        @close=\"deleteTag(tag2)\"\r\n                      >\r\n                        <span>{{ tag2.text }}</span>\r\n                      </sg-tag>\r\n                    </div>\r\n                  </div>\r\n                </template>\r\n              </sg-tooltip>\r\n            </template>\r\n          </sg-tag>\r\n          <input\r\n            v-if=\"filterable && !isDisabled\"\r\n            v-model=\"searchInputValue\"\r\n            type=\"text\"\r\n            class=\"sg-cascader__search-input\"\r\n            :placeholder=\"presentText ? '' : inputPlaceholder\"\r\n            @input=\"(e) => handleInput(searchInputValue, e as KeyboardEvent)\"\r\n            @click.stop=\"togglePopperVisible(true)\"\r\n            @keydown.delete=\"handleDelete\"\r\n            @compositionstart=\"handleComposition\"\r\n            @compositionupdate=\"handleComposition\"\r\n            @compositionend=\"handleComposition\"\r\n          />\r\n        </div>\r\n      </div>\r\n    </template>\r\n\r\n    <template #content>\r\n      <sg-cascader-panel\r\n        v-show=\"!filtering\"\r\n        ref=\"panel\"\r\n        v-model=\"checkedValue\"\r\n        :options=\"options\"\r\n        :props=\"props\"\r\n        :border=\"false\"\r\n        :render-label=\"$slots.default\"\r\n        @expand-change=\"handleExpandChange\"\r\n        @close=\"$nextTick(() => togglePopperVisible(false))\"\r\n      />\r\n      <sg-scrollbar\r\n        v-if=\"filterable\"\r\n        v-show=\"filtering\"\r\n        ref=\"suggestionPanel\"\r\n        tag=\"ul\"\r\n        class=\"sg-cascader__suggestion-panel\"\r\n        view-class=\"sg-cascader__suggestion-list\"\r\n        @keydown=\"handleSuggestionKeyDown\"\r\n      >\r\n        <template v-if=\"suggestions.length\">\r\n          <li\r\n            v-for=\"item in suggestions\"\r\n            :key=\"item.uid\"\r\n            :class=\"[\r\n              'sg-cascader__suggestion-item',\r\n              item.checked && 'is-checked',\r\n            ]\"\r\n            :tabindex=\"-1\"\r\n            @click=\"handleSuggestionClick(item)\"\r\n          >\r\n            <span>{{ item.text }}</span>\r\n            <sg-icon v-if=\"item.checked\">\r\n<!--              <Finish />-->\r\n            </sg-icon>\r\n          </li>\r\n        </template>\r\n        <slot v-else name=\"empty\">\r\n          <li class=\"sg-cascader__empty-text\">\r\n            {{ t('sg.cascader.noMatch') }}\r\n          </li>\r\n        </slot>\r\n      </sg-scrollbar>\r\n    </template>\r\n  </sg-tooltip>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  onBeforeUnmount,\r\n  ref,\r\n  watch,\r\n} from 'vue'\r\nimport { isPromise } from '@vue/shared'\r\nimport debounce from 'lodash/debounce'\r\n\r\nimport { isClient } from '@vueuse/core'\r\nimport SgCascaderPanel from '@sgui-plus/components/cascader-panel'\r\nimport SgInput from '@sgui-plus/components/input'\r\nimport SgTooltip from '@sgui-plus/components/tooltip'\r\nimport SgScrollbar from '@sgui-plus/components/scrollbar'\r\nimport SgTag from '@sgui-plus/components/tag'\r\nimport SgIcon from '@sgui-plus/components/icon'\r\n\r\nimport { ClickOutside as Clickoutside } from '@sgui-plus/directives'\r\nimport { useLocale, useSize, useFormItem } from '@sgui-plus/hooks'\r\n\r\nimport { EVENT_CODE, focusNode, getSibling } from '@sgui-plus/utils/aria'\r\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@sgui-plus/utils/constants'\r\nimport { debugWarn } from '@sgui-plus/utils/error'\r\nimport {\r\n  addResizeListener,\r\n  removeResizeListener,\r\n} from '@sgui-plus/utils/resize-event'\r\nimport { isKorean } from '@sgui-plus/utils/isDef'\r\nimport { ArrowRight, Close, ArrowDown } from '@sgui-plus/icons-vue'\r\nimport { cascaderEmits, cascaderProps } from './cascader'\r\n\r\nimport type { Options } from '@sgui-plus/components/popper'\r\nimport type { ComputedRef, Ref } from 'vue'\r\nimport type {\r\n  CascaderValue,\r\n  CascaderNode,\r\n  Tag,\r\n} from '@sgui-plus/components/cascader-panel'\r\n\r\ntype cascaderPanelType = InstanceType<typeof SgCascaderPanel>\r\ntype tooltipType = InstanceType<typeof SgTooltip>\r\ntype inputType = InstanceType<typeof SgInput>\r\ntype suggestionPanelType = InstanceType<typeof SgScrollbar>\r\n\r\nconst DEFAULT_INPUT_HEIGHT = 40\r\n\r\nconst INPUT_HEIGHT_MAP = {\r\n  large: 36,\r\n  default: 32,\r\n  small: 28,\r\n}\r\n\r\nconst popperOptions: Partial<Options> = {\r\n  modifiers: [\r\n    {\r\n      name: 'arrowPosition',\r\n      enabled: true,\r\n      phase: 'main',\r\n      fn: ({ state }) => {\r\n        const { modifiersData, placement } = state as any\r\n        if (['right', 'left', 'bottom', 'top'].includes(placement)) return\r\n        modifiersData.arrow.x = 35\r\n      },\r\n      requires: ['arrow'],\r\n    },\r\n  ],\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'SgCascader',\r\n\r\n  components: {\r\n    SgCascaderPanel,\r\n    SgInput,\r\n    SgTooltip,\r\n    SgScrollbar,\r\n    SgTag,\r\n    SgIcon,\r\n    ArrowRight,\r\n    Close,\r\n    ArrowDown\r\n    // CloseOutline,\r\n    // Finish,\r\n    // Xiala,\r\n    // Shangyibu2,\r\n  },\r\n\r\n  directives: {\r\n    Clickoutside,\r\n  },\r\n\r\n  props: cascaderProps,\r\n\r\n  emits: cascaderEmits,\r\n\r\n  setup(props, { emit }) {\r\n    let inputInitialHeight = 0\r\n    let pressDeleteCount = 0\r\n\r\n    const { t } = useLocale()\r\n    const { form, formItem } = useFormItem()\r\n\r\n    const tooltipRef: Ref<tooltipType | null> = ref(null)\r\n    const input: Ref<inputType | null> = ref(null)\r\n    const tagWrapper = ref(null)\r\n    const panel: Ref<cascaderPanelType | null> = ref(null)\r\n    const suggestionPanel: Ref<suggestionPanelType | null> = ref(null)\r\n    const popperVisible = ref(false)\r\n    const inputHover = ref(false)\r\n    const filtering = ref(false)\r\n    const inputValue = ref('')\r\n    const searchInputValue = ref('')\r\n    const presentTags: Ref<Tag[]> = ref([])\r\n    const PresentRestTags: Ref<Tag[]> = ref([])\r\n    const allTagsText: Ref<String[]> = ref([])\r\n    const suggestions: Ref<CascaderNode[]> = ref([])\r\n    const isOnComposition = ref(false)\r\n    // const cascaderFixedHeightStyle = computed(() => ({\r\n    //   height: props.fixedHeight ? '30px' : '',\r\n    //   overflowY: props.fixedHeight ? 'scroll' : '',\r\n    //   overflowX: props.fixedHeight ? 'hidden' : ''\r\n    // }))\r\n    const isDisabled = computed(() => props.disabled || form?.disabled)\r\n    const inputPlaceholder = computed(\r\n      () => props.placeholder || t('sg.cascader.placeholder')\r\n    )\r\n    const realSize = useSize()\r\n    const tagSize = computed(() =>\r\n      ['small'].includes(realSize.value) ? 'small' : 'default'\r\n    )\r\n    const multiple = computed(() => !!props.props.multiple)\r\n    const isReadonly = computed(() => !props.filterable || multiple.value)\r\n    const searchKeyword = computed(() =>\r\n      multiple.value ? searchInputValue.value : inputValue.value\r\n    )\r\n    const checkedNodes: ComputedRef<CascaderNode[]> = computed(\r\n      () => panel.value?.checkedNodes || []\r\n    )\r\n    const clearBtnVisible = computed(() => {\r\n      if (\r\n        !props.clearable ||\r\n        isDisabled.value ||\r\n        filtering.value ||\r\n        !inputHover.value ||\r\n        props.readonly\r\n      )\r\n        return false\r\n\r\n      return !!checkedNodes.value.length\r\n    })\r\n    const presentText = computed(() => {\r\n      const { showAllLevels, separator, contentFormat, readonly, tagsSeparator } = props\r\n      const nodes = checkedNodes.value\r\n      return nodes.length\r\n        ? multiple.value\r\n          ? readonly\r\n            ? allTagsText.value.join(tagsSeparator)\r\n            : ' '\r\n          : contentFormat\r\n            ? contentFormat(nodes[0])\r\n            : nodes[0].calcText(showAllLevels, separator)\r\n        : ''\r\n    })\r\n\r\n    const checkedValue = computed<CascaderValue>({\r\n      get() {\r\n        return props.modelValue\r\n      },\r\n      set(val) {\r\n        emit(UPDATE_MODEL_EVENT, val)\r\n        emit(CHANGE_EVENT, val)\r\n        if (props.validateEvent) {\r\n          formItem?.validate('change').catch((err) => debugWarn(err))\r\n        }\r\n      },\r\n    } as any)\r\n\r\n    const popperPaneRef = computed(() => {\r\n      return tooltipRef.value?.popperRef?.contentRef\r\n    })\r\n\r\n    const togglePopperVisible = (visible?: boolean) => {\r\n      if (isDisabled.value || props.readonly) return\r\n\r\n      visible = visible ?? !popperVisible.value\r\n\r\n      if (visible !== popperVisible.value) {\r\n        popperVisible.value = visible\r\n        input.value?.input?.setAttribute('aria-expanded', `${visible}`)\r\n\r\n        if (visible) {\r\n          updatePopperPosition()\r\n          nextTick(panel.value?.scrollToExpandingNode)\r\n        } else if (props.filterable) {\r\n          const { value } = presentText\r\n          inputValue.value = value\r\n          searchInputValue.value = value\r\n        }\r\n\r\n        emit('visibleChange', visible)\r\n      }\r\n    }\r\n\r\n    const updatePopperPosition = () => {\r\n      nextTick(() => {\r\n        tooltipRef.value?.updatePopper()\r\n      })\r\n    }\r\n\r\n    const hideSuggestionPanel = () => {\r\n      filtering.value = false\r\n    }\r\n\r\n    const genTag = (node: CascaderNode): Tag => {\r\n      const { showAllLevels, separator } = props\r\n      return {\r\n        node,\r\n        key: node.uid,\r\n        text: node.calcText(showAllLevels, separator),\r\n        hitState: false,\r\n        closable: !isDisabled.value && !node.isDisabled,\r\n        isCollapseTag: false,\r\n      }\r\n    }\r\n\r\n    const deleteTag = (tag: Tag) => {\r\n      const node = tag.node as CascaderNode\r\n      node.doCheck(false)\r\n      panel.value?.calculateCheckedValue()\r\n      emit('removeTag', node.valueByOption)\r\n    }\r\n\r\n    const calculatePresentTags = () => {\r\n      if (!multiple.value) return\r\n\r\n      const nodes = checkedNodes.value\r\n      const tags: Tag[] = []\r\n\r\n      const allTags: string[] = []\r\n      const restTags: Tag[] = []\r\n      nodes.forEach(node => {\r\n        allTags.push(node.calcText(props.showAllLevels, props.separator))\r\n      })\r\n      allTagsText.value = allTags\r\n\r\n      if (nodes.length) {\r\n        const [first, ...rest] = nodes\r\n        const restCount = rest.length\r\n\r\n        tags.push(genTag(first))\r\n        rest.forEach(node => restTags.push(genTag(node)))\r\n\r\n        if (restCount) {\r\n          if (props.collapseTags) {\r\n            tags.push({\r\n              key: -1,\r\n              text: props.ellipsisTag ? `...` : `+ ${restCount}`,\r\n              closable: false,\r\n              isCollapseTag: true,\r\n            })\r\n          } else {\r\n            rest.forEach((node) => tags.push(genTag(node)))\r\n          }\r\n        }\r\n\r\n        if (props.collapseTags) {\r\n          emit('multipleTagRest',restTags)\r\n        }\r\n      }\r\n\r\n      presentTags.value = tags\r\n      PresentRestTags.value = restTags\r\n    }\r\n\r\n    const calculateSuggestions = () => {\r\n      const { filterMethod, showAllLevels, separator } = props\r\n      const res = panel.value\r\n        ?.getFlattedNodes(!props.props.checkStrictly)\r\n        ?.filter((node) => {\r\n          if (node.isDisabled) return false\r\n          node.calcText(showAllLevels, separator)\r\n          return filterMethod(node, searchKeyword.value)\r\n        })\r\n\r\n      if (multiple.value) {\r\n        presentTags.value.forEach((tag) => {\r\n          tag.hitState = false\r\n        })\r\n        PresentRestTags.value.forEach((tag) => {\r\n          tag.hitState = false\r\n        })\r\n      }\r\n\r\n      filtering.value = true\r\n      suggestions.value = res!\r\n      updatePopperPosition()\r\n    }\r\n\r\n    const focusFirstNode = () => {\r\n      let firstNode!: HTMLElement\r\n\r\n      if (filtering.value && suggestionPanel.value) {\r\n        firstNode = suggestionPanel.value.$el.querySelector(\r\n          '.sg-cascader__suggestion-item'\r\n        )\r\n      } else {\r\n        firstNode = panel.value?.$el.querySelector(\r\n          '.sg-cascader-node[tabindex=\"-1\"]'\r\n        )\r\n      }\r\n\r\n      if (firstNode) {\r\n        firstNode.focus()\r\n        !filtering.value && firstNode.click()\r\n      }\r\n    }\r\n\r\n    const updateStyle = () => {\r\n      const inputInner = input.value?.input\r\n      const tagWrapperEl = tagWrapper.value\r\n      const suggestionPanelEl = suggestionPanel.value?.$el\r\n\r\n      if (!isClient || !inputInner) return\r\n\r\n      if (suggestionPanelEl) {\r\n        const suggestionList = suggestionPanelEl.querySelector(\r\n          '.sg-cascader__suggestion-list'\r\n        )\r\n        suggestionList.style.minWidth = `${inputInner.offsetWidth}px`\r\n      }\r\n\r\n      if (tagWrapperEl) {\r\n        const { offsetHeight } = tagWrapperEl\r\n        const height =\r\n          presentTags.value.length > 0\r\n            ? `${Math.max(offsetHeight + 6, inputInitialHeight)}px`\r\n            : `${inputInitialHeight}px`\r\n        inputInner.style.height = height\r\n        updatePopperPosition()\r\n      }\r\n    }\r\n\r\n    const getCheckedNodes = (leafOnly: boolean) => {\r\n      return panel.value?.getCheckedNodes(leafOnly)\r\n    }\r\n\r\n    const clearCheckedNodes = () => {\r\n      panel.value?.clearCheckedNodes()\r\n    }\r\n\r\n    const handleExpandChange = (value: CascaderValue) => {\r\n      updatePopperPosition()\r\n      emit('expandChange', value)\r\n    }\r\n\r\n    const handleComposition = (event: CompositionEvent) => {\r\n      const text = (event.target as HTMLInputElement)?.value\r\n      if (event.type === 'compositionend') {\r\n        isOnComposition.value = false\r\n        nextTick(() => handleInput(text))\r\n      } else {\r\n        const lastCharacter = text[text.length - 1] || ''\r\n        isOnComposition.value = !isKorean(lastCharacter)\r\n      }\r\n    }\r\n\r\n    const handleKeyDown = (e: KeyboardEvent) => {\r\n      if (isOnComposition.value) return\r\n\r\n      switch (e.code) {\r\n        case EVENT_CODE.enter:\r\n          togglePopperVisible()\r\n          break\r\n        case EVENT_CODE.down:\r\n          togglePopperVisible(true)\r\n          nextTick(focusFirstNode)\r\n          e.preventDefault()\r\n          break\r\n        case EVENT_CODE.esc:\r\n        case EVENT_CODE.tab:\r\n          togglePopperVisible(false)\r\n          break\r\n      }\r\n    }\r\n\r\n    const handleClear = () => {\r\n      panel.value?.clearCheckedNodes()\r\n      togglePopperVisible(false)\r\n    }\r\n\r\n    const handleSuggestionClick = (node: CascaderNode) => {\r\n      const { checked } = node\r\n\r\n      if (multiple.value) {\r\n        panel.value?.handleCheckChange(node, !checked, false)\r\n      } else {\r\n        !checked && panel.value?.handleCheckChange(node, true, false)\r\n        togglePopperVisible(false)\r\n      }\r\n    }\r\n\r\n    const handleSuggestionKeyDown = (e: KeyboardEvent) => {\r\n      const target = e.target as HTMLElement\r\n      const { code } = e\r\n\r\n      switch (code) {\r\n        case EVENT_CODE.up:\r\n        case EVENT_CODE.down: {\r\n          const distance = code === EVENT_CODE.up ? -1 : 1\r\n          focusNode(\r\n            getSibling(\r\n              target,\r\n              distance,\r\n              '.sg-cascader__suggestion-item[tabindex=\"-1\"]'\r\n            )\r\n          )\r\n          break\r\n        }\r\n        case EVENT_CODE.enter:\r\n          target.click()\r\n          break\r\n        case EVENT_CODE.esc:\r\n        case EVENT_CODE.tab:\r\n          togglePopperVisible(false)\r\n          break\r\n      }\r\n    }\r\n\r\n    const handleDelete = () => {\r\n      const tags = presentTags.value\r\n      const lastTag = tags[tags.length - 1]\r\n      pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1\r\n\r\n      if (!lastTag || !pressDeleteCount) return\r\n\r\n      if (lastTag.hitState) {\r\n        deleteTag(lastTag)\r\n      } else {\r\n        lastTag.hitState = true\r\n      }\r\n    }\r\n\r\n    const handleFilter = debounce(() => {\r\n      const { value } = searchKeyword\r\n\r\n      if (!value) return\r\n\r\n      const passed = props.beforeFilter(value)\r\n\r\n      if (isPromise(passed)) {\r\n        passed.then(calculateSuggestions).catch(() => {\r\n          /* prevent log error */\r\n        })\r\n      } else if (passed !== false) {\r\n        calculateSuggestions()\r\n      } else {\r\n        hideSuggestionPanel()\r\n      }\r\n    }, props.debounce)\r\n\r\n    const handleInput = (val: string, e?: KeyboardEvent) => {\r\n      !popperVisible.value && togglePopperVisible(true)\r\n\r\n      if (e?.isComposing) return\r\n\r\n      val ? handleFilter() : hideSuggestionPanel()\r\n    }\r\n\r\n    watch(filtering, updatePopperPosition)\r\n\r\n    watch([checkedNodes, isDisabled], calculatePresentTags)\r\n\r\n    watch(presentTags, () => {\r\n      nextTick(() => updateStyle())\r\n    })\r\n\r\n    watch(presentText, (val) => (inputValue.value = val), { immediate: true })\r\n\r\n    onMounted(() => {\r\n      const inputEl = input.value?.$el\r\n      inputInitialHeight =\r\n        inputEl?.offsetHeight ||\r\n        INPUT_HEIGHT_MAP[realSize.value] ||\r\n        DEFAULT_INPUT_HEIGHT\r\n      addResizeListener(inputEl, updateStyle)\r\n    })\r\n\r\n    onBeforeUnmount(() => {\r\n      removeResizeListener(input.value?.$el, updateStyle)\r\n    })\r\n\r\n    return {\r\n      popperOptions,\r\n      tooltipRef,\r\n      popperPaneRef,\r\n      input,\r\n      tagWrapper,\r\n      panel,\r\n      suggestionPanel,\r\n      popperVisible,\r\n      inputHover,\r\n      inputPlaceholder,\r\n      filtering,\r\n      presentText,\r\n      checkedValue,\r\n      inputValue,\r\n      searchInputValue,\r\n      presentTags,\r\n      PresentRestTags,\r\n      allTagsText,\r\n      suggestions,\r\n      isDisabled,\r\n      isOnComposition,\r\n      realSize,\r\n      tagSize,\r\n      multiple,\r\n      isReadonly,\r\n      clearBtnVisible,\r\n      t,\r\n      togglePopperVisible,\r\n      hideSuggestionPanel,\r\n      deleteTag,\r\n      focusFirstNode,\r\n      getCheckedNodes,\r\n      clearCheckedNodes,\r\n      handleExpandChange,\r\n      handleKeyDown,\r\n      handleComposition,\r\n      handleClear,\r\n      handleSuggestionClick,\r\n      handleSuggestionKeyDown,\r\n      handleDelete,\r\n      handleInput,\r\n    }\r\n  },\r\n})\r\n</script>\r\n"],"names":["_resolveDirective","_openBlock","_createBlock","_withCtx","_withDirectives","_createElementBlock","_normalizeStyle","_createVNode","_withModifiers","_Fragment","_renderList","_createElementVNode","_toDisplayString","_createCommentVNode","_vShow","_normalizeClass","_renderSlot"],"mappings":"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"}