{"version":3,"file":"index.vue2.mjs","sources":["../../../../../packages/components/cascade-panel/src/index.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"['el-cascade-panel', border && 'is-bordered']\"\n    @keydown=\"handleKeyDown\"\n  >\n    <el-cascade-menu\n      v-for=\"(menu, index) in menus\"\n      :key=\"index\"\n      :ref=\"item => (menuList[index] = item)\"\n      :index=\"index\"\n      :nodes=\"menu\"\n    />\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUpdate,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  shallowRef,\n  watch\n} from 'vue'\nimport { isEqual, flattenDeep } from 'lodash-unified'\nimport { isClient } from '@vueuse/core'\nimport {\n  focusNode,\n  getSibling,\n  isEmpty,\n  unique,\n  castArray,\n  scrollIntoView\n} from '@element-ultra/utils'\nimport {\n  EVENT_CODE,\n  UPDATE_MODEL_EVENT,\n  CHANGE_EVENT\n} from '@element-ultra/shared'\n\nimport ElCascadeMenu from './menu.vue'\nimport Store from './store'\nimport Node, { ExpandTrigger } from './node'\nimport { CommonProps, useCascadeConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { Cascade_PANEL_INJECTION_KEY } from './types'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-ultra/utils'\nimport type {\n  CascadeValue,\n  CascadeNodeValue,\n  CascadeOption,\n  RenderLabel,\n  default as CascadeNode\n} from './node'\n\nimport type { ElCascadePanelContext } from './types'\n\nexport default defineComponent({\n  name: 'ElCascadePanel',\n\n  components: {\n    ElCascadeMenu\n  },\n\n  props: {\n    ...CommonProps,\n    border: {\n      type: Boolean,\n      default: true\n    },\n    renderLabel: Function as PropType<RenderLabel>\n  },\n\n  emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'close', 'expand-change'],\n\n  setup(props, { emit, slots }) {\n    // for interrupt sync check status in lazy mode\n    let manualChecked = false\n\n    const config = useCascadeConfig(props)\n\n    let store: Nullable<Store> = null\n    const initialLoaded = ref(true)\n    const menuList = ref<any[]>([])\n    const checkedValue = shallowRef<Nullable<CascadeValue>>(null)\n    const menus = ref<CascadeNode[][]>([])\n    const expandingNode = shallowRef<Nullable<CascadeNode>>(null)\n    const checkedNodes = shallowRef<CascadeNode[]>([])\n\n    const isHoverMenu = computed(\n      () => config.value.expandTrigger === ExpandTrigger.HOVER\n    )\n    const renderLabelFn = computed(() => props.renderLabel || slots.default)\n\n    const initStore = () => {\n      const { options } = props\n      const cfg = config.value\n\n      manualChecked = false\n      store = new Store(options, cfg)\n      menus.value = [store.getNodes()]\n\n      if (cfg.lazy && isEmpty(props.options)) {\n        initialLoaded.value = false\n        lazyLoad(undefined, list => {\n          if (list) {\n            store = new Store(list, cfg)\n            menus.value = [store.getNodes()]\n          }\n          initialLoaded.value = true\n          syncCheckedValue(false, true)\n        })\n      } else {\n        syncCheckedValue(false, true)\n      }\n    }\n\n    const lazyLoad: ElCascadePanelContext['lazyLoad'] = (node, cb) => {\n      const cfg = config.value\n      node! = node || new Node({}, cfg, undefined, true)\n      node.loading = true\n\n      const resolve = (dataList: CascadeOption[]) => {\n        const _node = node as Node\n        const parent = _node.root ? null : _node\n        dataList && store?.appendNodes(dataList, parent as any)\n        _node.loading = false\n        _node.loaded = true\n        _node.childrenData = _node.childrenData || []\n        cb && cb(dataList)\n      }\n\n      cfg.lazyLoad(node, resolve as any)\n    }\n\n    const expandNode: ElCascadePanelContext['expandNode'] = (node, silent) => {\n      const { level } = node\n      const newMenus = menus.value.slice(0, level)\n      let newExpandingNode: Nullable<CascadeNode>\n\n      if (node.isLeaf) {\n        newExpandingNode = node.pathNodes[level - 2]\n      } else {\n        newExpandingNode = node\n        newMenus.push(node.children)\n      }\n\n      if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n        expandingNode.value = node\n        menus.value = newMenus\n        !silent && emit('expand-change', node?.pathValues || [])\n      }\n    }\n\n    const handleCheckChange: ElCascadePanelContext['handleCheckChange'] = (\n      node,\n      checked,\n      emitClose = true\n    ) => {\n      const { checkStrictly, multiple } = config.value\n      const oldNode = checkedNodes.value[0]\n      manualChecked = true\n      // 单选则取消旧的选中\n      !multiple && oldNode?.doCheck(false)\n\n      node.doCheck(checked)\n      calculateCheckedValue()\n      if (!multiple && !checkStrictly) {\n        emitClose ? emit('close') : expandParentNode(node)\n      }\n    }\n\n    const expandParentNode = node => {\n      if (!node) return\n      node = node.parent\n      expandParentNode(node)\n      node && expandNode(node)\n    }\n\n    const getFlattedNodes = (leafOnly: boolean) => {\n      return store?.getFlattedNodes(leafOnly)\n    }\n\n    const getCheckedNodes = (leafOnly: boolean) => {\n      return getFlattedNodes(leafOnly)?.filter(node => node.checked !== false)\n    }\n\n    const clearCheckedNodes = () => {\n      checkedNodes.value.forEach(node => node.doCheck(false))\n      calculateCheckedValue()\n    }\n\n    const calculateCheckedValue = () => {\n      const { checkStrictly, multiple } = config.value\n      const oldNodes = checkedNodes.value\n      const newNodes = getCheckedNodes(!checkStrictly)!\n\n      // ensure the original order\n      const nodes = sortByOriginalOrder(oldNodes, newNodes)\n\n      const values = nodes.map(node => node.valueByOption)\n      checkedNodes.value = nodes\n      checkedValue.value = multiple ? values : values[0] ?? null\n    }\n\n    const syncCheckedValue = (loaded = false, forced = false) => {\n      const { modelValue } = props\n      const { lazy, multiple, checkStrictly } = config.value\n      const leafOnly = !checkStrictly\n\n      if (\n        !initialLoaded.value ||\n        manualChecked ||\n        (!forced && isEqual(modelValue, checkedValue.value))\n      )\n        return\n\n      if (lazy && !loaded) {\n        const values: CascadeNodeValue[] = unique(\n          flattenDeep(castArray(modelValue))\n        )\n        const nodes = values\n          .map(val => store?.getNodeByValue(val))\n          .filter(node => !!node && !node.loaded && !node.loading) as Node[]\n\n        if (nodes.length) {\n          nodes.forEach(node => {\n            lazyLoad(node, () => syncCheckedValue(false, forced))\n          })\n        } else {\n          syncCheckedValue(true, forced)\n        }\n      } else {\n        const values = multiple ? castArray(modelValue) : [modelValue]\n        const nodes = unique(\n          values.map(val => store?.getNodeByValue(val, leafOnly))\n        ) as Node[]\n        syncMenuState(nodes, false)\n        checkedValue.value = modelValue!\n      }\n    }\n\n    const syncMenuState = (\n      newCheckedNodes: CascadeNode[],\n      reserveExpandingState = true\n    ) => {\n      const { checkStrictly } = config.value\n      const oldNodes = checkedNodes.value\n      const newNodes = newCheckedNodes.filter(\n        node => !!node && (checkStrictly || node.isLeaf)\n      )\n      const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n      const newExpandingNode =\n        (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n      if (newExpandingNode) {\n        newExpandingNode.pathNodes.forEach(node => expandNode(node, true))\n      } else {\n        expandingNode.value = null\n      }\n\n      oldNodes.forEach(node => node.doCheck(false))\n      // newNodes.forEach(node => node.doCheck(true))\n      if (props.props.multiple) {\n        reactive(newNodes).forEach((node) => node.doCheck(true))\n      } else {\n        newNodes.forEach((node) => node.doCheck(true))\n      }\n      checkedNodes.value = newNodes\n      nextTick(scrollToExpandingNode)\n    }\n\n    const scrollToExpandingNode = () => {\n      if (!isClient) return\n\n      menuList.value.forEach(menu => {\n        const menuElement = menu?.$el\n        if (menuElement) {\n          const container = (menuElement as HTMLElement).querySelector(\n            '.el-scrollbar__wrap'\n          )\n          const activeNode =\n            menuElement.querySelector('.el-cascade-node.is-active') ||\n            menuElement.querySelector('.el-cascade-node.in-active-path')\n          scrollIntoView(container as HTMLElement, activeNode)\n        }\n      })\n    }\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const target = e.target as HTMLElement\n      const { code } = e\n\n      switch (code) {\n        case EVENT_CODE.up:\n        case EVENT_CODE.down: {\n          e.preventDefault()\n          const distance = code === EVENT_CODE.up ? -1 : 1\n          focusNode(\n            getSibling(target, distance, '.el-cascade-node[tabindex=\"-1\"]')\n          )\n          break\n        }\n        case EVENT_CODE.left: {\n          e.preventDefault()\n          const preMenu = menuList.value[getMenuIndex(target) - 1]\n          const expandedNode = preMenu?.$el.querySelector(\n            '.el-cascade-node[aria-expanded=\"true\"]'\n          )\n          focusNode(expandedNode)\n          break\n        }\n        case EVENT_CODE.right: {\n          e.preventDefault()\n          const nextMenu = menuList.value[getMenuIndex(target) + 1]\n          const firstNode = nextMenu?.$el.querySelector(\n            '.el-cascade-node[tabindex=\"-1\"]'\n          )\n          focusNode(firstNode)\n          break\n        }\n        case EVENT_CODE.enter:\n          checkNode(target)\n          break\n        case EVENT_CODE.esc:\n        case EVENT_CODE.tab:\n          emit('close')\n          break\n      }\n    }\n\n    provide(\n      Cascade_PANEL_INJECTION_KEY,\n      reactive({\n        config,\n        expandingNode,\n        checkedNodes,\n        isHoverMenu,\n        initialLoaded,\n        renderLabelFn,\n        lazyLoad,\n        expandNode,\n        handleCheckChange\n      })\n    )\n\n    watch([config, () => props.options], initStore, {\n      deep: true,\n      immediate: true\n    })\n\n    watch(\n      () => props.modelValue,\n      () => {\n        manualChecked = false\n        syncCheckedValue()\n      }\n    )\n\n    watch(checkedValue, val => {\n      if (!isEqual(val, props.modelValue)) {\n        emit(UPDATE_MODEL_EVENT, val)\n        const { multiple } = config.value\n        const _checkedNodes = checkedNodes.value\n        if (multiple) {\n          const { label, item } = _checkedNodes.reduce(\n            (acc, cur) => {\n              acc.item.push(cur.nodeByOption)\n              acc.label.push(cur.labelByOption)\n              return acc\n            },\n            { label: [] as any[], item: [] as any[] }\n          )\n          emit(CHANGE_EVENT, val, label, item)\n        } else {\n          const checkedNode = _checkedNodes[0]\n          emit(\n            CHANGE_EVENT,\n            val,\n            checkedNode?.labelByOption,\n            checkedNode?.nodeByOption\n          )\n        }\n      }\n    })\n\n    onBeforeUpdate(() => (menuList.value = []))\n\n    onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\n    return {\n      menuList,\n      menus,\n      checkedNodes,\n      handleKeyDown,\n      handleCheckChange,\n      getFlattedNodes,\n      getCheckedNodes,\n      clearCheckedNodes,\n      calculateCheckedValue,\n      scrollToExpandingNode\n    }\n  }\n})\n</script>\n"],"names":[],"mappings":"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"}