You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

646 lines
27 KiB

3 months ago
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var lodashUnified = require('lodash-unified');
  5. var core = require('@vueuse/core');
  6. var index$9 = require('../../cascader-panel/index.js');
  7. var index$5 = require('../../input/index.js');
  8. var index$4 = require('../../tooltip/index.js');
  9. var index$a = require('../../scrollbar/index.js');
  10. var index$7 = require('../../tag/index.js');
  11. var index$6 = require('../../icon/index.js');
  12. var iconsVue = require('@element-plus/icons-vue');
  13. var cascader = require('./cascader.js');
  14. var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js');
  15. var index$8 = require('../../../directives/click-outside/index.js');
  16. var index = require('../../../hooks/use-namespace/index.js');
  17. var index$1 = require('../../../hooks/use-locale/index.js');
  18. var useFormItem = require('../../form/src/hooks/use-form-item.js');
  19. var index$2 = require('../../../hooks/use-empty-values/index.js');
  20. var index$3 = require('../../../hooks/use-composition/index.js');
  21. var useFormCommonProps = require('../../form/src/hooks/use-form-common-props.js');
  22. var event = require('../../../constants/event.js');
  23. var error = require('../../../utils/error.js');
  24. var shared = require('@vue/shared');
  25. var aria = require('../../../constants/aria.js');
  26. var aria$1 = require('../../../utils/dom/aria.js');
  27. const COMPONENT_NAME = "ElCascader";
  28. const __default__ = vue.defineComponent({
  29. name: COMPONENT_NAME
  30. });
  31. const _sfc_main = /* @__PURE__ */ vue.defineComponent({
  32. ...__default__,
  33. props: cascader.cascaderProps,
  34. emits: cascader.cascaderEmits,
  35. setup(__props, { expose, emit }) {
  36. const props = __props;
  37. const popperOptions = {
  38. modifiers: [
  39. {
  40. name: "arrowPosition",
  41. enabled: true,
  42. phase: "main",
  43. fn: ({ state }) => {
  44. const { modifiersData, placement } = state;
  45. if (["right", "left", "bottom", "top"].includes(placement))
  46. return;
  47. modifiersData.arrow.x = 35;
  48. },
  49. requires: ["arrow"]
  50. }
  51. ]
  52. };
  53. const attrs = vue.useAttrs();
  54. let inputInitialHeight = 0;
  55. let pressDeleteCount = 0;
  56. const nsCascader = index.useNamespace("cascader");
  57. const nsInput = index.useNamespace("input");
  58. const { t } = index$1.useLocale();
  59. const { form, formItem } = useFormItem.useFormItem();
  60. const { valueOnClear } = index$2.useEmptyValues(props);
  61. const { isComposing, handleComposition } = index$3.useComposition({
  62. afterComposition(event) {
  63. var _a;
  64. const text = (_a = event.target) == null ? void 0 : _a.value;
  65. handleInput(text);
  66. }
  67. });
  68. const tooltipRef = vue.ref(null);
  69. const input = vue.ref(null);
  70. const tagWrapper = vue.ref(null);
  71. const cascaderPanelRef = vue.ref(null);
  72. const suggestionPanel = vue.ref(null);
  73. const popperVisible = vue.ref(false);
  74. const inputHover = vue.ref(false);
  75. const filtering = vue.ref(false);
  76. const filterFocus = vue.ref(false);
  77. const inputValue = vue.ref("");
  78. const searchInputValue = vue.ref("");
  79. const presentTags = vue.ref([]);
  80. const allPresentTags = vue.ref([]);
  81. const suggestions = vue.ref([]);
  82. const cascaderStyle = vue.computed(() => {
  83. return attrs.style;
  84. });
  85. const isDisabled = vue.computed(() => props.disabled || (form == null ? void 0 : form.disabled));
  86. const inputPlaceholder = vue.computed(() => props.placeholder || t("el.cascader.placeholder"));
  87. const currentPlaceholder = vue.computed(() => searchInputValue.value || presentTags.value.length > 0 || isComposing.value ? "" : inputPlaceholder.value);
  88. const realSize = useFormCommonProps.useFormSize();
  89. const tagSize = vue.computed(() => realSize.value === "small" ? "small" : "default");
  90. const multiple = vue.computed(() => !!props.props.multiple);
  91. const readonly = vue.computed(() => !props.filterable || multiple.value);
  92. const searchKeyword = vue.computed(() => multiple.value ? searchInputValue.value : inputValue.value);
  93. const checkedNodes = vue.computed(() => {
  94. var _a;
  95. return ((_a = cascaderPanelRef.value) == null ? void 0 : _a.checkedNodes) || [];
  96. });
  97. const clearBtnVisible = vue.computed(() => {
  98. if (!props.clearable || isDisabled.value || filtering.value || !inputHover.value)
  99. return false;
  100. return !!checkedNodes.value.length;
  101. });
  102. const presentText = vue.computed(() => {
  103. const { showAllLevels, separator } = props;
  104. const nodes = checkedNodes.value;
  105. return nodes.length ? multiple.value ? "" : nodes[0].calcText(showAllLevels, separator) : "";
  106. });
  107. const validateState = vue.computed(() => (formItem == null ? void 0 : formItem.validateState) || "");
  108. const checkedValue = vue.computed({
  109. get() {
  110. return lodashUnified.cloneDeep(props.modelValue);
  111. },
  112. set(val) {
  113. const value = val != null ? val : valueOnClear.value;
  114. emit(event.UPDATE_MODEL_EVENT, value);
  115. emit(event.CHANGE_EVENT, value);
  116. if (props.validateEvent) {
  117. formItem == null ? void 0 : formItem.validate("change").catch((err) => error.debugWarn(err));
  118. }
  119. }
  120. });
  121. const cascaderKls = vue.computed(() => {
  122. return [
  123. nsCascader.b(),
  124. nsCascader.m(realSize.value),
  125. nsCascader.is("disabled", isDisabled.value),
  126. attrs.class
  127. ];
  128. });
  129. const cascaderIconKls = vue.computed(() => {
  130. return [
  131. nsInput.e("icon"),
  132. "icon-arrow-down",
  133. nsCascader.is("reverse", popperVisible.value)
  134. ];
  135. });
  136. const inputClass = vue.computed(() => {
  137. return nsCascader.is("focus", popperVisible.value || filterFocus.value);
  138. });
  139. const contentRef = vue.computed(() => {
  140. var _a, _b;
  141. return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef;
  142. });
  143. const togglePopperVisible = (visible) => {
  144. var _a, _b, _c;
  145. if (isDisabled.value)
  146. return;
  147. visible = visible != null ? visible : !popperVisible.value;
  148. if (visible !== popperVisible.value) {
  149. popperVisible.value = visible;
  150. (_b = (_a = input.value) == null ? void 0 : _a.input) == null ? void 0 : _b.setAttribute("aria-expanded", `${visible}`);
  151. if (visible) {
  152. updatePopperPosition();
  153. vue.nextTick((_c = cascaderPanelRef.value) == null ? void 0 : _c.scrollToExpandingNode);
  154. } else if (props.filterable) {
  155. syncPresentTextValue();
  156. }
  157. emit("visibleChange", visible);
  158. }
  159. };
  160. const updatePopperPosition = () => {
  161. vue.nextTick(() => {
  162. var _a;
  163. (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper();
  164. });
  165. };
  166. const hideSuggestionPanel = () => {
  167. filtering.value = false;
  168. };
  169. const genTag = (node) => {
  170. const { showAllLevels, separator } = props;
  171. return {
  172. node,
  173. key: node.uid,
  174. text: node.calcText(showAllLevels, separator),
  175. hitState: false,
  176. closable: !isDisabled.value && !node.isDisabled,
  177. isCollapseTag: false
  178. };
  179. };
  180. const deleteTag = (tag) => {
  181. var _a;
  182. const node = tag.node;
  183. node.doCheck(false);
  184. (_a = cascaderPanelRef.value) == null ? void 0 : _a.calculateCheckedValue();
  185. emit("removeTag", node.valueByOption);
  186. };
  187. const calculatePresentTags = () => {
  188. if (!multiple.value)
  189. return;
  190. const nodes = checkedNodes.value;
  191. const tags = [];
  192. const allTags = [];
  193. nodes.forEach((node) => allTags.push(genTag(node)));
  194. allPresentTags.value = allTags;
  195. if (nodes.length) {
  196. nodes.slice(0, props.maxCollapseTags).forEach((node) => tags.push(genTag(node)));
  197. const rest = nodes.slice(props.maxCollapseTags);
  198. const restCount = rest.length;
  199. if (restCount) {
  200. if (props.collapseTags) {
  201. tags.push({
  202. key: -1,
  203. text: `+ ${restCount}`,
  204. closable: false,
  205. isCollapseTag: true
  206. });
  207. } else {
  208. rest.forEach((node) => tags.push(genTag(node)));
  209. }
  210. }
  211. }
  212. presentTags.value = tags;
  213. };
  214. const calculateSuggestions = () => {
  215. var _a, _b;
  216. const { filterMethod, showAllLevels, separator } = props;
  217. const res = (_b = (_a = cascaderPanelRef.value) == null ? void 0 : _a.getFlattedNodes(!props.props.checkStrictly)) == null ? void 0 : _b.filter((node) => {
  218. if (node.isDisabled)
  219. return false;
  220. node.calcText(showAllLevels, separator);
  221. return filterMethod(node, searchKeyword.value);
  222. });
  223. if (multiple.value) {
  224. presentTags.value.forEach((tag) => {
  225. tag.hitState = false;
  226. });
  227. allPresentTags.value.forEach((tag) => {
  228. tag.hitState = false;
  229. });
  230. }
  231. filtering.value = true;
  232. suggestions.value = res;
  233. updatePopperPosition();
  234. };
  235. const focusFirstNode = () => {
  236. var _a;
  237. let firstNode;
  238. if (filtering.value && suggestionPanel.value) {
  239. firstNode = suggestionPanel.value.$el.querySelector(`.${nsCascader.e("suggestion-item")}`);
  240. } else {
  241. firstNode = (_a = cascaderPanelRef.value) == null ? void 0 : _a.$el.querySelector(`.${nsCascader.b("node")}[tabindex="-1"]`);
  242. }
  243. if (firstNode) {
  244. firstNode.focus();
  245. !filtering.value && firstNode.click();
  246. }
  247. };
  248. const updateStyle = () => {
  249. var _a, _b;
  250. const inputInner = (_a = input.value) == null ? void 0 : _a.input;
  251. const tagWrapperEl = tagWrapper.value;
  252. const suggestionPanelEl = (_b = suggestionPanel.value) == null ? void 0 : _b.$el;
  253. if (!core.isClient || !inputInner)
  254. return;
  255. if (suggestionPanelEl) {
  256. const suggestionList = suggestionPanelEl.querySelector(`.${nsCascader.e("suggestion-list")}`);
  257. suggestionList.style.minWidth = `${inputInner.offsetWidth}px`;
  258. }
  259. if (tagWrapperEl) {
  260. const { offsetHeight } = tagWrapperEl;
  261. const height = presentTags.value.length > 0 ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px` : `${inputInitialHeight}px`;
  262. inputInner.style.height = height;
  263. updatePopperPosition();
  264. }
  265. };
  266. const getCheckedNodes = (leafOnly) => {
  267. var _a;
  268. return (_a = cascaderPanelRef.value) == null ? void 0 : _a.getCheckedNodes(leafOnly);
  269. };
  270. const handleExpandChange = (value) => {
  271. updatePopperPosition();
  272. emit("expandChange", value);
  273. };
  274. const handleKeyDown = (e) => {
  275. if (isComposing.value)
  276. return;
  277. switch (e.code) {
  278. case aria.EVENT_CODE.enter:
  279. case aria.EVENT_CODE.numpadEnter:
  280. togglePopperVisible();
  281. break;
  282. case aria.EVENT_CODE.down:
  283. togglePopperVisible(true);
  284. vue.nextTick(focusFirstNode);
  285. e.preventDefault();
  286. break;
  287. case aria.EVENT_CODE.esc:
  288. if (popperVisible.value === true) {
  289. e.preventDefault();
  290. e.stopPropagation();
  291. togglePopperVisible(false);
  292. }
  293. break;
  294. case aria.EVENT_CODE.tab:
  295. togglePopperVisible(false);
  296. break;
  297. }
  298. };
  299. const handleClear = () => {
  300. var _a;
  301. (_a = cascaderPanelRef.value) == null ? void 0 : _a.clearCheckedNodes();
  302. if (!popperVisible.value && props.filterable) {
  303. syncPresentTextValue();
  304. }
  305. togglePopperVisible(false);
  306. emit("clear");
  307. };
  308. const syncPresentTextValue = () => {
  309. const { value } = presentText;
  310. inputValue.value = value;
  311. searchInputValue.value = value;
  312. };
  313. const handleSuggestionClick = (node) => {
  314. var _a, _b;
  315. const { checked } = node;
  316. if (multiple.value) {
  317. (_a = cascaderPanelRef.value) == null ? void 0 : _a.handleCheckChange(node, !checked, false);
  318. } else {
  319. !checked && ((_b = cascaderPanelRef.value) == null ? void 0 : _b.handleCheckChange(node, true, false));
  320. togglePopperVisible(false);
  321. }
  322. };
  323. const handleSuggestionKeyDown = (e) => {
  324. const target = e.target;
  325. const { code } = e;
  326. switch (code) {
  327. case aria.EVENT_CODE.up:
  328. case aria.EVENT_CODE.down: {
  329. e.preventDefault();
  330. const distance = code === aria.EVENT_CODE.up ? -1 : 1;
  331. aria$1.focusNode(aria$1.getSibling(target, distance, `.${nsCascader.e("suggestion-item")}[tabindex="-1"]`));
  332. break;
  333. }
  334. case aria.EVENT_CODE.enter:
  335. case aria.EVENT_CODE.numpadEnter:
  336. target.click();
  337. break;
  338. }
  339. };
  340. const handleDelete = () => {
  341. const tags = presentTags.value;
  342. const lastTag = tags[tags.length - 1];
  343. pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1;
  344. if (!lastTag || !pressDeleteCount || props.collapseTags && tags.length > 1)
  345. return;
  346. if (lastTag.hitState) {
  347. deleteTag(lastTag);
  348. } else {
  349. lastTag.hitState = true;
  350. }
  351. };
  352. const handleFocus = (e) => {
  353. const el = e.target;
  354. const name = nsCascader.e("search-input");
  355. if (el.className === name) {
  356. filterFocus.value = true;
  357. }
  358. emit("focus", e);
  359. };
  360. const handleBlur = (e) => {
  361. filterFocus.value = false;
  362. emit("blur", e);
  363. };
  364. const handleFilter = lodashUnified.debounce(() => {
  365. const { value } = searchKeyword;
  366. if (!value)
  367. return;
  368. const passed = props.beforeFilter(value);
  369. if (shared.isPromise(passed)) {
  370. passed.then(calculateSuggestions).catch(() => {
  371. });
  372. } else if (passed !== false) {
  373. calculateSuggestions();
  374. } else {
  375. hideSuggestionPanel();
  376. }
  377. }, props.debounce);
  378. const handleInput = (val, e) => {
  379. !popperVisible.value && togglePopperVisible(true);
  380. if (e == null ? void 0 : e.isComposing)
  381. return;
  382. val ? handleFilter() : hideSuggestionPanel();
  383. };
  384. const getInputInnerHeight = (inputInner) => Number.parseFloat(core.useCssVar(nsInput.cssVarName("input-height"), inputInner).value) - 2;
  385. vue.watch(filtering, updatePopperPosition);
  386. vue.watch([checkedNodes, isDisabled, () => props.collapseTags], calculatePresentTags);
  387. vue.watch(presentTags, () => {
  388. vue.nextTick(() => updateStyle());
  389. });
  390. vue.watch(realSize, async () => {
  391. await vue.nextTick();
  392. const inputInner = input.value.input;
  393. inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight;
  394. updateStyle();
  395. });
  396. vue.watch(presentText, syncPresentTextValue, { immediate: true });
  397. vue.onMounted(() => {
  398. const inputInner = input.value.input;
  399. const inputInnerHeight = getInputInnerHeight(inputInner);
  400. inputInitialHeight = inputInner.offsetHeight || inputInnerHeight;
  401. core.useResizeObserver(inputInner, updateStyle);
  402. });
  403. expose({
  404. getCheckedNodes,
  405. cascaderPanelRef,
  406. togglePopperVisible,
  407. contentRef,
  408. presentText
  409. });
  410. return (_ctx, _cache) => {
  411. return vue.openBlock(), vue.createBlock(vue.unref(index$4.ElTooltip), {
  412. ref_key: "tooltipRef",
  413. ref: tooltipRef,
  414. visible: popperVisible.value,
  415. teleported: _ctx.teleported,
  416. "popper-class": [vue.unref(nsCascader).e("dropdown"), _ctx.popperClass],
  417. "popper-options": popperOptions,
  418. "fallback-placements": _ctx.fallbackPlacements,
  419. "stop-popper-mouse-event": false,
  420. "gpu-acceleration": false,
  421. placement: _ctx.placement,
  422. transition: `${vue.unref(nsCascader).namespace.value}-zoom-in-top`,
  423. effect: "light",
  424. pure: "",
  425. persistent: _ctx.persistent,
  426. onHide: hideSuggestionPanel
  427. }, {
  428. default: vue.withCtx(() => [
  429. vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
  430. class: vue.normalizeClass(vue.unref(cascaderKls)),
  431. style: vue.normalizeStyle(vue.unref(cascaderStyle)),
  432. onClick: () => togglePopperVisible(vue.unref(readonly) ? void 0 : true),
  433. onKeydown: handleKeyDown,
  434. onMouseenter: ($event) => inputHover.value = true,
  435. onMouseleave: ($event) => inputHover.value = false
  436. }, [
  437. vue.createVNode(vue.unref(index$5.ElInput), {
  438. ref_key: "input",
  439. ref: input,
  440. modelValue: inputValue.value,
  441. "onUpdate:modelValue": ($event) => inputValue.value = $event,
  442. placeholder: vue.unref(currentPlaceholder),
  443. readonly: vue.unref(readonly),
  444. disabled: vue.unref(isDisabled),
  445. "validate-event": false,
  446. size: vue.unref(realSize),
  447. class: vue.normalizeClass(vue.unref(inputClass)),
  448. tabindex: vue.unref(multiple) && _ctx.filterable && !vue.unref(isDisabled) ? -1 : void 0,
  449. onCompositionstart: vue.unref(handleComposition),
  450. onCompositionupdate: vue.unref(handleComposition),
  451. onCompositionend: vue.unref(handleComposition),
  452. onFocus: handleFocus,
  453. onBlur: handleBlur,
  454. onInput: handleInput
  455. }, vue.createSlots({
  456. suffix: vue.withCtx(() => [
  457. vue.unref(clearBtnVisible) ? (vue.openBlock(), vue.createBlock(vue.unref(index$6.ElIcon), {
  458. key: "clear",
  459. class: vue.normalizeClass([vue.unref(nsInput).e("icon"), "icon-circle-close"]),
  460. onClick: vue.withModifiers(handleClear, ["stop"])
  461. }, {
  462. default: vue.withCtx(() => [
  463. vue.createVNode(vue.unref(iconsVue.CircleClose))
  464. ]),
  465. _: 1
  466. }, 8, ["class", "onClick"])) : (vue.openBlock(), vue.createBlock(vue.unref(index$6.ElIcon), {
  467. key: "arrow-down",
  468. class: vue.normalizeClass(vue.unref(cascaderIconKls)),
  469. onClick: vue.withModifiers(($event) => togglePopperVisible(), ["stop"])
  470. }, {
  471. default: vue.withCtx(() => [
  472. vue.createVNode(vue.unref(iconsVue.ArrowDown))
  473. ]),
  474. _: 1
  475. }, 8, ["class", "onClick"]))
  476. ]),
  477. _: 2
  478. }, [
  479. _ctx.$slots.prefix ? {
  480. name: "prefix",
  481. fn: vue.withCtx(() => [
  482. vue.renderSlot(_ctx.$slots, "prefix")
  483. ])
  484. } : void 0
  485. ]), 1032, ["modelValue", "onUpdate:modelValue", "placeholder", "readonly", "disabled", "size", "class", "tabindex", "onCompositionstart", "onCompositionupdate", "onCompositionend"]),
  486. vue.unref(multiple) ? (vue.openBlock(), vue.createElementBlock("div", {
  487. key: 0,
  488. ref_key: "tagWrapper",
  489. ref: tagWrapper,
  490. class: vue.normalizeClass([
  491. vue.unref(nsCascader).e("tags"),
  492. vue.unref(nsCascader).is("validate", Boolean(vue.unref(validateState)))
  493. ])
  494. }, [
  495. (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(presentTags.value, (tag) => {
  496. return vue.openBlock(), vue.createBlock(vue.unref(index$7.ElTag), {
  497. key: tag.key,
  498. type: _ctx.tagType,
  499. size: vue.unref(tagSize),
  500. effect: _ctx.tagEffect,
  501. hit: tag.hitState,
  502. closable: tag.closable,
  503. "disable-transitions": "",
  504. onClose: ($event) => deleteTag(tag)
  505. }, {
  506. default: vue.withCtx(() => [
  507. tag.isCollapseTag === false ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(tag.text), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(index$4.ElTooltip), {
  508. key: 1,
  509. disabled: popperVisible.value || !_ctx.collapseTagsTooltip,
  510. "fallback-placements": ["bottom", "top", "right", "left"],
  511. placement: "bottom",
  512. effect: "light"
  513. }, {
  514. default: vue.withCtx(() => [
  515. vue.createElementVNode("span", null, vue.toDisplayString(tag.text), 1)
  516. ]),
  517. content: vue.withCtx(() => [
  518. vue.createElementVNode("div", {
  519. class: vue.normalizeClass(vue.unref(nsCascader).e("collapse-tags"))
  520. }, [
  521. (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(allPresentTags.value.slice(_ctx.maxCollapseTags), (tag2, idx) => {
  522. return vue.openBlock(), vue.createElementBlock("div", {
  523. key: idx,
  524. class: vue.normalizeClass(vue.unref(nsCascader).e("collapse-tag"))
  525. }, [
  526. (vue.openBlock(), vue.createBlock(vue.unref(index$7.ElTag), {
  527. key: tag2.key,
  528. class: "in-tooltip",
  529. type: _ctx.tagType,
  530. size: vue.unref(tagSize),
  531. effect: _ctx.tagEffect,
  532. hit: tag2.hitState,
  533. closable: tag2.closable,
  534. "disable-transitions": "",
  535. onClose: ($event) => deleteTag(tag2)
  536. }, {
  537. default: vue.withCtx(() => [
  538. vue.createElementVNode("span", null, vue.toDisplayString(tag2.text), 1)
  539. ]),
  540. _: 2
  541. }, 1032, ["type", "size", "effect", "hit", "closable", "onClose"]))
  542. ], 2);
  543. }), 128))
  544. ], 2)
  545. ]),
  546. _: 2
  547. }, 1032, ["disabled"]))
  548. ]),
  549. _: 2
  550. }, 1032, ["type", "size", "effect", "hit", "closable", "onClose"]);
  551. }), 128)),
  552. _ctx.filterable && !vue.unref(isDisabled) ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", {
  553. key: 0,
  554. "onUpdate:modelValue": ($event) => searchInputValue.value = $event,
  555. type: "text",
  556. class: vue.normalizeClass(vue.unref(nsCascader).e("search-input")),
  557. placeholder: vue.unref(presentText) ? "" : vue.unref(inputPlaceholder),
  558. onInput: (e) => handleInput(searchInputValue.value, e),
  559. onClick: vue.withModifiers(($event) => togglePopperVisible(true), ["stop"]),
  560. onKeydown: vue.withKeys(handleDelete, ["delete"]),
  561. onCompositionstart: vue.unref(handleComposition),
  562. onCompositionupdate: vue.unref(handleComposition),
  563. onCompositionend: vue.unref(handleComposition),
  564. onFocus: handleFocus,
  565. onBlur: handleBlur
  566. }, null, 42, ["onUpdate:modelValue", "placeholder", "onInput", "onClick", "onKeydown", "onCompositionstart", "onCompositionupdate", "onCompositionend"])), [
  567. [vue.vModelText, searchInputValue.value]
  568. ]) : vue.createCommentVNode("v-if", true)
  569. ], 2)) : vue.createCommentVNode("v-if", true)
  570. ], 46, ["onClick", "onMouseenter", "onMouseleave"])), [
  571. [vue.unref(index$8["default"]), () => togglePopperVisible(false), vue.unref(contentRef)]
  572. ])
  573. ]),
  574. content: vue.withCtx(() => [
  575. vue.withDirectives(vue.createVNode(vue.unref(index$9.ElCascaderPanel), {
  576. ref_key: "cascaderPanelRef",
  577. ref: cascaderPanelRef,
  578. modelValue: vue.unref(checkedValue),
  579. "onUpdate:modelValue": ($event) => vue.isRef(checkedValue) ? checkedValue.value = $event : null,
  580. options: _ctx.options,
  581. props: props.props,
  582. border: false,
  583. "render-label": _ctx.$slots.default,
  584. onExpandChange: handleExpandChange,
  585. onClose: ($event) => _ctx.$nextTick(() => togglePopperVisible(false))
  586. }, {
  587. empty: vue.withCtx(() => [
  588. vue.renderSlot(_ctx.$slots, "empty")
  589. ]),
  590. _: 3
  591. }, 8, ["modelValue", "onUpdate:modelValue", "options", "props", "render-label", "onClose"]), [
  592. [vue.vShow, !filtering.value]
  593. ]),
  594. _ctx.filterable ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(index$a.ElScrollbar), {
  595. key: 0,
  596. ref_key: "suggestionPanel",
  597. ref: suggestionPanel,
  598. tag: "ul",
  599. class: vue.normalizeClass(vue.unref(nsCascader).e("suggestion-panel")),
  600. "view-class": vue.unref(nsCascader).e("suggestion-list"),
  601. onKeydown: handleSuggestionKeyDown
  602. }, {
  603. default: vue.withCtx(() => [
  604. suggestions.value.length ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(suggestions.value, (item) => {
  605. return vue.openBlock(), vue.createElementBlock("li", {
  606. key: item.uid,
  607. class: vue.normalizeClass([
  608. vue.unref(nsCascader).e("suggestion-item"),
  609. vue.unref(nsCascader).is("checked", item.checked)
  610. ]),
  611. tabindex: -1,
  612. onClick: ($event) => handleSuggestionClick(item)
  613. }, [
  614. vue.renderSlot(_ctx.$slots, "suggestion-item", { item }, () => [
  615. vue.createElementVNode("span", null, vue.toDisplayString(item.text), 1),
  616. item.checked ? (vue.openBlock(), vue.createBlock(vue.unref(index$6.ElIcon), { key: 0 }, {
  617. default: vue.withCtx(() => [
  618. vue.createVNode(vue.unref(iconsVue.Check))
  619. ]),
  620. _: 1
  621. })) : vue.createCommentVNode("v-if", true)
  622. ])
  623. ], 10, ["onClick"]);
  624. }), 128)) : vue.renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [
  625. vue.createElementVNode("li", {
  626. class: vue.normalizeClass(vue.unref(nsCascader).e("empty-text"))
  627. }, vue.toDisplayString(vue.unref(t)("el.cascader.noMatch")), 3)
  628. ])
  629. ]),
  630. _: 3
  631. }, 8, ["class", "view-class"])), [
  632. [vue.vShow, filtering.value]
  633. ]) : vue.createCommentVNode("v-if", true)
  634. ]),
  635. _: 3
  636. }, 8, ["visible", "teleported", "popper-class", "fallback-placements", "placement", "transition", "persistent"]);
  637. };
  638. }
  639. });
  640. var Cascader = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "cascader.vue"]]);
  641. exports["default"] = Cascader;
  642. //# sourceMappingURL=cascader2.js.map