{"version":3,"file":"cascader.vue2.mjs","sources":["../../../components/cascader/cascader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Overflow } from '@/components/overflow'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { Tag } from '@/components/tag'\nimport { Tooltip } from '@/components/tooltip'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, onBeforeUpdate, reactive, ref, toRef, watch, watchEffect } from 'vue'\n\nimport CascaderPanel from './cascader-panel.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport { flatTree, getLast, isNull, isPromise, toAttrValue, transformTree } from '@vexip-ui/utils'\nimport { cascaderProps } from './props'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type {\n  CascaderKeyConfig,\n  CascaderOptionState,\n  CascaderSlots,\n  CascaderValue,\n  Data\n} from './symbol'\n\ntype ChangeListener = (value: CascaderValue, data: Data[] | Data[][]) => void\n\nconst ID_KEY = Symbol('ID_KEY')\nconst PARENT_KEY = Symbol('PARENT_KEY')\n\nconst defaultKeyConfig: Required<CascaderKeyConfig> = {\n  value: 'value',\n  label: 'label',\n  children: 'children',\n  disabled: 'disabled',\n  hasChild: 'hasChild'\n}\n\ndefineOptions({ name: 'Cascader' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<CascaderValue>(() => reference.value?.focus())\n\nconst _props = defineProps(cascaderProps)\nconst nh = useNameHelper('cascader')\nconst props = useProps('cascader', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  visible: {\n    default: false,\n    static: true\n  },\n  options: {\n    default: () => [],\n    static: true\n  },\n  placeholder: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noCascaded: false,\n  multiple: false,\n  disabled: () => disabled.value,\n  clearable: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  staticSuffix: false,\n  noSuffix: false,\n  transitionName: () => nh.ns('drop'),\n  outsideClose: true,\n  keyConfig: () => ({}),\n  separator: {\n    default: '/',\n    validator: value => value.length === 1\n  },\n  hoverTrigger: false,\n  maxTagCount: 0,\n  briefLabel: false,\n  noRestTip: false,\n  onAsyncLoad: {\n    default: null,\n    isFunc: true\n  },\n  mergeTags: false,\n  tagType: null,\n  emptyText: null,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  transparent: false,\n  popperAlive: null,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:visible', 'update:value'])\n\nconst slots = defineSlots<CascaderSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('select', toRef(props, 'locale'))\n\nconst currentVisible = ref(props.visible)\nconst currentValues = ref<string[]>([])\nconst currentLabels = ref<string[]>([])\nconst mergedValues = ref<string[]>([])\nconst mergedLabels = ref<string[]>([])\nconst isPopperShow = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\n\nconst emittedValue = ref<CascaderValue | null>(null)\nconst optionTree = ref<CascaderOptionState[]>(null!)\nconst isAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\nconst usingMerged = computed(() => props.mergeTags && !props.noCascaded)\nconst templateValues = computed(() =>\n  usingMerged.value ? mergedValues.value : currentValues.value\n)\nconst templateLabels = computed(() =>\n  usingMerged.value ? mergedLabels.value : currentLabels.value\n)\n\nlet optionList: CascaderOptionState[] = null!\nlet optionIdMap: Map<number, CascaderOptionState> = null!\nlet optionValueMap: Map<string, CascaderOptionState> = null!\nlet outsideClosed = false\nlet prevClosedId = -1\nlet flattedOptions: Record<any, any>[]\n\nconst updateTrigger = ref(0)\n\nwatchEffect(() => {\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\n  props.keyConfig.value\n  props.keyConfig.label\n  props.keyConfig.disabled\n  props.keyConfig.hasChild\n  props.separator\n  isAsyncLoad.value\n  /* eslint-enable */\n\n  flattedOptions = flatTree(props.options as Record<any, any>[], {\n    keyField: ID_KEY,\n    parentField: PARENT_KEY,\n    childField: props.keyConfig.children ?? defaultKeyConfig.children,\n    forceInject: true\n  })\n\n  updateTrigger.value++\n})\n\nwatch(updateTrigger, initOptionStates, { immediate: true })\n\nfunction initOptionStates() {\n  const separator = props.separator\n  const isAsync = isAsyncLoad.value\n\n  optionList = createOptionStates(flattedOptions)\n  optionIdMap = new Map()\n  optionValueMap = new Map()\n\n  for (let i = 0, len = optionList.length; i < len; ++i) {\n    const option = optionList[i]\n\n    initOptionFull(option, separator)\n    optionIdMap.set(option.id, option)\n    optionValueMap.set(option.fullValue, option)\n\n    if (isAsync) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n\n  optionTree.value = transformTree(optionList)\n  initValueAndLabel(emittedValue.value)\n}\n\nconst openedIds = ref<number[]>([])\nconst optionsList = computed(() => {\n  return [\n    optionTree.value,\n    ...openedIds.value.map(id => optionIdMap.get(id)?.children).filter(Boolean)\n  ]\n})\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst panelElList = ref<InstanceType<typeof CascaderPanel>[]>([])\nconst restTagCount = ref(0)\nconst restTipShow = ref(false)\nconst selectorWidth = ref(0)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.multiple,\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\n    [`${baseCls}--transparent`]: props.transparent\n  }\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.slots.prefix || props.prefix)\n})\nconst hasValue = computed(() => !!templateValues.value[0])\nconst usingHover = computed(() => props.hoverTrigger && !isAsyncLoad.value)\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\n})\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, async value => {\n  if (value) {\n    restTipShow.value = false\n    selectorWidth.value = wrapper.value?.offsetWidth || 0\n\n    await updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n    })\n  } else {\n    isPopperShow.value = false\n\n    if (reference.value && !outsideClosed) {\n      reference.value.focus()\n    }\n  }\n\n  outsideClosed = false\n})\n\nlet outsideChanged = false\n\nwatch(emittedValue, () => {\n  outsideChanged = true\n})\nwatch(\n  () => props.value,\n  value => {\n    if (value !== emittedValue.value || outsideChanged) {\n      emittedValue.value = value\n      initValueAndLabel(value)\n      nextTick(() => {\n        outsideChanged = false\n      })\n    }\n  },\n  { immediate: true }\n)\nwatch(\n  () => props.briefLabel,\n  brief => {\n    currentLabels.value = currentValues.value\n      .map(value => optionValueMap.get(value)?.[brief ? 'label' : 'fullLabel'] as string)\n      .filter(Boolean)\n\n    // nextTick(computeTagsOverflow)\n  }\n)\nwatch(isAsyncLoad, value => {\n  if (value) {\n    for (const option of optionIdMap.values()) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n})\nwatch(usingMerged, value => {\n  if (value) {\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n\n    updateMergedProps()\n  }\n\n  if (isAsyncLoad.value) {\n    const originalOptions: CascaderOptionState[] = []\n\n    for (const option of optionIdMap.values()) {\n      if (option.checked) {\n        originalOptions.push(option)\n      }\n\n      if (option.hasChild && !option.children.length && !option.loaded) {\n        option.checked = false\n      }\n    }\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitMultipleChange()\n})\nwatch(\n  () => optionsList.value.length,\n  () => {\n    updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n      prevClosedId = -1\n    })\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  }\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\nonBeforeUpdate(() => {\n  panelElList.value.length = 0\n})\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentVisible,\n  currentValues,\n  currentLabels,\n  isHover,\n  openedIds,\n  restTagCount,\n  restTipShow,\n  optionsList,\n  hasValue,\n  templateValues,\n  templateLabels,\n  showClear,\n  wrapper,\n  reference,\n  popper,\n  panelElList,\n  handlePanelOpen,\n  handleOptionSelect,\n  handleOptionCheck,\n  toggleVisible,\n  handleClear,\n  handlePanelBack,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur()\n})\n\nfunction createOptionStates(rawOptions: Record<string | symbol, any>[]) {\n  const {\n    value: valueKey,\n    label: labelKey,\n    disabled: disabledKey,\n    hasChild: hasChildKey\n  } = { ...defaultKeyConfig, ...props.keyConfig }\n\n  return rawOptions.map(rawOption => {\n    const {\n      [ID_KEY]: id,\n      [PARENT_KEY]: parent,\n      [valueKey]: value,\n      [labelKey]: label,\n      [disabledKey]: disabled,\n      [hasChildKey]: hasChild\n    } = rawOption\n\n    return reactive<CascaderOptionState>({\n      id,\n      parent,\n      value,\n      disabled,\n      hasChild,\n      label: label || String(value),\n      fullValue: '',\n      fullLabel: '',\n      children: [],\n      checked: false,\n      partial: false,\n      loading: false,\n      loaded: false,\n      error: false,\n      childrenLoaded: false,\n      data: rawOption\n    })\n  })\n}\n\nfunction initOptionFull(option: CascaderOptionState, separator: string) {\n  let value = option.value as string\n  let label = option.label\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    value = `${parent.value}${separator}${value}`\n    label = `${parent.label}${separator}${label}`\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  option.fullValue = value\n  option.fullLabel = label\n}\n\nfunction queryChildrenLoaded(option: CascaderOptionState) {\n  if (option.hasChild && !option.children?.length) {\n    return option.loaded\n  }\n\n  const loop: CascaderOptionState[] = [...option.children]\n\n  while (loop.length) {\n    const child = loop.shift()!\n\n    if (child.childrenLoaded) continue\n\n    if (child.hasChild && !child.children?.length) {\n      child.childrenLoaded = child.loaded\n\n      if (!child.loaded) return false\n    }\n\n    loop.push(...child.children)\n  }\n\n  return true\n}\n\nfunction updateMergedProps() {\n  const baseValues = isAsyncLoad.value\n    ? currentValues.value.concat(mergedValues.value)\n    : currentValues.value\n  const values = new Set(baseValues)\n  const loop = [...baseValues]\n\n  while (loop.length) {\n    const value = loop.shift()!\n\n    const option = optionValueMap.get(value)\n\n    if (option) {\n      const parent = optionIdMap.get(option.parent)\n\n      if (parent?.checked) {\n        values.delete(value)\n        values.add(parent.fullValue)\n        loop.push(parent.fullValue)\n      }\n    }\n  }\n\n  const briefLabel = props.briefLabel\n\n  mergedValues.value = Array.from(values).filter(value => optionValueMap.has(value))\n  mergedLabels.value = mergedValues.value\n    .map(value => {\n      const option = optionValueMap.get(value)!\n\n      return briefLabel ? option.label : option.fullLabel\n    })\n    .filter(Boolean)\n}\n\nfunction isFlatArray<T extends string | number>(value: T[] | T[][]): value is T[] {\n  return !!value.length && !Array.isArray(value[0])\n}\n\nfunction isComplexArray<T extends string | number>(value: T[] | T[][]): value is T[][] {\n  return !!value.length && Array.isArray(value[0])\n}\n\nfunction initValueAndLabel(value: CascaderValue | null) {\n  const processMerged = () => {\n    if (usingMerged.value) {\n      if (isAsyncLoad.value) {\n        mergedValues.value = Array.from(optionIdMap.values())\n          .filter(option => option.checked)\n          .map(option => option.fullValue)\n      }\n\n      updateMergedProps()\n    }\n  }\n\n  for (const option of optionList) {\n    option.checked = false\n    option.partial = false\n  }\n\n  if (!value?.length) {\n    currentValues.value = []\n    currentLabels.value = []\n    processMerged()\n    return\n  }\n\n  const briefLabel = props.briefLabel\n\n  if (props.multiple) {\n    const normalizedValue = isFlatArray(value) ? [value] : value\n    const valueSet = new Set<string>(normalizedValue.map(v => v.join(props.separator)))\n    const selectedValues: string[] = []\n    const selectedLabels: string[] = []\n    const selectedOptions: CascaderOptionState[] = []\n\n    valueSet.forEach(value => {\n      const option = optionValueMap.get(value)\n\n      if (option) {\n        option.checked = true\n        option.partial = false\n\n        selectedValues.push(value)\n        selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n        selectedOptions.push(option)\n      }\n    })\n\n    if (!props.noCascaded) {\n      const originalOptions = selectedOptions.concat(\n        Array.from(optionIdMap.values()).filter(option => option.disabled && option.checked)\n      )\n\n      for (let i = 0, len = originalOptions.length; i < len; ++i) {\n        const option = originalOptions[i]\n\n        updateCheckedUpward(option)\n        updateCheckedDown(option)\n      }\n    }\n\n    currentValues.value = selectedValues\n    currentLabels.value = selectedLabels\n  } else {\n    const normalizedValue = isComplexArray(value) ? value[0] : value\n    const stringValue = normalizedValue.join(props.separator)\n    const option = optionValueMap.get(stringValue)\n\n    if (option) {\n      currentValues.value = [stringValue]\n      currentLabels.value = [briefLabel ? option.label : option.fullLabel]\n\n      if (props.noCascaded) {\n        option.checked = true\n        option.partial = false\n      }\n    } else {\n      currentValues.value = []\n      currentLabels.value = []\n    }\n  }\n\n  processMerged()\n\n  if (openedIds.value.length) return\n\n  const firstValue = currentValues.value[0]\n\n  if (firstValue) {\n    const option = optionValueMap.get(firstValue)!\n    const ids = [option.id]\n\n    let parent = optionIdMap.get(option.parent)\n\n    while (parent) {\n      ids.push(parent.id)\n      parent = optionIdMap.get(parent.parent)\n    }\n\n    openedIds.value = ids.reverse().slice(0, -1)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nasync function handlePanelOpen(option: CascaderOptionState, depth: number) {\n  if (!option.hasChild && !option.children?.length) return\n\n  if (isAsyncLoad.value && !option.children?.length && !option.loaded) {\n    option.loading = true\n\n    let result: ReturnType<typeof props.onAsyncLoad>\n\n    try {\n      result = props.onAsyncLoad(option.data)\n      result = isPromise(result) ? await result : result\n    } catch (e) {\n      option.error = true\n      option.loading = false\n      return\n    }\n\n    const rawOptions = result as any[]\n\n    if (!Array.isArray(rawOptions) || !rawOptions.length) {\n      option.hasChild = false\n    } else {\n      const options = createOptionStates(rawOptions)\n      const parentId = option.id\n      const separator = props.separator\n\n      option.children.push(...options)\n\n      let idCount = Math.max(...Array.from(optionIdMap.keys()).map(Number)) + 1\n\n      options.forEach(option => {\n        option.id = idCount++\n        option.parent = parentId\n\n        initOptionFull(option, separator)\n\n        optionIdMap.set(option.id, option)\n        optionValueMap.set(option.fullValue, option)\n      })\n\n      optionList.push(...options)\n    }\n\n    option.loaded = true\n    option.loading = false\n\n    const upstream = queryUpstreamOptions(option)\n    upstream.forEach(option => {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    })\n  }\n\n  if (depth < openedIds.value.length) {\n    openedIds.value = openedIds.value.slice(0, depth)\n  }\n\n  openedIds.value.push(option.id)\n  requestAnimationFrame(() => {\n    getLast(panelElList.value)?.$el?.focus()\n  })\n}\n\nfunction handleOptionSelect(option: CascaderOptionState, depth: number) {\n  if (!option) return\n\n  if (option.hasChild || option.children?.length) {\n    handlePanelOpen(option, depth)\n  } else {\n    handleSingleSelect(option.fullValue)\n  }\n}\n\nfunction queryUpstreamOptions(option: CascaderOptionState) {\n  const options = [option]\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    options.push(parent)\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  return options\n}\n\nfunction updateCheckedUpward(originalOption: CascaderOptionState) {\n  let option = originalOption\n\n  while (!isNull(option.parent)) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    if (option.checked === parent.checked && option.partial === parent.partial) {\n      break\n    }\n\n    if (option.checked) {\n      parent.checked = parent.children.every(item => item.disabled || item.checked)\n      parent.partial = !parent.checked\n    } else {\n      parent.checked = false\n      parent.partial = parent.children.some(item => item.checked || item.partial)\n    }\n\n    option = parent\n  }\n}\n\nfunction updateCheckedDown(originalOption: CascaderOptionState) {\n  const checked = originalOption.checked\n  const partial = originalOption.partial\n\n  const loop = [...originalOption.children]\n\n  let option\n\n  while (loop.length) {\n    option = loop.shift()!\n\n    if (option.disabled) continue\n\n    option.checked = checked\n    option.partial = partial\n\n    if (option.children?.length) {\n      loop.push(...option.children)\n    }\n  }\n}\n\nfunction handleOptionCheck(option: CascaderOptionState) {\n  if (!option) return\n\n  const options = Array.from(optionIdMap.values())\n  const checked = !option.checked\n\n  if (!props.multiple) {\n    for (let i = 0, len = options.length; i < len; ++i) {\n      options[i].checked = false\n    }\n\n    option.checked = checked\n    option.partial = false\n\n    return handleSingleSelect(option.fullValue)\n  }\n\n  option.checked = checked\n  option.partial = false\n\n  if (!props.noCascaded) {\n    const originalOptions = [option].concat(\n      options.filter(option => option.disabled && option.checked)\n    )\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitEvent(props[checked ? 'onSelect' : 'onCancel'], option.fullValue, option.data)\n  emitMultipleChange()\n}\n\nfunction emitMultipleChange() {\n  const options = Array.from(optionIdMap.values())\n  const selectedOptions = props.noCascaded\n    ? options.filter(option => option.checked)\n    : options.filter(option => option.checked && !(option.hasChild || option.children?.length))\n\n  const selectedValues: string[] = []\n  const selectedLabels: string[] = []\n\n  const values: (string | number)[][] = []\n  const dataList: Data[][] = []\n  const briefLabel = props.briefLabel\n\n  selectedOptions.forEach(option => {\n    selectedValues.push(option.fullValue)\n    selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n\n    const { value, data } = queryArrayMeta(option.fullValue)\n\n    values.push(value)\n    dataList.push(data)\n  })\n\n  currentValues.value = selectedValues\n  currentLabels.value = selectedLabels\n\n  if (usingMerged.value) {\n    if (isAsyncLoad.value) {\n      mergedValues.value = options.filter(option => option.checked).map(option => option.fullValue)\n    }\n\n    updateMergedProps()\n  }\n\n  if (usingMerged.value && isAsyncLoad.value) {\n    values.length = 0\n    dataList.length = 0\n\n    mergedValues.value.forEach(fullValue => {\n      const option = optionValueMap.get(fullValue)\n\n      if (option) {\n        const { value, data } = queryArrayMeta(option.fullValue)\n\n        values.push(value)\n        dataList.push(data)\n      }\n    })\n  }\n\n  emitChangeEvent(values, dataList)\n  nextTick(updatePopper)\n}\n\nfunction handleSingleSelect(fullValue: string) {\n  const option = optionValueMap.get(fullValue)\n\n  if (!option) return\n\n  emitEvent(props.onSelect, fullValue, option.data)\n\n  if (fullValue) {\n    currentValues.value[0] = fullValue\n    currentLabels.value[0] = props.briefLabel ? option.label : option.fullLabel\n  } else {\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n  }\n\n  const { value, data } = queryArrayMeta(fullValue)\n\n  emitChangeEvent(value, data)\n  setVisible(false)\n}\n\nfunction emitChangeEvent(value: CascaderValue, data: Data[] | Data[][]) {\n  emittedValue.value = value\n\n  nextTick(() => {\n    outsideChanged = false\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeListener, value, data)\n    validateField()\n  })\n}\n\nfunction queryArrayMeta(fullValue: string) {\n  let option = optionValueMap.get(fullValue)!\n\n  if (!option) return { value: [], data: [] }\n\n  const value = [option.value]\n  const data = [option.data]\n\n  while (option.parent) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    value.push(parent.value)\n    data.push(parent.data)\n    option = parent\n  }\n\n  return {\n    value: value.reverse(),\n    data: data.reverse()\n  }\n}\n\nfunction toggleVisible(visible = !currentVisible.value) {\n  if (props.disabled || readonly.value) return\n\n  setVisible(visible)\n}\n\nfunction handleClickOutside() {\n  restTipShow.value = false\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    setVisible(false)\n    outsideClosed = true\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    const prev = emittedValue.value\n\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n    openedIds.value.length = 0\n    emittedValue.value = prev?.length === 0 ? prev : []\n    restTipShow.value = false\n\n    for (const option of optionIdMap.values()) {\n      option.checked = false\n      option.partial = false\n    }\n\n    if (prev?.length !== 0) {\n      emit('update:value', emittedValue.value)\n      emitEvent(props.onChange as ChangeListener, emittedValue.value, [])\n    }\n\n    emitEvent(props.onClear)\n    clearField(emittedValue.value)\n  }\n}\n\nfunction toggleShowRestTip() {\n  if (!currentVisible.value) {\n    restTipShow.value = !restTipShow.value\n  } else {\n    restTipShow.value = false\n  }\n}\n\nfunction handleTipClose(fullValue: string) {\n  if (props.disabled || readonly.value) return\n\n  if (props.multiple) {\n    handleOptionCheck(optionValueMap.get(fullValue)!)\n  } else {\n    handleSingleSelect(fullValue)\n  }\n}\n\nfunction handlePanelKeyOpen(option: CascaderOptionState, depth: number) {\n  handlePanelOpen(option, depth)\n\n  requestAnimationFrame(() => {\n    const panel = getLast(panelElList.value)\n\n    if (panel && panel.currentHitting < 0) {\n      panel.currentHitting = panel.options.findIndex(option => option.id === prevClosedId)\n\n      if (panel.currentHitting < 0) {\n        panel.currentHitting = 0\n      }\n    }\n  })\n}\n\nfunction handlePanelBack() {\n  prevClosedId = openedIds.value.pop()!\n}\n\nfunction handlePanelsEnter() {\n  requestAnimationFrame(() => {\n    isPopperShow.value = true\n  })\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible()\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"toggleVisible()\"\n      @keydown.tab=\"toggleVisible(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <slot name=\"control\">\n          <Renderer :renderer=\"props.slots.control\">\n            <Overflow\n              v-if=\"props.multiple\"\n              inherit\n              :class=\"[nh.be('tags')]\"\n              :items=\"templateValues\"\n              :max-count=\"props.maxTagCount\"\n              @rest-change=\"restTagCount = $event\"\n            >\n              <template #default=\"{ item, index }\">\n                <Tag\n                  inherit\n                  :class=\"nh.be('tag')\"\n                  :type=\"props.tagType\"\n                  closable\n                  :disabled=\"props.disabled\"\n                  @click.stop=\"toggleVisible()\"\n                  @close=\"handleTipClose(item)\"\n                >\n                  {{ templateLabels[index] }}\n                </Tag>\n              </template>\n              <template #counter=\"{ count }\">\n                <Tag\n                  v-if=\"props.noRestTip\"\n                  inherit\n                  :class=\"[nh.be('tag'), nh.be('counter')]\"\n                  :type=\"props.tagType\"\n                  :disabled=\"props.disabled\"\n                >\n                  {{ `+${count}` }}\n                </Tag>\n                <span v-else>\n                  <Tooltip\n                    inherit\n                    :transfer=\"false\"\n                    :visible=\"restTipShow\"\n                    trigger=\"custom\"\n                    placement=\"top-end\"\n                    :tip-class=\"nh.be('rest-tip')\"\n                    @click.stop=\"toggleShowRestTip\"\n                  >\n                    <template #trigger>\n                      <Tag\n                        inherit\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\n                        :type=\"props.tagType\"\n                        :disabled=\"props.disabled\"\n                      >\n                        {{ `+${count}` }}\n                      </Tag>\n                    </template>\n                    <NativeScroll inherit use-y-bar>\n                      <template v-for=\"(item, index) in templateValues\" :key=\"index\">\n                        <Tag\n                          v-if=\"index >= templateValues.length - restTagCount\"\n                          inherit\n                          :class=\"nh.be('tag')\"\n                          closable\n                          :type=\"props.tagType\"\n                          :disabled=\"props.disabled\"\n                          @close=\"handleTipClose(item)\"\n                        >\n                          {{ templateLabels[index] }}\n                        </Tag>\n                      </template>\n                    </NativeScroll>\n                  </Tooltip>\n                </span>\n              </template>\n            </Overflow>\n            <template v-else>\n              {{ currentLabels[0] }}\n            </template>\n            <span\n              v-if=\"(props.placeholder ?? locale.placeholder) && !hasValue\"\n              :class=\"nh.be('placeholder')\"\n            >\n              {{ props.placeholder ?? locale.placeholder }}\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon\n              v-if=\"props.suffix\"\n              :icon=\"props.suffix\"\n              :class=\"{\n                [nh.be('arrow')]: !props.staticSuffix\n              }\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear\"\n        >\n          <Icon v-bind=\"icons.clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.ns('input-vars'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop\n      @enter=\"handlePanelsEnter\"\n    >\n      <div\n        :class=\"{\n          [nh.be('panels')]: true,\n          [nh.bem('panels', 'empty')]: !optionsList[0] || !optionsList[0].length\n        }\"\n      >\n        <template v-if=\"optionsList[0] && optionsList[0].length\">\n          <CascaderPanel\n            v-for=\"(items, index) in optionsList\"\n            :key=\"index\"\n            :ref=\"(panel: any) => panel && panelElList.push(panel)\"\n            :options=\"items\"\n            :opened-id=\"openedIds[index]\"\n            :values=\"currentValues\"\n            :ready=\"isPopperShow\"\n            :multiple=\"props.multiple\"\n            :is-async=\"isAsyncLoad\"\n            :merged=\"usingMerged\"\n            :no-cascaded=\"props.noCascaded\"\n            :labeled-by=\"labelId\"\n            @select=\"handleOptionSelect($event, index)\"\n            @hover=\"usingHover && handlePanelOpen($event, index)\"\n            @check=\"handleOptionCheck($event)\"\n            @open=\"handlePanelKeyOpen($event, index)\"\n            @back=\"handlePanelBack\"\n            @close=\"currentVisible = false\"\n          >\n            <template v-if=\"slots.default || props.slots.default\" #default=\"payload\">\n              <slot v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n              <slot name=\"label\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n          </CascaderPanel>\n        </template>\n        <div v-else :class=\"nh.be('empty')\" :style=\"{ width: `${selectorWidth}px` }\">\n          <slot name=\"empty\">\n            <Renderer :renderer=\"props.slots.empty\">\n              {{ props.emptyText ?? locale.empty }}\n            </Renderer>\n          </slot>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n"],"names":["ID_KEY","PARENT_KEY","defaultKeyConfig","idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","_a","reference","_props","__props","nh","useNameHelper","props","useProps","createSizeProp","createStateProp","createIconProp","value","placementWhileList","emit","__emit","slots","_useSlots","icons","useIcons","locale","useLocale","toRef","currentVisible","ref","currentValues","currentLabels","mergedValues","mergedLabels","isPopperShow","placement","transfer","emittedValue","optionTree","isAsyncLoad","computed","usingMerged","templateValues","templateLabels","optionList","optionIdMap","optionValueMap","outsideClosed","prevClosedId","flattedOptions","updateTrigger","watchEffect","flatTree","watch","initOptionStates","separator","isAsync","createOptionStates","i","len","option","initOptionFull","queryChildrenLoaded","transformTree","initValueAndLabel","openedIds","optionsList","id","wrapper","useClickOutside","handleClickOutside","popper","transferTo","updatePopper","usePopper","isHover","useHover","panelElList","restTagCount","restTipShow","selectorWidth","className","readonly","selectorClass","baseCls","hasPrefix","hasValue","usingHover","showClear","nextTick","_b","getLast","outsideChanged","brief","updateMergedProps","originalOptions","updateCheckedUpward","updateCheckedDown","emitMultipleChange","setVisible","onBeforeUpdate","__expose","handlePanelOpen","handleOptionSelect","handleOptionCheck","toggleVisible","handleClear","handlePanelBack","options","rawOptions","valueKey","labelKey","disabledKey","hasChildKey","rawOption","parent","label","hasChild","reactive","loop","child","baseValues","values","briefLabel","isFlatArray","isComplexArray","processMerged","normalizedValue","valueSet","v","selectedValues","selectedLabels","selectedOptions","stringValue","firstValue","ids","visible","emitEvent","depth","result","isPromise","parentId","idCount","queryUpstreamOptions","handleSingleSelect","originalOption","isNull","item","checked","partial","dataList","data","queryArrayMeta","fullValue","emitChangeEvent","prev","toggleShowRestTip","handleTipClose","handlePanelKeyOpen","panel","handlePanelsEnter"],"mappings":"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"}