import { i as Y, n as de, u as Z, h as ce, d as p, o as se, ac as q, _ as P, c as ee, a1 as z, a3 as b, j as D, a4 as $, P as J, f as ie, bA as re, bB as ue, bC as fe, bD as ve } from "./index2.js";
import { createVNode as N, defineComponent as te, ref as T, computed as h, watchEffect as ye, watch as M, onUpdated as Ke, nextTick as he } from "vue";
import { u as pe, T as xe, r as ke, t as be, V as me } from "./index24.js";
import { e as Q, f as Ee, c as Te, g as Ne } from "./useMaxLevel.js";
const X = 4;
function _e(e) {
  const {
    dropPosition: r,
    dropLevelOffset: s,
    prefixCls: a,
    indent: l,
    direction: u = "ltr"
  } = e, d = u === "ltr" ? "left" : "right", c = u === "ltr" ? "right" : "left", v = {
    [d]: `${-s * l + X}px`,
    [c]: 0
  };
  switch (r) {
    case -1:
      v.top = "-3px";
      break;
    case 1:
      v.bottom = "-3px";
      break;
    default:
      v.bottom = "-3px", v[d] = `${l + X}px`;
      break;
  }
  return N("div", {
    style: v,
    class: `${a}-drop-indicator`
  }, null);
}
const ne = () => {
  const e = be();
  return p(p({}, e), {
    showLine: z([Boolean, Object]),
    /** 是否支持多选 */
    multiple: b(),
    /** 是否自动展开父节点 */
    autoExpandParent: b(),
    /** checkable状态下节点选择完全受控（父子节点选中状态不再关联）*/
    checkStrictly: b(),
    /** 是否支持选中 */
    checkable: b(),
    /** 是否禁用树 */
    disabled: b(),
    /** 默认展开所有树节点 */
    defaultExpandAll: b(),
    /** 默认展开对应树节点 */
    defaultExpandParent: b(),
    /** 默认展开指定的树节点 */
    defaultExpandedKeys: D(),
    /** （受控）展开指定的树节点 */
    expandedKeys: D(),
    /** （受控）选中复选框的树节点 */
    checkedKeys: z([Array, Object]),
    /** 默认选中复选框的树节点 */
    defaultCheckedKeys: D(),
    /** （受控）设置选中的树节点 */
    selectedKeys: D(),
    /** 默认选中的树节点 */
    defaultSelectedKeys: D(),
    selectable: b(),
    loadedKeys: D(),
    draggable: b(),
    showIcon: b(),
    icon: $(),
    switcherIcon: J.any,
    prefixCls: String,
    /**
     * @default{title,key,children}
     * deprecated, please use `fieldNames` instead
     * 替换treeNode中 title,key,children字段为treeData中对应的字段
     */
    replaceFields: ie(),
    blockNode: b(),
    openAnimation: J.any,
    onDoubleclick: e.onDblclick,
    "onUpdate:selectedKeys": $(),
    "onUpdate:checkedKeys": $(),
    "onUpdate:expandedKeys": $()
  });
}, A = te({
  compatConfig: {
    MODE: 3
  },
  name: "ATree",
  inheritAttrs: !1,
  props: Y(ne(), {
    checkable: !1,
    selectable: !0,
    showIcon: !1,
    blockNode: !1
  }),
  slots: Object,
  setup(e, r) {
    let {
      attrs: s,
      expose: a,
      emit: l,
      slots: u
    } = r;
    de(!(e.treeData === void 0 && u.default), "`children` of Tree is deprecated. Please use `treeData` instead.");
    const {
      prefixCls: d,
      direction: c,
      virtual: v
    } = Z("tree", e), [y, E] = pe(d), i = T();
    a({
      treeRef: i,
      onNodeExpand: function() {
        var n;
        (n = i.value) === null || n === void 0 || n.onNodeExpand(...arguments);
      },
      scrollTo: (n) => {
        var f;
        (f = i.value) === null || f === void 0 || f.scrollTo(n);
      },
      selectedKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.selectedKeys;
      }),
      checkedKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.checkedKeys;
      }),
      halfCheckedKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.halfCheckedKeys;
      }),
      loadedKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.loadedKeys;
      }),
      loadingKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.loadingKeys;
      }),
      expandedKeys: h(() => {
        var n;
        return (n = i.value) === null || n === void 0 ? void 0 : n.expandedKeys;
      })
    }), ye(() => {
      ce(e.replaceFields === void 0, "Tree", "`replaceFields` is deprecated, please use fieldNames instead");
    });
    const j = (n, f) => {
      l("update:checkedKeys", n), l("check", n, f);
    }, S = (n, f) => {
      l("update:expandedKeys", n), l("expand", n, f);
    }, _ = (n, f) => {
      l("update:selectedKeys", n), l("select", n, f);
    };
    return () => {
      const {
        showIcon: n,
        showLine: f,
        switcherIcon: F = u.switcherIcon,
        icon: U = u.icon,
        blockNode: L,
        checkable: B,
        selectable: O,
        fieldNames: w = e.replaceFields,
        motion: V = e.openAnimation,
        itemHeight: t = 28,
        onDoubleclick: o,
        onDblclick: K
      } = e, C = p(p(p({}, s), se(e, ["onUpdate:checkedKeys", "onUpdate:expandedKeys", "onUpdate:selectedKeys", "onDoubleclick"])), {
        showLine: !!f,
        dropIndicatorRender: _e,
        fieldNames: w,
        icon: U,
        itemHeight: t
      }), x = u.default ? q(u.default()) : void 0;
      return y(N(xe, P(P({}, C), {}, {
        virtual: v.value,
        motion: V,
        ref: i,
        prefixCls: d.value,
        class: ee({
          [`${d.value}-icon-hide`]: !n,
          [`${d.value}-block-node`]: L,
          [`${d.value}-unselectable`]: !O,
          [`${d.value}-rtl`]: c.value === "rtl"
        }, s.class, E.value),
        direction: c.value,
        checkable: B,
        selectable: O,
        switcherIcon: (g) => ke(d.value, F, g, u.leafIcon, f),
        onCheck: j,
        onExpand: S,
        onSelect: _,
        onDblclick: K || o,
        children: x
      }), p(p({}, u), {
        checkable: () => N("span", {
          class: `${d.value}-checkbox-inner`
        }, null)
      })));
    };
  }
});
var m;
(function(e) {
  e[e.None = 0] = "None", e[e.Start = 1] = "Start", e[e.End = 2] = "End";
})(m || (m = {}));
function G(e, r, s) {
  function a(l) {
    const u = l[r.key], d = l[r.children];
    s(u, l) !== !1 && G(d || [], r, s);
  }
  e.forEach(a);
}
function ge(e) {
  let {
    treeData: r,
    expandedKeys: s,
    startKey: a,
    endKey: l,
    fieldNames: u = {
      title: "title",
      key: "key",
      children: "children"
    }
  } = e;
  const d = [];
  let c = m.None;
  if (a && a === l)
    return [a];
  if (!a || !l)
    return [];
  function v(y) {
    return y === a || y === l;
  }
  return G(r, u, (y) => {
    if (c === m.End)
      return !1;
    if (v(y)) {
      if (d.push(y), c === m.None)
        c = m.Start;
      else if (c === m.Start)
        return c = m.End, !1;
    } else c === m.Start && d.push(y);
    return s.includes(y);
  }), d;
}
function H(e, r, s) {
  const a = [...r], l = [];
  return G(e, s, (u, d) => {
    const c = a.indexOf(u);
    return c !== -1 && (l.push(d), a.splice(c, 1)), !!a.length;
  }), l;
}
var De = function(e, r) {
  var s = {};
  for (var a in e) Object.prototype.hasOwnProperty.call(e, a) && r.indexOf(a) < 0 && (s[a] = e[a]);
  if (e != null && typeof Object.getOwnPropertySymbols == "function") for (var l = 0, a = Object.getOwnPropertySymbols(e); l < a.length; l++)
    r.indexOf(a[l]) < 0 && Object.prototype.propertyIsEnumerable.call(e, a[l]) && (s[a[l]] = e[a[l]]);
  return s;
};
const Se = () => p(p({}, ne()), {
  expandAction: z([Boolean, String])
});
function we(e) {
  const {
    isLeaf: r,
    expanded: s
  } = e;
  return r ? N(ue, null, null) : s ? N(fe, null, null) : N(ve, null, null);
}
const R = te({
  compatConfig: {
    MODE: 3
  },
  name: "ADirectoryTree",
  inheritAttrs: !1,
  props: Y(Se(), {
    showIcon: !0,
    expandAction: "click"
  }),
  slots: Object,
  // emits: [
  //   'update:selectedKeys',
  //   'update:checkedKeys',
  //   'update:expandedKeys',
  //   'expand',
  //   'select',
  //   'check',
  //   'doubleclick',
  //   'dblclick',
  //   'click',
  // ],
  setup(e, r) {
    let {
      attrs: s,
      slots: a,
      emit: l,
      expose: u
    } = r;
    var d;
    const c = T(e.treeData || Q(q((d = a.default) === null || d === void 0 ? void 0 : d.call(a))));
    M(() => e.treeData, () => {
      c.value = e.treeData;
    }), Ke(() => {
      he(() => {
        var t;
        e.treeData === void 0 && a.default && (c.value = Q(q((t = a.default) === null || t === void 0 ? void 0 : t.call(a))));
      });
    });
    const v = T(), y = T(), E = h(() => Ee(e.fieldNames)), i = T();
    u({
      scrollTo: (t) => {
        var o;
        (o = i.value) === null || o === void 0 || o.scrollTo(t);
      },
      selectedKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.selectedKeys;
      }),
      checkedKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.checkedKeys;
      }),
      halfCheckedKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.halfCheckedKeys;
      }),
      loadedKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.loadedKeys;
      }),
      loadingKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.loadingKeys;
      }),
      expandedKeys: h(() => {
        var t;
        return (t = i.value) === null || t === void 0 ? void 0 : t.expandedKeys;
      })
    });
    const j = () => {
      const {
        keyEntities: t
      } = Te(c.value, {
        fieldNames: E.value
      });
      let o;
      return e.defaultExpandAll ? o = Object.keys(t) : e.defaultExpandParent ? o = Ne(e.expandedKeys || e.defaultExpandedKeys || [], t) : o = e.expandedKeys || e.defaultExpandedKeys, o;
    }, S = T(e.selectedKeys || e.defaultSelectedKeys || []), _ = T(j());
    M(() => e.selectedKeys, () => {
      e.selectedKeys !== void 0 && (S.value = e.selectedKeys);
    }, {
      immediate: !0
    }), M(() => e.expandedKeys, () => {
      e.expandedKeys !== void 0 && (_.value = e.expandedKeys);
    }, {
      immediate: !0
    });
    const f = re((t, o) => {
      const {
        isLeaf: K
      } = o;
      K || t.shiftKey || t.metaKey || t.ctrlKey || i.value.onNodeExpand(t, o);
    }, 200, {
      leading: !0
    }), F = (t, o) => {
      e.expandedKeys === void 0 && (_.value = t), l("update:expandedKeys", t), l("expand", t, o);
    }, U = (t, o) => {
      const {
        expandAction: K
      } = e;
      K === "click" && f(t, o), l("click", t, o);
    }, L = (t, o) => {
      const {
        expandAction: K
      } = e;
      (K === "dblclick" || K === "doubleclick") && f(t, o), l("doubleclick", t, o), l("dblclick", t, o);
    }, B = (t, o) => {
      const {
        multiple: K
      } = e, {
        node: C,
        nativeEvent: x
      } = o, g = C[E.value.key], I = p(p({}, o), {
        selected: !0
      }), ae = (x == null ? void 0 : x.ctrlKey) || (x == null ? void 0 : x.metaKey), oe = x == null ? void 0 : x.shiftKey;
      let k;
      K && ae ? (k = t, v.value = g, y.value = k, I.selectedNodes = H(c.value, k, E.value)) : K && oe ? (k = Array.from(/* @__PURE__ */ new Set([...y.value || [], ...ge({
        treeData: c.value,
        expandedKeys: _.value,
        startKey: g,
        endKey: v.value,
        fieldNames: E.value
      })])), I.selectedNodes = H(c.value, k, E.value)) : (k = [g], v.value = g, y.value = k, I.selectedNodes = H(c.value, k, E.value)), l("update:selectedKeys", k), l("select", k, I), e.selectedKeys === void 0 && (S.value = k);
    }, O = (t, o) => {
      l("update:checkedKeys", t), l("check", t, o);
    }, {
      prefixCls: w,
      direction: V
    } = Z("tree", e);
    return () => {
      const t = ee(`${w.value}-directory`, {
        [`${w.value}-directory-rtl`]: V.value === "rtl"
      }, s.class), {
        icon: o = a.icon,
        blockNode: K = !0
      } = e, C = De(e, ["icon", "blockNode"]);
      return N(A, P(P(P({}, s), {}, {
        icon: o || we,
        ref: i,
        blockNode: K
      }, C), {}, {
        prefixCls: w.value,
        class: t,
        expandedKeys: _.value,
        selectedKeys: S.value,
        onSelect: B,
        onClick: U,
        onDblclick: L,
        onExpand: F,
        onCheck: O
      }), a);
    };
  }
}), W = me, $e = p(A, {
  DirectoryTree: R,
  TreeNode: W,
  install: (e) => (e.component(A.name, A), e.component(W.name, W), e.component(R.name, R), e)
});
export {
  $e as T,
  R as _
};
