{"version":3,"file":"index2.mjs","sources":["../../../../../src/components/ivue-cascader/index.vue"],"sourcesContent":["<template>\r\n  <div :class=\"classes\" v-outside=\"handleClickOutside\">\r\n    <!-- 输入框 -->\r\n    <div :class=\"inputClasses\" ref=\"reference\" @click=\"handleToggleOpen\">\r\n      <input type=\"hidden\" :name=\"name\" :value=\"data.currentValue\" />\r\n\r\n      <slot>\r\n        <ivue-input\r\n          :id=\"id\"\r\n          :isValue=\"true\"\r\n          :readonly=\"!filterable\"\r\n          :disabled=\"disabled\"\r\n          :modelValue=\"displayInputRender\"\r\n          :placeholder=\"inputPlaceholder\"\r\n          @on-change=\"handleChangeInput\"\r\n          ref=\"input\"\r\n        >\r\n          <!-- 下拉图标 -->\r\n          <template #suffix>\r\n            <slot name=\"suffix\">\r\n              <!--  清除按钮 -->\r\n              <ivue-icon\r\n                :class=\"`${prefixCls}-clearable ${clearableIconClass}`\"\r\n                v-show=\"showCloseIcon\"\r\n                @click.stop=\"handleClearSelect\"\r\n                >{{ clearableIcon }}</ivue-icon\r\n              >\r\n              <!-- 下拉按钮 -->\r\n              <ivue-icon\r\n                :class=\"`${prefixCls}-arrow ${arrowDownIconClass}`\"\r\n                @click.stop=\"handleToggleOpen\"\r\n                >{{ arrowDownIcon }}</ivue-icon\r\n              >\r\n            </slot>\r\n          </template>\r\n        </ivue-input>\r\n        <!-- 是否支持搜索 -->\r\n        <div\r\n          :class=\"`${prefixCls}-label`\"\r\n          v-show=\"filterable && data.queryData === ''\"\r\n          @click=\"handleInputFocus\"\r\n        >\r\n          {{ displayRender }}\r\n        </div>\r\n      </slot>\r\n    </div>\r\n    <!-- 下拉菜单 -->\r\n    <transition name=\"transition-drop\">\r\n      <drop-down\r\n        :transfer=\"transfer\"\r\n        :data-transfer=\"transfer\"\r\n        :class=\"dropdownClasses\"\r\n        :style=\"dropdownStyles\"\r\n        v-transfer-dom\r\n        ref=\"dropdown\"\r\n        v-show=\"data.visibleMenu\"\r\n      >\r\n        <div>\r\n          <!-- 菜单 -->\r\n          <ivue-cascader-menu\r\n            :options=\"options\"\r\n            :disabled=\"disabled\"\r\n            :changeOnSelect=\"changeOnSelect\"\r\n            :trigger=\"trigger\"\r\n            ref=\"menu\"\r\n            v-show=\"!filterable || (filterable && data.queryData === '')\"\r\n          ></ivue-cascader-menu>\r\n          <!-- 有数据 -->\r\n          <div\r\n            :class=\"`${prefixCls}-dropdown`\"\r\n            v-show=\"\r\n              filterable && data.queryData !== '' && querySelections.length\r\n            \"\r\n          >\r\n            <ul :class=\"`${prefixCls}-dropdown--list`\">\r\n              <li\r\n                :class=\"[\r\n                  `${prefixCls}-dropdown--item`,\r\n                  {\r\n                    [`${prefixCls}-dropdown--item__disabled`]: item.disabled,\r\n                  },\r\n                ]\"\r\n                v-for=\"(item, index) in querySelections\"\r\n                :key=\"index\"\r\n                v-html=\"item.display\"\r\n                @click=\"handleSelectItem(item)\"\r\n              ></li>\r\n            </ul>\r\n          </div>\r\n          <!-- 当搜索列表为空时显示的内容 -->\r\n          <ul\r\n            :class=\"`${prefixCls}-not-found-tip`\"\r\n            v-show=\"\r\n              (filterable &&\r\n                data.queryData !== '' &&\r\n                !querySelections.length) ||\r\n              !options.length\r\n            \"\r\n          >\r\n            <li :class=\"`${prefixCls}-not-found-tip-text`\">\r\n              {{ notFoundText }}\r\n            </li>\r\n          </ul>\r\n        </div>\r\n      </drop-down>\r\n    </transition>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  defineComponent,\r\n  reactive,\r\n  computed,\r\n  ref,\r\n  provide,\r\n  watch,\r\n  nextTick,\r\n  onMounted,\r\n  getCurrentInstance,\r\n} from 'vue';\r\n\r\nimport { oneOf } from '../../utils/assist';\r\nimport { Outside, TransferDom } from '../../utils/directives';\r\n\r\nimport IvueInput from '../ivue-input/index.vue';\r\nimport IvueIcon from '../ivue-icon/index.vue';\r\nimport DropDown from '../ivue-select/drop-down.vue';\r\nimport IvueCascaderMenu from './menu.vue';\r\n\r\n// type\r\nimport {\r\n  IvueInputInstance,\r\n  CascaderContextKey,\r\n  DropDownInstance,\r\n  IvueCascaderMenuInstance,\r\n  Props,\r\n  Data,\r\n  Options,\r\n  ResultChange,\r\n  Result,\r\n} from './types/cascader';\r\nimport { SelectContextKey } from '../ivue-select/types/select';\r\n\r\nconst prefixCls = 'ivue-cascader';\r\n\r\nexport default defineComponent({\r\n  name: prefixCls,\r\n  // 注册局部指令\r\n  directives: { Outside, TransferDom },\r\n  emits: ['on-change', 'update:modelValue', 'on-visible-change'],\r\n  props: {\r\n    /**\r\n     * 可选项的数据源\r\n     *\r\n     * @type {Array}\r\n     */\r\n    options: {\r\n      type: Array,\r\n      default: () => [],\r\n    },\r\n    /**\r\n     * 当前已选项的数据\r\n     *\r\n     * @type {Array}\r\n     */\r\n    modelValue: {\r\n      type: Array,\r\n    },\r\n    /**\r\n     * input name\r\n     *\r\n     * @type {String}\r\n     */\r\n    name: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * id\r\n     *\r\n     * @type {String}\r\n     */\r\n    id: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * 是否支持搜索\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    filterable: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 是否禁用选择组件\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 选择后展示的函数，用于自定义显示格式\r\n     *\r\n     * @type {Function}\r\n     */\r\n    renderFormat: {\r\n      type: Function,\r\n      default: (label: string[] | number[]) => {\r\n        return label.join(' / ');\r\n      },\r\n    },\r\n    /**\r\n     * 输入框占位符\r\n     *\r\n     * @type {String}\r\n     */\r\n    placeholder: {\r\n      type: String,\r\n      default: '请选择',\r\n    },\r\n    /**\r\n     * 下拉图标\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    arrowDownIcon: {\r\n      type: String,\r\n      default: 'keyboard_arrow_down',\r\n    },\r\n    /**\r\n     * 下拉图标Class\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    arrowDownIconClass: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    /**\r\n     * 清除按钮图标\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    clearableIcon: {\r\n      type: String,\r\n      default: 'cancel',\r\n    },\r\n    /**\r\n     * 清除按钮图标Class\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    clearableIconClass: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    /**\r\n     * 开启 transfer 时，给浮层添加额外的 class 名称\r\n     *\r\n     * @type {String}\r\n     */\r\n    transferClassName: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * 是否将弹层放置于 body 内、\r\n     * 带有 fixed 的 Table 列内使用时，\r\n     * 建议添加此属性，它将不受父级样式影响，\r\n     * 从而达到更好的效果\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    transfer: {\r\n      type: Boolean,\r\n      default() {\r\n        const global = getCurrentInstance().appContext.config.globalProperties;\r\n\r\n        return !global.$IVUE || global.$IVUE.transfer === ''\r\n          ? false\r\n          : global.$IVUE.transfer;\r\n      },\r\n    },\r\n    /**\r\n     * 当此项为 true 时，点选每级菜单选项值都会发生变化\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    changeOnSelect: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 菜单展开方式，可选值为 click 或 hover\r\n     *\r\n     * @type {String}\r\n     */\r\n    trigger: {\r\n      validator(value: string) {\r\n        return oneOf(value, ['click', 'hover']);\r\n      },\r\n      default: 'click',\r\n    },\r\n    /**\r\n     * 动态获取数据，数据源需标识 loading\r\n     *\r\n     * @type {Function}\r\n     */\r\n    loadData: {\r\n      type: Function,\r\n      default: () => {},\r\n    },\r\n    /**\r\n     * 清除按钮\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    clearable: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    /**\r\n     * 当搜索列表为空时显示的内容\r\n     *\r\n     * @type {String}\r\n     */\r\n    notFoundText: {\r\n      type: String,\r\n      default: '无匹配数据',\r\n    },\r\n  },\r\n  setup(props: Props, { emit }) {\r\n    // dom\r\n    const input = ref<IvueInputInstance>();\r\n    const reference = ref<HTMLDivElement>();\r\n    const dropdown = ref<DropDownInstance>();\r\n    const menu = ref<IvueCascaderMenuInstance>();\r\n\r\n    // data\r\n    const data = reactive<Data>({\r\n      /**\r\n       * 是否显示菜单\r\n       *\r\n       * @type {Boolean}\r\n       */\r\n      visibleMenu: false,\r\n      /**\r\n       * 当前的value\r\n       *\r\n       * @type {Array}\r\n       */\r\n      currentValue: props.modelValue || [],\r\n      /**\r\n       * 选择的数据\r\n       *\r\n       * @type {Array}\r\n       */\r\n      selected: [],\r\n      /**\r\n       * 请求的输入\r\n       *\r\n       * @type {String}\r\n       */\r\n      queryData: '',\r\n      /**\r\n       * 有效数据流\r\n       *\r\n       * @type {String}\r\n       */\r\n      validDataStr: '',\r\n      /**\r\n       * 加载子项\r\n       *\r\n       * @type {Boolean}\r\n       */\r\n      isLoadedChildren: false,\r\n      /**\r\n       * 临时选择\r\n       *\r\n       * @type {Array}\r\n       */\r\n      tmpSelected: [],\r\n      /**\r\n       * 修复 changeOnSelect 类型中的设置值\r\n       *\r\n       * @type {Boolean}\r\n       */\r\n      updatingValue: false,\r\n      /**\r\n       * 解决 value 置为 null 时，$emit:update:modelValue [] 而不是 null\r\n       *\r\n       * @type {Boolean}\r\n       */\r\n      isValueNull: false,\r\n      /**\r\n       * 过滤选择\r\n       *\r\n       * @type {Boolean}\r\n       */\r\n      filterableSelect: true,\r\n    });\r\n\r\n    // onMounted\r\n    onMounted(() => {\r\n      // 有效数据流\r\n      data.validDataStr = JSON.stringify(getValidData(props.options));\r\n\r\n      // 更新选项\r\n      updateSelected(true);\r\n    });\r\n\r\n    // computed\r\n\r\n    // 外层样式\r\n    const classes = computed(() => {\r\n      return [\r\n        `${prefixCls}`,\r\n        {\r\n          [`${prefixCls}-visible`]: data.visibleMenu,\r\n          [`${prefixCls}-disabled`]: props.disabled,\r\n          [`${prefixCls}-not-found`]:\r\n            props.filterable &&\r\n            data.queryData !== '' &&\r\n            !querySelections.value.length,\r\n        },\r\n      ];\r\n    });\r\n\r\n    // input样式\r\n    const inputClasses = computed(() => {\r\n      return [\r\n        `${prefixCls}-input`,\r\n        {\r\n          [`${prefixCls}-show-clear`]: showCloseIcon.value,\r\n        },\r\n      ];\r\n    });\r\n\r\n    // 显示渲染\r\n    const displayRender = computed(() => {\r\n      const label = [];\r\n      for (let i = 0; i < data.selected.length; i++) {\r\n        label.push(data.selected[i].label);\r\n      }\r\n\r\n      return props.renderFormat(label, data.selected);\r\n    });\r\n\r\n    // 获取的值\r\n    const displayInputRender = computed(() => {\r\n      return props.filterable ? '' : displayRender.value;\r\n    });\r\n\r\n    // 输入框提示\r\n    const inputPlaceholder = computed(() => {\r\n      return props.filterable && data.currentValue.length\r\n        ? null\r\n        : props.placeholder;\r\n    });\r\n\r\n    // 下拉框样式\r\n    const dropdownClasses = computed(() => {\r\n      return {\r\n        [`${prefixCls}-dropdown-not-found`]:\r\n          props.filterable &&\r\n          data.queryData !== '' &&\r\n          !querySelections.value.length,\r\n        [`${prefixCls}-dropdown--transfer`]: props.transfer,\r\n        [props.transferClassName]: props.transferClassName,\r\n      };\r\n    });\r\n\r\n    // 下拉框样式\r\n    const dropdownStyles = computed(() => {\r\n      return {\r\n        display: data.filterableSelect ? 'inline-block' : 'none',\r\n      };\r\n    });\r\n\r\n    // 显示清除按钮\r\n    const showCloseIcon = computed(() => {\r\n      return (\r\n        data.currentValue &&\r\n        data.currentValue.length &&\r\n        props.clearable &&\r\n        !props.disabled\r\n      );\r\n    });\r\n\r\n    // 获取查询的数据\r\n    const querySelections = computed(() => {\r\n      // 是否支持搜索\r\n      if (!props.filterable) {\r\n        return;\r\n      }\r\n\r\n      let selections = [];\r\n\r\n      function getSelections(arr: Options[], label: string, value: string) {\r\n        arr.forEach((item) => {\r\n          // label\r\n          item.__label = label ? `${label} / ${item.label}` : item.label;\r\n\r\n          // value\r\n          item.__value = value ? `${value},${item.value}` : item.value;\r\n\r\n          if (item.children && item.children.length) {\r\n            getSelections(item.children, item.__label, item.__value);\r\n\r\n            delete item.__label;\r\n            delete item.__value;\r\n          } else {\r\n            selections.push({\r\n              label: item.__label,\r\n              value: item.__value,\r\n              display: item.__label,\r\n              item: item,\r\n              disabled: !!item.disabled,\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      // 获取选项\r\n      getSelections(props.options, null, null);\r\n\r\n      // 当前匹配项\r\n      selections = selections\r\n        .filter((item) => {\r\n          return item.label ? item.label.indexOf(data.queryData) > -1 : false;\r\n        })\r\n        .map((item) => {\r\n          item.display = item.display.replace(\r\n            new RegExp(data.queryData, 'g'),\r\n            `<span>${data.queryData}</span>`\r\n          );\r\n\r\n          return item;\r\n        });\r\n\r\n      return selections;\r\n    });\r\n\r\n    // methods\r\n\r\n    // 点击外部\r\n    const handleClickOutside = () => {\r\n      data.visibleMenu = false;\r\n    };\r\n\r\n    // 输入框数据改变\r\n    const handleChangeInput = (value: string) => {\r\n      data.queryData = value;\r\n    };\r\n\r\n    // 失去焦点\r\n    const handleInputFocus = () => {\r\n      input.value.focus(null);\r\n    };\r\n\r\n    // 关闭下拉框\r\n    const handleClose = () => {\r\n      data.visibleMenu = false;\r\n    };\r\n\r\n    // 打开菜单\r\n    const handleToggleOpen = () => {\r\n      // 是否禁用选择组件\r\n      if (props.disabled) {\r\n        return false;\r\n      }\r\n\r\n      // 是否显示菜单\r\n      if (data.visibleMenu) {\r\n        // 是否支持搜索\r\n        if (!props.filterable) {\r\n          handleClose();\r\n        }\r\n      } else {\r\n        // 获取焦点\r\n        handleFocus();\r\n      }\r\n    };\r\n\r\n    // 结果变化\r\n    const handleResultChange = (params: ResultChange) => {\r\n      // lastValue: 是点击的最终值\r\n      const lastValue = params.lastValue;\r\n      // fromInit: 这是从更新值发出的\r\n      const fromInit = params.fromInit;\r\n      const changeOnSelect = params.changeOnSelect;\r\n\r\n      // 点选每级菜单选项值都会发生变化\r\n      if (lastValue || changeOnSelect) {\r\n        const oldVal = JSON.stringify(data.currentValue);\r\n\r\n        data.selected = data.tmpSelected;\r\n\r\n        const newVal = [];\r\n        data.selected.forEach((item) => {\r\n          newVal.push(item.value);\r\n        });\r\n\r\n        if (!fromInit) {\r\n          data.updatingValue = true;\r\n          data.currentValue = newVal;\r\n\r\n          // 发送事件\r\n          emitValue(data.currentValue, oldVal);\r\n        }\r\n      }\r\n\r\n      // 选择最后一项\r\n      if (lastValue && !fromInit) {\r\n        handleClose();\r\n      }\r\n    };\r\n\r\n    // 清除选择数据\r\n    const handleClearSelect = () => {\r\n      // 是否禁用选择组件\r\n      if (props.disabled) {\r\n        return false;\r\n      }\r\n\r\n      // 当前值\r\n      const oldVal = JSON.stringify(data.currentValue);\r\n      data.currentValue = data.selected = data.tmpSelected = [];\r\n\r\n      // 发送事件\r\n      emitValue(data.currentValue, oldVal);\r\n\r\n      // 关闭下拉框\r\n      handleClose();\r\n\r\n      setTimeout(() => {\r\n        // 清除菜单选择数据\r\n        menu.value.handleClear();\r\n      }, 300);\r\n    };\r\n\r\n    // 获取焦点\r\n    const handleFocus = () => {\r\n      data.filterableSelect = true;\r\n\r\n      data.visibleMenu = true;\r\n\r\n      // 清除带单数据\r\n      if (!data.currentValue.length) {\r\n        menu.value.handleClear();\r\n      }\r\n    };\r\n\r\n    // 选择搜索选项\r\n    const handleSelectItem = (item: Options) => {\r\n      // 禁用\r\n      if (item.disabled || item.item.disabled) {\r\n        return false;\r\n      }\r\n\r\n      // 清除搜索内容\r\n      data.queryData = '';\r\n\r\n      // 清除输入框\r\n      input.value.handleClear();\r\n\r\n      const oldVal = JSON.stringify(data.currentValue);\r\n      data.currentValue = item.value.split(',');\r\n\r\n      // 有当前数据\r\n      if (data.currentValue.length) {\r\n        updateSelected();\r\n      }\r\n\r\n      // 发送事件\r\n      emitValue(data.currentValue, oldVal);\r\n\r\n      data.filterableSelect = false;\r\n\r\n      setTimeout(() => {\r\n        // 关闭弹窗\r\n        handleClose();\r\n      });\r\n    };\r\n\r\n    // 排除 loading 后的 data，避免重复触发 updateSelect\r\n    const getValidData = (data: Options[]) => {\r\n      function deleteData(item: Options) {\r\n        const new_item = Object.assign({}, item);\r\n        if ('loading' in new_item) {\r\n          delete new_item.loading;\r\n        }\r\n\r\n        if ('__value' in new_item) {\r\n          delete new_item.__value;\r\n        }\r\n\r\n        if ('__label' in new_item) {\r\n          delete new_item.__label;\r\n        }\r\n\r\n        if ('children' in new_item && new_item.children.length) {\r\n          new_item.children = new_item.children.map((i) => deleteData(i));\r\n        }\r\n        return new_item;\r\n      }\r\n\r\n      return data.map((item: Options) => deleteData(item));\r\n    };\r\n\r\n    // 更新选项 触发菜单 handleFindSelected 方法\r\n    const updateSelected = (init = false, changeOnSelectDataChange = false) => {\r\n      // changeOnSelectDataChange 用于在数据更改和设置值时进行 changeOnSelect\r\n      if (!props.changeOnSelect || init || changeOnSelectDataChange) {\r\n        menu.value.handleFindSelected({\r\n          value: data.currentValue,\r\n        });\r\n      }\r\n    };\r\n\r\n    // 更新结果\r\n    const updateResult = (result: Result[]) => {\r\n      data.tmpSelected = result;\r\n    };\r\n\r\n    // 发送事件\r\n    const emitValue = (val: string[], oldVal: string) => {\r\n      if (JSON.stringify(val) !== oldVal) {\r\n        emit(\r\n          'on-change',\r\n          data.currentValue,\r\n          JSON.parse(JSON.stringify(data.selected))\r\n        );\r\n      }\r\n    };\r\n\r\n    // 监听菜单打开\r\n    watch(\r\n      () => data.visibleMenu,\r\n      (value) => {\r\n        if (value) {\r\n          // 有当前数据\r\n          if (data.currentValue.length) {\r\n            updateSelected();\r\n          }\r\n\r\n          // 是否将弹层放置于 body 内，在 Tabs\r\n          dropdown.value.update();\r\n        } else {\r\n          // 是否支持搜索\r\n          if (props.filterable) {\r\n            // 请求的输入下拉框动画结束后清除\r\n            setTimeout(() => {\r\n              data.queryData = '';\r\n              input.value.handleClear();\r\n            }, 300);\r\n          }\r\n\r\n          // 是否将弹层放置于 body 内，在 Tabs\r\n          if (props.transfer) {\r\n            dropdown.value.destroy();\r\n          }\r\n        }\r\n\r\n        emit('on-visible-change', value);\r\n      }\r\n    );\r\n\r\n    // 监听 modelValue\r\n    watch(\r\n      () => props.modelValue,\r\n      (value) => {\r\n        if (value === null) {\r\n          data.isValueNull = true;\r\n        }\r\n\r\n        // 有当前数据\r\n        data.currentValue = value || [];\r\n\r\n        // 清除选择的数据\r\n        if (value === null || !value.length) {\r\n          data.selected = [];\r\n        }\r\n      }\r\n    );\r\n\r\n    // 监听当前的value\r\n    watch(\r\n      () => data.currentValue,\r\n      (value: string[] | null) => {\r\n        // 解决 value 置为 null 时，$emit:update:modelValue [] 而不是 null\r\n        if (data.isValueNull) {\r\n          data.isValueNull = false;\r\n\r\n          emit('update:modelValue', null);\r\n        } else {\r\n          emit('update:modelValue', value);\r\n        }\r\n\r\n        if (data.updatingValue) {\r\n          data.updatingValue = false;\r\n          return;\r\n        }\r\n\r\n        // 更新选项\r\n        updateSelected(true);\r\n      }\r\n    );\r\n\r\n    // 监听可选项的数据源\r\n    watch(\r\n      () => props.options,\r\n      () => {\r\n        const validDataStr = JSON.stringify(getValidData(props.options));\r\n\r\n        // 数据流不一样\r\n        if (validDataStr !== data.validDataStr) {\r\n          data.validDataStr = validDataStr;\r\n\r\n          if (!data.isLoadedChildren) {\r\n            nextTick(() => updateSelected(false, props.changeOnSelect));\r\n          }\r\n\r\n          // 加载子项\r\n          data.isLoadedChildren = false;\r\n        }\r\n      },\r\n      {\r\n        deep: true,\r\n      }\r\n    );\r\n\r\n    // provide\r\n    provide(\r\n      SelectContextKey,\r\n      reactive({\r\n        props,\r\n        reference,\r\n      })\r\n    );\r\n\r\n    // provide\r\n    provide(\r\n      CascaderContextKey,\r\n      reactive({\r\n        props,\r\n        dropdown,\r\n        data,\r\n        updateResult,\r\n        handleResultChange,\r\n      })\r\n    );\r\n\r\n    return {\r\n      prefixCls,\r\n\r\n      // dom\r\n      input,\r\n      reference,\r\n      dropdown,\r\n      menu,\r\n\r\n      // data\r\n      data,\r\n\r\n      // computed\r\n      classes,\r\n      inputClasses,\r\n      displayRender,\r\n      displayInputRender,\r\n      inputPlaceholder,\r\n      dropdownClasses,\r\n      dropdownStyles,\r\n      showCloseIcon,\r\n      querySelections,\r\n\r\n      // methods\r\n      handleClickOutside,\r\n      handleChangeInput,\r\n      handleInputFocus,\r\n      handleToggleOpen,\r\n      handleClearSelect,\r\n      handleSelectItem,\r\n      updateResult,\r\n    };\r\n  },\r\n  components: {\r\n    IvueInput,\r\n    IvueIcon,\r\n    DropDown,\r\n    IvueCascaderMenu,\r\n  },\r\n});\r\n</script>\r\n"],"names":["_resolveDirective","_normalizeClass","_createCommentVNode","_createElementVNode","_renderSlot","_createVNode","_withCtx","_withDirectives","_withModifiers","_vShow","_toDisplayString","_Transition","_openBlock","_createBlock","_normalizeStyle","_createElementBlock","_Fragment","_renderList"],"mappings":"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"}