{"version":3,"file":"select.mjs","names":[],"sources":["../../../../../../packages/components/tree-select/src/select.ts"],"sourcesContent":["// @ts-nocheck\nimport { computed, nextTick, onMounted, toRefs, watch } from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { pick } from 'lodash-unified'\nimport ElSelect from '@element-plus/components/select'\nimport { useNamespace } from '@element-plus/hooks'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { getEventCode } from '@element-plus/utils'\n\nimport type { Ref } from 'vue'\nimport type { SelectInstance } from '@element-plus/components/select'\nimport type { TreeInstance } from '@element-plus/components/tree'\n\nexport const useSelect = (\n  props,\n  { attrs, emit },\n  {\n    select,\n    tree,\n    key,\n  }: {\n    select: Ref<SelectInstance | undefined>\n    tree: Ref<TreeInstance | undefined>\n    key: Ref<string>\n  }\n) => {\n  const ns = useNamespace('tree-select')\n\n  // update tree data when use filterMethod/remoteMethod\n  watch(\n    () => props.data,\n    () => {\n      if (props.filterable) {\n        nextTick(() => {\n          // let tree node expand only, same with tree filter\n          tree.value?.filter(select.value?.states.inputValue)\n        })\n      }\n    },\n    { flush: 'post' }\n  )\n\n  const focusLastNode = (listNode) => {\n    const lastNode = listNode.at(-1)\n    if (lastNode.expanded && lastNode.childNodes.at(-1)) {\n      focusLastNode([lastNode.childNodes.at(-1)])\n    } else {\n      const el = tree.value.el$?.querySelector(\n        `[data-key=\"${listNode.at(-1).key}\"]`\n      )\n      el?.focus({ preventScroll: true })\n      return\n    }\n  }\n\n  onMounted(() => {\n    useEventListener(\n      () => select.value?.$el,\n      'keydown',\n      async (evt) => {\n        const code = getEventCode(evt)\n        const { dropdownMenuVisible } = select.value!\n        if (\n          [EVENT_CODE.down, EVENT_CODE.up].includes(code) &&\n          dropdownMenuVisible\n        ) {\n          await nextTick()\n          // wait navigateOption to finish\n          setTimeout(() => {\n            if (EVENT_CODE.up === code) {\n              const listNode = tree.value.store.root.childNodes\n              focusLastNode(listNode)\n              return\n            }\n            // el-select-dropdown__item => el-tree-node__content => el-tree-node__content\n            select.value.optionsArray[\n              select.value.states.hoveringIndex\n            ].$el?.parentNode?.parentNode?.focus({ preventScroll: true })\n          })\n        }\n      },\n      {\n        capture: true,\n      }\n    )\n  })\n\n  const result = {\n    ...pick(toRefs(props), Object.keys(ElSelect.props)),\n    ...attrs,\n    class: computed(() => attrs.class),\n    style: computed(() => attrs.style),\n    // attrs is not reactive, when v-model binding source changes,\n    // this listener is still old, see the bug(or test 'v-model source change'):\n    // https://github.com/element-plus/element-plus/issues/14204\n    'onUpdate:modelValue': (value) => emit(UPDATE_MODEL_EVENT, value),\n    valueKey: key,\n    popperClass: computed(() => [ns.e('popper'), props.popperClass]),\n    filterMethod: (keyword = '') => {\n      if (props.filterMethod) {\n        props.filterMethod(keyword)\n      } else if (props.remoteMethod) {\n        props.remoteMethod(keyword)\n      } else {\n        // let tree node expand only, same with tree filter\n        tree.value?.filter(keyword)\n      }\n    },\n  }\n\n  return result\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,aACX,OACA,EAAE,OAAO,QACT,EACE,QACA,MACA,UAMC;CACH,MAAM,KAAK,aAAa,aAAa;CAGrC,YACQ,MAAM,YACN;EACJ,IAAI,MAAM,YACR,eAAe;GAEb,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,UAAU;EACpD,CAAC;CAEL,GACA,EAAE,OAAO,OAAO,CAClB;CAEA,MAAM,iBAAiB,aAAa;EAClC,MAAM,WAAW,SAAS,GAAG,EAAE;EAC/B,IAAI,SAAS,YAAY,SAAS,WAAW,GAAG,EAAE,GAChD,cAAc,CAAC,SAAS,WAAW,GAAG,EAAE,CAAC,CAAC;OACrC;GAIL,CAHW,KAAK,MAAM,KAAK,cACzB,cAAc,SAAS,GAAG,EAAE,CAAC,CAAC,IAAI,GACpC,EAAA,EACI,MAAM,EAAE,eAAe,KAAK,CAAC;GACjC;EACF;CACF;CAEA,gBAAgB;EACd,uBACQ,OAAO,OAAO,KACpB,WACA,OAAO,QAAQ;GACb,MAAM,OAAO,aAAa,GAAG;GAC7B,MAAM,EAAE,wBAAwB,OAAO;GACvC,IACE,CAAC,WAAW,MAAM,WAAW,EAAE,CAAC,CAAC,SAAS,IAAI,KAC9C,qBACA;IACA,MAAM,SAAS;IAEf,iBAAiB;KACf,IAAI,WAAW,OAAO,MAAM;MAC1B,MAAM,WAAW,KAAK,MAAM,MAAM,KAAK;MACvC,cAAc,QAAQ;MACtB;KACF;KAEA,OAAO,MAAM,aACX,OAAO,MAAM,OAAO,cACrB,CAAC,KAAK,YAAY,YAAY,MAAM,EAAE,eAAe,KAAK,CAAC;IAC9D,CAAC;GACH;EACF,GACA,EACE,SAAS,KACX,CACF;CACF,CAAC;CAyBD,OAAO;EAtBL,GAAG,KAAK,OAAO,KAAK,GAAG,OAAO,KAAK,SAAS,KAAK,CAAC;EAClD,GAAG;EACH,OAAO,eAAe,MAAM,KAAK;EACjC,OAAO,eAAe,MAAM,KAAK;EAIjC,wBAAwB,UAAU,KAAK,oBAAoB,KAAK;EAChE,UAAU;EACV,aAAa,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,WAAW,CAAC;EAC/D,eAAe,UAAU,OAAO;GAC9B,IAAI,MAAM,cACR,MAAM,aAAa,OAAO;QACrB,IAAI,MAAM,cACf,MAAM,aAAa,OAAO;QAG1B,KAAK,OAAO,OAAO,OAAO;EAE9B;CAGU;AACd"}