UNPKG

@form-create/element-ui

Version:

Element Plus 版本低代码表单 | FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单生成组件。支持多个 UI 框架,适配移动端,并且支持生成任何 Vue 组件。内置 20 种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。

6,321 lines • 211 kB
/*!
 * FormCreate 低代码表单渲染器
 * @form-create/element-ui v3.3.6
 * (c) 2018-2026 xaboy
 * Github https://github.com/xaboy/form-create
 * Site https://form-create.com/
 * Released under the MIT License.
 */
(function(){"use strict";try{if(typeof document!="undefined"){var r=document.createElement("style");r.appendChild(document.createTextNode('._fc-frame ._fc-files img{width:100%;height:100%;display:inline-block;vertical-align:top}._fc-frame ._fc-upload-btn{border:1px dashed #c0ccda;cursor:pointer}._fc-frame._fc-disabled ._fc-upload-btn,._fc-frame._fc-disabled .el-button{cursor:not-allowed!important;color:#999}._fc-frame ._fc-upload-cover{opacity:0;position:absolute;inset:0;background:#0009;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}._fc-frame ._fc-upload-cover i{color:#fff;font-size:20px;cursor:pointer;margin:0 2px}._fc-frame ._fc-files:hover ._fc-upload-cover{opacity:1}._fc-frame .el-upload{display:block}._fc-frame ._fc-upload-icon{cursor:pointer}._fc-frame ._fc-upload-btn,._fc-files{display:inline-block;width:58px;height:58px;text-align:center;line-height:58px;border:1px solid #c0ccda;border-radius:4px;overflow:hidden;background:#fff;position:relative;-webkit-box-shadow:2px 2px 5px rgba(0,0,0,.1);box-shadow:2px 2px 5px #0000001a;margin-right:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tree[aria-disabled=true]{pointer-events:none}.el-tree[aria-disabled=true] .el-checkbox,.el-tree[aria-disabled=true] .el-checkbox__input,.el-tree[aria-disabled=true] .el-checkbox__inner{pointer-events:auto;cursor:not-allowed}._fc-upload{width:100%}._fc-exceed .el-upload{display:none}.el-upload-list.is-disabled .el-upload{cursor:not-allowed!important}._fc-group{display:flex;min-height:38px;justify-content:center;flex-direction:column;width:100%}._fc-group-disabled ._fc-group-btn,._fc-group-disabled ._fc-group-add{cursor:not-allowed}._fc-group-handle{display:flex;flex-direction:row;position:absolute;bottom:-15px;right:30px;border-radius:15px;border:1px dashed #d9d9d9;padding:3px 8px;background-color:#fff}._fc-group-btn{cursor:pointer}._fc-group-idx._fc-group-drag{cursor:grab;width:auto;min-width:30px;padding:0 8px;gap:4px;user-select:none}._fc-group-idx._fc-group-drag:active{cursor:grabbing}._fc-group-grip{flex-shrink:0;color:#666;font-weight:500;line-height:1;font-size:14px}._fc-group-dragging{opacity:.55}._fc-group-idx{position:absolute;bottom:-15px;left:10px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:#eee;border-radius:15px;font-weight:500}._fc-group-handle ._fc-group-btn+._fc-group-btn{margin-left:7px}._fc-group-container{position:relative;display:flex;flex-direction:column;border:1px dashed #d9d9d9;border-radius:5px;margin:5px 5px 25px;padding:20px 20px 25px}._fc-group-plus-minus{width:20px;height:20px;position:relative;cursor:pointer}._fc-group-plus-minus:before,._fc-group-plus-minus:after{content:"";position:absolute;top:50%;left:50%;width:60%;height:2px;background-color:#409eff;transform:translate(-50%,-50%)}._fc-group-plus-minus:before{transform:translate(-50%,-50%) rotate(90deg)}._fc-group-plus-minus._fc-group-minus:before{display:none}._fc-group-plus-minus._fc-group-minus:after{background-color:#f56c6c}._fc-group-add{cursor:pointer;width:25px;height:25px;border:1px solid rgb(64 158 255 / 50%);border-radius:15px}._fc-group-add._fc-group-plus-minus:before,._fc-group-add._fc-group-plus-minus:after{width:50%}._fc-group._fc-group-card{display:flex;flex-direction:column;width:100%;gap:16px}._fc-group._fc-group-card._fc-group-disabled ._fc-group-btn,._fc-group._fc-group-card._fc-group-disabled ._fc-group-add{cursor:not-allowed;opacity:.5}._fc-group._fc-group-card ._fc-group-container{position:relative;background:#fff;border:1px solid #f0f0f0;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;padding:0;margin:0}._fc-group._fc-group-card ._fc-group-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0;background:#fafafa}._fc-group._fc-group-card ._fc-group-idx{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#f0f0f0;color:#666;border-radius:6px;font-size:12px;font-weight:500;margin-right:12px;flex-shrink:0;position:static;border:1px solid #e0e0e0}._fc-group._fc-group-card ._fc-group-title{flex:1;font-size:14px;font-weight:500;color:#000000d9;line-height:1.5715}._fc-group._fc-group-card ._fc-group-handle{display:flex;align-items:center;gap:4px;margin-left:12px;flex-shrink:0;position:static;bottom:auto;right:auto;border-radius:0;border:none;padding:0;background-color:transparent;flex-direction:row}._fc-group._fc-group-card ._fc-group-idx._fc-group-drag{width:auto;min-width:24px;height:24px;padding:0 6px;gap:3px;cursor:grab}._fc-group._fc-group-card ._fc-group-drag-btn{cursor:grab;margin-right:8px;flex-shrink:0;color:#00000073;font-size:18px;font-weight:500;line-height:1;letter-spacing:-1px;user-select:none}._fc-group._fc-group-card ._fc-group-drag-btn:active{cursor:grabbing}._fc-group._fc-group-card ._fc-group-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:1px solid #d9d9d9;background:#fff;color:#00000073;position:relative}._fc-group._fc-group-card ._fc-group-btn:hover{color:#1890ff;border-color:#1890ff;background:#f0f8ff}._fc-group._fc-group-card ._fc-group-btn:active{color:#096dd9;border-color:#096dd9}._fc-group._fc-group-card ._fc-group-plus-minus{position:relative;background:#409eff;border-color:#409eff;color:#fff;width:24px;height:24px}._fc-group._fc-group-card ._fc-group-plus-minus:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}._fc-group._fc-group-card ._fc-group-plus-minus:before,._fc-group._fc-group-card ._fc-group-plus-minus:after{content:"";position:absolute;top:50%;left:50%;background-color:currentColor;transform:translate(-50%,-50%)}._fc-group._fc-group-card ._fc-group-plus-minus:before{transform:translate(-50%,-50%) rotate(90deg)}._fc-group._fc-group-card ._fc-group-plus-minus._fc-group-minus{background:#f56c6c;border-color:#f56c6c}._fc-group._fc-group-card ._fc-group-plus-minus._fc-group-minus:hover{background:#f78989;border-color:#f78989}._fc-group._fc-group-card ._fc-group-plus-minus._fc-group-minus:before{display:none}._fc-group._fc-group-card ._fc-group-content{padding:20px}._fc-group._fc-group-card ._fc-group-add{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:1px solid #d9d9d9;background:#fff;color:#00000073;position:relative}._fc-group._fc-group-card ._fc-group-add:hover{color:#409eff;border-color:#409eff;background:#f0f8ff}._fc-group._fc-group-card ._fc-group-add._fc-group-plus-minus{width:24px;height:24px;background:#409eff;border-color:#409eff;color:#fff}._fc-group._fc-group-card ._fc-group-add._fc-group-plus-minus:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}._fc-group._fc-group-card ._fc-group-add._fc-group-plus-minus:before,._fc-group._fc-group-card ._fc-group-add._fc-group-plus-minus:after{content:"";position:absolute;top:50%;left:50%;background-color:currentColor;transform:translate(-50%,-50%)}._fc-group._fc-group-card ._fc-group-add._fc-group-plus-minus:before{transform:translate(-50%,-50%) rotate(90deg)}._fc-group-container._fc-group-drag-over,._fc-group._fc-group-card ._fc-group-container._fc-group-drag-over{border-color:#409eff}@media (max-width: 768px){._fc-group._fc-group-card ._fc-group-container{margin:0 -8px;border-radius:0;border-left:none;border-right:none}._fc-group._fc-group-card ._fc-group-header{padding:12px 16px 8px}._fc-group._fc-group-card ._fc-group-content{padding:16px}._fc-group._fc-group-card ._fc-group-handle{gap:2px}._fc-group._fc-group-card ._fc-group-btn{width:22px;height:22px}}.form-create .form-create .el-form-item{margin-bottom:22px}.form-create{width:100%}.form-create.is-preview .fc-clock,.form-create .fc-none,.form-create.is-preview .el-form-item.is-required>.el-form-item__label-wrap>.el-form-item__label:before,.form-create.is-preview .el-form-item.is-required>.el-form-item__label:before{display:none!important}.fc-wrap-right>.el-form-item__label{display:flex;justify-content:flex-end}.fc-wrap-left>.el-form-item__label{display:flex;justify-content:flex-start}.fc-wrap-top.el-form-item{display:block}.fc-wrap-top.el-form-item>.el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left;float:unset}.el-form--large .fc-wrap-top.el-form-item>.el-form-item__label{line-height:22px;margin-bottom:12px}.el-form--default .fc-wrap-top.el-form-item>.el-form-item__label{line-height:22px;margin-bottom:8px}.el-form--small .fc-wrap-top.el-form-item>.el-form-item__label{line-height:20px;margin-bottom:4px}.fc-form-footer{margin-top:12px}.form-create.is-numbered{counter-reset:q}.form-create.is-numbered .fc-form-title{counter-increment:q}.form-create.is-numbered .fc-form-title:before{content:counter(q) ". ";color:var(--fc-number-color, inherit);font-weight:600}.form-create.is-numbered.is-number-chinese .fc-form-title:before{content:counter(q,simp-chinese-informal) "、"}')),document.head.appendChild(r)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
var jr = Object.defineProperty, Mr = Object.defineProperties;
var Ir = Object.getOwnPropertyDescriptors;
var At = Object.getOwnPropertySymbols;
var Pr = Object.prototype.hasOwnProperty, Tr = Object.prototype.propertyIsEnumerable;
var jt = (t, e, r) => e in t ? jr(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, C = (t, e) => {
  for (var r in e || (e = {}))
    Pr.call(e, r) && jt(t, r, e[r]);
  if (At)
    for (var r of At(e))
      Tr.call(e, r) && jt(t, r, e[r]);
  return t;
}, ce = (t, e) => Mr(t, Ir(e));
import { defineComponent as Fe, resolveComponent as q, createVNode as D, mergeProps as ge, toRef as ae, ref as Ot, watch as ie, computed as Re, openBlock as de, createElementBlock as Ce, createElementVNode as Ne, createBlock as Xe, withCtx as Mt, Fragment as ft, renderList as It, renderSlot as Lr, createTextVNode as Pt, nextTick as ee, markRaw as Te, reactive as Se, isVNode as Br, getCurrentInstance as $t, provide as Nr, inject as Yr, toRefs as Tt, onBeforeMount as xr, watchEffect as Ur, onMounted as qr, onBeforeUnmount as Hr, onUpdated as Wr, withDirectives as zr, resolveDirective as Gr, createApp as Jr, h as Kr } from "vue";
function Ct(t, e) {
  return Object.keys(t).reduce((r, n) => ((!e || e.indexOf(n) === -1) && (r[n] = t[n]), r), {});
}
function he(t) {
  return Array.isArray(t) ? t : [null, void 0, ""].indexOf(t) > -1 ? [] : [t];
}
const Qr = "fcCheckbox", Zr = /* @__PURE__ */ Fe({
  name: Qr,
  inheritAttrs: !1,
  props: {
    formCreateInject: Object,
    modelValue: {
      type: Array,
      default: () => []
    },
    type: String,
    options: Array,
    input: Boolean,
    inputValue: String
  },
  emits: ["update:modelValue", "fc.el"],
  setup(t, e) {
    const r = ae(t.formCreateInject, "options", []), n = ae(t, "options"), o = ae(t, "modelValue"), i = ae(t, "inputValue", ""), s = Ot(i.value), a = ae(t, "input", !1), l = (c) => {
      const h = [...he(o.value)], p = h.indexOf(s.value);
      s.value = c, p > -1 && (h.splice(p, 1), h.push(c), f(h));
    };
    ie(i, (c) => {
      if (!a.value) {
        s.value = c;
        return;
      }
      l(c);
    });
    const u = Re(() => {
      let c = r.value || [];
      return n.value && (c = n.value || []), Array.isArray(c) ? c : [];
    });
    ie(o, (c) => {
      let h = null;
      if (!i.value && c != null && Array.isArray(c) && c.length > 0 && a.value) {
        const p = u.value.map((y) => y.value);
        c.forEach((y) => {
          p.indexOf(y) === -1 && (h = y);
        });
      }
      h != null && (s.value = h);
    }, {
      immediate: !0
    });
    const f = (c) => {
      e.emit("update:modelValue", c);
    };
    return {
      options: u,
      value: o,
      onInput: f,
      updateCustomValue: l,
      makeInput(c) {
        if (a.value)
          return D(c, {
            value: s.value || void 0,
            label: s.value || void 0
          }, {
            default: () => [D(q("ElInput"), {
              size: "small",
              modelValue: s.value,
              "onUpdate:modelValue": l
            }, null)]
          });
      }
    };
  },
  render() {
    const t = this.type === "button" ? "ElCheckboxButton" : "ElCheckbox", e = q(t);
    return D(q("ElCheckboxGroup"), ge(this.$attrs, {
      modelValue: this.value === null ? void 0 : this.value,
      "onUpdate:modelValue": this.onInput,
      ref: "el"
    }), C({
      default: () => {
        var r, n;
        return [this.options.map((o, i) => {
          const s = C({}, o), a = s.value, l = s.label;
          return delete s.value, delete s.label, D(e, ge(s, {
            label: a,
            value: a,
            key: t + i + "-" + a
          }), {
            default: () => [l || a || ""]
          });
        }), (n = (r = this.$slots).default) == null ? void 0 : n.call(r), this.makeInput(e)];
      }
    }, Ct(this.$slots, ["default"])));
  },
  mounted() {
    this.$emit("fc.el", this.$refs.el);
  }
});
function ir(t) {
  t = t || /* @__PURE__ */ new Map();
  const e = {
    $on(r, n) {
      const o = t.get(r);
      o && o.push(n) || t.set(r, [n]);
    },
    $once(r, n) {
      n._once = !0, e.$on(r, n);
    },
    $off(r, n) {
      const o = t.get(r);
      o && o.splice(o.indexOf(n) >>> 0, 1);
    },
    $emit(r, ...n) {
      (t.get(r) || []).slice().map((o) => {
        o._once && (e.$off(r, o), delete o._once), o(...n);
      }), (t.get("*") || []).slice().map((o) => {
        o(r, n);
      });
    }
  };
  return e;
}
const Ue = (t, e) => {
  const r = t.__vccOpts || t;
  for (const [n, o] of e)
    r[n] = o;
  return r;
}, Xr = {
  name: "IconCircleClose"
}, en = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function tn(t, e, r, n, o, i) {
  return de(), Ce("svg", en, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M466.752 512l-90.496-90.496a32 32 0 0145.248-45.248L512 466.752l90.496-90.496a32 32 0 1145.248 45.248L557.248 512l90.496 90.496a32 32 0 11-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 01-45.248-45.248L466.752 512z"
    }, null, -1),
    Ne("path", {
      fill: "currentColor",
      d: "M512 896a384 384 0 100-768 384 384 0 000 768zm0 64a448 448 0 110-896 448 448 0 010 896z"
    }, null, -1)
  ])]);
}
const rn = /* @__PURE__ */ Ue(Xr, [["render", tn]]), nn = {
  name: "IconDocument"
}, sn = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function on(t, e, r, n, o, i) {
  return de(), Ce("svg", sn, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 01-32 32H160a32 32 0 01-32-32V96a32 32 0 0132-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z"
    }, null, -1)
  ])]);
}
const an = /* @__PURE__ */ Ue(nn, [["render", on]]), ln = {
  name: "IconDelete"
}, un = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function fn(t, e, r, n, o, i) {
  return de(), Ce("svg", un, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M160 256H96a32 32 0 010-64h256V95.936a32 32 0 0132-32h256a32 32 0 0132 32V192h256a32 32 0 110 64h-64v672a32 32 0 01-32 32H192a32 32 0 01-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 01-32-32V416a32 32 0 0164 0v320a32 32 0 01-32 32zm192 0a32 32 0 01-32-32V416a32 32 0 0164 0v320a32 32 0 01-32 32z"
    }, null, -1)
  ])]);
}
const cn = /* @__PURE__ */ Ue(ln, [["render", fn]]), dn = {
  name: "IconView"
}, hn = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function pn(t, e, r, n, o, i) {
  return de(), Ce("svg", hn, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 110 448 224 224 0 010-448zm0 64a160.192 160.192 0 00-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"
    }, null, -1)
  ])]);
}
const mn = /* @__PURE__ */ Ue(dn, [["render", pn]]), gn = {
  name: "IconFolderOpened"
}, yn = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function $n(t, e, r, n, o, i) {
  return de(), Ce("svg", yn, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 01216.96 384H832zm-24.96 512H96a32 32 0 01-32-32V160a32 32 0 0132-32h287.872l128.384 128H864a32 32 0 0132 32v96h23.04a32 32 0 0131.04 39.744l-112 448A32 32 0 01807.04 896z"
    }, null, -1)
  ])]);
}
const bn = /* @__PURE__ */ Ue(gn, [["render", $n]]), vn = "fcFrame", _n = /* @__PURE__ */ Fe({
  name: vn,
  props: {
    type: {
      type: String,
      default: "input"
    },
    field: String,
    helper: {
      type: Boolean,
      default: !0
    },
    disabled: {
      type: Boolean,
      default: !1
    },
    src: {
      type: String,
      required: !0
    },
    icon: {
      type: String,
      default: "IconFolderOpened"
    },
    width: {
      type: String,
      default: "500px"
    },
    height: {
      type: String,
      default: "370px"
    },
    maxLength: {
      type: Number,
      default: 0
    },
    okBtnText: {
      type: String,
      default: ""
    },
    closeBtnText: {
      type: String,
      default: ""
    },
    modalTitle: String,
    handleIcon: {
      type: [String, Boolean],
      default: void 0
    },
    title: String,
    allowRemove: {
      type: Boolean,
      default: !0
    },
    onOpen: {
      type: Function,
      default: () => {
      }
    },
    onOk: {
      type: Function,
      default: () => {
      }
    },
    onCancel: {
      type: Function,
      default: () => {
      }
    },
    onLoad: {
      type: Function,
      default: () => {
      }
    },
    onBeforeRemove: {
      type: Function,
      default: () => {
      }
    },
    onRemove: {
      type: Function,
      default: () => {
      }
    },
    onHandle: Function,
    modal: {
      type: Object,
      default: () => ({})
    },
    srcKey: [String, Number],
    modelValue: [Array, String, Number, Object],
    previewMask: void 0,
    footer: {
      type: Boolean,
      default: !0
    },
    reload: {
      type: Boolean,
      default: !0
    },
    closeBtn: {
      type: Boolean,
      default: !0
    },
    okBtn: {
      type: Boolean,
      default: !0
    },
    formCreateInject: Object
  },
  emits: ["update:modelValue", "change"],
  components: {
    IconFolderOpened: bn,
    IconView: mn
  },
  data() {
    return {
      fileList: he(this.modelValue),
      previewVisible: !1,
      frameVisible: !1,
      previewImage: "",
      bus: new ir()
    };
  },
  watch: {
    modelValue(t) {
      this.fileList = he(t);
    }
  },
  methods: {
    close() {
      this.closeModel(!0);
    },
    closeModel(t) {
      this.bus.$emit(t ? "$close" : "$ok"), this.reload && (this.bus.$off("$ok"), this.bus.$off("$close")), this.frameVisible = !1;
    },
    handleCancel() {
      this.previewVisible = !1;
    },
    showModel() {
      this.disabled || this.onOpen() === !1 || (this.frameVisible = !0);
    },
    input() {
      const t = this.fileList, e = this.maxLength === 1 ? t[0] || "" : t;
      this.$emit("update:modelValue", e), this.$emit("change", e);
    },
    makeInput() {
      return D(q("ElInput"), ge({
        type: "text",
        modelValue: this.fileList.map((t) => this.getSrc(t)).toString(),
        readonly: !0
      }, {
        key: 1
      }), {
        append: () => D(q("ElButton"), {
          icon: q(this.icon),
          onClick: () => this.showModel()
        }, null),
        suffix: () => this.fileList.length && !this.disabled ? D(q("ElIcon"), {
          class: "el-input__icon _fc-upload-icon",
          onClick: () => {
            this.fileList = [], this.input();
          }
        }, {
          default: () => [D(rn, null, null)]
        }) : null
      });
    },
    makeGroup(t) {
      return (!this.maxLength || this.fileList.length < this.maxLength) && t.push(this.makeBtn()), D("div", {
        key: 2
      }, [t]);
    },
    makeItem(t, e) {
      return D("div", {
        class: "_fc-files",
        key: "3" + t
      }, [e]);
    },
    valid(t) {
      const e = this.formCreateInject.field || this.field;
      if (e && t !== e)
        throw new Error("[frame]无效的字段值");
    },
    makeIcons(t, e) {
      if (this.handleIcon !== !1 || this.allowRemove === !0) {
        const r = [];
        return (this.type !== "file" && this.handleIcon !== !1 || this.type === "file" && this.handleIcon) && r.push(this.makeHandleIcon(t, e)), this.allowRemove && r.push(this.makeRemoveIcon(t, e)), D("div", {
          class: "_fc-upload-cover",
          key: 4
        }, [r]);
      }
    },
    makeHandleIcon(t, e) {
      const r = q(this.handleIcon === !0 || this.handleIcon === void 0 ? "icon-view" : this.handleIcon);
      return D(q("ElIcon"), {
        onClick: () => this.handleClick(t),
        key: "5" + e
      }, {
        default: () => [D(r, null, null)]
      });
    },
    makeRemoveIcon(t, e) {
      return D(q("ElIcon"), {
        onClick: () => this.handleRemove(t),
        key: "6" + e
      }, {
        default: () => [D(cn, null, null)]
      });
    },
    makeFiles() {
      return this.makeGroup(this.fileList.map((t, e) => this.makeItem(e, [D(q("ElIcon"), {
        onClick: () => this.handleClick(t)
      }, {
        default: () => [D(an, null, null)]
      }), this.makeIcons(t, e)])));
    },
    makeImages() {
      return this.makeGroup(this.fileList.map((t, e) => this.makeItem(e, [D("img", {
        src: this.getSrc(t)
      }, null), this.makeIcons(t, e)])));
    },
    makeBtn() {
      const t = q(this.icon);
      return D("div", {
        class: "_fc-upload-btn",
        onClick: () => this.showModel(),
        key: 7
      }, [D(q("ElIcon"), null, {
        default: () => [D(t, null, null)]
      })]);
    },
    handleClick(t) {
      if (this.onHandle)
        return this.onHandle(t);
      this.previewImage = this.getSrc(t), this.previewVisible = !0;
    },
    handleRemove(t) {
      this.disabled || this.onBeforeRemove(t) !== !1 && (this.fileList.splice(this.fileList.indexOf(t), 1), this.input(), this.onRemove(t));
    },
    getSrc(t) {
      return this.srcKey ? t[this.srcKey] : t;
    },
    onFrameLoad(t) {
      this.frameLoad(t.target.contentWindow || {});
    },
    frameLoad(t) {
      this.onLoad(t);
      try {
        this.helper === !0 && (t.form_create_helper = {
          api: this.formCreateInject.api,
          close: (e) => {
            this.valid(e), this.closeModel();
          },
          set: (e, r) => {
            this.valid(e), !this.disabled && this.$emit("update:modelValue", r);
          },
          get: (e) => (this.valid(e), this.modelValue),
          onOk: (e) => this.bus.$on("$ok", e),
          onClose: (e) => this.bus.$on("$close", e)
        });
      } catch (e) {
        console.error(e);
      }
    },
    makeFooter() {
      const {
        okBtnText: t,
        closeBtnText: e,
        closeBtn: r,
        okBtn: n,
        footer: o
      } = this.$props;
      if (o)
        return D("div", null, [r ? D(q("ElButton"), {
          onClick: () => this.onCancel() !== !1 && (this.frameVisible = !1)
        }, {
          default: () => [e || this.formCreateInject.t("close") || "关闭"]
        }) : null, n ? D(q("ElButton"), {
          type: "primary",
          onClick: () => this.onOk() !== !1 && this.closeModel()
        }, {
          default: () => [t || this.formCreateInject.t("ok") || "确定"]
        }) : null]);
    }
  },
  render() {
    const t = this.type;
    let e;
    t === "input" ? e = this.makeInput() : t === "image" ? e = this.makeImages() : e = this.makeFiles();
    const {
      width: r = "30%",
      height: n,
      src: o,
      title: i,
      modalTitle: s
    } = this.$props;
    return D("div", {
      class: {
        "_fc-frame": !0,
        "_fc-disabled": this.disabled
      }
    }, [e, D(q("ElDialog"), {
      appendToBody: !0,
      modal: this.previewMask,
      title: s,
      modelValue: this.previewVisible,
      onClose: this.handleCancel
    }, {
      default: () => [D("img", {
        style: "width: 100%",
        src: this.previewImage
      }, null)]
    }), D(q("ElDialog"), ge({
      appendToBody: !0
    }, C({
      width: r,
      title: i
    }, this.modal), {
      modelValue: this.frameVisible,
      onClose: () => this.closeModel(!0)
    }), {
      default: () => [this.frameVisible || !this.reload ? D("iframe", {
        ref: "frame",
        src: o,
        frameBorder: "0",
        onLoad: this.onFrameLoad,
        style: {
          height: n,
          border: "0 none",
          width: "100%"
        }
      }, null) : null],
      footer: () => this.makeFooter()
    })]);
  },
  beforeMount() {
    const {
      name: t,
      field: e,
      api: r
    } = this.formCreateInject;
    t && r.on("fc:closeModal:" + t, this.close), e && r.on("fc:closeModal:" + e, this.close);
  },
  beforeUnmount() {
    const {
      name: t,
      field: e,
      api: r
    } = this.formCreateInject;
    t && r.off("fc:closeModal:" + t, this.close), e && r.off("fc:closeModal:" + e, this.close);
  }
}), wn = "fcRadio", On = /* @__PURE__ */ Fe({
  name: wn,
  inheritAttrs: !1,
  props: {
    formCreateInject: Object,
    modelValue: {
      type: [String, Number, Boolean],
      default: ""
    },
    options: Array,
    type: String,
    input: Boolean,
    inputValue: String
  },
  emits: ["update:modelValue", "fc.el"],
  setup(t, e) {
    const r = ae(t.formCreateInject, "options", []), n = ae(t, "options"), o = ae(t, "modelValue"), i = ae(t, "inputValue", ""), s = Ot(i.value), a = ae(t, "input", !1);
    ie(i, (c) => {
      if (!a.value) {
        s.value = c;
        return;
      }
      f(c);
    });
    const l = Re(() => {
      let c = r.value || [];
      return n.value && (c = n.value || []), Array.isArray(c) ? c : [];
    });
    ie(o, (c) => {
      let h = !1;
      !i.value && c != null && a.value && (h = l.value.map((p) => p.value).indexOf(c) === -1), h && (s.value = c);
    }, {
      immediate: !0
    });
    const u = (c) => {
      e.emit("update:modelValue", c);
    }, f = (c) => {
      const h = s.value;
      s.value = c, o.value === h && u(c);
    };
    return {
      options: l,
      value: o,
      onInput: u,
      updateCustomValue: f,
      customValue: s,
      makeInput(c) {
        if (a.value)
          return D(c, {
            checked: !1,
            value: s.value || void 0,
            label: s.value || void 0
          }, {
            default: () => [D(q("ElInput"), {
              size: "small",
              modelValue: s.value,
              "onUpdate:modelValue": f
            }, null)]
          });
      }
    };
  },
  render() {
    const t = this.type === "button" ? "ElRadioButton" : "ElRadio", e = q(t);
    return D(q("ElRadioGroup"), ge(this.$attrs, {
      modelValue: this.value,
      "onUpdate:modelValue": this.onInput,
      ref: "el"
    }), C({
      default: () => {
        var r, n;
        return [this.options.map((o, i) => {
          const s = C({}, o), a = s.value, l = s.label;
          return delete s.value, delete s.label, D(e, ge(s, {
            label: a,
            value: a,
            key: t + i + "-" + a
          }), {
            default: () => [l || a || ""]
          });
        }), (n = (r = this.$slots).default) == null ? void 0 : n.call(r), this.makeInput(e)];
      }
    }, Ct(this.$slots, ["default"])));
  },
  mounted() {
    this.$emit("fc.el", this.$refs.el);
  }
}), m = {
  type(t, e) {
    return Object.prototype.toString.call(t) === "[object " + e + "]";
  },
  Undef(t) {
    return t == null;
  },
  Element(t) {
    return typeof t == "object" && t !== null && t.nodeType === 1 && !m.Object(t);
  },
  trueArray(t) {
    return Array.isArray(t) && t.length > 0;
  },
  Function(t) {
    const e = this.getType(t);
    return e === "Function" || e === "AsyncFunction";
  },
  getType(t) {
    const e = Object.prototype.toString.call(t);
    return /^\[object (.*)\]$/.exec(e)[1];
  },
  empty(t) {
    return t == null || Array.isArray(t) && Array.isArray(t) && !t.length ? !0 : typeof t == "string" && !t;
  }
};
["Date", "Object", "String", "Boolean", "Array", "Number"].forEach((t) => {
  m[t] = function(e) {
    return m.type(e, t);
  };
});
function J(t, e) {
  return {}.hasOwnProperty.call(t, e);
}
const Cn = "fcSelect", Sn = Fe({
  name: Cn,
  inheritAttrs: !1,
  props: {
    formCreateInject: Object,
    modelValue: {
      type: [Array, String, Number, Boolean, Object],
      default: void 0
    },
    type: String
  },
  emits: ["update:modelValue", "fc.el"],
  setup(t, { emit: e }) {
    const r = ae(t.formCreateInject, "options", []), n = ae(t, "modelValue");
    return {
      options: Re(() => Array.isArray(r.value) ? r.value : []),
      value: n,
      handleUpdate: (s) => {
        e("update:modelValue", s);
      },
      hasProperty: J,
      is: m
    };
  },
  mounted() {
    this.$emit("fc.el", this.$refs.el);
  }
});
function Dn(t, e, r, n, o, i) {
  const s = q("el-option"), a = q("el-option-group"), l = q("el-select");
  return de(), Xe(l, ge(t.$attrs, {
    "model-value": t.value,
    "onUpdate:modelValue": t.handleUpdate,
    ref: "el"
  }), {
    default: Mt(() => [
      (de(!0), Ce(ft, null, It(t.options, (u, f) => (de(), Ce(ft, null, [
        t.hasProperty(u, "options") ? (de(), Xe(a, {
          label: u.label,
          key: `${f}-${u.label}`
        }, {
          default: Mt(() => [
            (de(!0), Ce(ft, null, It(t.is.trueArray(u.options) ? u.options : [], (c, h) => (de(), Xe(s, ge({
              key: `${h}-${c.value}`
            }, { ref_for: !0 }, c), null, 16))), 128))
          ]),
          _: 2
        }, 1032, ["label"])) : (de(), Xe(s, ge({
          key: `${f}-${u.value}`
        }, { ref_for: !0 }, u), null, 16))
      ], 64))), 256)),
      Lr(t.$slots, "default")
    ]),
    _: 3
  }, 16, ["model-value", "onUpdate:modelValue"]);
}
const Vn = /* @__PURE__ */ Ue(Sn, [["render", Dn]]), Fn = "fcTree", En = /* @__PURE__ */ Fe({
  name: Fn,
  inheritAttrs: !1,
  formCreateParser: {
    mergeProp(t) {
      const e = t.prop.props;
      e.nodeKey || (e.nodeKey = "id"), e.props || (e.props = {
        label: "title"
      });
    }
  },
  props: {
    type: String,
    disabled: Boolean,
    modelValue: {
      type: [Array, String, Number],
      default: () => []
    }
  },
  emits: ["update:modelValue", "fc.el"],
  watch: {
    modelValue() {
      this.setValue();
    }
  },
  methods: {
    updateValue() {
      if (this.disabled) {
        this.setValue();
        return;
      }
      if (!this.$refs.tree) return;
      let t;
      this.type === "selected" ? t = this.$refs.tree.getCurrentKey() : t = this.$refs.tree.getCheckedKeys(), this.$emit("update:modelValue", t);
    },
    setValue() {
      if (!this.$refs.tree) return;
      this.type === "selected" ? this.$refs.tree.setCurrentKey(this.modelValue) : this.$refs.tree.setCheckedKeys(he(this.modelValue));
    },
    onClickCapture(t) {
      this.disabled && t.target.closest && t.target.closest(".el-checkbox") && (t.preventDefault(), t.stopPropagation());
    }
  },
  render() {
    const t = C({}, this.$attrs);
    return this.disabled && (t.draggable = !1), D(q("ElTree"), ge(t, {
      ref: "tree",
      "aria-disabled": this.disabled || void 0,
      onClickCapture: this.onClickCapture,
      onCheck: this.updateValue,
      onNodeClick: this.updateValue
    }), this.$slots);
  },
  mounted() {
    this.setValue(), this.$emit("fc.el", this.$refs.tree);
  }
}), kn = {
  name: "IconUpload"
}, Rn = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function An(t, e, r, n, o, i) {
  return de(), Ce("svg", Rn, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M160 832h704a32 32 0 110 64H160a32 32 0 110-64zm384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248L544 253.696z"
    }, null, -1)
  ])]);
}
const jn = /* @__PURE__ */ Ue(kn, [["render", An]]);
function Lt(t, e) {
  return typeof t == "object" ? t : {
    url: t,
    is_string: !0,
    name: Mn(t),
    uid: e
  };
}
function Bt(t) {
  return ce(C({}, t), {
    file: t,
    value: t
  });
}
function Mn(t) {
  return ("" + t).split("/").pop();
}
const In = "fcUpload", Pn = /* @__PURE__ */ Fe({
  name: In,
  inheritAttrs: !1,
  formCreateParser: {
    toFormValue(t) {
      return he(t);
    },
    toValue(t, e) {
      return e.prop.props.limit === 1 ? t[0] || "" : t;
    }
  },
  props: {
    previewMask: void 0,
    onPreview: Function,
    httpRequest: Function,
    modalTitle: String,
    listType: String,
    uploadText: String,
    formCreateInject: Object,
    modelValue: [Array, String, Object]
  },
  emits: ["update:modelValue", "change", "remove", "fc.el"],
  data() {
    return {
      previewVisible: !1,
      previewImage: "",
      fileList: []
    };
  },
  created() {
    this.fileList = he(this.modelValue).map(Lt).map(Bt);
  },
  watch: {
    modelValue(t) {
      this.fileList = he(t).map(Lt).map(Bt);
    }
  },
  methods: {
    handlePreview(t) {
      this.onPreview ? this.onPreview(...arguments) : this.listType === "text" ? window.open(t.url) : (this.previewImage = t.url, this.previewVisible = !0);
    },
    update(t) {
      let e = t.map((r) => r.is_string ? r.url : r.value || r.url).filter((r) => r !== void 0);
      this.$emit("update:modelValue", e);
    },
    handleCancel() {
      this.previewVisible = !1;
    },
    handleChange(t, e) {
      this.$emit("change", ...arguments), t.status === "success" && this.update(e);
    },
    handleRemove(t, e) {
      this.$emit("remove", ...arguments), this.update(e);
    },
    doHttpRequest(t) {
      if (this.httpRequest)
        return this.httpRequest(t);
      t.source = "upload", this.formCreateInject.api.fetch(t);
    }
  },
  render() {
    const t = he(this.modelValue).length;
    return D("div", {
      class: "_fc-upload"
    }, [D(q("ElUpload"), ge({
      key: t
    }, this.$attrs, {
      listType: this.listType || "picture-card",
      class: {
        "_fc-exceed": this.$attrs.limit ? this.$attrs.limit <= t : !1
      },
      onPreview: this.handlePreview,
      onChange: this.handleChange,
      onRemove: this.handleRemove,
      httpRequest: this.doHttpRequest,
      fileList: this.fileList,
      ref: "upload"
    }), C({
      default: () => {
        var e, r;
        return [((r = (e = this.$slots).default) == null ? void 0 : r.call(e)) || (["text", "picture"].indexOf(this.listType) === -1 ? D(q("ElIcon"), null, {
          default: () => [D(jn, null, null)]
        }) : D(q("ElButton"), {
          type: "primary"
        }, {
          default: () => [this.formCreateInject.t("clickToUpload") || this.uploadText || "点击上传"]
        }))];
      }
    }, Ct(this.$slots, ["default"]))), D(q("ElDialog"), {
      appendToBody: !0,
      modal: this.previewMask,
      title: this.modalTitle,
      modelValue: this.previewVisible,
      onClose: this.handleCancel
    }, {
      default: () => [D("img", {
        style: "width: 100%",
        src: this.previewImage
      }, null)]
    })]);
  },
  mounted() {
    this.$emit("fc.el", this.$refs.upload);
  }
});
function me(t, e, r) {
  t[e] = r;
}
function He(t, e) {
  delete t[e];
}
function Ze(t, e = {}, r) {
  let n = !1;
  for (let o in e)
    if (Object.prototype.hasOwnProperty.call(e, o)) {
      let i = e[o];
      if ((n = Array.isArray(i)) || m.Object(i)) {
        let s = t[o] === void 0;
        if (n)
          n = !1, s && me(t, o, []);
        else if (i._clone && r !== void 0)
          if (r)
            i = i.getRule(), s && me(t, o, {});
          else {
            me(t, o, i._clone());
            continue;
          }
        else
          s && me(t, o, {});
        t[o] = Ze(t[o], i, r);
      } else
        me(t, o, i), m.Undef(i) || (m.Undef(i.__json) || (t[o].__json = i.__json), m.Undef(i.__origin) || (t[o].__origin = i.__origin));
    }
  return r !== void 0 && Array.isArray(t) ? t.filter((o) => !o || !o.__ctrl) : t;
}
function De(t) {
  return Ze({}, { value: t }).value;
}
const Tn = Object.assign || function(t) {
  for (let e, r = 1; r < arguments.length; r++)
    for (let n in e = arguments[r], e)
      Object.prototype.hasOwnProperty.call(e, n) && me(t, n, e[n]);
  return t;
};
function R() {
  return Tn.apply(this, arguments);
}
function bt(t) {
  return typeof t != "object" || t === null ? t : t instanceof Array ? [...t] : C({}, t);
}
function Le(t, e) {
  var r = null;
  return function(...n) {
    r !== null && clearTimeout(r), r = setTimeout(() => t.call(this, ...n), e);
  };
}
function sr(t) {
  return t == null ? "" : typeof t == "object" ? JSON.stringify(t, null, 2) : String(t);
}
function Ln(t) {
  return t && typeof t == "object" && typeof t.then == "function";
}
function st(t) {
  return Ln(t) ? t : Promise.resolve(t);
}
function Ke(t) {
  let e = t.replace(/([A-Z])/g, "-$1").toLocaleLowerCase();
  return e.indexOf("-") === 0 && (e = e.substr(1)), e;
}
function or(t) {
  return t.replace(t[0], t[0].toLocaleUpperCase());
}
function ar(t, e, r) {
  return `[form-create ${t}]: ${e}`;
}
function St(t, e) {
  console.error(ar("err", t));
}
function Bn(t) {
  St(t.toString()), console.error(t);
}
const vt = "[[FORM-CREATE-PREFIX-", _t = "-FORM-CREATE-SUFFIX]]";
function Qe(t, e) {
  return JSON.stringify(Ze(Array.isArray(t) ? [] : {}, t, !0), function(r, n) {
    if (!(n && n._isVue === !0)) {
      if (typeof n != "function")
        return n;
      if (n.__json)
        return n.__json;
      if (n.__origin && (n = n.__origin), !n.__emit)
        return vt + n + _t;
    }
  }, e);
}
function ct(t) {
  return new Function("return " + t)();
}
function Ve(t, e) {
  if (t && m.String(t) && t.length > 4) {
    let r = t.trim(), n = !1;
    try {
      if (r.indexOf(_t) > 0 && r.indexOf(vt) === 0)
        r = r.replace(_t, "").replace(vt, ""), n = !0;
      else if (r.indexOf("$FN:") === 0)
        r = r.substring(4), n = !0;
      else if (r.indexOf("$EXEC:") === 0)
        r = r.substring(6), n = !0;
      else if (r.indexOf("$GLOBAL:") === 0) {
        const i = r.substring(8);
        return r = function(...s) {
          const a = s[0].api.getGlobalEvent(i);
          if (a)
            return a.call(this, ...s);
        }, r.__json = t, r.__inject = !0, r;
      } else {
        if (r.indexOf("$FNX:") === 0)
          return r = ct(`function($inject){
` + r.substring(5) + `
}`), r.__json = t, r.__inject = !0, r;
        (!e && r.indexOf("function ") === 0 && r !== "function " || !e && r.indexOf("function(") === 0 && r !== "function(") && (n = !0);
      }
      if (!n) return t;
      let o;
      try {
        o = ct(r);
      } catch (i) {
        o = ct("function " + r);
      }
      return o.__json = t, o;
    } catch (o) {
      St(`解析失败:${r}

err: ${o}`);
      return;
    }
  }
  return t;
}
function lr(t, e) {
  return JSON.parse(t, function(r, n) {
    return m.Undef(n) || !n.indexOf ? n : Ve(n, e);
  });
}
let Nn = 0;
function at() {
  const t = 370 + ++Nn;
  return "F" + Math.random().toString(36).substr(3, 3) + (+`${Date.now()}`).toString(36) + t.toString(36) + "c";
}
function Ye(t, e, r) {
  let n = t, o;
  return (e || "").split(".").forEach((i) => {
    o && ((!n[o] || typeof n[o] != "object") && (n[o] = {}), n = n[o]), o = i;
  }), n[o] = r, n;
}
const et = 4;
function Yn(t, e, r) {
  let n = null, o = 1 / 0;
  return t.forEach((i, s) => {
    if (e < i.left || e > i.right || r < i.top || r > i.bottom)
      return;
    const a = e - (i.left + i.right) / 2, l = r - (i.top + i.bottom) / 2, u = a * a + l * l;
    u < o && (o = u, n = s);
  }), n;
}
const xn = "fcGroup", Un = /* @__PURE__ */ Fe({
  name: xn,
  props: {
    field: String,
    rule: Array,
    expand: Number,
    options: Object,
    button: {
      type: Boolean,
      default: !0
    },
    max: {
      type: Number,
      default: 0
    },
    min: {
      type: Number,
      default: 0
    },
    modelValue: {
      type: Array,
      default: () => []
    },
    defaultValue: Object,
    sortBtn: {
      type: Boolean,
      default: !0
    },
    disabled: {
      type: Boolean,
      default: !1
    },
    syncDisabled: {
      type: Boolean,
      default: !0
    },
    title: {
      type: [String, Function],
      default: null
    },
    type: {
      type: String,
      default: "default"
    },
    onBeforeRemove: {
      type: Function,
      default: () => {
      }
    },
    onBeforeAdd: {
      type: Function,
      default: () => {
      }
    },
    formCreateInject: Object,
    parse: Function
  },
  data() {
    return {
      len: 0,
      cacheRule: {},
      cacheValue: {},
      sort: [],
      dragFrom: null,
      dragOverIndex: null,
      form: Te(this.formCreateInject.form.$form())
    };
  },
  emits: ["update:modelValue", "change", "itemMounted", "remove", "add"],
  watch: {
    rule: {
      handler(t, e) {
        Object.keys(this.cacheRule).forEach((r) => {
          const n = this.cacheRule[r];
          if (n.$f) {
            const o = n.$f.formData();
            if (t === e)
              n.$f.deferSyncValue(() => {
                Ze(n.rule, t), n.$f.setValue(o);
              }, !0);
            else {
              const i = n.$f.formData();
              n.$f.once("reloading", () => {
                n.$f.setValue(i);
              }), n.rule = De(t);
            }
          }
        });
      },
      deep: !0
    },
    expand(t) {
      let e = t - this.modelValue.length;
      e > 0 && this.expandRule(e);
    },
    modelValue: {
      handler(t) {
        t = t || [];
        let e = this.sort, r = e.length, n = r - t.length;
        if (n < 0) {
          for (let o = n; o < 0; o++)
            this.addRule(t.length + o, !0);
          for (let o = 0; o < r; o++)
            this.setValue(e[o], t[o]);
        } else {
          if (n > 0)
            for (let o = 0; o < n; o++)
              this.removeRule(e[r - o - 1]);
          t.forEach((o, i) => {
            this.setValue(e[i], t[i]);
          });
        }
      },
      deep: !0
    }
  },
  methods: {
    _value(t) {
      return t && J(t, this.field) ? t[this.field] : t;
    },
    cache(t, e) {
      this.cacheValue[t] = JSON.stringify(e);
    },
    input(t) {
      this.$emit("update:modelValue", t), this.$emit("change", t);
    },
    formData(t, e) {
      const r = this.cacheRule, n = this.sort;
      if (n.filter((i) => r[i] && r[i].$f).length !== n.length)
        return;
      const o = n.map((i) => {
        const s = t === i ? e : C({}, this.cacheRule[i].$f.form), a = this.field ? m.Undef(s[this.field]) ? null : s[this.field] : s;
        return this.cache(i, a), a;
      });
      this.input(o);
    },
    setValue(t, e) {
      const r = this.field;
      r && (e = {
        [r]: this._value(e)
      }), this.cacheValue[t] !== JSON.stringify(r ? e[r] : e) && (this.cacheRule[t].$f && this.cacheRule[t].$f.coverValue(e), this.cache(t, e));
    },
    addRule(t, e) {
      const r = this.formCreateInject.form.copyRules(this.rule || []), n = this.options ? C({}, this.options) : {
        submitBtn: !1,
        resetBtn: !1
      };
      if (this.defaultValue) {
        n.formData || (n.formData = {});
        const o = De(this.defaultValue);
        R(n.formData, this.field ? {
          [this.field]: o
        } : o);
      }
      this.parse && this.parse({
        rule: r,
        options: n,
        index: this.sort.length
      }), this.cacheRule[++this.len] = {
        rule: r,
        options: n
      }, this.sort = Object.keys(this.cacheRule), e && ee(() => this.$emit("add", r, Object.keys(this.cacheRule).length - 1));
    },
    add$f(t, e, r) {
      this.cacheRule[e].$f = r, ee(() => {
        this.$emit("itemMounted", r, Object.keys(this.cacheRule).indexOf(e));
      });
    },
    removeRule(t, e) {
      const r = Object.keys(this.cacheRule).indexOf(t);
      delete this.cacheRule[t], delete this.cacheValue[t], this.sort = Object.keys(this.cacheRule), e && ee(() => this.$emit("remove", r));
    },
    add(t) {
      if (this.disabled || this.onBeforeAdd(this.modelValue) === !1)
        return;
      const e = [...this.modelValue];
      e.push(this.defaultValue ? De(this.defaultValue) : this.field ? null : {}), this.input(e);
    },
    del(t, e) {
      if (this.disabled)
        return;
      const r = () => {
        this.removeRule(e, !0);
        const n = [...this.modelValue];
        n.splice(t, 1), this.input(n);
      };
      st(this.onBeforeRemove(this.modelValue, t)).then((n) => {
        n !== !1 && r();
      });
    },
    addIcon(t) {
      return D("div", {
        class: "_fc-group-btn _fc-group-plus-minus",
        onClick: this.add
      }, null);
    },
    delIcon(t, e) {
      return D("div", {
        class: "_fc-group-btn _fc-group-plus-minus _fc-group-minus",
        onClick: () => this.del(t, e)
      }, null);
    },
    moveSort(t, e) {
      if (t === e || t < 0 || e < 0 || t >= this.sort.length || e >= this.sort.length)
        return;
      const r = this.sort.slice(), [n] = r.splice(t, 1);
      r.splice(e, 0, n), this.sort = r, this.formCreateInject.subForm(this.sort.map((o) => this.cacheRule[o].$f)), this.formData(0);
    },
    dragStart(t, e) {
      if (this.dragFrom = e, this.dragOverIndex = null, !t.dataTransfer)
        return;
      t.dataTransfer.effectAllowed = "move", t.dataTransfer.setData("text/plain", String(e));
      const r = t.currentTarget.closest("._fc-group-container");
      if (r) {
        const n = r.getBoundingClientRect();
        t.dataTransfer.setDragImage(r, t.clientX - n.left, t.clientY - n.top);
      }
    },
    dragEnd() {
      this.dragFrom = null, this.dragOverIndex = null;
    },
    itemBounds(t) {
      const e = t.getBoundingClientRect();
      let r = e.top, n = e.right, o = e.bottom, i = e.left;
      return t.querySelectorAll(":scope > ._fc-group-handle, :scope > ._fc-group-idx").forEach((s) => {
        const a = s.getBoundingClientRect();
        r = Math.min(r, a.top), n = Math.max(n, a.right), o = Math.max(o, a.bottom), i = Math.min(i, a.left);
      }), {
        top: r - et,
        right: n + et,
        bottom: o + et,
        left: i - et
      };
    },
    locateDrag(t) {
      const e = t.currentTarget.querySelectorAll(":scope > ._fc-group-container");
      return Yn(Array.from(e, (r) => this.itemBounds(r)), t.clientX, t.clientY);
    },
    groupDragOver(t) {
      if (this.dragFrom == null || this.disabled)
        return;
      const e = this.locateDrag(t);
      this.dragOverIndex !== e && (this.dragOverIndex = e), t.preventDefault(), t.dataTransfer && (t.dataTransfer.dropEffect = e == null || e === this.dragFrom ? "none" : "move");
    },
    groupDragLeave(t) {
      if (this.dragFrom == null)
        return;
      const e = t.relatedTarget;
      if (e && t.currentTarget.contains(e))
        return;
      const r = t.currentTarget.getBoundingClientRect();
      t.clientX >= r.left && t.clientX <= r.right && t.clientY >= r.top && t.clientY <= r.bottom || (this.dragOverIndex = null);
    },
    groupDrop(t) {
      if (this.dragFrom == null)
        return;
      t.preventDefault();
      const e = this.dragFrom, r = this.locateDrag(t);
      this.dragFrom = null, this.dragOverIndex = null, !(r == null || e === r) && this.moveSort(e, r);
    },
    canDrag(t) {
      return this.sortBtn && !this.disabled && t > 1;
    },
    indexIcon(t, e) {
      const r = this.canDrag(e);
      return D("div", {
        class: {
          "_fc-group-idx": !0,
          "_fc-group-drag": r
        },
        draggable: r,
        role: r ? "button" : void 0,
        "aria-label": r ? "拖动排序" : void 0,
        title: r ? "拖动排序" : void 0,
        onDragstart: r ? (n) => this.dragStart(n, t) : void 0,
        onDragend: r ? this.dragEnd : void 0
      }, [r ? D("span", {
        class: "_fc-group-grip",
        lang: "en"
      }, [Pt("⋮⋮")]) : null, D("span", null, [t + 1])]);
    },
    dragHandle(t, e) {
      return this.canDrag(e) ? D("div", {
        class: "_fc-group-drag-btn",
        lang: "en",
        draggable: !0,
        role: "button",
        "aria-label": "拖动排序",
        title: "拖动排序",
        onDragstart: (r) => this.dragStart(r, t),
        onDragend: this.dragEnd
      }, [Pt("⋮⋮")]) : null;
    },
    makeIcon(t, e, r) {
      if (this.$slots.button)
        return this.$slots.button({
          total: t,
          index: e,
          vm: this,
          key: r,
          del: () => this.del(e, r),
          add: this.add
        });
      const n = [];
      return (!this.max || t < this.max) && t === e + 1 && n.push(this.addIcon(r)), t > this.min && n.push(this.delIcon(e, r)), n;
    },
    expandRule(t) {
      for (let e = 0; e < t; e++)
        this.modelValue.push(this.field ? null : {});
      this.input([...this.modelValue]);
    },
    getTitle(t, e) {
      return typeof this.title == "function" ? this.title(t, this.modelValue[t], e) : typeof this.title == "string" ? this.title.replace("{index}", t + 1) : !1;
    }
  },
  created() {
    const t = (this.expand || 0) - this.modelValue.length;
    for (let e = 0; e < this.modelValue.length; e++)
      this.addRule(e);
    t > 0 && this.expandRule(t);
  },
  render() {
    const t = this.sort, e = this.button, r = this.form, n = this.disabled, o = this.type === "card", i = t.length === 0 ? this.$slots.default ? this.$slots.default({
      vm: this,
      add: this.add
    }) : D("div", {
      key: "a_def",
      class: "_fc-group-plus-minus _fc-group-add fc-clock",
      onClick: this.add
    }, null) : t.map((s, a) => {
      const {
        rule: l,
        options: u
      } = this.cacheRule[s], f = e && !n ? this.makeIcon(t.length, a, s) : [], c = this.getTitle(a, s);
      return o ? D("div", {
        class: {
          "_fc-group-container": !0,
          "_fc-group-dragging": this.dragFrom === a,
          "_fc-group-drag-over": this.dragOverIndex === a && this.dragFrom !== a
        },
        key: s
      }, [D("div", {
        class: "_fc-group-header"
      }, [c === !1 ? this.indexIcon(a, t.length) : this.dragHandle(a, t.length), c !== !1 ? D("div", {
        class: "_fc-group-title"
      }, [c]) : null, D("div", {
        class: "_fc-group-handle fc-clock"
      }, [f.length ? f : null])]), D("div", {
        class: "_fc-group-content"
      }, [D(r, ge({
        key: s
      }, ce(C({}, this.$attrs), {
        disabled: n,
        "onUpdate:modelValue": (h) => this.formData(s, h),
        "onUpdate:api": (h) => this.add$f(a, s, h),
        inFor: !0,
        modelValue: this.field ? {
          [this.field]: this._value(this.modelValue[a])
        } : this.modelValue[a],
        rule: l,
        option: u,
        extendOption: !0
      })), null)])]) : D("div", {
        class: {
          "_fc-group-container": !0,
          "_fc-group-dragging": this.dragFrom === a,
          "_fc-group-drag-over": this.dragOverIndex === a && this.dragFrom !== a
        },
        key: s
      }, [D(r, ge({
        key: s
      }, ce(C({}, this.$attrs), {
        disabled: n,
        "onUpdate:modelValue": (h) => this.formData(s, h),
        "onUpdate:api": (h) => this.add$f(a, s, h),
        inFor: !0,
        modelValue: this.field ? {
          [this.field]: this._value(this.modelValue[a])
        } : this.modelValue[a],
        rule: l,
        option: u,
        extendOption: !0
      })), null), this.indexIcon(a, t.length), f.length ? D("div", {
        class: "_fc-group-handle fc-clock"
      }, [f]) : null]);
    });
    return D("div", {
      key: "con",
      class: "_fc-group " + (n ? "_fc-group-disabled" : "") + (o ? " _fc-group-card" : ""),
      onDragenter: this.groupDragOver,
      onDragover: this.groupDragOver,
      onDragleave: this.groupDragLeave,
      onDrop: this.groupDrop
    }, [i]);
  }
}), qn = "fcSubForm", Hn = /* @__PURE__ */ Fe({
  name: qn,
  props: {
    rule: Array,
    options: {
      type: Object,
      default: () => Se({
        submitBtn: !1,
        resetBtn: !1
      })
    },
    modelValue: {
      type: Object,
      default: () => ({})
    },
    disabled: {
      type: Boolean,
      default: !1
    },
    syncDisabled: {
      type: Boolean,
      default: !0
    },
    formCreateInject: Object
  },
  data() {
    return {
      cacheValue: {},
      subApi: {},
      form: Te(this.formCreateInject.form.$form())
    };
  },
  emits: ["fc:subform", "update:modelValue", "change", "itemMounted"],
  watch: {
    modelValue(t) {
      this.setValue(t);
    }
  },
  methods: {
    formData(t) {
      this.cacheValue = JSON.stringify(t), this.$emit("update:modelValue", t), this.$emit("change", t);
    },
    setValue(t) {
      const e = JSON.stringify(t);
      this.cacheValue !== e && (this.cacheValue = e, this.subApi.coverValue(t || {}));
    },
    add$f(t) {
      this.subApi = t, ee(() => {
        this.$emit("itemMounted", t);
      });
    }
  },
  render() {
    const t = this.form;
    return D(t, {
      disabled: this.disabled,
      "onUpdate:modelValue": this.formData,
      modelValue: this.modelValue,
      "onUpdate:api": this.add$f,
      rule: this.rule,
      option: this.options,
      extendOption: !0
    }, null);
  }
}), Wn = {
  name: "IconWarning"
}, zn = {
  class: "icon",
  viewBox: "0 0 1024 1024",
  xmlns: "http://www.w3.org/2000/svg"
};
function Gn(t, e, r, n, o, i) {
  return de(), Ce("svg", zn, [...e[0] || (e[0] = [
    Ne("path", {
      fill: "currentColor",
      d: "M512 64a448 448 0 110 896 448 448 0 010-896zm0 832a384 384 0 000-768 384 384 0 000 768zm48-176a48 48 0 11-96 0 48 48 0 0196 0zm-48-464a32 32 0 0132 32v288a32 32 0 01-64 0V288a32 32 0 0132-32z"
    }, null, -1)
  ])]);
}
const Jn = /* @__PURE__ */ Ue(Wn, [["render", Gn]]), Kn = [
  Zr,
  _n,
  On,
  Vn,
  En,
  Pn,
  Un,
  Hn,
  Jn
], ur = ["props"], fr = ["class", "style", "directives"], cr = ["on", "hook"], Ae = (t, e = {}, r = {}) => {
  const n = [...ur, ...r.normal || []], o = [...fr, ...r.array || []], i = [...cr, ...r.functional || []], s = r.props || [];
  return t.reduce((a, l) => {
    for (const u in l)
      if (a[u])
        if (s.indexOf(u) > -1)
          a[u] = Ae([l[u]], a[u]);
        else if (n.indexOf(u) > -1)
          a[u] = C(C({}, a[u]), l[u]);
        else if (o.indexOf(u) > -1) {
          const f = a[u] instanceof Array ? a[u] : [a[u]], c = l[u] instanceof Array ? l[u] : [l[u]];
          a[u] = [...f, ...c];
        } else if (i.indexOf(u) > -1)
          for (const f in l[u])
            if (a[u][f]) {
              const c = a[u][f] instanceof Array ? a[u][f] : [a[u][f]], h = l[u][f] instanceof Array ? l[u][f] : [l[u][f]];
              a[u][f] = [...c, ...h];
            } else
              a[u][f] = l[u][f];
        else if (u === "hook")
          for (let f in l[u])
            a[u][f] ? a[u][f] = Qn(a[u][f], l[u][f]) : a[u][f] = l[u][f];
        else
          a[u] = l[u];
      else
        n.indexOf(u) > -1 || i.indexOf(u) > -1 || s.indexOf(u) > -1 ? a[u] = C({}, l[u]) : o.indexOf(u) > -1 ? a[u] = l[u] instanceof Array ? [...l[u]] : typeof l[u] == "object" ? C({}, l[u]) : l[u] : a[u] = l[u];
    return a;
  }, e);
}, Qn = (t, e) => function() {
  t && t.apply(this, arguments), e && e.apply(this, arguments);
}, dr = ["type", "slot", "ignore", "emitPrefix", "value", "name", "native", "hidden", "display", "inject", "options", "emit", "link", "prefix", "suffix", "update", "sync", "optionsTo", "key", "slotUpdate", "computed", "preview", "component", "cache", "modelEmit"], Dt = ["validate", "children", "control"], Vt = ["effect", "deep", "renderSlots"];
function hr() {
  return [...dr, ...ur, ...fr, ...cr, ...Dt, ...Vt];
}
var lt = typeof globalThis != "undefined" ? globalThis : typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {};
function ut(t) {
  return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
}
var pr = { exports: {} };
(function(t, e) {
  (function(r, n) {
    t.exports = n();
  })(lt, function() {
    var r = 1e3, n = 6e4, o = 36e5, i = "millisecond", s = "second", a = "minute", l = "hour", u = "day", f = "week", c = "month", h = "quarter", p = "year", y = "date", V = "Invalid Date", O = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, T = /\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, j = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(F) {
      var w = ["th", "st", "nd", "rd"], v = F % 100;
      return "[" + F + (w[(v - 20) % 10] || w[v] || w[0]) + "]";
    } }, L = function(F, w, v) {
      var S = String(F);
      return !S || S.length >= w ? F : "" + Array(w + 1 - S.length).join(v) + F;
    }, re = { s: L, z: function(F) {
      var w = -F.utcOffset(), v = Math.abs(w), S = Math.floor(v / 60), _ = v % 60;
      return (w <= 0 ? "+" : "-") + L(S, 2, "0") + ":" + L(_, 2, "0");
    }, m: function F(w, v) {
      if (w.date() < v.date()) return -F(v, w);
      var S = 12 * (v.year() - w.year()) + (v.month() - w.month()), _ = w.clone().add(S, c), E = v - _ < 0, A = w.clone().add(S + (E ? -1 : 1), c);
      return +(-(S + (v - _) / (E ? _ - A : A - _)) || 0);
    }, a: function(F) {
      return F < 0 ? Math.ceil(F) || 0 : Math.floor(F);
    }, p: function(F) {
      return { M: c, y: p, w: f, d: u, D: y, h: l, m: a, s, ms: i, Q: h }[F] || String(F || "").toLowerCase().replace(/s$/, "");
    }, u: function(F) {
      return F === void 0;
    } }, te = "en", X = {};
    X[te] = j;
    var N = "$isDayjsObject", B = function(F) {
      return F instanceof K || !(!F || !F[N]);
    }, z = function F(w, v, S) {
      var _;
      if (!w) return te;
      if (typeof w == "string") {
        var E = w.toLowerCase();
        X[E] && (_ = E), v && (X[E] = v, _ = E);
        var A = w.split("-");
        if (!_ && A.length > 1) return F(A[0]);
      } else {
        var P = w.name;
        X[P] = w, _ = P;
      }
      return !S && _ && (te = _), _ || !S && te;
    }, Y = function(F, w) {
      if (B(F)) return F.clone();
      var v = typeof w == "object" ? w : {};
      return v.date = F, v.args = arguments, new K(v);
    }, I = re;
    I.l = z, I.i = B, I.w = function(F, w) {
      return Y(F, { locale: w.$L, utc: w.$u, x: w.$x, $offset: w.$offset });
    };
    var K = function() {
      function F(v) {
        this.$L = z(v.locale, null, !0), this.parse(v), this.$x = this.$x || v.x || {}, this[N] = !0;
      }
      var w = F.prototype;
      return w.parse = function(v) {
        this.$d = function(S) {
          var _ = S.date, E = S.utc;
          if (_ === null) return /* @__PURE__ */ new Date(NaN);
          if (I.u(_)) return /* @__PURE__ */ new Date();
          if (_ instanceof Date) return new Date(_);
          if (typeof _ == "string" && !/Z$/i.test(_)) {
            var A = _.match(O);
            if (A) {
              var P = A[2] - 1 || 0, H = (A[7] || "0").substring(0, 3);
              return E ? new Date(Date.UTC(A[1], P, A[3] || 1, A[4] || 0, A[5] || 0, A[6] || 0, H)) : new Date(A[1], P, A[3] || 1, A[4] || 0, A[5] || 0, A[6] || 0, H);
            }
          }
          return new Date(_);
        }(v), this.init();
      }, w.init = function() {
        var v = this.$d;
        this.$y = v.getFullYear(), this.$M = v.getMonth(), this.$D = v.getDate(), this.$W = v.getDay(), this.$H = v.getHours(), this.$m = v.getMinutes(), this.$s = v.getSeconds(), this.$ms = v.getMilliseconds();
      }, w.$utils = function() {
        return I;
      }, w.isValid = function() {
        return this.$d.toString() !== V;
      }, w.isSame = function(v, S) {
        var _ = Y(v);
        return this.startOf(S) <= _ && _ <= this.endOf(S);
      }, w.isAfter = function(v, S) {
        return Y(v) < this.startOf(S);
      }, w.isBefore = function(v, S) {
        return this.endOf(S) < Y(v);
      }, w.$g = function(v, S, _) {
        return I.u(v) ? this[S] : this.set(_, v);
      }, w.unix = function() {
        return Math.floor(this.valueOf() / 1e3);
      }, w.valueOf = function() {
        return this.$d.getTime();
      }, w.startOf = function(v, S) {
        var _ = this, E = !!I.u(S) || S, A = I.p(v), P = function(g, $) {
          var b = I.w(_.$u ? Date.UTC(_.$y, $, g) : new Date(_.$y, $, g), _);
          return E ? b : b.endOf(u);
        }, H = function(g, $) {
          return I.w(_.toDate()[g].apply(_.toDate("s"), (E ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice($)), _);
        }, G = this.$W, Q = this.$M, ne = this.$D, we = "set" + (this.$u ? "UTC" : "");
        switch (A) {
          case p:
            return E ? P(1, 0) : P(31, 11);
          case c:
            return E ? P(1, Q) : P(0, Q + 1);
          case f:
            var ue = this.$locale().weekStart || 0, d = (G < ue ? G + 7 : G) - ue;
            return P(E ? ne - d : ne + (6 - d), Q);
          case u:
          case y:
            return H(we + "Hours", 0);
          case l:
            return H(we + "Minutes", 1);
          case a:
            return H(we + "Seconds", 2);
          case s:
            return H(we + "Milliseconds", 3);
          default:
            return this.clone();
        }
      }, w.endOf = function(v) {
        return this.startOf(v, !1);
      }, w.$set = function(v, S) {
        var _, E = I.p(v), A = "set" + (this.$u ? "UTC" : ""), P = (_ = {}, _[u] = A + "Date", _[y] = A + "Date", _[c] = A + "Month", _[p] = A + "FullYear", _[l] = A + "Hours", _[a] = A + "Minutes", _[s] = A + "Seconds", _[i] = A + "Milliseconds", _)[E], H = E === u ? this.$D + (S - this.$W) : S;
        if (E === c || E === p) {
          var G = this.clone().set(y, 1);
          G.$d[P](H), G.init(), this.$d = G.set(y, Math.min(this.$D, G.daysInMonth())).$d;
        } else P && this.$d[P](H);
        return this.init(), this;
      }, w.set = function(v, S) {
        return this.clone().$set(v, S);
      }, w.get = function(v) {
        return this[I.p(v)]();
      }, w.add = function(v, S) {
        var _, E = this;
        v = Number(v);
        var A = I.p(S), P = function(Q) {
          var ne = Y(E);
          return I.w(ne.date(ne.date() + Math.round(Q * v)), E);
        };
        if (A === c) return this.set(c, this.$M + v);
        if (A === p) return this.set(p, this.$y + v);
        if (A === u) return P(1);
        if (A === f) return P(7);
        var H = (_ = {}, _[a] = n, _[l] = o, _[s] = r, _)[A] || 1, G = this.$d.getTime() + v * H;
        return I.w(G, this);
      }, w.subtract = function(v, S) {
        return this.add(-1 * v, S);
      }, w.format = function(v) {
        var S = this, _ = this.$locale();
        if (!this.isValid()) return _.invalidDate || V;
        var E = v || "YYYY-MM-DDTHH:mm:ssZ", A = I.z(this), P = this.$H, H = this.$m, G = this.$M, Q = _.weekdays, ne = _.months, we = _.meridiem, ue = function($, b, k, x) {
          return $ && ($[b] || $(S, E)) || k[b].slice(0, x);
        }, d = function($) {
          return I.s(P % 12 || 12, $, "0");
        }, g = we || function($, b, k) {
          var x = $ < 12 ? "AM" : "PM";
          return k ? x.toLowerCase() : x;
        };
        return E.replace(T, function($, b) {
          return b || function(k) {
            switch (k) {
              case "YY":
                return String(S.$y).slice(-2);
              case "YYYY":
                return I.s(S.$y, 4, "0");
              case "M":
                return G + 1;
              case "MM":
                return I.s(G + 1, 2, "0");
              case "MMM":
                return ue(_.monthsShort, G, ne, 3);
              case "MMMM":
                return ue(ne, G);
              case "D":
                return S.$D;
              case "DD":
                return I.s(S.$D, 2, "0");
              case "d":
                return String(S.$W);
              case "dd":
                return ue(_.weekdaysMin, S.$W, Q, 2);
              case "ddd":
                return ue(_.weekdaysShort, S.$W, Q, 3);
              case "dddd":
                return Q[S.$W];
              case "H":
                return String(P);
              case "HH":
                return I.s(P, 2, "0");
              case "h":
                return d(1);
              case "hh":
                return d(2);
              case "a":
                return g(P, H, !0);
              case "A":
                return g(P, H, !1);
              case "m":
                return String(H);
              case "mm":
                return I.s(H, 2, "0");
              case "s":
                return String(S.$s);
              case "ss":
                return I.s(S.$s, 2, "0");
              case "SSS":
                return I.s(S.$ms, 3, "0");
              case "Z":
                return A;
            }
            return null;
          }($) || A.replace(":", "");
        });
      }, w.utcOffset = function() {
        return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
      }, w.diff = function(v, S, _) {
        var E, A = this, P = I.p(S), H = Y(v), G = (H.utcOffset() - this.utcOffset()) * n, Q = this - H, ne = function() {
          return I.m(A, H);
        };
        switch (P) {
          case p:
            E = ne() / 12;
            break;
          case c:
            E = ne();
            break;
          case h:
            E = ne() / 3;
            break;
          case f:
            E = (Q - G) / 6048e5;
            break;
          case u:
            E = (Q - G) / 864e5;
            break;
          case l:
            E = Q / o;
            break;
          case a:
            E = Q / n;
            break;
          case s:
            E = Q / r;
            break;
          default:
            E = Q;
        }
        return _ ? E : I.a(E);
      }, w.daysInMonth = function() {
        return this.endOf(c).$D;
      }, w.$locale = function() {
        return X[this.$L];
      }, w.locale = function(v, S) {
        if (!v) return this.$L;
        var _ = this.clone(), E = z(v, S, !0);
        return E && (_.$L = E), _;
      }, w.clone = function() {
        return I.w(this.$d, this);
      }, w.toDate = function() {
        return new Date(this.valueOf());
      }, w.toJSON = function() {
        return this.isValid() ? this.toISOString() : null;
      }, w.toISOString = function() {
        return this.$d.toISOString();
      }, w.toString = function() {
        return this.$d.toUTCString();
      }, F;
    }(), oe = K.prototype;
    return Y.prototype = oe, [["$ms", i], ["$s", s], ["$m", a], ["$H", l], ["$W", u], ["$M", c], ["$y", p], ["$D", y]].forEach(function(F) {
      oe[F[1]] = function(w) {
        return this.$g(w, F[0], F[1]);
      };
    }), Y.extend = function(F, w) {
      return F.$i || (F(w, K, Y), F.$i = !0), Y;
    }, Y.locale = z, Y.isDayjs = B, Y.unix = function(F) {
      return Y(1e3 * F);
    }, Y.en = X[te], Y.Ls = X, Y.p = {}, Y;
  });
})(pr);
var Zn = pr.exports;
const Be = /* @__PURE__ */ ut(Zn);
var mr = { exports: {} };
(function(t, e) {
  (function(r, n) {
    t.exports = n();
  })(lt, function() {
    var r = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, n = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, o = /\d/, i = /\d\d/, s = /\d\d?/, a = /\d*[^-_:/,()\s\d]+/, l = {}, u = function(O) {
      return (O = +O) + (O > 68 ? 1900 : 2e3);
    }, f = function(O) {
      return function(T) {
        this[O] = +T;
      };
    }, c = [/[+-]\d\d:?(\d\d)?|Z/, function(O) {
      (this.zone || (this.zone = {})).offset = function(T) {
        if (!T || T === "Z") return 0;
        var j = T.match(/([+-]|\d\d)/g), L = 60 * j[1] + (+j[2] || 0);
        return L === 0 ? 0 : j[0] === "+" ? -L : L;
      }(O);
    }], h = function(O) {
      var T = l[O];
      return T && (T.indexOf ? T : T.s.concat(T.f));
    }, p = function(O, T) {
      var j, L = l.meridiem;
      if (L) {
        for (var re = 1; re <= 24; re += 1) if (O.indexOf(L(re, 0, T)) > -1) {
          j = re > 12;
          break;
        }
      } else j = O === (T ? "pm" : "PM");
      return j;
    }, y = { A: [a, function(O) {
      this.afternoon = p(O, !1);
    }], a: [a, function(O) {
      this.afternoon = p(O, !0);
    }], Q: [o, function(O) {
      this.month = 3 * (O - 1) + 1;
    }], S: [o, function(O) {
      this.milliseconds = 100 * +O;
    }], SS: [i, function(O) {
      this.milliseconds = 10 * +O;
    }], SSS: [/\d{3}/, function(O) {
      this.milliseconds = +O;
    }], s: [s, f("seconds")], ss: [s, f("seconds")], m: [s, f("minutes")], mm: [s, f("minutes")], H: [s, f("hours")], h: [s, f("hours")], HH: [s, f("hours")], hh: [s, f("hours")], D: [s, f("day")], DD: [i, f("day")], Do: [a, function(O) {
      var T = l.ordinal, j = O.match(/\d+/);
      if (this.day = j[0], T) for (var L = 1; L <= 31; L += 1) T(L).replace(/\[|\]/g, "") === O && (this.day = L);
    }], w: [s, f("week")], ww: [i, f("week")], M: [s, f("month")], MM: [i, f("month")], MMM: [a, function(O) {
      var T = h("months"), j = (h("monthsShort") || T.map(function(L) {
        return L.slice(0, 3);
      })).indexOf(O) + 1;
      if (j < 1) throw new Error();
      this.month = j % 12 || j;
    }], MMMM: [a, function(O) {
      var T = h("months").indexOf(O) + 1;
      if (T < 1) throw new Error();
      this.month = T % 12 || T;
    }], Y: [/[+-]?\d+/, f("year")], YY: [i, function(O) {
      this.year = u(O);
    }], YYYY: [/\d{4}/, f("year")], Z: c, ZZ: c };
    function V(O) {
      var T, j;
      T = O, j = l && l.formats;
      for (var L = (O = T.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function(Y, I, K) {
        var oe = K && K.toUpperCase();
        return I || j[K] || r[K] || j[oe].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function(F, w, v) {
          return w || v.slice(1);
        });
      })).match(n), re = L.length, te = 0; te < re; te += 1) {
        var X = L[te], N = y[X], B = N && N[0], z = N && N[1];
        L[te] = z ? { regex: B, parser: z } : X.replace(/^\[|\]$/g, "");
      }
      return function(Y) {
        for (var I = {}, K = 0, oe = 0; K < re; K += 1) {
          var F = L[K];
          if (typeof F == "string") oe += F.length;
          else {
            var w = F.regex, v = F.parser, S = Y.slice(oe), _ = w.exec(S)[0];
            v.call(I, _), Y = Y.replace(_, "");
          }
        }
        return function(E) {
          var A = E.afternoon;
          if (A !== void 0) {
            var P = E.hours;
            A ? P < 12 && (E.hours += 12) : P === 12 && (E.hours = 0), delete E.afternoon;
          }
        }(I), I;
      };
    }
    return function(O, T, j) {
      j.p.customParseFormat = !0, O && O.parseTwoDigitYear && (u = O.parseTwoDigitYear);
      var L = T.prototype, re = L.parse;
      L.parse = function(te) {
        var X = te.date, N = te.utc, B = te.args;
        this.$u = N;
        var z = B[1];
        if (typeof z == "string") {
          var Y = B[2] === !0, I = B[3] === !0, K = Y || I, oe = B[2];
          I && (oe = B[2]), l = this.$locale(), !Y && oe && (l = j.Ls[oe]), this.$d = function(S, _, E, A) {
            try {
              if (["x", "X"].indexOf(_) > -1) return new Date((_ === "X" ? 1e3 : 1) * S);
              var P = V(_)(S), H = P.year, G = P.month, Q = P.day, ne = P.hours, we = P.minutes, ue = P.seconds, d = P.milliseconds, g = P.zone, $ = P.week, b = /* @__PURE__ */ new Date(), k = Q || (H || G ? 1 : b.getDate()), x = H || b.getFullYear(), U = 0;
              H && !G || (U = G > 0 ? G - 1 : b.getMonth());
              var ye, be = ne || 0, ve = we || 0, fe = ue || 0, _e = d || 0;
              return g ? new Date(Date.UTC(x, U, k, be, ve, fe, _e + 60 * g.offset * 1e3)) : E ? new Date(Date.UTC(x, U, k, be, ve, fe, _e)) : (ye = new Date(x, U, k, be, ve, fe, _e), $ && (ye = A(ye).week($).toDate()), ye);
            } catch (Me) {
              return /* @__PURE__ */ new Date("");
            }
          }(X, z, N, j), this.init(), oe && oe !== !0 && (this.$L = this.locale(oe).$L), K && X != this.format(z) && (this.$d = /* @__PURE__ */ new Date("")), l = {};
        } else if (z instanceof Array) for (var F = z.length, w = 1; w <= F; w += 1) {
          B[1] = z[w - 1];
          var v = j.apply(this, B);
          if (v.isValid()) {
            this.$d = v.$d, this.$L = v.$L, this.init();
            break;
          }
          w === F && (this.$d = /* @__PURE__ */ new Date(""));
        }
        else re.call(this, te);
      };
    };
  });
})(mr);
var Xn = mr.exports;
const ei = /* @__PURE__ */ ut(Xn);
var gr = { exports: {} };
(function(t, e) {
  (function(r, n) {
    t.exports = n();
  })(lt, function() {
    var r = "day";
    return function(n, o, i) {
      var s = function(u) {
        return u.add(4 - u.isoWeekday(), r);
      }, a = o.prototype;
      a.isoWeekYear = function() {
        return s(this).year();
      }, a.isoWeek = function(u) {
        if (!this.$utils().u(u)) return this.add(7 * (u - this.isoWeek()), r);
        var f, c, h, p, y = s(this), V = (f = this.isoWeekYear(), c = this.$u, h = (c ? i.utc : i)().year(f).startOf("year"), p = 4 - h.isoWeekday(), h.isoWeekday() > 4 && (p += 7), h.add(p, r));
        return y.diff(V, "week") + 1;
      }, a.isoWeekday = function(u) {
        return this.$utils().u(u) ? this.day() || 7 : this.day(this.day() % 7 ? u : u - 7);
      };
      var l = a.startOf;
      a.startOf = function(u, f) {
        var c = this.$utils(), h = !!c.u(f) || f;
        return c.p(u) === "isoweek" ? h ? this.date(this.date() - (this.isoWeekday() - 1)).startOf("day") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf("day") : l.bind(this)(u, f);
      };
    };
  });
})(gr);
var ti = gr.exports;
const ri = /* @__PURE__ */ ut(ti);
var yr = { exports: {} };
(function(t, e) {
  (function(r, n) {
    t.exports = n();
  })(lt, function() {
    var r = "month", n = "quarter";
    return function(o, i) {
      var s = i.prototype;
      s.quarter = function(u) {
        return this.$utils().u(u) ? Math.ceil((this.month() + 1) / 3) : this.month(this.month() % 3 + 3 * (u - 1));
      };
      var a = s.add;
      s.add = function(u, f) {
        return u = Number(u), this.$utils().p(f) === n ? this.add(3 * u, r) : a.bind(this)(u, f);
      };
      var l = s.startOf;
      s.startOf = function(u, f) {
        var c = this.$utils(), h = !!c.u(f) || f;
        if (c.p(u) === n) {
          var p = this.quarter() - 1;
          return h ? this.month(3 * p).startOf(r).startOf("day") : this.month(3 * p + 2).endOf(r).endOf("day");
        }
        return l.bind(this)(u, f);
      };
    };
  });
})(yr);
var ni = yr.exports;
const ii = /* @__PURE__ */ ut(ni);
function pe(t) {
  const e = t.replace(/(-[a-z])/g, function(r) {
    return r.replace("-", "").toLocaleUpperCase();
  });
  return $r(e);
}
function $r(t) {
  return t.replace(t[0], t[0].toLowerCase());
}
Be.extend(ei);
Be.extend(ri);
Be.extend(ii);
function wt(t, e) {
  return {
    value: t,
    enumerable: !1,
    configurable: !1,
    writable: !0
  };
}
function br(t, e) {
  return vr([t], e || !1)[0];
}
function vr(t, e) {
  return Ze([], [...t], e || !1);
}
const si = { array: Dt, normal: Vt };
function je(t, e) {
  return Ae(Array.isArray(e) ? e : [e], t, si), t;
}
function Nt(t) {
  const e = m.Function(t.getRule) ? t.getRule() : t;
  return e.type || (e.type = "input"), e;
}
function oi(t, e) {
  return t ? (Object.keys(e || {}).forEach((r) => {
    e[r] && (t[r] = je(t[r] || {}, e[r]));
  }), t) : e;
}
function _r(t, e) {
  Object.defineProperties(t, Object.keys(e).reduce((r, n) => (r[n] = {
    get() {
      return e[n]();
    }
  }, r), {}));
}
function Oe(t) {
  return t.__fc__ || (t.__origin__ ? t.__origin__.__fc__ : null);
}
function M(t, e) {
  try {
    e = t();
  } catch (r) {
    Bn(r);
  }
  return e;
}
function tt() {
  const t = {}, e = (r) => r || "default";
  return {
    setSlot(r, n) {
      r = e(r), !(!n || Array.isArray(n) && n.length) && (t[r] || (t[r] = []), t[r].push(n));
    },
    getSlot(r, n) {
      r = e(r);
      const o = [];
      return (t[r] || []).forEach((i) => {
        if (Array.isArray(i))
          o.push(...i);
        else if (m.Function(i)) {
          const s = i(...n || []);
          Array.isArray(s) ? o.push(...s) : o.push(s);
        } else m.Undef(i) || o.push(i);
      }), o;
    },
    getSlots() {
      const r = {};
      return Object.keys(t).forEach((n) => {
        r[n] = (...o) => this.getSlot(n, o);
      }), r;
    },
    slotLen(r) {
      return r = e(r), t[r] ? t[r].length : 0;
    },
    mergeBag(r) {
      if (!r) return this;
      const n = m.Function(r.getSlots) ? r.getSlots() : r;
      return Array.isArray(r) || Br(r) ? this.setSlot(void 0, () => r) : Object.keys(n).forEach((o) => {
        this.setSlot(o, n[o]);
      }), this;
    }
  };
}
function Yt(t) {
  const e = C({}, t.props || {});
  return Object.keys(t.on || {}).forEach((r) => {
    r.indexOf("-") > 0 && (r = pe(r));
    const n = `on${or(r)}`;
    Array.isArray(e[n]) ? e[n] = [...e[n], t.on[r]] : e[n] ? e[n] = [e[n], t.on[r]] : e[n] = t.on[r];
  }), e.key = t.key, e.ref = t.ref, e.class = t.class, e.id = t.id, e.style = t.style, e.slot && delete e.slot, e;
}
function rt(t, e) {
  return Object.setPrototypeOf(t, e), t;
}
const xt = (t, e) => typeof t == "string" ? String(e) : typeof t == "number" ? Number(e) : e;
function ai(t) {
  if (m.Number(t))
    return !Number.isFinite(t) || t < 1e9 ? NaN : t >= 1e11 ? t : t * 1e3;
  if (!m.String(t))
    return NaN;
  const e = t.trim();
  return /^\d{11,}$/.test(e) ? Number(e) : /^\d{10}$/.test(e) ? Number(e) * 1e3 : NaN;
}
function ot(t) {
  let e;
  if (m.Date(t))
    e = Be(t);
  else {
    const r = ai(t);
    Number.isNaN(r) ? m.String(t) && (e = Be(t.trim().replace("T", " "), ["YYYY-MM-DD HH:mm:ss", "YYYY-MM-DD"], !0)) : e = Be(r);
  }
  return e && e.isValid() ? e : null;
}
function li(t) {
  return typeof t != "number" || !Number.isInteger(t) || t < 0 ? NaN : t;
}
function Z(t, e) {
  return [t.valueOf(), e.valueOf()];
}
function Ft(t, e) {
  return Array.isArray(t) ? t.length > 0 && t.every((r) => e(r)) : e(t);
}
function Pe(t, e, r, n) {
  const o = li(e);
  if (Number.isNaN(o))
    return !1;
  const i = Be().add(n * o, r).valueOf();
  return Ft(t, (s) => {
    const a = ot(s);
    if (!a)
      return !1;
    const l = a.valueOf();
    return n < 0 ? l < i : l > i;
  });
}
function Ut(t, e, r) {
  const n = ot(e);
  if (!n)
    return !1;
  const o = n.valueOf();
  return Ft(t, (i) => {
    const s = ot(i);
    return s ? r < 0 ? s.valueOf() < o : s.valueOf() > o : !1;
  });
}
const ui = {
  recent7Day(t) {
    return Z(t.startOf("day").subtract(6, "day"), t.endOf("day"));
  },
  recent30Day(t) {
    return Z(t.startOf("day").subtract(29, "day"), t.endOf("day"));
  },
  coming7Day(t) {
    return Z(t.startOf("day"), t.add(6, "day").endOf("day"));
  },
  coming30Day(t) {
    return Z(t.startOf("day"), t.add(29, "day").endOf("day"));
  },
  thisWeek(t) {
    return Z(t.startOf("isoWeek"), t.endOf("isoWeek"));
  },
  lastWeek(t) {
    const e = t.startOf("isoWeek").subtract(1, "week");
    return Z(e, e.endOf("isoWeek"));
  },
  nextWeek(t) {
    const e = t.startOf("isoWeek").add(1, "week");
    return Z(e, e.endOf("isoWeek"));
  },
  thisMonth(t) {
    return Z(t.startOf("month"), t.endOf("month"));
  },
  lastMonth(t) {
    const e = t.startOf("month").subtract(1, "month");
    return Z(e, e.endOf("month"));
  },
  nextMonth(t) {
    const e = t.startOf("month").add(1, "month");
    return Z(e, e.endOf("month"));
  },
  recentMonth(t) {
    return Z(t.subtract(1, "month").startOf("day"), t.endOf("day"));
  },
  comingMonth(t) {
    return Z(t.startOf("day"), t.add(1, "month").endOf("day"));
  },
  recent3Month(t) {
    return Z(t.subtract(3, "month").startOf("day"), t.endOf("day"));
  },
  recent6Month(t) {
    return Z(t.subtract(6, "month").startOf("day"), t.endOf("day"));
  },
  thisQuarter(t) {
    return Z(t.startOf("quarter"), t.endOf("quarter"));
  },
  lastQuarter(t) {
    const e = t.startOf("quarter").subtract(1, "quarter");
    return Z(e, e.endOf("quarter"));
  },
  nextQuarter(t) {
    const e = t.startOf("quarter").add(1, "quarter");
    return Z(e, e.endOf("quarter"));
  },
  thisYear(t) {
    return Z(t.startOf("year"), t.endOf("year"));
  },
  lastYear(t) {
    const e = t.startOf("year").subtract(1, "year");
    return Z(e, e.endOf("year"));
  },
  nextYear(t) {
    const e = t.startOf("year").add(1, "year");
    return Z(e, e.endOf("year"));
  },
  recentYear(t) {
    return Z(t.subtract(1, "year").startOf("day"), t.endOf("day"));
  },
  comingYear(t) {
    return Z(t.startOf("day"), t.add(1, "year").endOf("day"));
  }
};
function fi(t, e) {
  const r = m.String(e) ? ui[e] : null;
  if (!r)
    return !1;
  const [n, o] = r(Be());
  return Ft(t, (i) => {
    const s = ot(i);
    return !!s && s.valueOf() >= n && s.valueOf() <= o;
  });
}
const We = {
  "==": (t, e) => JSON.stringify(t) === JSON.stringify(xt(t, e)),
  "!=": (t, e) => !We["=="](t, e),
  ">": (t, e) => t > e,
  ">=": (t, e) => t >= e,
  "<": (t, e) => t < e,
  "<=": (t, e) => t <= e,
  on(t, e) {
    return t && t.indexOf && t.indexOf(xt(t[0], e)) > -1;
  },
  notOn(t, e) {
    return !We.on(t, e);
  },
  in(t, e) {
    return e && e.indexOf && e.indexOf(t) > -1;
  },
  notIn(t, e) {
    return !We.in(t, e);
  },
  between(t, e) {
    return t > e[0] && t < e[1];
  },
  notBetween(t, e) {
    return t < e[0] || t > e[1];
  },
  empty(t) {
    return m.empty(t);
  },
  notEmpty(t) {
    return !m.empty(t);
  },
  pattern(t, e) {
    return new RegExp(e, "g").test(t);
  },
  beforeDay(t, e) {
    return Pe(t, e, "day", -1);
  },
  afterDay(t, e) {
    return Pe(t, e, "day", 1);
  },
  beforeWeek(t, e) {
    return Pe(t, e, "week", -1);
  },
  afterWeek(t, e) {
    return Pe(t, e, "week", 1);
  },
  beforeMonth(t, e) {
    return Pe(t, e, "month", -1);
  },
  afterMonth(t, e) {
    return Pe(t, e, "month", 1);
  },
  beforeYear(t, e) {
    return Pe(t, e, "year", -1);
  },
  afterYear(t, e) {
    return Pe(t, e, "year", 1);
  },
  beforeDate(t, e) {
    return Ut(t, e, -1);
  },
  afterDate(t, e) {
    return Ut(t, e, 1);
  },
  period(t, e) {
    return fi(t, e);
  }
};
function le(t, e) {
  return (Array.isArray(e) ? e : (e || "").split(".")).forEach((r) => {
    t != null && (t = t[r]);
  }), t;
}
function ci(t) {
  const e = /{{\s*(.*?)\s*}}/g;
  let r;
  const n = {};
  for (; (r = e.exec(t)) !== null; )
    r[1] && (n[r[1]] = !0);
  return Object.keys(n);
}
function qt(t) {
  let e = t.split("."), r = [], n = "";
  return e.forEach((o, i) => {
    i === 0 ? n = o : n += "." + o, r.push(n);
  }), r.join(" && ");
}
function wr(t) {
  const e = [];
  let r = "", n = 0;
  for (let o = 0; o < t.length; o++) {
    const i = t[o];
    i === "[" ? (n === 0 && r && (e.push({ type: "key", value: r }), r = ""), n++, r += i) : i === "]" ? (n--, r += i, n === 0 && (e.push({
      type: "bracket",
      value: wr(r.slice(1, -1))
    }), r = "")) : i === "." && n === 0 ? r && (e.push({ type: "key", value: r }), r = "") : r += i;
  }
  return r && e.push({ type: "key", value: r }), e.map((o) => o.type === "key" ? { key: o.value } : { children: o.value });
}
const it = (t, e) => {
  if (!(!t || t === e)) {
    if (t.props.formCreateInject)
      return t.props.formCreateInject;
    if (t.parent)
      return it(t.parent, e);
  }
};
function di() {
  return typeof document != "undefined" && typeof document.createElement == "function" && document.head != null;
}
function hi(t, e, r) {
  return Fe({
    name: "FormCreate" + (t.isMobile ? "Mobile" : ""),
    components: e,
    directives: r,
    props: {
      rule: {
        type: Array,
        required: !0,
        default: () => []
      },
      option: {
        type: Object,
        default: () => ({})
      },
      extendOption: Boolean,
      driver: [String, Object],
      modelValue: Object,
      disabled: {
        type: Boolean,
        default: void 0
      },
      preview: {
        type: Boolean,
        default: void 0
      },
      index: [String, Number],
      api: Object,
      locale: [String, Object],
      t: Function,
      name: String,
      subForm: {
        type: Boolean,
        default: !0
      },
      inFor: Boolean
    },
    emits: ["update:api", "update:modelValue", "mounted", "beforeUnmount", "submit", "reset", "change", "emit-event", "control", "remove-rule", "remove-field", "sync", "reload", "repeat-field", "update", "validate-field-fail", "validate-fail", "created"],
    render() {
      return this.fc.render();
    },
    setup(n) {
      const o = $t();
      Nr("parentFC", o);
      const i = Yr("parentFC", null);
      let s = i;
      if (i)
        for (; s.setupState.parent; )
          s = s.setupState.parent;
      else
        s = o;
      const { rule: a, modelValue: l, subForm: u, inFor: f } = Tt(n), c = Se({
        ctxInject: {},
        destroyed: !1,
        isShow: !0,
        unique: 1,
        renderRule: [...a.value || []]
      });
      let h = JSON.stringify(l.value || {});
      const p = new t(o), y = p.api(), V = f.value, O = () => {
        if (i) {
          const N = it(o, i);
          if (N) {
            let B;
            V ? (B = he(N.getSubForm()), B.push(y)) : B = y, N.subForm(B);
          }
        }
      }, T = () => {
        const N = it(o, i);
        if (N)
          if (V) {
            const B = he(N.getSubForm()), z = B.indexOf(y);
            z > -1 && B.splice(z, 1);
          } else
            N.subForm();
      };
      let j = null;
      xr(() => {
        di() && Ur(() => {
          let N = "";
          const B = n.option && n.option.globalClass || {};
          Object.keys(B).forEach((z) => {
            let Y = "";
            B[z].style && Object.keys(B[z].style).forEach((I) => {
              Y += Ke(I) + ":" + B[z].style[I] + ";";
            }), B[z].content && (Y += B[z].content + ";"), Y && (N += `.${z}{${Y}}`);
          }), n.option && n.option.style && (N += n.option.style), j || (j = document.createElement("style"), j.type = "text/css", document.head.appendChild(j)), j.innerHTML = N || "";
        });
      });
      const L = Le(() => {
        p.bus.$emit("$loadData.$topForm");
      }, 100), re = Le(function() {
        p.bus.$emit("$loadData.$scopeForm");
      }, 100), te = Le(() => {
        p.bus.$emit("$loadData.$form");
      }, 100), X = (N) => {
        p.bus.$emit("change-$form." + N);
      };
      return qr(() => {
        i && (y.top.bus.$on("$loadData.$form", L), y.top.bus.$on("change", X)), y !== y.scope && y.scope.bus.$on("$loadData.$scopeForm", re), p.mounted();
      }), Hr(() => {
        i && (y.top.bus.$off("$loadData.$form", L), y.top.bus.$off("change", X)), y !== y.scope && y.scope.bus.$off("$loadData.$scopeForm", re), T(), c.destroyed = !0, p.unmount(), j && j.parentNode && j.parentNode.removeChild(j);
      }), Wr(() => {
        p.updated();
      }), O(), ie(() => n.option, () => {
        p.initOptions(), y.refresh();
      }, { deep: !0, flush: "sync" }), ie(() => [...a.value], (N) => {
        p.$handle.isBreakWatch() || N.length === c.renderRule.length && N.every((B) => c.renderRule.indexOf(B) > -1) || (p.$handle.updateAppendData(), p.$handle.reloadRule(a.value), o.setupState.renderRule());
      }), ie(() => [n.disabled, n.preview], () => {
        y.refresh();
      }), ie(l, (N) => {
        Qe(N || {}) !== h && (y.config.forceCoverValue ? y.coverValue(N || {}) : y.setValue(N || {}));
      }, { deep: !0, flush: "post" }), ie(() => n.index, () => {
        y.coverValue({}), p.$handle.updateAppendData(), ee(() => {
          ee(() => {
            y.clearValidateState();
          });
        });
      }, { flush: "sync" }), ce(C({
        fc: Te(p),
        parent: i && Te(i),
        top: Te(s),
        fapi: Te(y)
      }, Tt(c)), {
        getGroupInject: () => it(o, i),
        refresh() {
          ++c.unique;
        },
        renderRule() {
          c.renderRule = [...a.value || []];
        },
        updateValue(N) {
          if (c.destroyed) return;
          const B = Qe(N);
          h !== B && (h = B, o.emit("update:modelValue", N), ee(() => {
            te(), i ? u.value || re() : (L(), re());
          }));
        }
      });
    },
    created() {
      const n = $t();
      n.emit("update:api", n.setupState.fapi), n.setupState.fc.init();
    }
  });
}
function Or() {
  return {
    props: {},
    on: {},
    options: [],
    children: [],
    hidden: !1,
    display: !0,
    value: void 0
  };
}
function se(t, e) {
  return (r, n, o, i = {}) => {
    const s = new Et(t, r, n, o, i);
    return e && (m.Function(e) ? e(s) : s.props(e)), s;
  };
}
function Et(t, e, r, n, o) {
  this._data = R(Or(), { type: t, title: e, field: r, value: n, props: o || {} }), this.event = this.on;
}
R(Et.prototype, {
  getRule() {
    return this._data;
  },
  setProp(t, e) {
    return me(this._data, t, e), this;
  },
  modelField(t) {
    return this._data.modelField = t, this;
  },
  _clone() {
    const t = new this.constructor();
    return t._data = br(this._data), t;
  }
});
function Cr(t) {
  t.forEach((e) => {
    Et.prototype[e] = function(r) {
      return je(this._data, { [e]: arguments.length < 2 ? r : { [r]: arguments[1] } }), this;
    };
  });
}
Cr(hr());
const pi = se("");
function mi(t, e, r) {
  let n = pi("", e);
  return n._data.type = t, n._data.title = r, n;
}
function gi() {
  return {
    create: mi,
    factory: se
  };
}
function yi(t, e, r) {
  const n = `fail to ${t} ${r.status}'`, o = new Error(n);
  return o.status = r.status, o.url = t, o;
}
function Ht(t) {
  const e = t.responseText || t.response;
  if (!e)
    return e;
  try {
    return JSON.parse(e);
  } catch (r) {
    return e;
  }
}
function Sr(t) {
  if (typeof XMLHttpRequest == "undefined")
    return;
  const e = new XMLHttpRequest();
  let r = t.action || "";
  if (e.upload && t.onProgress && e.upload.addEventListener("progress", (i) => {
    i.percent = i.total > 0 ? i.loaded / i.total * 100 : 0, t.onProgress(i);
  }), t.query) {
    const i = m.String(t.query) ? t.query : Object.keys(t.query).reduce((a, l) => (a[l] = t.query[l] === null || t.query[l] === void 0 ? "" : t.query[l], a), {}), s = new URLSearchParams(i).toString();
    s && (r.includes("?") ? r += `&${s}` : r += `?${s}`);
  }
  e.onerror = function(s) {
    t.onError(s);
  }, e.onload = function() {
    if (e.status < 200 || e.status >= 300)
      return t.onError(yi(r, t, e), Ht(e));
    t.onSuccess(Ht(e));
  }, e.open(t.method || "get", r, !0);
  let n;
  (t.data || t.file) && (t.file || (t.dataType || "").toLowerCase() !== "json" ? (n = new FormData(), Object.keys(t.data || {}).map((i) => {
    n.append(i, t.data[i]);
  })) : (n = JSON.stringify(t.data || {}), e.setRequestHeader("content-type", "application/json"))), t.file && n.append(t.filename, t.file, t.file.name), t.withCredentials && "withCredentials" in e && (e.withCredentials = !0);
  const o = t.headers || {};
  Object.keys(o).forEach((i) => {
    o[i] != null && e.setRequestHeader(i, o[i]);
  }), e.send(n);
}
function Wt(t, e, r) {
  return new Promise((n, o) => {
    (e || Sr)(ce(C({}, t), {
      onSuccess(i) {
        let s = (l) => l;
        const a = Ve(t.parse);
        m.Function(a) ? s = a : a && m.String(a) && (s = (l) => le(l, a)), st(s(i, t.targetRule, r)).then((l) => {
          n(l);
        });
      },
      onError(i) {
        o(i);
      }
    }));
  });
}
function ze(t) {
  return De(t);
}
function $i(t) {
  function e(i) {
    return m.Undef(i) ? i = t.fields() : Array.isArray(i) || (i = [i]), i;
  }
  function r(i, s, a) {
    m.Undef(i) ? i = Object.keys(C(C({}, t.fieldCtx), t.nameCtx)) : Array.isArray(i) || (i = [i]), i.forEach((l) => {
      const u = t.fieldCtx[l] || t.nameCtx[l];
      u && u.forEach((f) => {
        me(f.rule, s, a), t.$render.clearCache(f);
      });
    });
  }
  function n() {
    const i = t.subForm;
    return Object.keys(i).reduce((s, a) => {
      const l = i[a];
      return l && (Array.isArray(l) ? s.push(...l) : s.push(l)), s;
    }, []);
  }
  const o = {
    get isScope() {
      return t.vm.props.subForm === !1;
    },
    get isPreview() {
      return t.preview;
    },
    get config() {
      return t.options;
    },
    set config(i) {
      t.fc.options.value = i;
    },
    get options() {
      return t.options;
    },
    set options(i) {
      t.fc.options.value = i;
    },
    get form() {
      return t.form;
    },
    get rule() {
      return t.rules;
    },
    get parent() {
      return t.vm.setupState.parent && t.vm.setupState.parent.setupState.fapi;
    },
    get top() {
      return o.parent ? o.parent.top : o;
    },
    get scope() {
      let i = t.vm;
      for (; i && i.setupState.fapi; )
        if (i.props.subForm)
          i = i.setupState.parent;
        else
          return i.setupState.fapi;
      return o.top;
    },
    get children() {
      return n();
    },
    get siblings() {
      const i = t.vm.setupState.getGroupInject();
      if (i) {
        const s = i.getSubForm();
        if (Array.isArray(s))
          return [...s];
      }
    },
    get index() {
      const i = o.siblings;
      if (i) {
        const s = i.indexOf(o);
        return s > -1 ? s : void 0;
      }
    },
    get formulas() {
      return C({}, t.fc.formulas);
    },
    formData(i) {
      if (i == null || typeof i == "boolean") {
        const s = {};
        return Object.keys(t.form).forEach((a) => {
          (i === !0 || t.ignoreFields.indexOf(a) === -1) && (s[a] = ze(t.form[a]));
        }), s;
      } else
        return e(i).reduce((s, a) => (s[a] = o.getValue(a), s), {});
    },
    getValue(i) {
      const s = t.getFieldCtx(i);
      return s ? ze(s.rule.value) : t.options.appendValue !== !1 && J(t.appendData, i) ? ze(t.appendData[i]) : void 0;
    },
    coverValue(i) {
      const s = C({}, i || {});
      t.deferSyncValue(() => {
        t.appendData = {}, o.fields().forEach((a) => {
          const l = t.fieldCtx[a];
          if (l) {
            const u = J(i, a);
            l.forEach((f) => {
              f.rule.value = u ? i[a] : void 0;
            }), delete s[a];
          }
        }), R(t.appendData, s);
      }, !0);
    },
    setValue(i) {
      let s = i;
      arguments.length >= 2 && (s = { [i]: arguments[1] }), t.deferSyncValue(() => {
        Object.keys(s).forEach((a) => {
          const l = t.fieldCtx[a];
          if (!l) return t.appendData[a] = s[a];
          l.forEach((u) => {
            u.rule.value = s[a];
          });
        });
      }, !0);
    },
    removeField(i) {
      const s = t.getCtx(i);
      return t.deferSyncValue(() => {
        t.getCtxs(i).forEach((a) => {
          a.rm();
        });
      }, !0), s ? s.origin : void 0;
    },
    removeRule(i) {
      const s = i && Oe(i);
      if (s)
        return s.rm(), s.origin;
    },
    fields: () => t.fields(),
    append: (i, s, a) => {
      let l = t.sort.length - 1, u;
      const f = t.getCtx(s);
      if (f)
        if (a) {
          if (u = f.getPending("children", f.rule.children), !Array.isArray(u)) return;
          l = f.rule.children.length - 1;
        } else
          l = f.root.indexOf(f.origin), u = f.root;
      else u = t.rules;
      u.splice(l + 1, 0, i);
    },
    prepend: (i, s, a) => {
      let l = 0, u;
      const f = t.getCtx(s);
      if (f)
        if (a) {
          if (u = f.getPending("children", f.rule.children), !Array.isArray(u)) return;
        } else
          l = f.root.indexOf(f.origin), u = f.root;
      else u = t.rules;
      u.splice(l, 0, i);
    },
    hidden(i, s) {
      r(s, "hidden", !!i), t.refresh();
    },
    hiddenStatus(i) {
      const s = t.getCtx(i);
      if (s)
        return !!s.rule.hidden;
    },
    display(i, s) {
      r(s, "display", !!i), t.refresh();
    },
    displayStatus(i) {
      const s = t.getCtx(i);
      if (s)
        return !!s.rule.display;
    },
    disabled(i, s) {
      e(s).forEach((a) => {
        t.getCtxs(a).forEach((l) => {
          me(l.rule.props, "disabled", !!i);
        });
      }), t.refresh();
    },
    required(i, s) {
      const a = !!i;
      e(s).forEach((l) => {
        t.getCtxs(l).forEach((u) => {
          const f = J(u.rule, "$required") ? u.rule.$required : u.rule.effect && u.rule.effect.required;
          m.Object(f) ? me(f, "required", a) : o.setEffect(u.id, "required", a);
        });
      }), t.refresh();
    },
    all(i) {
      return Object.keys(t.ctxs).map((s) => {
        const a = t.ctxs[s];
        return i ? a.origin : a.rule;
      });
    },
    model(i) {
      return t.fields().reduce((s, a) => {
        const l = t.fieldCtx[a][0];
        return s[a] = i ? l.origin : l.rule, s;
      }, {});
    },
    component(i) {
      return Object.keys(t.nameCtx).reduce((s, a) => {
        const l = t.nameCtx[a].map((u) => i ? u.origin : u.rule);
        return s[a] = l.length === 1 ? l[0] : l, s;
      }, {});
    },
    bind() {
      return o.form;
    },
    reload: (i) => {
      t.reloadRule(i);
    },
    updateOptions(i) {
      t.fc.updateOptions(i), o.refresh();
    },
    onSubmit(i) {
      o.updateOptions({ onSubmit: i });
    },
    sync: (i) => {
      if (Array.isArray(i)) {
        i.forEach((a) => o.sync(a));
        return;
      }
      let s = m.Object(i) ? Oe(i) : t.getCtxs(i);
      s && (s = Array.isArray(s) ? s : [s], s.forEach((a) => {
        if (!a.deleted) {
          const l = t.subForm[a.id];
          l && (Array.isArray(l) ? l.forEach((u) => {
            u.refresh();
          }) : l && l.refresh()), t.$render.clearCache(a);
        }
      }), t.refresh());
    },
    refresh: () => {
      n().forEach((i) => {
        i.refresh();
      }), t.$render.clearCacheAll(), t.refresh();
    },
    refreshOptions() {
      t.$manager.updateOptions(t.options), o.refresh();
    },
    hideForm: (i) => {
      t.vm.setupState.isShow = !i;
    },
    changeStatus: () => t.changeStatus,
    clearChangeStatus: () => {
      t.changeStatus = !1;
    },
    updateRule(i, s) {
      t.getCtxs(i).forEach((a) => {
        R(a.rule, s);
      });
    },
    updateRules(i) {
      Object.keys(i).forEach((s) => {
        o.updateRule(s, i[s]);
      });
    },
    mergeRule: (i, s) => {
      t.getCtxs(i).forEach((a) => {
        je(a.rule, s);
      });
    },
    mergeRules(i) {
      Object.keys(i).forEach((s) => {
        o.mergeRule(s, i[s]);
      });
    },
    getRule: (i, s) => {
      const a = t.getCtx(i);
      if (a)
        return s ? a.origin : a.rule;
    },
    findType(i, s) {
      let a;
      return Object.keys(t.ctxs).forEach((l) => {
        const u = t.ctxs[l];
        u.rule.type === i && (a = s ? u.origin : u.rule);
      }), a;
    },
    findTypes(i, s) {
      let a = [];
      return Object.keys(t.ctxs).forEach((l) => {
        const u = t.ctxs[l];
        u.rule.type === i && a.push(s ? u.origin : u.rule);
      }), a;
    },
    getRenderRule: (i) => {
      const s = t.getCtx(i);
      if (s)
        return s.prop;
    },
    getRefRule: (i) => {
      const s = t.getCtxs(i);
      if (s) {
        const a = s.map((l) => l.rule);
        return a.length === 1 ? a[0] : a;
      }
    },
    setEffect(i, s, a) {
      const l = t.getCtx(i);
      l && s && (s[0] === "$" && (s = s.substr(1)), J(l.rule, "$" + s) && me(l.rule, "$" + s, a), J(l.rule, "effect") || (l.rule.effect = {}), me(l.rule.effect, s, a));
    },
    clearEffectData(i, s) {
      const a = t.getCtx(i);
      a && (s && s[0] === "$" && (s = s.substr(1)), a.clearEffectData(s), o.sync(i));
    },
    updateValidate(i, s, a) {
      a ? o.mergeRule(i, { validate: s }) : r(i, "validate", s);
    },
    updateValidates(i, s) {
      Object.keys(i).forEach((a) => {
        o.updateValidate(a, i[a], s);
      });
    },
    refreshValidate() {
      o.refresh();
    },
    resetFields(i) {
      e(i).forEach((s) => {
        t.getCtxs(s).forEach((a) => {
          t.$render.clearCache(a), a.rule.value = ze(a.defaultValue);
        });
      }), ee(() => {
        ee(() => {
          ee(() => {
            o.clearValidateState(i);
          });
        });
      }), i == null && (m.Function(t.options.onReset) && M(() => t.options.onReset(o)), t.vm.emit("reset", o));
    },
    method(i, s) {
      const a = o.el(i);
      if (!a || !a[s])
        throw new Error(ar("err", `${s} 方法不存在`));
      return (...l) => a[s](...l);
    },
    exec(i, s, ...a) {
      return M(() => o.method(i, s)(...a));
    },
    toJson(i) {
      return Qe(o.rule, i);
    },
    trigger(i, s, ...a) {
      const l = o.el(i);
      l && l.$emit(s, ...a);
    },
    el(i) {
      const s = t.getCtx(i);
      if (s) return s.el || t.vm.refs[s.ref];
    },
    scrollTo(i, s = { block: "center", inline: "nearest", behavior: "smooth" }) {
      const a = o.el(i);
      if (!a) return;
      const l = a.$el !== void 0 ? a.$el : a;
      if (!l) return;
      const u = l.nodeType === 1 ? l : l.firstElementChild;
      u && typeof u.scrollIntoView == "function" && u.scrollIntoView(s);
    },
    focus(i) {
      const s = o.el(i);
      if (!s) return;
      const a = (c) => !c || typeof c.focus != "function" ? !1 : (M(() => c.focus()), !0);
      if (a(s)) return;
      const l = s.$el !== void 0 ? s.$el : s;
      if (a(l)) return;
      const u = l && (l.nodeType === 1 ? l : l.firstElementChild);
      if (a(u) || !u || !u.querySelector) return;
      const f = u.querySelector('input:not([type=hidden]):not([disabled]),textarea:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])');
      a(f);
    },
    closeModal: (i) => {
      t.bus.$emit("fc:closeModal:" + i);
    },
    getSubForm(i) {
      const s = t.getCtx(i);
      return s ? t.subForm[s.id] : void 0;
    },
    getChildrenRuleList(i) {
      const s = typeof i == "object", a = s ? Oe(i) : t.getCtx(i), l = a ? a.rule : s ? i : o.getRule(i);
      if (!l)
        return [];
      const u = [];
      return ((c) => {
        c && c.forEach((h) => {
          typeof h == "object" && (h.field && u.push(h), u.push(...o.getChildrenRuleList(h)));
        });
      })(a ? a.loadChildrenPending() : l.children), u;
    },
    getParentRule(i) {
      return (typeof i == "object" ? Oe(i) : t.getCtx(i)).parent.rule;
    },
    getParentSubRule(i) {
      const a = typeof i == "object" ? Oe(i) : t.getCtx(i);
      if (a) {
        const l = a.getParentGroup();
        if (l)
          return l.rule;
      }
    },
    getChildrenFormData(i, s) {
      return o.getChildrenRuleList(i).reduce((l, u) => ((u.ignore !== !0 || s === !0) && (l[u.field] = ze(u.value)), l), {});
    },
    setChildrenFormData(i, s, a) {
      const l = o.getChildrenRuleList(i);
      t.deferSyncValue(() => {
        l.forEach((u) => {
          J(s, u.field) ? u.value = s[u.field] : a && (u.value = void 0);
        });
      });
    },
    getGlobalEvent(i) {
      let s = o.options.globalEvent[i];
      if (s)
        return typeof s == "object" && (s = s.handle), Ve(s);
    },
    getGlobalData(i) {
      return new Promise((s, a) => {
        let l = o.options.globalData[i];
        l ? l.type === "fetch" ? o.fetch(l).then((u) => {
          s(u);
        }).catch(a) : s(l.data) : s(t.fc.loadData[i]);
      });
    },
    emitGlobalEvent(i, ...s) {
      const a = o.getGlobalEvent(i);
      if (a) {
        const l = t.getInjectData({}, void 0);
        return l.args = [...s], s.unshift(l), a.apply(null, s);
      }
    },
    setGlobalData(i, s) {
      o.setData("$globalData." + i, s);
    },
    setGlobalVar(i, s) {
      o.setData("$var." + i, s);
    },
    renderRule(i, s, a) {
      const u = typeof i == "object" ? Oe(i) : t.getCtx(i);
      return u ? t.$render.createRuleVnode(u, s, a) : void 0;
    },
    renderChildren(i, s, a) {
      const u = typeof i == "object" ? Oe(i) : t.getCtx(i);
      return u ? t.$render.createChildrenVnodes(u, s, a) : void 0;
    },
    nextTick(i) {
      t.bus.$once("next-tick", i), t.refresh();
    },
    nextRefresh(i) {
      t.nextRefresh(), i && M(i);
    },
    deferSyncValue(i, s) {
      t.deferSyncValue(i, s);
    },
    emit(i, ...s) {
      t.vm.emitsOptions && !t.vm.emitsOptions[i] && (t.vm.emitsOptions[i] = null), t.vm.emit(i, ...s);
    },
    bus: t.bus,
    getCurrentFormRule() {
      var i;
      return (i = t.vm.setupState.getGroupInject()) == null ? void 0 : i.rule;
    },
    fetch(i) {
      return new Promise((s, a) => {
        let l = C({}, i);
        l = t.loadFetchVar(l);
        const u = (f) => {
          M(() => l.onError && l.onError(f)), a(f);
        };
        t.beforeFetch(l).then(() => Wt(l, t.fc.create.fetch, o).then((f) => {
          M(() => l.onSuccess && l.onSuccess(f)), s(f);
        }).catch((f) => {
          u(f);
        })).catch((f) => {
          u(f);
        });
      });
    },
    watchFetch(i, s, a, l) {
      return t.fc.watchLoadData((u, f) => {
        let c = C({}, i);
        if (c = t.loadFetchVar(c, u), l && l(c, f) === !1)
          return;
        const h = (p) => {
          M(() => c.onError && c.onError(p)), a && a(p);
        };
        t.beforeFetch(c).then(() => Wt(c, t.fc.create.fetch, o).then((p) => {
          M(() => c.onSuccess && c.onSuccess(p)), s && s(p, f);
        }).catch((p) => {
          h(p);
        })).catch((p) => {
          h(p);
        });
      }, i.wait == null ? 1e3 : i.wait);
    },
    getData(i, s) {
      return t.fc.get ? t.fc.get(i, s) : t.fc.getLoadData(i, s);
    },
    watchData(i) {
      return t.fc.watchLoadData((s, a) => {
        M(() => i(s, a));
      });
    },
    setData(i, s, a) {
      return t.fc.setData(i, s, a);
    },
    refreshData(i) {
      return t.fc.refreshData(i);
    },
    t(i, s) {
      return t.fc.t(i, s);
    },
    getLocale() {
      return t.fc.getLocale();
    },
    helper: {
      tidyFields: e,
      props: r
    }
  };
  return ["on", "once", "off"].forEach((i) => {
    o[i] = function(...s) {
      t.bus[`$${i}`](...s);
    };
  }), o.changeValue = o.changeField = o.setValue, o;
}
function bi(t) {
  R(t.prototype, {
    initCache() {
      this.clearCacheAll();
    },
    clearCache(e) {
      if (!e.rule.cache) {
        if (!this.cache[e.id]) {
          e.parent && this.clearCache(e.parent);
          return;
        }
        (this.cache[e.id].use === !0 || this.cache[e.id].parent) && this.$handle.refresh(), this.cache[e.id].parent && this.clearCache(this.cache[e.id].parent), this.cache[e.id] = null;
      }
    },
    clearCacheAll() {
      this.cache = {};
    },
    setCache(e, r, n) {
      this.cache[e.id] = {
        vnode: r,
        use: !1,
        parent: n,
        slot: e.rule.slot
      };
    },
    getCache(e) {
      const r = this.cache[e.id];
      if (r)
        return r.use = !0, r.vnode;
    }
  });
}
function vi(t) {
  R(t.prototype, {
    initRender() {
      this.cacheConfig = {};
    },
    getTypeSlot(e) {
      const r = (n) => {
        if (n) {
          let o;
          return e.rule.field && (o = n.slots["field-" + Ke(e.rule.field)] || n.slots["field-" + e.rule.field]), o || (o = n.slots["type-" + Ke(e.type)] || n.slots["type-" + e.type]), o || r(n.setupState.parent);
        }
      };
      return r(this.vm);
    },
    render() {
      if (!this.vm.setupState.isShow)
        return;
      this.$manager.beforeRender(), this.applyShowNumber(this.$manager.rule);
      const e = tt();
      return this.sort.forEach((r) => {
        this.renderSlot(e, this.$handle.ctxs[r]);
      }), this.$manager.render(e);
    },
    applyShowNumber(e) {
      const r = this.$handle.options || {};
      if (!r.showNumber || !e)
        return;
      e.class = this.mergeClass(e.class, "is-numbered"), r.showNumber === "chinese" && (e.class = this.mergeClass(e.class, "is-number-chinese"));
      const n = r.numberColor, o = (r.form || {}).style;
      if (!n) {
        e.style = o;
        return;
      }
      m.String(o) ? e.style = `${o};--fc-number-color:${n}` : Array.isArray(o) ? e.style = o.concat({ "--fc-number-color": n }) : e.style = ce(C({}, o || {}), { "--fc-number-color": n });
    },
    renderSlot(e, r, n) {
      if (this.isFragment(r)) {
        r.initProp(), this.mergeGlobal(r), r.initNone();
        const o = this.renderChildren(r.loadChildrenPending(), r), i = o.default;
        i && e.setSlot(r.rule.slot, () => i()), delete o.default, e.mergeBag(o);
      } else
        e.setSlot(r.rule.slot, this.renderCtx(r, n));
    },
    mergeGlobal(e) {
      if (!this.$handle.options.global) return;
      const { trueType: n, originType: o, type: i } = e;
      this.cacheConfig[n] || (this.cacheConfig[n] = Re(() => {
        const s = this.$handle.options.global;
        return je({}, [s["*"] || s.default || {}, s[o] || s[i] || {}]);
      })), e.prop = je({}, [this.cacheConfig[e.trueType].value, e.prop]);
    },
    setOptions(e) {
      const r = e.loadPending({ key: "options", origin: e.prop.options, def: [] });
      e.prop.options = r, e.prop.optionsTo && r && Ye(e.prop, e.prop.optionsTo, r);
    },
    deepSet(e) {
      const r = e.prop.deep;
      r && Object.keys(r).sort((n, o) => n.length < o.length ? -1 : 1).forEach((n) => {
        Ye(e.prop, n, r[n]);
      });
    },
    parseSide(e, r) {
      return m.Object(e) ? je({ props: { formCreateInject: r.prop.props.formCreateInject } }, e) : e;
    },
    renderSides(e, r, n) {
      const o = r[n ? "rule" : "prop"];
      return [this.renderRule(this.parseSide(o.prefix, r)), e, this.renderRule(this.parseSide(o.suffix, r))];
    },
    renderId(e, r) {
      const n = this.$handle[r === "field" ? "fieldCtx" : "nameCtx"][e];
      return n ? n.map((o) => this.renderCtx(o, o.parent)) : void 0;
    },
    renderCtx(e, r) {
      try {
        if (e.type === "hidden") return;
        const n = e.rule;
        if (this.force || !this.cache[e.id] || this.cache[e.id].slot !== n.slot) {
          let o;
          e.initProp(), this.mergeGlobal(e), e.initNone(), this.$manager.tidyRule(e), this.deepSet(e), this.setOptions(e), this.ctxProp(e);
          let i = e.prop;
          i.preview = !!(i.preview != null ? i.preview : this.$handle.preview), i.props.formCreateInject = this.injectProp(e);
          let s = i.cache !== !1;
          const a = i.preview;
          if (i.hidden) {
            this.setCache(e, void 0, r);
            return;
          }
          o = (...l) => {
            var y, V;
            const u = {
              rule: n,
              prop: i,
              preview: a,
              api: this.$handle.api,
              model: i.model || {},
              slotValue: l
            };
            l.length && n.slotUpdate && M(() => n.slotUpdate(u));
            let f = {};
            const c = e.loadChildrenPending();
            e.parser.renderChildren ? f = e.parser.renderChildren(c, e) : e.parser.loadChildren !== !1 && (f = this.renderChildren(c, e)), Object.keys(i.renderSlots || {}).forEach((O) => {
              f[O] = (...T) => {
                if (m.Function(i.renderSlots[O]))
                  return M(() => i.renderSlots[O](...T));
                const j = this.parseSide(i.renderSlots[O], e);
                return this.renderRule(j);
              };
            });
            const h = this.getTypeSlot(e);
            let p;
            return h ? (u.children = f, p = h(u)) : p = a ? e.parser.preview(bt(f), e) : e.parser.render(bt(f), e), p = this.renderSides(p, e), (y = i.title) != null && y.show && (i.wrap = C({ show: !0 }, i.wrap || {}), i.native || (i.native = !1)), (!(!e.input && m.Undef(i.native)) || ((V = i.col) == null ? void 0 : V.show) === !0) && i.native !== !0 && (this.fc.targetFormDriver("updateWrap", e), p = this.$manager.makeWrap(e, p)), e.none && (Array.isArray(p) ? p = p.map((O) => !O || !O.__v_isVNode ? O : this.none(O)) : p = this.none(p)), s && this.setCache(e, () => this.stable(p), r), p;
          }, this.setCache(e, o, r);
        }
        return (...o) => {
          const i = this.getCache(e);
          if (i)
            return i(...o);
          if (this.cache[e.id])
            return;
          const s = this.renderCtx(e, e.parent);
          if (s)
            return s();
        };
      } catch (n) {
        console.error(n);
        return;
      }
    },
    none(e) {
      if (e)
        return e.props.class = this.mergeClass(e.props.class, "fc-none"), e;
    },
    mergeClass(e, r) {
      if (Array.isArray(e))
        e.push(r);
      else
        return e ? [e, r] : r;
      return e;
    },
    stable(e) {
      return (Array.isArray(e) ? e : [e]).forEach((n) => {
        n && n.__v_isVNode && n.children && typeof n.children == "object" && (n.children.$stable = !0, this.stable(n.children));
      }), e;
    },
    getModelField(e) {
      return e.prop.modelField || e.parser.modelField || this.fc.modelFields[this.vNode.aliasMap[e.type]] || this.fc.modelFields[e.type] || this.fc.modelFields[e.originType] || "modelValue";
    },
    isFragment(e) {
      return e.type === "fragment" || e.type === "template";
    },
    injectProp(e) {
      const r = this.vm.setupState;
      r.ctxInject[e.id] || (r.ctxInject[e.id] = {
        api: this.$handle.api,
        form: this.fc.create,
        subForm: (o) => {
          this.$handle.addSubForm(e, o);
        },
        getSubForm: () => this.$handle.subForm[e.id],
        slots: () => this.vm.setupState.top.slots,
        getWrap: () => this.vm.refs[e.wrapRef],
        options: [],
        children: [],
        preview: !1,
        id: e.id,
        field: e.field,
        rule: e.rule,
        input: e.input,
        t: (...o) => this.$handle.api.t(...o),
        updateValue: (o) => {
          this.$handle.onUpdateValue(e, o);
        }
      });
      const n = r.ctxInject[e.id];
      return R(n, {
        preview: e.prop.preview,
        options: e.prop.options,
        children: e.loadChildrenPending()
      }), n;
    },
    //事件回调挂在 ctx 上复用,避免 cache miss 时换新函数逼迫子组件更新
    ensureCtxHandlers(e) {
      if (e.handlers)
        return e.handlers;
      const r = this;
      return e.handlers = {
        vnodeMounted(n) {
          n.el.__rule__ = e.rule, r.onMounted(e, n.el);
        },
        vnodeBeforeUnmount() {
          r.$handle.effect(e, "beforeUnmount"), r.$handle.targetHook(e, "beforeUnmount");
        },
        fcUpdateValue(n) {
          r.$handle.onUpdateValue(e, n);
        },
        fcEl(n) {
          e.exportEl = n, n && ((n.$el || n).__rule__ = e.rule);
        },
        modelCallback(n) {
          r.tmpInput && r.tmpInput(e.field, n, e.rule), r.onInput(e, n);
        },
        modelEmit() {
          r.onEmitInput(e);
        }
      }, e.handlers;
    },
    ctxProp(e) {
      const { ref: r, key: n, rule: o } = e;
      this.$manager.mergeProp(e), e.parser.mergeProp(e);
      const i = this.ensureCtxHandlers(e), s = [
        {
          ref: r,
          key: o.key || `${n}fc`,
          slot: void 0,
          on: {
            vnodeMounted: i.vnodeMounted,
            vnodeBeforeUnmount: i.vnodeBeforeUnmount,
            "fc.updateValue": i.fcUpdateValue,
            "fc.el": i.fcEl
          }
        }
      ];
      if (e.input) {
        this.vm.props.disabled === !0 && (e.prop.props.disabled = !0);
        const a = this.getModelField(e), l = {
          callback: i.modelCallback,
          modelField: a,
          value: this.$handle.getFormData(e)
        };
        s.push({
          on: C({
            [`update:${a}`]: l.callback
          }, e.prop.modelEmit ? {
            [e.prop.modelEmit]: i.modelEmit
          } : {}),
          props: {
            [a]: l.value
          }
        }), e.prop.model = l;
      }
      return Ae(s, e.prop), e.prop;
    },
    onMounted(e, r) {
      e.el = this.vm.refs[e.ref] || r, e.parser.mounted(e), this.$handle.effect(e, "mounted"), this.$handle.targetHook(e, "mounted");
    },
    onInput(e, r) {
      if (e.prop.modelEmit) {
        this.$handle.onBaseInput(e, r);
        return;
      }
      this.$handle.onInput(e, r);
    },
    onEmitInput(e) {
      this.$handle.setValue(e, e.parser.toValue(e.modelValue, e), e.modelValue);
    },
    renderChildren(e, r) {
      if (!m.trueArray(e)) return {};
      const n = tt();
      return e.map((o) => {
        if (o) {
          if (m.String(o) || m.Number(o)) return n.setSlot(null, `${o}`);
          if (o.__fc__)
            return this.renderSlot(n, o.__fc__, r);
          o.type && ee(() => {
            this.$handle.loadChildren(e, r), this.$handle.refresh();
          });
        }
      }), n.getSlots();
    },
    defaultRender(e, r) {
      const n = e.prop;
      return n.component ? typeof n.component == "string" ? this.vNode.make(n.component, n, r) : this.vNode.makeComponent(n.component, n, r) : this.vNode[e.type] ? this.vNode[e.type](n, r) : this.vNode[e.originType] ? this.vNode[e.originType](n, r) : this.vNode.make($r(n.type), n, r);
    },
    createChildrenVnodes(e, r, n) {
      this.force = n !== !1, this.tmpInput = r;
      const o = this.renderChildren(e.rule.children, e);
      return this.force = !1, this.tmpInput = null, o;
    },
    createRuleVnode(e, r, n) {
      this.force = n !== !1, this.tmpInput = r;
      const o = tt();
      return this.renderSlot(o, e, e.parent), this.force = !1, this.tmpInput = null, o.getSlots();
    },
    renderRule(e, r, n) {
      if (!e) return;
      if (m.String(e) || m.Number(e)) return `${e}`;
      let o;
      if (n)
        o = e.type;
      else if (o = e.is, e.type) {
        o = pe(e.type);
        const a = this.vNode.aliasMap[o];
        a && (o = pe(a));
      }
      if (!o) return;
      const i = tt();
      m.trueArray(e.children) && e.children.forEach((a) => {
        a && i.setSlot(a == null ? void 0 : a.slot, () => this.renderRule(a));
      });
      const s = C({}, e);
      return delete s.type, delete s.is, this.vNode.make(o, s, i.mergeBag(r).getSlots());
    }
  });
}
let _i = 1;
function kt(t) {
  R(this, {
    $handle: t,
    fc: t.fc,
    vm: t.vm,
    $manager: t.$manager,
    vNode: new t.fc.CreateNode(t),
    force: !1,
    tmpInput: null,
    id: _i++
  }), _r(this, {
    options() {
      return t.options;
    },
    sort() {
      return t.sort;
    }
  }), this.initCache(), this.initRender();
}
bi(kt);
vi(kt);
function wi(t) {
  R(t.prototype, {
    parseInjectEvent(e, r) {
      const n = e.inject || this.options.injectEvent;
      return this.parseEventLst(e, r, n);
    },
    parseEventLst(e, r, n, o) {
      return Object.keys(r).forEach((i) => {
        const s = this.parseEvent(e, r[i], n, o);
        s && (r[i] = s);
      }), r;
    },
    parseEvent(e, r, n, o) {
      if (m.Function(r) && (n !== !1 && !m.Undef(n) || r.__inject))
        return this.inject(e, r, n);
      if (!o && Array.isArray(r) && r[0] && (m.String(r[0]) || m.Function(r[0])))
        return this.parseEventLst(e, r, n, !0);
      if (m.String(r)) {
        const i = Ve(r);
        if (i && r !== i)
          return i.__inject ? this.parseEvent(e, i, n, !0) : i;
      }
    },
    parseEmit(e) {
      let r = {}, n = e.rule, { emitPrefix: o, field: i, name: s, inject: a } = n, l = n.emit || [];
      return m.trueArray(l) && l.forEach((u) => {
        if (!u) return;
        let f, c = o || i || s;
        if (m.Object(u) && (f = u.inject, u = u.name, c = u.prefix || c), c) {
          const h = Ke(`${c}-${u}`), p = (...y) => {
            this.vm.emitsOptions && !this.vm.emitsOptions[h] && (this.vm.emitsOptions[h] = null), this.vm.emit(h, ...y), this.vm.emit("emit-event", h, ...y), this.bus.$emit(h, ...y);
          };
          if (p.__emit = !0, !f && a === !1)
            r[pe(u)] = p;
          else {
            let y = f || a || this.options.injectEvent;
            r[pe(u)] = m.Undef(y) ? p : this.inject(n, p, y);
          }
        }
      }), e.computed.on = r, r;
    },
    getInjectData(e, r) {
      const n = e.__fc__ && e.__fc__.$api, o = e.__fc__ && e.__fc__.$handle.vm || this.vm, { option: i, rule: s } = o.props;
      return {
        $f: n || this.api,
        api: n || this.api,
        rule: s,
        self: e.__origin__,
        option: i,
        inject: r
      };
    },
    inject(e, r, n) {
      if (r.__origin) {
        if (this.watching && !this.loading)
          return r;
        r = r.__origin;
      }
      const o = this, i = function(...s) {
        const a = o.getInjectData(e, n);
        return a.args = [...s], s.unshift(a), r.apply(this, s);
      };
      return i.__origin = r, i.__json = r.__json, i;
    },
    loadStrVar(e, r, n) {
      if (e && typeof e == "string" && e.indexOf("{{") > -1 && e.indexOf("}}") > -1) {
        const o = e, i = ci(e), s = (u) => {
          let f = !1, c;
          if (n && u.indexOf("$form.") === 0) {
            const h = u.split(".");
            h.shift(), J(n.value, h[0]) && (f = !0, c = r ? r({
              id: "$form." + h[0] + "_" + n.rule.__fc__.id,
              getValue: () => le(n.value, h)
            }) : le(n.value, h));
          }
          return f || (c = r ? r(u) : this.fc.getLoadData(u)), c;
        }, a = (u) => {
          const f = [];
          u.forEach((h) => {
            h.key ? f.push(h.key) : h.children && f.push(a(h.children));
          });
          let c = !1;
          return f.forEach((h, p) => {
            h != null && (h.indexOf("'") === 0 || h.indexOf('"') === 0) && (f[p] = h.slice(1, -1), c = !0);
          }), f.length === 1 && (c || !isNaN(Number(f[0]))) ? f[0] : s(f.join("."));
        };
        let l;
        if (i.forEach((u) => {
          const f = u.split("||"), c = f[0].trim();
          if (c) {
            const h = (f[1] || "").trim(), p = wr(c);
            let y = M(() => a(p));
            (y == null || y === "") && f.length > 1 && (y = h), l = y, e = e.replaceAll(`{{${u}}}`, y == null ? "" : y);
          }
        }), i.length === 1 && o === `{{${i[0]}}}`)
          return l;
      }
      return e;
    },
    loadFetchVar(e, r, n) {
      let o;
      n && n.__fc__ && (o = n.__fc__.getParentGroup()), !o && e.targetRule && e.targetRule.__fc__ && (o = e.targetRule.__fc__.getParentGroup());
      const i = (s) => this.loadStrVar(s, r, o ? { rule: n, value: this.subRuleData[o.id] || {} } : null);
      return e.action = i(e.action || ""), ["headers", "data", "query"].forEach((s) => {
        if (e[s]) {
          const a = Array.isArray(e[s]) ? [] : {};
          Object.keys(e[s]).forEach((l) => {
            a[i(l)] = i(e[s][l]);
          }), e[s] = a;
        }
      }), e;
    }
  });
}
const zt = ["hook:updated", "hook:mounted"];
function Oi(t) {
  R(t.prototype, {
    usePage() {
      const e = this.options.page;
      if (!e) return;
      let r = 25, n = Ci(this.rules);
      m.Object(e) && (e.first && (r = parseInt(e.first, 10) || r), e.limit && (n = parseInt(e.limit, 10) || n)), R(this, {
        first: r,
        limit: n,
        pageEnd: this.rules.length <= r
      }), this.bus.$on("page-end", () => this.vm.emit("page-end", this.api)), this.pageLoad();
    },
    pageLoad() {
      const e = () => {
        this.pageEnd ? (this.bus.$off(zt, e), this.bus.$emit("page-end")) : (this.first += this.limit, this.pageEnd = this.rules.length <= this.first, this.loadRule(), this.refresh());
      };
      this.bus.$on(zt, e);
    }
  });
}
function Ci(t) {
  return t.length < 31 ? 31 : Math.ceil(t.length / 3);
}
function Si(t) {
  R(t.prototype, {
    clearNextTick() {
      this.nextTick && clearTimeout(this.nextTick), this.nextTick = null;
    },
    bindNextTick(e) {
      this.clearNextTick(), this.nextTick = setTimeout(() => {
        e(), this.nextTick = null;
      }, 10);
    },
    render() {
      return ++this.loadedId, this.vm.setupState.unique > 0 ? this.$render.render() : (this.vm.setupState.unique = 1, []);
    }
  });
}
function Di(t) {
  Object.defineProperties(t.origin, {
    __fc__: wt(Te(t))
  }), t.rule !== t.origin && Object.defineProperties(t.rule, {
    __fc__: wt(Te(t))
  });
}
function Dr(t, e, r) {
  const n = at(), o = !!e.field;
  R(this, {
    id: n,
    ref: n,
    wrapRef: n + "fi",
    rule: e,
    origin: e.__origin__ || e,
    name: e.name,
    pending: {},
    none: !1,
    watch: [],
    linkOn: [],
    root: [],
    ctrlRule: [],
    children: [],
    parent: null,
    group: e.subRule ? this : null,
    cacheConfig: null,
    prop: C({}, e),
    computed: {},
    payload: {},
    refRule: {},
    handlers: null,
    input: o,
    el: void 0,
    exportEl: void 0,
    defaultValue: o ? De(r) : void 0,
    field: e.field || void 0
  }), this.updateKey(), Di(this), this.update(t, !0);
}
R(Dr.prototype, {
  getParentGroup() {
    let t = this.parent;
    for (; t; ) {
      if (t.group)
        return t;
      t = t.parent;
    }
  },
  loadChildrenPending() {
    const t = this.rule.children || [];
    return Array.isArray(t) ? t : this.loadPending({
      key: "children",
      origin: t,
      def: [],
      onLoad: (e) => {
        this.$handle && this.$handle.loadChildren(e, this);
      },
      onUpdate: (e, r) => {
        this.$handle && (e === r ? this.$handle.loadChildren(e, this) : this.$handle.updateChildren(this, e, r));
      },
      onReload: (e) => {
        this.$handle ? this.$handle.updateChildren(this, [], e) : delete this.pending.children;
      }
    });
  },
  loadPending(t) {
    const { key: e, origin: r, def: n, onLoad: o, onReload: i, onUpdate: s } = t;
    if (this.pending[e] && this.pending[e].origin === r)
      return this.getPending(e, n);
    delete this.pending[e];
    let a = r;
    if (m.Function(r)) {
      let l = M(() => r({
        rule: this.rule,
        api: this.$api,
        update: (u) => {
          const f = u || n, c = this.getPending(e, n);
          this.setPending(e, r, f), s && s(f, c);
        },
        reload: () => {
          const u = this.getPending(e, n);
          delete this.pending[e], i && i(u), this.$api && this.$api.sync(this.rule);
        }
      }));
      l && m.Function(l.then) ? (l.then((u) => {
        const f = u || n;
        this.setPending(e, r, f), o && o(f), this.$api && this.$api.sync(this.rule);
      }).catch((u) => {
        console.error(u);
      }), a = n, this.setPending(e, r, a)) : (a = l || n, this.setPending(e, r, a), o && o(a));
    }
    return a;
  },
  getPending(t, e) {
    return this.pending[t] && this.pending[t].value || e;
  },
  setPending(t, e, r) {
    this.pending[t] = {
      origin: e,
      value: Se(r)
    };
  },
  effectData(t) {
    return this.payload[t] || (this.payload[t] = {}), this.payload[t];
  },
  clearEffectData(t) {
    t === void 0 ? this.payload = {} : delete this.payload[t];
  },
  updateKey(t) {
    this.key = at(), t && this.parent && this.parent.updateKey(t);
  },
  updateType() {
    this.originType = this.rule.type, this.type = pe(this.rule.type), this.trueType = this.$handle.getType(this.originType);
  },
  setParser(t) {
    this.parser = t, t.init(this);
  },
  initProp() {
    var e, r, n;
    const t = C({}, this.rule);
    delete t.children, delete t.validate, this.prop = je({}, [t, ...Object.keys(this.payload).map((o) => this.payload[o]), this.computed]), t.col && ((e = t.col) == null ? void 0 : e.show) !== !1 && (this.prop.col.show = !0), this.prop.validate = [...((n = (r = this.refRule) == null ? void 0 : r.__$validate) == null ? void 0 : n.value) || [], ...this.prop.validate || []];
  },
  initNone() {
    this.none = !(m.Undef(this.prop.display) || this.prop.display);
  },
  hasHidden() {
    return !!this.rule.hidden || (this.parent ? this.parent.hasHidden() : !1);
  },
  injectValidate() {
    return this.prop.validate;
  },
  check(t) {
    return this.vm === t.vm;
  },
  unwatch() {
    this.watch.forEach((t) => t()), this.watch = [], Object.keys(this.refRule).forEach((t) => {
      t.indexOf("__$") !== 0 && delete this.refRule[t];
    });
  },
  unlink() {
    this.linkOn.forEach((t) => t()), this.linkOn = [];
  },
  link() {
    this.unlink(), this.$handle.appendLink(this);
  },
  watchTo() {
    this.$handle.watchCtx(this);
  },
  delete() {
    this.unwatch(), this.unlink(), this.rmCtrl(), this.parent && this.parent.children.splice(this.parent.children.indexOf(this) >>> 0, 1), R(this, {
      deleted: !0,
      computed: {},
      parent: null,
      children: [],
      cacheConfig: null,
      none: !1,
      handlers: null,
      //rule.__fc__ 是不可配置的强引用,ctx 往往比表单活得更久,
      //这里必须主动释放 DOM,否则已卸载的节点会一直被规则树持有
      el: void 0,
      exportEl: void 0
    });
  },
  rmCtrl() {
    this.ctrlRule.forEach((t) => t.__fc__ && t.__fc__.rm()), this.ctrlRule = [];
  },
  rm() {
    const t = () => {
      let e = this.root.indexOf(this.origin);
      e > -1 && (this.root.splice(e, 1), this.$handle && this.$handle.refresh());
    };
    if (this.deleted) {
      t();
      return;
    }
    this.$handle.noWatch(() => {
      this.$handle.deferSyncValue(() => {
        this.rmCtrl(), t(), this.$handle.rmCtx(this), R(this, {
          root: []
        });
      }, this.input);
    });
  },
  update(t, e) {
    R(this, {
      deleted: !1,
      $handle: t,
      $render: t.$render,
      $api: t.api,
      vm: t.vm,
      vNode: t.$render.vNode,
      updated: !1,
      cacheValue: this.rule.value
    }), !e && this.unwatch(), this.watchTo(), this.link(), this.updateType();
  }
});
function Vi(t) {
  R(t.prototype, {
    nextRefresh(e) {
      const r = this.loadedId;
      ee(() => {
        r === this.loadedId && (e ? e() : this.refresh());
      });
    },
    parseRule(e) {
      const r = Nt(e);
      return Object.defineProperties(r, {
        __origin__: wt(e)
      }), Fi(r), this.appendValue(r), [r, r.prefix, r.suffix].forEach((n) => {
        n && this.loadFn(n, r);
      }), this.loadCtrl(r), r.update && (r.update = Ve(r.update)), r;
    },
    loadFn(e, r) {
      ["on", "props", "deep"].forEach((n) => {
        e[n] && this.parseInjectEvent(r, e[n]);
      });
    },
    loadCtrl(e) {
      e.control && e.control.forEach((r) => {
        r.handle && (r.handle = Ve(r.handle));
      });
    },
    syncProp(e) {
      const r = e.rule;
      m.trueArray(r.sync) && Ae([{
        on: r.sync.reduce((n, o) => (n[typeof o == "object" && o.event || `update:${o}`] = (i) => {
          r.props[typeof o == "object" && o.prop || o] = i, this.vm.emit("sync", o, i, r, this.fapi);
        }, n), {})
      }], e.computed);
    },
    loadRule() {
      this.cycleLoad = !1, this.loading = !0, this.pageEnd && this.bus.$emit("load-start"), this.deferSyncValue(() => {
        if (this._loadRule(this.rules), this.loading = !1, this.cycleLoad && this.pageEnd)
          return this.loadRule();
        this.syncForm(), this.pageEnd && this.bus.$emit("load-end"), this.vm.setupState.renderRule();
      });
    },
    loadChildren(e, r) {
      if (this.cycleLoad = !1, this.loading = !0, this.bus.$emit("load-start"), this._loadRule(e, r), this.loading = !1, this.cycleLoad)
        return this.loadRule();
      this.syncForm(), this.bus.$emit("load-end"), this.$render.clearCache(r);
    },
    _loadRule(e, r) {
      const n = (s) => {
        let a = e[s - 1];
        if (!a || !a.__fc__)
          return s > 0 ? n(s - 1) : -1;
        let l = this.sort.indexOf(a.__fc__.id);
        return l > -1 ? l : n(s - 1);
      }, o = (s, a) => {
        m.trueArray(s) && this._loadRule(s, a);
      }, i = e.map((s, a) => {
        if (r && !m.Object(s) || !this.pageEnd && !r && a >= this.first) return;
        if (s.__fc__ && s.__fc__.root === e && this.ctxs[s.__fc__.id])
          return o(s.__fc__.loadChildrenPending(), s.__fc__), s.__fc__;
        let l = Nt(s);
        const u = () => !!(l.field && this.fieldCtx[l.field] && this.fieldCtx[l.field][0] !== s.__fc__);
        this.fc.targetFormDriver("loadRule", { rule: l, api: this.api }, this.fc), this.ruleEffect(l, "init", { repeat: u() }), u() && this.vm.emit("repeat-field", s, this.api);
        let f, c = !1, h = !!s.__fc__, p = l.value;
        if (h) {
          if (f = s.__fc__, p = f.defaultValue, f.deleted) {
            if (Gt(f))
              return;
            f.update(this);
          } else if (!f.check(this)) {
            if (Gt(f))
              return;
            e[a] = s = s._clone ? s._clone() : lr(Qe(s)), f = null, c = !0;
          }
        }
        if (f)
          f.originType !== f.rule.type && f.updateType(), this.bindParser(f), this.appendValue(f.rule), f.parent && f.parent !== r && this.rmSubRuleData(f);
        else {
          const O = this.parseRule(s);
          f = new Dr(this, O, p), this.bindParser(f);
        }
        this.parseEmit(f), this.syncProp(f), f.parent = r || null, f.root = e, this.setCtx(f), !c && !h && (this.effect(f, "load"), this.targetHook(f, "load")), this.effect(f, "created");
        const y = f.loadChildrenPending();
        if (f.parser.loadChildren === !1 || o(y, f), !r) {
          const O = n(a);
          O > -1 || !a ? this.sort.splice(O + 1, 0, f.id) : this.sort.push(f.id);
        }
        const V = f.rule;
        return f.updated || (f.updated = !0, m.Function(V.update) && this.bus.$once("load-end", () => {
          this.refreshUpdate(f, V.value, "init");
        }), this.effect(f, "loaded")), this.refreshControl(f) && (this.cycleLoad = !0), f;
      }).filter((s) => !!s);
      r && (r.children = i);
    },
    refreshControl(e) {
      return e.input && e.rule.control && this.useCtrl(e);
    },
    useCtrl(e) {
      const r = Ei(e), n = [], o = this.api;
      if (!r.length) return !1;
      for (let a = 0; a < r.length; a++) {
        const l = r[a], u = l.handle || function(c) {
          return (We[l.condition || "=="] || We["=="])(c, l.value);
        };
        if (!m.trueArray(l.rule)) continue;
        const f = ce(C({}, l), {
          valid: M(() => u(e.rule.value, o)),
          ctrl: ki(e, l.rule),
          isHidden: m.String(l.rule[0])
        });
        f.valid && f.ctrl || !f.valid && !f.ctrl && !f.isHidden || n.push(f);
      }
      if (!n.length) return !1;
      const i = [];
      let s = !1;
      return this.deferSyncValue(() => {
        n.reverse().forEach(({ isHidden: a, valid: l, rule: u, prepend: f, append: c, child: h, ctrl: p, method: y }) => {
          if (a) {
            l ? e.ctrlRule.push({
              __ctrl: !0,
              children: u,
              valid: l
            }) : p && e.ctrlRule.splice(e.ctrlRule.indexOf(p) >>> 0, 1), i[l ? "push" : "unshift"](() => {
              y === "disabled" || y === "enabled" ? this.api.disabled(!l, u) : y === "display" || y === "show" ? this.api.display(l, u) : y === "required" ? (u.forEach((V) => {
                this.api.setEffect(V, "required", l);
              }), l || this.api.clearValidateState(u)) : y === "if" ? this.api.hidden(!l, u) : this.api.hidden(!l, u);
            });
            return;
          }
          if (l) {
            s = !0;
            const V = {
              type: "fragment",
              native: !0,
              __ctrl: !0,
              children: u
            };
            e.ctrlRule.push(V), this.bus.$once("load-start", () => {
              f ? o.prepend(V, f, h) : c || h ? o.append(V, c || e.id, h) : e.root.splice(e.root.indexOf(e.origin) + 1, 0, V);
            });
          } else {
            e.ctrlRule.splice(e.ctrlRule.indexOf(p), 1);
            const V = Oe(p);
            V && V.rm();
          }
        });
      }), i.length && (this.loading ? i.length && this.bus.$once("load-end", () => {
        i.forEach((a) => a());
      }) : i.length && ee(() => {
        i.forEach((a) => a());
      })), this.vm.emit("control", e.origin, this.api), this.effect(e, "control"), s;
    },
    reloadRule(e) {
      return this._reloadRule(e);
    },
    _reloadRule(e) {
      e || (e = this.rules);
      const r = C({}, this.ctxs);
      this.clearNextTick(), this.initData(e), this.fc.rules = e, this.deferSyncValue(() => {
        this.bus.$once("load-end", () => {
          Object.keys(r).filter((n) => this.ctxs[n] === void 0).forEach((n) => this.rmCtx(r[n])), this.$render.clearCacheAll();
        }), this.reloading = !0, this.loadRule(), this.reloading = !1, this.refresh(), this.bus.$emit("reloading", this.api);
      }), this.bus.$off("next-tick", this.nextReload), this.bus.$once("next-tick", this.nextReload), this.bus.$emit("update", this.api);
    },
    //todo 组件生成全部通过 alias
    refresh() {
      this.vm.setupState.refresh();
    }
  });
}
function Fi(t) {
  const e = Or();
  return Object.keys(e).forEach((r) => {
    J(t, r) || (t[r] = e[r]);
  }), t;
}
function Ei(t) {
  const e = t.rule.control || [];
  return m.Object(e) ? [e] : e;
}
function ki(t, e) {
  for (let r = 0; r < t.ctrlRule.length; r++) {
    const n = t.ctrlRule[r];
    if (n.children === e)
      return n;
  }
}
function Gt(t) {
  return !!t.rule.__ctrl;
}
function Ri(t) {
  R(t.prototype, {
    setValue(e, r, n, o) {
      e.deleted || this.options.trim && (m.String(r) && (r = r.trim()), m.String(n) && (n = n.trim()), r === e.rule.value) || (e.rule.value = r, this.changeStatus = !0, this.setFormData(e, n), this.$render.clearCache(e), this.nextRefresh(), this.syncValue(), this.valueChange(e, r), this.vm.emit("change", e.field, r, e.origin, this.api, o || !1), this.effect(e, "value"), this.targetHook(e, "value", { value: r }), this.emitEvent("change", e.field, r, {
        rule: e.origin,
        api: this.api,
        setFlag: o || !1
      }), o && ee(() => {
        ee(() => {
          ee(() => {
            this.api.clearValidateState(e.id);
          });
        });
      }), this.$manager.fieldChange(e, r, n, o));
    },
    onInput(e, r) {
      let n;
      e.input && (this.isQuote(e, n = e.parser.toValue(r, e)) || this.isChange(e, r)) && this.setValue(e, n, r);
    },
    onUpdateValue(e, r) {
      this.deferSyncValue(() => {
        const n = e.getParentGroup(), o = n ? this.subRuleData[n.id] : null, i = {};
        Object.keys(r || {}).forEach((s) => {
          o && J(o, s) ? i[s] = r[s] : J(this.api.form, s) ? this.api.form[s] = r[s] : this.api.top !== this.api && J(this.api.top.form, s) && (this.api.top.form[s] = r[s]);
        }), Object.keys(i).length && this.api.setChildrenFormData(n.rule, i);
      });
    },
    onBaseInput(e, r) {
      this.setFormData(e, r), this.$render.clearCache(e), this.nextRefresh();
    },
    setFormData(e, r) {
      e.modelValue = r;
      const n = e.getParentGroup();
      n && (this.subRuleData[n.id] || (this.subRuleData[n.id] = {}), this.subRuleData[n.id][e.field] = e.rule.value), me(this.formData, e.id, r);
    },
    rmSubRuleData(e) {
      const r = e.getParentGroup();
      r && this.subRuleData[r.id] && delete this.subRuleData[r.id][e.field];
    },
    getFormData(e) {
      return this.formData[e.id];
    },
    syncForm() {
      const e = Se({}), r = this.fields(), n = [];
      this.options.appendValue !== !1 && Object.keys(this.appendData).reduce((o, i) => (r.indexOf(i) === -1 && (o[i] = ae(this.appendData, i)), o), e), r.reduce((o, i) => {
        let s = (this.fieldCtx[i] || []).filter((a) => !this.isIgnore(a))[0];
        return s || (s = this.fieldCtx[i][0], n.push(i)), o[i] = ae(s.rule, "value"), o;
      }, e), this.form = e, this.ignoreFields = n, this.syncValue();
    },
    isIgnore(e) {
      return e.rule.ignore === !0 || (e.rule.ignore === "hidden" || this.options.ignoreHiddenFields) && e.hasHidden();
    },
    appendValue(e) {
      (!e.field || !J(this.appendData, e.field)) && (!m.Undef(e.value) || !this.options.forceCoverValue) || (e.value = this.appendData[e.field], delete this.appendData[e.field]);
    },
    addSubForm(e, r) {
      this.subForm[e.id] = r;
    },
    deferSyncValue(e, r) {
      this.deferSyncFn || (this.deferSyncFn = e), this.deferSyncFn.sync || (this.deferSyncFn.sync = r), M(e), this.deferSyncFn === e && (this.deferSyncFn = null, e.sync && this.syncForm());
    },
    syncValue() {
      if (this.deferSyncFn)
        return this.deferSyncFn.sync = !0;
      const e = {};
      Object.keys(this.form).forEach((r) => {
        this.ignoreFields.indexOf(r) === -1 && (e[r] = this.form[r]);
      }), this.vm.setupState.updateValue(e);
    },
    isChange(e, r) {
      const n = this.getFormData(e);
      if (n === r)
        return !1;
      const o = typeof n;
      return o === typeof r && (o === "string" || o === "boolean" || o === "number" && Number.isFinite(n) && Number.isFinite(r)) ? !0 : JSON.stringify(n, Jt) !== JSON.stringify(r, Jt);
    },
    isQuote(e, r) {
      return (r instanceof Function || m.Object(r) || Array.isArray(r)) && r === e.rule.value;
    },
    refreshUpdate(e, r, n, o) {
      if (m.Function(e.rule.update)) {
        const i = M(() => e.rule.update(r, e.origin, this.api, {
          origin: n || "change",
          linkField: o
        }));
        if (i === void 0) return;
        e.rule.hidden = i === !0;
      }
    },
    valueChange(e, r) {
      this.refreshRule(e, r), this.bus.$emit("change-" + e.field, r);
    },
    refreshRule(e, r, n, o) {
      this.refreshControl(e) && (this.$render.clearCacheAll(), this.loadRule(), this.bus.$emit("update", this.api), this.refresh()), this.refreshUpdate(e, r, n, o);
    },
    appendLink(e) {
      const r = e.rule.link;
      m.trueArray(r) && r.forEach((n) => {
        const o = () => this.refreshRule(e, e.rule.value, "link", n);
        this.bus.$on("change-" + n, o), e.linkOn.push(() => this.bus.$off("change-" + n, o));
      });
    },
    fields() {
      return Object.keys(this.fieldCtx);
    }
  });
}
function Jt(t, e) {
  return typeof e == "function" ? "" + e : e;
}
const Je = {
  init(t) {
  },
  toFormValue(t, e) {
    return t;
  },
  toValue(t, e) {
    return t;
  },
  mounted(t) {
  },
  render(t, e) {
    return e.$handle.fc.renderDriver && e.$handle.fc.renderDriver.defaultRender ? e.$handle.fc.renderDriver.defaultRender(e, t) : e.$render.defaultRender(e, t);
  },
  preview(t, e) {
    return e.$handle.fc.renderDriver && e.$handle.fc.renderDriver.defaultPreview ? e.$handle.fc.renderDriver.defaultPreview(e, t) : this.render(t, e);
  },
  mergeProp(t) {
  }
}, Ai = ["field", "value", "vm", "template", "name", "config", "control", "inject", "sync", "payload", "optionsTo", "update", "slotUpdate", "computed", "component", "cache"], Ge = Symbol("oldValue"), ji = ["$condition", "$variableVal", "$val", "$form", "$scope", "$group", "$rule"], Mi = ["$formulas", "$form", "$scope", "$group", "$rule", "$api"], nt = /* @__PURE__ */ new Map(), Ii = 1e3;
function Kt(t, e) {
  const r = t.join(",") + "|" + e;
  let n = nt.get(r);
  return n || (nt.size >= Ii && nt.clear(), n = new Function(...t, e), nt.set(r, n)), n;
}
function Pi(t) {
  R(t.prototype, {
    //computed 更新原先各自 setTimeout(0),N 个字段同时联动就会拆成 N 个宏任务,
    //Vue 在任务之间各 flush 一次,render 被放大 N 倍。
    //这里改成按入队顺序在同一个宏任务里串行执行,并在 flush 期间继续吞掉级联入队,
    //相对顺序与原先一致,只是把中间多余的渲染合并掉。
    scheduleComputedUpdate(e) {
      (this._computedQueue || (this._computedQueue = [])).push(e), !(this._computedFlushing || this._computedScheduled) && (this._computedScheduled = !0, setTimeout(() => {
        this._computedScheduled = !1, this._computedFlushing = !0;
        try {
          const r = this._computedQueue || [];
          this._computedQueue = [];
          for (let n = 0; n < r.length; n++)
            M(r[n]), this._computedQueue && this._computedQueue.length && (r.push(...this._computedQueue), this._computedQueue = []);
        } finally {
          this._computedFlushing = !1;
        }
      }));
    },
    getCtx(e) {
      return this.getFieldCtx(e) || this.getNameCtx(e)[0] || this.ctxs[e];
    },
    getCtxs(e) {
      return this.fieldCtx[e] || this.nameCtx[e] || (this.ctxs[e] ? [this.ctxs[e]] : []);
    },
    setIdCtx(e, r, n) {
      const o = `${n}Ctx`;
      this[o][r] ? this[o][r].push(e) : this[o][r] = [e];
    },
    rmIdCtx(e, r, n) {
      const o = `${n}Ctx`, i = this[o][r];
      if (!i) return !1;
      const s = i.splice(i.indexOf(e) >>> 0, 1).length > 0;
      return i.length || delete this[o][r], s;
    },
    getFieldCtx(e) {
      return (this.fieldCtx[e] || [])[0];
    },
    getNameCtx(e) {
      return this.nameCtx[e] || [];
    },
    setCtx(e) {
      let { id: r, field: n, name: o, rule: i } = e;
      this.ctxs[r] = e, o && this.setIdCtx(e, o, "name"), e.input && (this.setIdCtx(e, n, "field"), this.setFormData(e, e.parser.toFormValue(i.value, e)), this.isMounted && !this.reloading && this.vm.emit("change", e.field, i.value, e.origin, this.api, !1, !0));
    },
    getParser(e) {
      const r = this.fc.parsers, n = this.fc.renderDriver;
      if (n) {
        const o = n.parsers || {}, i = o[e.originType] || o[pe(e.type)] || o[e.trueType];
        if (i)
          return i;
      }
      return r[e.originType] || r[pe(e.type)] || r[e.trueType] || Je;
    },
    bindParser(e) {
      e.setParser(this.getParser(e));
    },
    getType(e) {
      const r = this.fc.CreateNode.aliasMap, n = r[e] || r[pe(e)] || e;
      return pe(n);
    },
    noWatch(e) {
      this.noWatchFn || (this.noWatchFn = e), M(e), this.noWatchFn === e && (this.noWatchFn = null);
    },
    watchCtx(e) {
      const r = hr().filter((s) => s[0] !== "_" && s[0] !== "$" && Ai.indexOf(s) === -1), n = {}, o = (s, a, l) => (u, f) => {
        let c = a.value;
        if (!this.isBreakWatch()) {
          if (l && e.parser.loadChildren === !1) {
            this.$render.clearCache(e), this.nextRefresh();
            return;
          }
          if (this.watching = !0, ee(() => {
            this.targetHook(e, "watch", { key: s, oldValue: f, newValue: c });
          }), s === "hidden" && !!c != !!f && ee(() => {
            this.targetHook(e, "hidden", { value: c });
          }), s === "ignore" && e.input || s === "hidden" && (e.rule.ignore === "hidden" || this.options.ignoreHiddenFields))
            this.syncForm();
          else if (s === "link") {
            e.link();
            return;
          } else ["props", "on", "deep"].indexOf(s) > -1 ? (this.parseInjectEvent(e.rule, c || {}), s === "props" && e.input && this.setFormData(e, e.parser.toFormValue(e.rule.value, e))) : s === "emit" ? this.parseEmit(e) : ["prefix", "suffix"].indexOf(s) > -1 ? c && this.loadFn(c, e.rule) : s === "type" ? (e.updateType(), this.bindParser(e)) : l && (m.Function(f) && (f = e.getPending("children", [])), m.Function(c) && (c = e.loadChildrenPending()), this.updateChildren(e, c, f));
          this.$render.clearCache(e), this.refresh(), this.watching = !1;
        }
      }, i = (s, a) => {
        if (n[s]) return;
        n[s] = !0;
        const l = e.refRule[s], u = s === "children", f = o(s, l, u);
        e.watch.push(ie(u ? () => m.Function(l.value) ? l.value : [...l.value || []] : () => l.value, f, { deep: !u, sync: u })), a && f(l.value, void 0);
      };
      if (r.forEach((s) => {
        e.refRule[s] = ae(e.rule, s), J(e.rule, s) && i(s);
      }), e.watch.push(ie(() => Object.keys(e.rule).join("|"), () => {
        r.forEach((s) => {
          !n[s] && J(e.rule, s) && i(s, !0);
        });
      })), e.refRule.__$title = Re(() => {
        let s = (typeof e.rule.title == "object" ? e.rule.title.title : e.rule.title) || "";
        if (s) {
          const a = s.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
          a && (s = this.api.t(a[1]));
        }
        return s;
      }), e.refRule.__$info = Re(() => {
        let s = (typeof e.rule.info == "object" ? e.rule.info.info : e.rule.info) || "";
        if (s) {
          const a = s.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
          a && (s = this.api.t(a[1]));
        }
        return s;
      }), e.refRule.__$validate = Re(() => {
        const s = (a) => {
          var u, f;
          const l = a.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
          return l ? this.api.t(l[1], { title: (f = (u = e.refRule) == null ? void 0 : u.__$title) == null ? void 0 : f.value }) : a;
        };
        return he(e.rule.validate).map((a) => {
          const l = C({}, a);
          if (l.message && (l.message = s(l.message)), m.Function(l.validator)) {
            const u = e;
            l.validator = function(...f) {
              return a.validator.call({
                that: this,
                id: u.id,
                field: u.field,
                rule: u.rule,
                api: u.$handle.api
              }, ...f);
            };
          }
          if (l.adapter) {
            if (typeof l.error == "object") {
              const u = C({}, l.error);
              Object.keys(u).forEach((f) => {
                u[f] = s(u[f]);
              }), l.error = u;
            }
            return this.adapterValidate(l, e);
          }
          return l;
        });
      }), e.input) {
        const s = ae(e.rule, "value");
        e.watch.push(ie(() => s.value, () => {
          let a = e.parser.toFormValue(s.value, e);
          this.isChange(e, a) && this.setValue(e, s.value, a, !0);
        }));
      }
      this.bus.$once("load-end", () => {
        let s = e.rule.computed;
        s && (typeof s != "object" && (s = { value: s }), Object.keys(s).forEach((a) => {
          const l = Re(() => {
            const f = s[a];
            if (!f) return;
            const c = this.compute(e, f);
            return (f.linkage || f.linkageVariable) && c === Ge ? Ge : c;
          }), u = (f) => {
            a === "value" ? this.onInput(e, f) : a[0] === "$" ? this.api.setEffect(e.id, a, f) : Ye(e.rule, a, f);
          };
          (a === "value" ? [void 0, null, ""].indexOf(e.rule.value) > -1 : l.value !== le(e.rule, a)) && u(l.value), e.watch.push(ie(l, (f) => {
            f !== Ge && this.scheduleComputedUpdate(() => u(f));
          }, { deep: !0 }));
        }));
      }), this.watchEffect(e);
    },
    adapterValidate(e, r) {
      const n = (o, i) => {
        if ((e.beforeValidate && M(() => e.beforeValidate({
          value: o,
          api: this.api,
          validate: e,
          rule: r.rule
        }))) === !1)
          i();
        else {
          const a = this.validator(r, o, e);
          if (a) {
            let l = "";
            typeof e.error == "object" && (l = e.error[a] || e.error.default), !l && typeof e.message == "string" && (l = e.message), l || (l = this.getValidateMessage(r, { key: a, rule: e[a] })), i(l);
          } else if (e.validator) {
            const l = e.validator && M(() => e.validator(o, i));
            l && m.Function(l.then) && l.then(() => i()).catch((u) => i(u));
          } else
            i();
        }
      };
      return this.$manager.adapterValidate({
        required: e.required,
        message: e.message,
        trigger: e.trigger
      }, n);
    },
    getValidateMessage(e, r) {
      var o, i;
      const n = Array.isArray(r.rule) ? r.rule.join(",") : "" + r.rule;
      return this.api.t(r.key === "required" ? r.key : "validate." + r.key, {
        [r.key]: n,
        title: (i = (o = e.refRule) == null ? void 0 : o.__$title) == null ? void 0 : i.value
      });
    },
    validator(e, r, n) {
      if (m.empty(r))
        return n.required ? "required" : void 0;
      for (const [i, s] of Object.entries(n))
        switch (i) {
          case "len":
          case "maxLen":
          case "minLen":
            const a = (y) => i === "len" ? y === s : i === "maxLen" ? y <= s : y >= s;
            if (Array.isArray(r)) {
              if (!a(r.length))
                return i;
            } else {
              if (typeof r == "object")
                return i;
              if (!a(("" + r).length))
                return i;
            }
            break;
          case "pattern":
            if (!(typeof s == "string" ? new RegExp(s) : s).test("" + r))
              return i;
            break;
          case "uppercase":
            if (s && (typeof r != "string" || !/^[A-Z]*$/.test(r)))
              return i;
            break;
          case "lowercase":
            if (s && (typeof r != "string" || !/^[a-z]*$/.test(r)))
              return i;
            break;
          case "min":
          case "max":
          case "positive":
          case "negative":
          case "integer":
          case "number":
            const u = Number(r);
            if (Number.isNaN(u) || i === "min" && u < s || i === "max" && u > s || i === "positive" && u <= 0 || i === "negative" && u >= 0 || i === "integer" && !Number.isInteger(u))
              return i;
            break;
          case "equal":
            if (r !== s)
              return i;
            break;
          case "enum":
            if (Array.isArray(s) && !s.includes(r))
              return i;
            break;
          case "hasKeys":
            if (typeof r != "object" || Array.isArray(s) && s.some((y) => !(y in r)))
              return i;
            break;
          case "email":
            if (!/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test("" + r))
              return i;
            break;
          case "url":
            if (!new RegExp(
              "^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
              "i"
            ).test("" + r))
              return i;
            break;
          case "ip":
            if (!/^(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}$/.test("" + r))
              return i;
            break;
          case "phone":
            if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test("" + r))
              return i;
            break;
          case "computed":
            if (!this.compute(e, s))
              return i;
            break;
        }
    },
    compute(e, r) {
      let n;
      if (typeof r == "object") {
        const o = e.getParentGroup(), i = (a) => {
          if (a = Array.isArray(a) ? { mode: "AND", group: a } : a, !m.trueArray(a.group))
            return !0;
          const l = a.mode === "OR";
          let u = !0;
          for (let f = 0; f < a.group.length; f++) {
            const c = a.group[f];
            let h, p = null, y = null;
            if (c.variable)
              y = this.fc.getLoadData(c.variable);
            else if (c.field)
              p = qt(c.field || "");
            else if (!c.mode)
              return !0;
            let V = c.compare;
            if (V && (V = qt(V || "")), c.mode ? h = i(c) : We[c.condition] ? m.Function(c.handler) ? h = M(() => c.handler(this.api, e.rule)) : h = M(() => Kt(ji, `with($form){with($scope){with(this){with($group){ return $condition['${c.condition}'](${c.variable ? "$variableVal" : p}, ${V || "$val"}); }}}}`).call(this.api.form, We, y, c.value, this.api.top.form, this.api.top === this.api.scope ? {} : this.api.scope.form, o ? this.subRuleData[o.id] || {} : {}, e.rule)) : h = !1, l && h)
              return !0;
            l || (u = u && h);
          }
          return l ? !1 : u;
        };
        let s = i(r);
        return s = r.invert === !0 ? !s : s, r.linkage ? s ? M(() => this.computeValue(r.linkage, e, o), void 0) : Ge : r.linkageVariable ? s ? M(() => this.fc.getLoadData(r.linkageVariable), void 0) : Ge : s;
      } else if (m.Function(r))
        n = () => r(this.api.form, this.api, e.rule);
      else {
        const o = e.getParentGroup();
        n = () => this.computeValue(r, e, o);
      }
      return M(n, void 0);
    },
    computeValue(e, r, n) {
      const o = this, i = Object.keys(this.fc.formulas).reduce((s, a) => (s[a] = function(...l) {
        return o.fc.formulas[a].call({
          that: this,
          rule: r.rule,
          api: o.api,
          fc: o.fc
        }, ...l);
      }, s), {});
      return M(() => Kt(Mi, `with($form){with($scope){with(this){with($group){with($formulas){ return ${e} }}}}}`).call(this.api.form, i, this.api.top.form, this.api.top === this.api.scope ? {} : this.api.scope.form, n ? this.subRuleData[n.id] || {} : {}, r.rule, this.api), void 0);
    },
    updateChildren(e, r, n) {
      this.deferSyncValue(() => {
        n && n.forEach((o) => {
          (r || []).indexOf(o) === -1 && o && !m.String(o) && o.__fc__ && o.__fc__.parent === e && this.rmCtx(o.__fc__);
        }), m.trueArray(r) && (this.loadChildren(r, e), this.bus.$emit("update", this.api));
      });
    },
    rmSub(e) {
      m.trueArray(e) && e.forEach((r) => {
        r && r.__fc__ && this.rmCtx(r.__fc__);
      });
    },
    rmCtx(e) {
      if (e.deleted) return;
      const { id: r, field: n, input: o, name: i } = e;
      He(this.ctxs, r), He(this.formData, r), He(this.subForm, r), He(this.vm.setupState.ctxInject, r);
      const s = e.getParentGroup();
      s && this.subRuleData[s.id] && He(this.subRuleData[s.id], n), e.group && He(this.subRuleData, r), o && this.rmIdCtx(e, n, "field"), i && this.rmIdCtx(e, i, "name"), o && !J(this.fieldCtx, n) && He(this.form, n), this.deferSyncValue(() => {
        if (!this.reloading) {
          if (e.parser.loadChildren !== !1) {
            const l = e.getPending("children", e.rule.children);
            m.trueArray(l) && l.forEach((u) => u && u.__fc__ && this.rmCtx(u.__fc__));
          }
          e.root === this.rules && this.vm.setupState.renderRule();
        }
      }, o);
      const a = this.sort.indexOf(r);
      return a > -1 && this.sort.splice(a, 1), this.$render.clearCache(e), e.delete(), this.effect(e, "deleted"), this.targetHook(e, "deleted"), o && !this.fieldCtx[n] && this.vm.emit("remove-field", n, e.rule, this.api), e.rule.__ctrl || this.vm.emit("remove-rule", e.rule, this.api), e;
    }
  });
}
function Ti(t) {
  R(t.prototype, {
    mounted() {
      const e = () => {
        this.isMounted = !0, this.lifecycle("mounted");
      };
      this.pageEnd ? e() : this.bus.$once("page-end", e);
    },
    lifecycle(e) {
      this.fc.targetFormDriver(e, this.api, this.fc), this.vm.emit(e, this.api), this.emitEvent(e, this.api);
    },
    emitEvent(e, ...r) {
      const n = this.options[e] || this.options[pe("on-" + e)];
      if (n) {
        const o = Ve(n);
        m.Function(o) && M(() => o(...r));
      }
      this.bus.$emit(e, ...r);
    },
    targetHook(e, r, n) {
      var l, u, f, c;
      let o = (u = (l = e.prop) == null ? void 0 : l.hook) == null ? void 0 : u[r], i = (h, p) => {
        h && (h = Array.isArray(h) ? h : [h], h.forEach((y) => {
          M(() => y(ce(C({ args: Object.values(n || {}) }, n || {}), { self: e.rule, rule: e.rule, parent: p == null ? void 0 : p.rule, $f: this.api, api: this.api, option: this.vm.props.option })));
        }));
      };
      i(o);
      let s = "deep" + or(r), a = e.parent;
      for (; a; ) {
        let h = (c = (f = a.prop) == null ? void 0 : f.hook) == null ? void 0 : c[s];
        i(h, a), a = a.parent;
      }
    }
  });
}
function Li(t) {
  R(t.prototype, {
    useProvider() {
      const e = this.fc.providers;
      Object.keys(e).forEach((r) => {
        let n = e[r];
        m.Function(n) && (n = n(this.fc)), n._c = Ni(n), this.onEffect(n, r), this.providers[r] = n;
      });
    },
    onEffect(e, r) {
      const n = [];
      (e._c || ["*"]).forEach((o) => {
        const i = o === "*" ? "*" : this.getType(o);
        n.indexOf(i) > -1 || (n.push(i), this.bus.$on(`p:${r || e.name}:${i}:${e.input ? 1 : 0}`, (s, a) => {
          e[s] && e[s](...a);
        }));
      }), e._used = n;
    },
    watchEffect(e) {
      let r = {
        required: () => {
          var n, o;
          return (J(e.rule, "$required") ? e.rule.$required : (o = (n = e.rule) == null ? void 0 : n.effect) == null ? void 0 : o.required) || !1;
        }
      };
      Object.keys(e.rule.effect || {}).forEach((n) => {
        r[n] = () => e.rule.effect[n];
      }), Object.keys(e.rule).forEach((n) => {
        n[0] === "$" && (r[n.substr(1)] = () => e.rule[n]);
      }), Object.keys(r).forEach((n) => {
        e.watch.push(ie(r[n], (o) => {
          this.effect(e, "watch", { [n]: o });
        }, { deep: !0 }));
      });
    },
    ruleEffect(e, r, n) {
      this.emitEffect({
        rule: e,
        input: !!e.field,
        type: this.getType(e.type)
      }, r, n);
    },
    effect(e, r, n) {
      this.emitEffect({
        rule: e.rule,
        input: e.input,
        type: e.trueType,
        ctx: e,
        custom: n
      }, r);
    },
    getEffect(e, r) {
      if (J(e, "$" + r))
        return e["$" + r];
      if (J(e, "effect") && J(e.effect, r))
        return e.effect[r];
    },
    emitEffect({ ctx: e, rule: r, input: n, type: o, custom: i }, s, a) {
      if (!o || ["fcFragment", "fragment"].indexOf(o) > -1) return;
      const l = i || Object.keys(r).reduce((u, f) => (f[0] === "$" && (u[f.substr(1)] = r[f]), u), C({}, r.effect || {}));
      Object.keys(l).forEach((u) => {
        const f = this.providers[u];
        if (!f || f.input && !n) return;
        let c;
        if (!f._c)
          c = "*";
        else if (f._used.indexOf(o) > -1)
          c = o;
        else
          return;
        const h = C({ value: l[u], getValue: () => this.getEffect(r, u) }, a || {});
        e && (h.getProp = () => e.effectData(u), h.clearProp = () => e.clearEffectData(u), h.mergeProp = (p) => je(h.getProp(), [p]), h.id = e.id), this.bus.$emit(`p:${u}:${c}:${f.input ? 1 : 0}`, s, [h, r, this.api]);
      });
    }
  });
}
function Bi(t) {
  return t.filter(function(e, r, n) {
    return n.indexOf(e, 0) === r;
  });
}
function Ni(t) {
  const e = t.components;
  if (Array.isArray(e)) {
    const r = Bi(e.filter((n) => n !== "*"));
    return r.length ? r : !1;
  } else return m.String(e) ? [e] : !1;
}
function Ee(t) {
  _r(this, {
    options() {
      return t.options.value || {};
    },
    bus() {
      return t.bus;
    },
    preview() {
      return t.vm.props.preview != null ? t.vm.props.preview : t.vm.setupState.parent && t.vm.setupState.parent.props.preview != null ? t.vm.setupState.parent.props.preview : t.options.value.preview || !1;
    }
  }), R(this, {
    fc: t,
    vm: t.vm,
    watching: !1,
    loading: !1,
    reloading: !1,
    noWatchFn: null,
    deferSyncFn: null,
    isMounted: !1,
    formData: Se({}),
    subRuleData: Se({}),
    subForm: {},
    form: Se({}),
    appendData: {},
    ignoreFields: [],
    providers: {},
    cycleLoad: null,
    loadedId: 1,
    nextTick: null,
    changeStatus: !1,
    pageEnd: !0,
    nextReload: () => {
      this.lifecycle("reload");
    }
  }), this.initData(t.rules), this.$manager = new t.manager(this), this.$render = new kt(this), this.api = t.extendApiFn.reduce((e, r) => {
    const n = M(() => r(e, this));
    return n && n !== e && R(e, n), e;
  }, $i(this));
}
R(Ee.prototype, {
  initData(t) {
    R(this, {
      ctxs: {},
      fieldCtx: {},
      nameCtx: {},
      sort: [],
      rules: t
    });
  },
  init() {
    this.updateAppendData(), this.useProvider(), this.usePage(), this.loadRule(), this.$manager.__init(), this.lifecycle("created");
  },
  updateAppendData() {
    this.appendData = C(C(C({}, De(this.options.formData || {})), this.fc.vm.props.modelValue || {}), this.appendData);
  },
  isBreakWatch() {
    return this.loading || this.noWatchFn || this.reloading;
  },
  globalBeforeFetch(t) {
    return new Promise((e, r) => {
      const n = this.options.beforeFetch && M(() => this.options.beforeFetch(t, { api: this.api }));
      n && m.Function(n.then) ? n.then(e).catch(r) : e();
    });
  },
  beforeFetch(t) {
    return new Promise((e, r) => {
      const n = t && t.beforeFetch && M(() => t.beforeFetch(t, { api: this.api }));
      n && m.Function(n.then) ? n.then(e).catch(r) : n === !1 ? r() : e();
    }).then(() => this.globalBeforeFetch(t));
  },
  beforeSubmit(t) {
    return new Promise((e, r) => {
      const n = this.options.beforeSubmit && M(() => this.options.beforeSubmit(t, { api: this.api }));
      n && m.Function(n.then) ? n.then(e).catch(r) : n === !1 ? r() : e();
    });
  }
});
wi(Ee);
Oi(Ee);
Si(Ee);
Vi(Ee);
Ri(Ee);
Pi(Ee);
Ti(Ee);
Li(Ee);
const Yi = "fcFragment", dt = Fe({
  name: Yi,
  inheritAttrs: !1,
  props: ["vnode"],
  render() {
    return this.vnode;
  }
});
function xi(t) {
  return Object.keys(t).map((e) => {
    const r = t[e], n = Gr(e);
    if (n)
      return [
        n,
        r.value,
        r.arg,
        r.modifiers
      ];
  }).filter((e) => !!e);
}
function Qt(t, e) {
  let r = t.directives;
  return r ? (Array.isArray(r) || (r = [r]), zr(e, r.reduce((n, o) => n.concat(xi(o)), []))) : e;
}
function Ui() {
  const t = {};
  function e(r) {
    this.vm = r.vm, this.handle = r;
  }
  return R(e.prototype, {
    make(r, n, o) {
      return Qt(n, this.h(r, Yt(n), o));
    },
    makeComponent(r, n, o) {
      try {
        return Qt(n, D(r, Yt(n), o));
      } catch (i) {
        return console.error(i), D("");
      }
    },
    h(r, n, o) {
      const s = (this.vm || $t()).appContext.config.isNativeTag(r), a = this.handle.fc.prop.components[r];
      !a && s && delete n.formCreateInject;
      try {
        return D(a || (s ? r : q(r)), n, o);
      } catch (l) {
        return console.error(l), D("");
      }
    },
    aliasMap: t
  }), R(e, {
    aliasMap: t,
    alias(r, n) {
      t[r] = n;
    },
    use(r) {
      Object.keys(r).forEach((n) => {
        const o = Ke(n), i = sr(n).toLocaleLowerCase(), s = r[n];
        e.alias(n, s), [n, o, i].forEach((a) => {
          e.prototype[a] = function(l, u) {
            return this.make(t[n] || a, l, u);
          };
        });
      });
    }
  }), e;
}
function qi(t) {
  class e extends Vr {
  }
  return Object.assign(e.prototype, t), e;
}
function Vr(t) {
  R(this, {
    $handle: t,
    vm: t.vm,
    options: {},
    ref: "fcForm",
    mergeOptionsRule: {
      normal: ["form", "row", "info", "submitBtn", "resetBtn"]
    }
  }), this.updateKey(), this.init();
}
R(Vr.prototype, {
  __init() {
    this.$render = this.$handle.$render, this.$r = (...t) => this.$render.renderRule(...t);
  },
  updateKey() {
    this.key = at();
  },
  //TODO interface
  init() {
  },
  update() {
  },
  beforeRender() {
  },
  form() {
    return this.vm.refs[this.ref];
  },
  adapterValidate(t, e) {
    return t.validator = (r, n, o) => e(n, o), t;
  },
  getSlot(t) {
    const e = (r) => {
      if (r) {
        let n = r.slots[t];
        return n || e(r.setupState.parent);
      }
    };
    return e(this.vm);
  },
  mergeOptions(t, e) {
    return Ae(t.map((r) => this.tidyOptions(r)), e, this.mergeOptionsRule);
  },
  updateOptions(t) {
    this.$handle.fc.targetFormDriver("updateOptions", t, { handle: this.$handle, api: this.$handle.api }), this.options = this.mergeOptions([t], this.getDefaultOptions()), this.update();
  },
  tidyOptions(t) {
    return t;
  },
  tidyRule(t) {
  },
  mergeProp(t) {
  },
  getDefaultOptions() {
    return {};
  },
  fieldChange(t, e, r, n) {
  },
  render(t) {
  }
});
const Hi = function(t) {
  const e = {
    name: "loadData",
    _fn: [],
    loaded(r, n, o) {
      this.deleted(r), ee(() => {
        let i = he(r.getValue());
        const s = [];
        i.forEach((a) => {
          if (a && (a.attr || a.template || a.handler)) {
            let l = (c) => {
              let h;
              n && n.__fc__ && (h = n.__fc__.getParentGroup());
              let p;
              a.template ? p = t.$handle.loadStrVar(a.template, c, h ? { rule: n, value: t.$handle.subRuleData[h.id] || {} } : null) : a.handler && m.Function(a.handler) ? p = a.handler(c, n, o) : p = t.$handle.loadStrVar(`{{${a.attr}}}`, c, h ? { rule: n, value: t.$handle.subRuleData[h.id] || {} } : null), (p == null || p === "") && a.default != null && (p = a.default), a.copy !== !1 && (p = De(p));
              const y = a.modify ? n : r.getProp();
              a.to === "child" ? y.children ? y.children[0] = p : y.children = [p] : Ye(y, a.to || "options", p), o.sync(n);
            }, u = (c) => l(c);
            const f = t.watchLoadData(u);
            l = Le(l, a.wait || 300), a.watch !== !1 ? s.push(f) : f();
          }
        }), this._fn[r.id] = s;
      });
    },
    deleted(r) {
      this._fn[r.id] && (this._fn[r.id].forEach((n) => {
        n();
      }), delete this._fn[r.id]), r.clearProp();
    }
  };
  return e.watch = e.loaded, e;
}, Wi = function(t) {
  const e = {
    name: "t",
    _fn: [],
    loaded(r, n, o) {
      this.deleted(r);
      let i = r.getValue() || {};
      const s = [];
      Object.keys(i).forEach((a) => {
        const l = i[a];
        if (l) {
          const u = typeof l == "object";
          let f = (p) => {
            let y = t.t(u ? l.attr : l, u ? l.params : null, p);
            const V = u && l.modify ? n : r.getProp();
            a === "child" ? V.children ? V.children[0] = y : V.children = [y] : Ye(V, a, y), o.sync(n);
          }, c = (p) => f(p);
          const h = t.watchLoadData(c);
          f = Le(f, l.wait || 300), l.watch !== !1 ? s.push(h) : h();
        }
      }), this._fn[r.id] = s;
    },
    deleted(r) {
      this._fn[r.id] && (this._fn[r.id].forEach((n) => {
        n();
      }), delete this._fn[r.id]), r.clearProp();
    }
  };
  return e.watch = e.loaded, e;
}, Fr = {
  name: "componentValidate",
  load(t, e, r) {
    let n = t.getValue();
    if (!n || n.method === !1)
      t.clearProp(), r.clearValidateState([e.field]);
    else {
      m.Object(n) || (n = { method: n });
      const o = n.method, i = ce(C({}, n), {
        validator(...s) {
          const a = Oe(e);
          if (a)
            return r.exec(a.id, m.String(o) ? o : "formCreateValidate", ...s, {
              attr: t,
              rule: e,
              api: r
            });
        }
      });
      delete i.method, t.getProp().validate = [i];
    }
  },
  watch(...t) {
    Fr.load(...t);
  }
}, zi = function(t) {
  function e(o) {
    return m.String(o) && (o = {
      action: o,
      to: "options"
    }), o;
  }
  function r(o, i, s) {
    let a = o.value;
    n.deleted(o), m.Function(a) && (a = a(i, s)), a = e(a);
    const l = (c) => {
      c === void 0 ? o.clearProp() : Ye(o.getProp(), a.to || "options", c), c != null && a && a.key && t.$handle.options.globalData[a.key] && t.fetchCache.set(t.$handle.options.globalData[a.key], { status: !0, data: c }), s.sync(i);
    };
    if (!a || !a.action && !a.key) {
      l(void 0);
      return;
    }
    a = De(a), a.to || (a.to = "options");
    const u = a.onError, f = () => {
      if (!o.getValue())
        return o.clearProp(), s.sync(i), !0;
    };
    n._fn[o.id] = t.watchLoadData(Le((c, h) => {
      if (h && a.watch === !1)
        return n._fn[o.id]();
      if (a.key) {
        t.targetRule = i;
        const V = c("$globalData." + a.key);
        if (delete t.targetRule, V) {
          if (f()) return;
          l(V);
        }
        return;
      }
      const p = t.$handle.loadFetchVar(De(a), c, i), y = ce(C({
        headers: {}
      }, p), {
        onSuccess(V, O) {
          if (f()) return;
          let T = (L) => O ? L : J(L, "data") ? L.data : L;
          const j = Ve(p.parse);
          m.Function(j) ? T = j : j && m.String(j) && (T = (L) => le(L, j)), st(T(V, i, s)).then((L) => {
            l(L);
          });
        },
        onError(V) {
          l(void 0), !f() && (u || ((O) => St(O.message || "fetch fail " + p.action)))(V, i, s);
        }
      });
      t.$handle.beforeFetch(y, { rule: i, api: s }).then(() => {
        if (m.Function(p.action)) {
          st(p.action(i, s)).then((V) => {
            y.onSuccess(V, !0);
          }).catch((V) => {
            y.onError(V);
          });
          return;
        }
        M(() => t.create.fetch(y, { inject: o, rule: i, api: s }));
      }).catch((V) => {
      });
    }, a.wait || 600));
  }
  const n = {
    name: "fetch",
    _fn: [],
    loaded(...o) {
      r(...o);
    },
    watch(...o) {
      r(...o);
    },
    deleted(o) {
      this._fn[o.id] && (this._fn[o.id](), delete this._fn[o.id]), o.clearProp();
    }
  };
  return n;
}, Gi = {
  fetch: zi,
  loadData: Hi,
  t: Wi,
  componentValidate: Fr
}, Ji = "html", Ki = {
  name: Ji,
  loadChildren: !1,
  render(t, e) {
    return e.prop.props.innerHTML = t.default(), e.vNode.make(e.prop.props.tag || "div", e.prop);
  },
  renderChildren(t) {
    return {
      default: () => t.filter((e) => m.String(e)).join("")
    };
  }
};
function Qi(t) {
  t = t + "=";
  const r = decodeURIComponent(document.cookie).split(";");
  for (let n = 0; n < r.length; n++) {
    let o = r[n];
    for (; o.charAt(0) === " "; )
      o = o.substring(1);
    if (o.indexOf(t) === 0) {
      o = o.substring(t.length, o.length);
      try {
        return JSON.parse(o);
      } catch (i) {
        return o;
      }
    }
  }
  return null;
}
function Zi(t) {
  const e = localStorage.getItem(t);
  if (e)
    try {
      return JSON.parse(e);
    } catch (r) {
      return e;
    }
  return null;
}
function Xi(t) {
  const e = sessionStorage.getItem(t);
  if (e)
    try {
      return JSON.parse(e);
    } catch (r) {
      return e;
    }
  return null;
}
function Rt(t, e) {
  if (!e)
    return null;
  const r = e.split(".");
  let n = t(r.shift());
  return r.length ? n == null ? null : le(n, r) : n;
}
function es(t) {
  return Rt(Qi, t);
}
function ts(t) {
  return Rt(Zi, t);
}
function rs(t) {
  return Rt(Xi, t);
}
const ns = {
  en: {
    required: "{title} is required",
    validate: {
      url: "{title} is not a valid url",
      email: "{title} is not a valid email",
      ip: "{title} {title} is not a valid ip",
      phone: "{title} {title} is not a valid phone",
      pattern: "{title} does not match pattern {pattern}",
      uppercase: "{title} must be all uppercase",
      lowercase: "{title} must be all lowercased",
      positive: "{title} is not a positive number",
      negative: "{title} is not a negative number",
      equal: "{title} is not equal to {equal}",
      min: "{title} cannot be less than {min}",
      max: "{title} cannot be greater than {max}",
      enum: "{title} must be one of {enum}",
      hasKeys: "{title} does not contain required fields {hasKeys}",
      minLen: "{title} must be at least {minLen}",
      maxLen: "{title} cannot be longer than {maxLen}",
      len: "{title} must be exactly {len}",
      integer: "{title} is not an integer",
      number: "{title} is not an number"
    }
  },
  "zh-cn": {
    required: "{title}不能为空",
    validate: {
      url: "{title}不是有效的 url 地址",
      email: "{title}不是有效的邮箱地址",
      ip: "{title}不是有效的 IP 地址",
      phone: "{title}不是正确的手机号",
      pattern: "{title}必须匹配 {pattern}",
      uppercase: "{title}必须全大写",
      lowercase: "{title}必须全小写",
      positive: "{title}不是正数",
      negative: "{title}不是负数",
      equal: "{title}必须等于 {equal}",
      min: "{title}必须大于等于 {min}",
      max: "{title}必须小于等于 {max}",
      enum: "{title}必须是 {enum} 之一",
      hasKeys: "{title}必须包含 {hasKeys} 字段",
      minLen: "{title}长度必须大于 {minLen}",
      maxLen: "{title}长度必须小于 {maxLen}",
      len: "{title}长度必须为 {len}",
      integer: "{title}必须为整数",
      number: "{title}必须为数字"
    }
  }
};
function is(t, e) {
  let r;
  return arguments.length === 2 ? (r = arguments[1], e = r[t]) : r = arguments[2], { id: e, prop: r };
}
function ht() {
  return is("name", ...arguments);
}
function ss(t) {
  const e = t.key || [], r = t.array || [], n = t.normal || [];
  dr.push(...e), Dt.push(...r), Vt.push(...n), Cr([...e, ...r, ...n]);
}
let os = 1;
const $e = {}, Zt = Symbol("defValue");
function Er(t) {
  const e = {
    [dt.name]: dt
  }, r = {}, n = {}, o = {}, i = {}, s = [], a = [], l = [
    t.extendApi
  ], u = C({}, Gi), f = gi();
  let c = { global: {} };
  const h = t.isMobile === !0, p = Se({
    $mobile: h
  }), y = Ui(), V = {}, O = {};
  ss(t.attrs || {});
  function T(d) {
    const g = $e[d];
    if (Array.isArray(g))
      return g.map(($) => $.api());
    if (g)
      return g.api();
  }
  function j(d) {
    s.push(d);
  }
  function L() {
    const d = ht(...arguments);
    d.id && d.prop && (n[d.id] = d.prop);
  }
  function re() {
    const d = ht(...arguments);
    d.id && d.prop && (u[d.id] = m.Function(d.prop) ? d.prop : ce(C({}, d.prop), {
      name: d.id
    }));
  }
  function te(d) {
    y.use(d);
  }
  function X(d) {
    if (arguments.length === 0)
      return Je;
    if (typeof d == "string" && arguments.length === 1)
      return r[pe(d)];
    const g = ht(...arguments);
    if (!g.id || !g.prop) return Je;
    const $ = pe(g.id), b = g.prop, k = b.merge === !0 ? r[$] : void 0;
    r[$] = rt(b, k || Je), f[$] = se($), b.maker && R(f, b.maker);
  }
  function N(d, g) {
    let $;
    if (m.String(d)) {
      if ($ = d, g === void 0)
        return e[$];
    } else
      $ = d.displayName || d.name, g = d;
    if (!$ || !g) return;
    const b = pe($);
    e[$] = g, e[b] = g, delete y.aliasMap[$], delete y.aliasMap[b], delete r[$], delete r[b], g.formCreateParser && X($, g.formCreateParser);
  }
  function B() {
    return hi(Q, e, n);
  }
  function z(d, g) {
    const $ = B();
    return Jr({
      data() {
        return Se({
          rule: d,
          option: g
        });
      },
      render() {
        return Kr($, C({ ref: "fc" }, this.$data));
      }
    });
  }
  function Y() {
    return dt;
  }
  function I(d, g) {
    return m.Function(d.install) ? d.install(K, g) : m.Function(d) && d(K, g), this;
  }
  function K(d, g) {
    let $ = z(d, g || {});
    s.forEach((x) => {
      M(() => x(K, $));
    });
    const b = document.createElement("div");
    return ((g == null ? void 0 : g.el) || document.body).appendChild(b), $.mount(b).$refs.fc.fapi;
  }
  rt(K, O);
  function oe(d) {
    let g = C({}, t);
    return d ? g.inherit = {
      components: e,
      parsers: r,
      directives: n,
      modelFields: o,
      providers: u,
      useApps: s,
      maker: f,
      formulas: V,
      loadData: p
    } : delete g.inherit, Er(g);
  }
  function F(d, g) {
    o[d] = g;
  }
  function w(d, g) {
    V[d] = g;
  }
  function v(d, g) {
    const $ = i[d] || {}, b = $.parsers || {};
    g.parsers && Object.keys(g.parsers).forEach((k) => {
      b[k] = rt(g.parsers[k], Je);
    }), g.name = d, i[d] = ce(C(C({}, $), g), { parsers: b });
  }
  function S(d) {
    d && Object.keys($e).forEach((g) => {
      (Array.isArray($e[g]) ? $e[g] : [$e[g]]).forEach((b) => {
        b.bus.$emit("$loadData." + d);
      });
    });
  }
  function _(d, g) {
    Ye(p, d, g), S(d);
  }
  function E(d, g) {
    const $ = (...b) => M(() => g(...b));
    $._driver = !0, _(d, $);
  }
  function A(d, g) {
    const $ = (d || "").split(".");
    d = $.shift();
    const b = $.join(".");
    if (J(p, d) || (p[d] = Zt), p[d] !== Zt) {
      let k = p[d];
      return k && k._driver ? k = k(b) : $.length && (k = le(k, $)), k == null || k === "" ? g : k;
    } else
      return g;
  }
  function P(d) {
    l.push(d);
  }
  function H(d) {
    delete p[d], S(d);
  }
  function G(d, g) {
    a.push({ name: d, callback: g });
  }
  function Q(d) {
    R(this, {
      id: os++,
      create: K,
      vm: d,
      manager: qi(t.manager),
      parsers: r,
      providers: u,
      modelFields: o,
      formulas: V,
      isMobile: h,
      rules: d.props.rule,
      name: d.props.name || at(),
      inFor: d.props.inFor,
      prop: {
        components: e,
        directives: n
      },
      get: null,
      drivers: i,
      renderDriver: null,
      refreshData: S,
      loadData: p,
      CreateNode: y,
      bus: new ir(),
      //使用 Set 保存,停止侦听时可以自行摘除,避免长期运行下无限堆积
      unwatch: /* @__PURE__ */ new Set(),
      options: Ot({}),
      extendApiFn: l,
      fetchCache: /* @__PURE__ */ new WeakMap(),
      tmpData: Se({})
    }), this.unwatch.push = this.unwatch.add, a.forEach((g) => {
      this.bus.$on(g.name, g.callback);
    }), ee(() => {
      ie(this.options, () => {
        this.$handle.$manager.updateOptions(this.options.value), this.api().refresh();
      }, { deep: !0 });
    }), R(d.appContext.components, e), R(d.appContext.directives, n), this.$handle = new Ee(this), this.name && (this.inFor ? ($e[this.name] || ($e[this.name] = []), $e[this.name].push(this)) : $e[this.name] = this);
  }
  Q.isMobile = h, R(Q.prototype, {
    init() {
      this.isSub() && this.unwatch.add(ie(() => this.vm.setupState.parent.setupState.fc.options.value, () => {
        this.initOptions(), this.$handle.api.refresh();
      }, { deep: !0, flush: "sync" })), this.vm.props.driver && (this.renderDriver = typeof this.vm.props.driver == "object" ? this.vm.props.driver : this.drivers[this.vm.props.driver]), !this.renderDriver && this.vm.setupState.parent && (this.renderDriver = this.vm.setupState.parent.setupState.fc.renderDriver), this.renderDriver || (this.renderDriver = this.drivers.default), this.initOptions(), this.$handle.init();
    },
    targetFormDriver(d, ...g) {
      if (this.bus.$emit(d, ...g), this.renderDriver && this.renderDriver[d])
        return M(() => this.renderDriver[d](...g));
    },
    t(d, g, $) {
      let b = $ ? $("$t." + d) : this.globalLanguageDriver(d);
      return b == null && (b = ""), b && g && Object.keys(g).forEach((k) => {
        const x = new RegExp(`{${k}}`, "g");
        b = b.replace(x, g[k]);
      }), b;
    },
    globalDataDriver(d) {
      let g = d.split(".");
      const $ = g.shift(), b = this.options.value.globalData && this.options.value.globalData[$];
      if (b) {
        if (b.type === "static")
          return le(b.data, g);
        {
          let k;
          const x = this.fetchCache.get(b);
          if (x) {
            if (x.status && (k = le(x.data, g)), !x.loading)
              return k;
            x.loading = !1, this.fetchCache.set(b, x);
          } else
            this.fetchCache.set(b, { status: !1 });
          const U = Le(() => {
            ve();
            const fe = this.fetchCache.get(b);
            this.options.value.globalData && Object.values(this.options.value.globalData).indexOf(b) !== -1 ? (fe && (fe.loading = !0, this.fetchCache.set(b, fe)), this.bus.$emit("$loadData.$globalData." + $)) : this.fetchCache.delete(b);
          }, b.wait || 600), ye = (fe) => {
            this.fetchCache.set(b, { status: !0, data: fe }), this.bus.$emit("$loadData.$globalData." + $);
          }, be = (fe, _e) => {
            if (_e && b.watch === !1)
              return ve();
            if (_e) {
              U();
              return;
            }
            const Me = this.$handle.loadFetchVar(bt(b), fe);
            Me.targetRule = this.targetRule, this.$handle.api.fetch(Me).then((Ie) => {
              ye(Ie);
            }).catch((Ie) => {
              ye(null);
            });
          }, ve = this.watchLoadData(be);
          return b.watch === !1 && ve(), k;
        }
      }
    },
    getLocale() {
      let d = this.vm.setupState.top.props.locale;
      return d && typeof d == "object" ? d.name : typeof d == "string" ? d : "zh-cn";
    },
    globalLanguageDriver(d) {
      let g = this.vm.setupState.top.props.t, $ = this.vm.setupState.top.props.locale, b;
      if (g && (b = M(() => g(d))), b == null && $ && typeof $ == "object" && (b = le($, d)), b == null) {
        const k = this.options.value.language || {}, x = this.getLocale();
        b = le(k[x] || {}, d), b == null && (b = le(ns[x] || {}, d));
      }
      return b;
    },
    globalVarDriver(d) {
      let g = d.split(".");
      const $ = g.shift(), b = this.options.value.globalVariable && this.options.value.globalVariable[$];
      if (b) {
        const k = m.Function(b) ? b : Ve(b.handle);
        if (k) {
          let x = k((...U) => this.$handle.api.getData(...U), this.$handle.api);
          return le(x, g);
        }
      }
    },
    setData(d, g, $) {
      $ ? _(d, g) : (Ye(this.vm.setupState.top.setupState.fc.tmpData, d, g), this.bus.$emit("$loadData." + d));
    },
    getLoadData(d, g) {
      let $ = null;
      if (d != null) {
        let b = d.split(".");
        const k = b.shift();
        if ($ = le(this.vm.setupState.top.setupState.fc.tmpData, d), $ != null)
          return $;
        if (k === "$topForm")
          $ = this.$handle.api.top.formData(!0);
        else if (k === "$scopeForm")
          $ = this.$handle.api.scope.formData(!0);
        else if (k === "$form")
          $ = this.$handle.api.formData(!0);
        else if (k === "$options")
          $ = this.options.value;
        else if (k === "$globalData")
          $ = this.globalDataDriver(b.join(".")), b = [];
        else if (k === "$var")
          $ = this.globalVarDriver(b.join(".")), b = [];
        else if (k === "$locale")
          $ = this.getLocale(), b = [];
        else if (k === "$t")
          $ = this.globalLanguageDriver(b.join(".")), b = [];
        else {
          if (k === "$preview")
            return this.$handle.preview;
          $ = A(d), b = [];
        }
        $ && b.length && ($ = le($, b));
      }
      return $ == null || $ === "" ? g : $;
    },
    watchLoadData(d, g) {
      let $ = {};
      const b = (U) => {
        this.get || (this.get = k), M(() => {
          d(k, U);
        }), this.get === k && (this.get = void 0);
      }, k = (U, ye) => {
        let be;
        if (typeof U == "object" && (be = U.getValue, U = U.id), $[U])
          return $[U].val;
        const ve = Re(() => be ? be() : this.getLoadData(U, ye)), fe = U.split("."), _e = fe.shift(), Me = fe.shift() || "", Ie = Le(() => {
          const qe = be ? be() : this.getLoadData(U, ye);
          if ($[U])
            ((qe instanceof Function || m.Object(qe) || Array.isArray(qe)) && qe === $[U].val || JSON.stringify(qe) !== JSON.stringify($[U].val)) && ($[U].val = qe, b(!0));
          else return;
        }, g || 0), Ar = ie(ve, (qe) => {
          Ie();
        });
        return this.bus.$on("$loadData." + _e, Ie), Me && this.bus.$on("$loadData." + _e + "." + Me, Ie), $[U] = {
          fn: () => {
            this.bus.$off("$loadData." + _e, Ie), Me && this.bus.$off("$loadData." + _e + "." + Me, Ie), Ar();
          },
          val: ve.value
        }, ve.value;
      };
      b(!1);
      const x = () => {
        Object.keys($).forEach((U) => $[U].fn()), $ = {}, this.unwatch.delete(x);
      };
      return this.unwatch.add(x), x;
    },
    isSub() {
      return this.vm.setupState.parent && this.vm.props.extendOption;
    },
    initOptions() {
      this.options.value = {};
      let d = C({
        formData: {},
        submitBtn: {},
        resetBtn: {},
        globalEvent: {},
        globalData: {}
      }, De(c));
      const g = this.isSub();
      g && (d = this.mergeOptions(d, this.vm.setupState.parent.setupState.fc.options.value || {}, !0)), d = this.mergeOptions(d, this.vm.props.option);
      const $ = this.api();
      this.targetFormDriver("initOptions", d, { api: $, isSubForm: g }), this.updateOptions(d);
    },
    mergeOptions(d, g, $) {
      return g = C({}, g || {}), $ && ["page", "onSubmit", "onReset", "onCreated", "onChange", "onMounted", "mounted", "beforeUnmount", "beforeSubmit", "onBeforeUnmount", "onReload", "reload", "formData", "el", "globalClass", "style"].forEach((b) => {
        delete g[b];
      }), g.global && (d.global = oi(d.global, g.global), delete g.global), this.$handle.$manager.mergeOptions([g], d), d;
    },
    updateOptions(d) {
      this.options.value = this.mergeOptions(this.options.value, d), this.$handle.$manager.updateOptions(this.options.value), this.bus.$emit("$loadData.$options");
    },
    api() {
      return this.$handle.api;
    },
    render() {
      return this.$handle.render();
    },
    mounted() {
      this.$handle.mounted();
    },
    unmount() {
      if (M(() => this.$handle.lifecycle("beforeUnmount")), this.name)
        if (this.inFor) {
          const d = $e[this.name].indexOf(this);
          $e[this.name].splice(d, 1);
        } else
          delete $e[this.name];
      a.forEach((d) => {
        this.bus.$off(d.name, d.callback);
      }), this.tmpData = {}, [...this.unwatch].forEach((d) => d()), this.unwatch.clear(), this.$handle.reloadRule([]);
    },
    updated() {
      this.$handle.bindNextTick(() => this.bus.$emit("next-tick", this.$handle.api));
    }
  });
  function ne(d) {
    R(d, {
      version: t.version,
      ui: t.ui,
      isMobile: h,
      extendApi: P,
      getData: A,
      setDataDriver: E,
      setData: _,
      removeData: H,
      refreshData: S,
      maker: f,
      component: N,
      directive: L,
      setModelField: F,
      setFormula: w,
      setDriver: v,
      register: re,
      $vnode: Y,
      parser: X,
      use: I,
      factory: oe,
      componentAlias: te,
      copyRule: br,
      copyRules: vr,
      mergeRule: je,
      fetch: Sr,
      $form: B,
      parseFn: Ve,
      parseJson: lr,
      toJson: Qe,
      useApp: j,
      getApi: T,
      on: G
    });
  }
  function we(d) {
    R(d, {
      create: K,
      install(g, $) {
        c = C(C({}, c), $ || {});
        const b = `_installedFormCreate${h ? "Mobile" : ""}_${t.ui}`;
        if (g[b] === !0) return;
        g[b] = !0;
        const k = function(U, ye = {}) {
          return K(U, ye);
        };
        ne(k), g.config.globalProperties.$formCreate = k;
        const x = B();
        g.component(x.name, x), s.forEach((U) => {
          M(() => U(d, g));
        });
      }
    });
  }
  if (ne(O), we(O), E("$cookie", es), E("$localStorage", ts), E("$sessionStorage", rs), y.use({ fragment: "fcFragment" }), t.install && K.use(t), j((d, g) => {
    g.mixin({
      props: ["formCreateInject"],
      emits: ["fc.updateValue", "fc.el"]
    });
  }), X(Ki), t.inherit) {
    const d = t.inherit;
    d.components && R(e, d.components), d.parsers && R(r, d.parsers), d.directives && R(n, d.directives), d.modelFields && R(o, d.modelFields), d.providers && R(u, d.providers), d.useApps && R(s, d.useApps), d.maker && R(f, d.maker), d.loadData && R(p, d.loadData), d.formulas && R(V, d.formulas);
  }
  const ue = B();
  return rt(ue, O), Object.defineProperties(ue, {
    fetch: {
      get() {
        return O.fetch;
      },
      set(d) {
        O.fetch = d;
      }
    }
  }), ue.util = O, ue;
}
const Xt = {
  date: "YYYY-MM-DD",
  month: "YYYY-MM",
  week: "YYYY-wo",
  datetime: "YYYY-MM-DD HH:mm:ss",
  timerange: "HH:mm:ss",
  daterange: "YYYY-MM-DD",
  monthrange: "YYYY-MM",
  datetimerange: "YYYY-MM-DD HH:mm:ss",
  year: "YYYY"
}, er = "datePicker", as = {
  name: er,
  maker: function() {
    return ["year", "month", "date", "dates", "week", "datetime", "datetimeRange", "dateRange", "monthRange"].reduce((t, e) => (t[e] = se(er, { type: e.toLowerCase() }), t), {});
  }(),
  mergeProp(t) {
    const e = t.prop.props;
    e.valueFormat || (e.valueFormat = Xt[e.type] || Xt.date);
  }
}, pt = "hidden", ls = {
  name: pt,
  maker: {
    [pt]: (t, e) => se(pt)("", t, e)
  },
  render() {
    return [];
  }
}, mt = "input", us = {
  name: mt,
  maker: function() {
    const t = ["password", "url", "email", "text", "textarea"].reduce((e, r) => (e[r] = se(mt, { type: r }), e), {});
    return t.idate = se(mt, { type: "date" }), t;
  }(),
  mergeProp(t) {
    let { props: e } = t.prop;
    e && e.autosize && e.autosize.minRows && (e.rows = e.autosize.minRows || 2);
  }
}, fs = "textarea", cs = {
  name: fs,
  mergeProp(t) {
    let { props: e } = t.prop;
    e.type = "textarea", e && e.autosize && e.autosize.minRows && (e.rows = e.autosize.minRows || 2);
  }
}, tr = "slider", ds = {
  name: tr,
  maker: {
    sliderRange: se(tr, { range: !0 })
  },
  toFormValue(t, e) {
    let r = Array.isArray(t), n = e.prop.props, o = n.min || 0, i;
    return n.range === !0 ? i = r ? t : [o, parseFloat(t) || o] : i = r ? parseFloat(t[0]) || o : parseFloat(t), i;
  }
}, gt = "timePicker", hs = {
  name: gt,
  maker: {
    time: se(gt, (t) => t.props.isRange = !1),
    timeRange: se(gt, (t) => t.props.isRange = !0)
  },
  mergeProp(t) {
    const e = t.prop.props;
    e.valueFormat || (e.valueFormat = "HH:mm:ss");
  }
}, ps = {
  name: "FcRow",
  render(t, e) {
    return e.vNode.col({ props: { span: 24 } }, {
      default: () => [
        e.vNode.row(e.prop, t)
      ]
    });
  }
}, ms = "select", gs = {
  name: ms,
  toFormValue(t, e) {
    return e.prop.props.multiple && !Array.isArray(t) ? he(t) : t;
  }
}, ys = [
  as,
  ls,
  us,
  cs,
  ds,
  hs,
  ps,
  gs
], W = "el", $s = {
  button: W + "-button",
  icon: W + "-icon",
  slider: W + "-slider",
  rate: W + "-rate",
  upload: "fc-upload",
  cascader: W + "-cascader",
  popover: W + "-popover",
  tooltip: W + "-tooltip",
  colorPicker: W + "-colorPicker",
  timePicker: W + "-time-picker",
  timeSelect: W + "-time-select",
  datePicker: W + "-date-picker",
  switch: W + "-switch",
  select: "fc-select",
  checkbox: "fc-checkbox",
  radio: "fc-radio",
  inputNumber: W + "-input-number",
  number: W + "-input-number",
  input: W + "-input",
  textarea: W + "-input",
  formItem: W + "-form-item",
  form: W + "-form",
  frame: "fc-frame",
  col: W + "-col",
  row: W + "-row",
  tree: "fc-tree",
  inputTag: W + "-input-tag",
  inputOtp: W + "-input-otp",
  mention: W + "-mention",
  transfer: W + "-transfer",
  treeSelect: W + "-tree-select",
  autoComplete: W + "-autocomplete",
  auto: W + "-autocomplete",
  group: "fc-group",
  array: "fc-group",
  object: "fc-sub-form",
  subForm: "fc-sub-form"
};
function bs() {
  return {
    form: {
      inline: !1,
      labelPosition: "right",
      labelWidth: "125px",
      disabled: !1,
      size: void 0
    },
    row: {
      show: !0,
      gutter: 0
    },
    submitBtn: {
      type: "primary",
      loading: !1,
      disabled: !1,
      innerText: "",
      show: !0,
      col: void 0,
      click: void 0
    },
    resetBtn: {
      type: "default",
      loading: !1,
      disabled: !1,
      innerText: "",
      show: !1,
      col: void 0,
      click: void 0
    },
    info: {
      type: "popover",
      render: "html"
    }
  };
}
function vs(t) {
  return t.type === "tooltip";
}
function _s(t) {
  return t.render === "text" || t.render === "innerText";
}
function ws(t, e) {
  const r = t == null ? "" : String(t);
  return {
    type: "div",
    props: e ? { textContent: r } : { innerHTML: r }
  };
}
function rr(t, e) {
  J(t, e) && m.String(t[e]) && (t[e] = { [e]: t[e], show: !0 });
}
function ke(t) {
  return t === !1;
}
function Os(t, e) {
  J(t, e) && !m.Object(t[e]) && (t[e] = { show: !!t[e] });
}
function yt(t) {
  const e = C({}, t);
  return delete e.children, e;
}
const Cs = {
  validate() {
    const t = this.form();
    return t ? t.validate() : new Promise((e) => e());
  },
  validateField(t) {
    return new Promise((e, r) => {
      const n = this.form();
      n ? n.validateField(t, (o, i) => {
        i ? r(i) : e(o);
      }) : e();
    });
  },
  clearValidateState(t) {
    const e = this.vm.refs[t.wrapRef];
    e && e.clearValidate();
  },
  fieldChange(t, e, r, n) {
    var o, i;
    n || (i = (o = this.vm.refs[t.wrapRef]) == null ? void 0 : o.validate("change")) == null || i.catch(() => {
    });
  },
  tidyOptions(t) {
    return ["submitBtn", "resetBtn", "row", "info", "wrap", "col", "title"].forEach((e) => {
      Os(t, e);
    }), t;
  },
  tidyRule({ prop: t }) {
    return rr(t, "title"), rr(t, "info"), t;
  },
  mergeProp(t) {
    const e = {
      info: {
        type: "popover",
        render: "html",
        trigger: "hover",
        placement: "top-start",
        icon: !0
      },
      title: {},
      col: { span: 24 },
      wrap: {}
    };
    ["info", "wrap", "col", "title"].forEach((r) => {
      t.prop[r] = Ae([this.options[r] || {}, t.prop[r] || {}], e[r]);
    });
  },
  getDefaultOptions() {
    return bs();
  },
  update() {
    const t = this.options.form;
    this.rule = {
      props: C({}, t),
      on: {
        submit: (e) => {
          e.preventDefault();
        }
      },
      style: t.style,
      type: "form"
    };
  },
  beforeRender() {
    const { key: t, ref: e, $handle: r } = this, n = this.options.form;
    R(this.rule, { key: t, ref: e, class: [n.className, n.class, "form-create", this.$handle.preview ? "is-preview" : ""] }), R(this.rule.props, {
      model: r.formData
    });
  },
  render(t) {
    return t.slotLen() && !this.$handle.preview && t.setSlot(void 0, () => this.makeFormBtn()), this.$r(this.rule, ke(this.options.row.show) ? t.getSlots() : [this.makeRow(t)]);
  },
  makeWrap(t, e) {
    const r = t.prop, n = `${this.key}${t.key}`, o = r.col, i = this.isTitle(r) && r.wrap.title !== !1, s = !(o != null && o.labelWidth) && !i ? 0 : o == null ? void 0 : o.labelWidth, { inline: a, col: l } = this.rule.props, u = r.wrap.class;
    delete r.wrap.class, delete r.wrap.title;
    const f = (m.Undef(r.wrap.show) ? !t.input : ke(r.wrap.show)) ? e : this.$r(Ae([r.wrap, {
      props: ce(C({
        labelWidth: s === void 0 ? s : sr(s),
        label: i ? r.title.title : void 0
      }, yt(r.wrap || {})), {
        prop: t.id,
        rules: t.injectValidate()
      }),
      class: this.$render.mergeClass(u || r.className, "fc-form-item"),
      key: `${n}fi`,
      ref: t.wrapRef,
      type: "formItem"
    }]), C({ default: () => e }, i ? { label: () => this.makeInfo(r, n, t) } : {}));
    return a === !0 || ke(l) || ke(o.show) ? f : this.makeCol(r, n, [f]);
  },
  isTitle(t) {
    if (this.options.form.title === !1) return !1;
    const e = t.title;
    return !(!e.title && !e.native || ke(e.show));
  },
  makeInfo(t, e, r) {
    var f, c, h, p;
    const n = C({}, t.title), o = C({}, t.info), i = vs(o), s = this.options.form, a = this.getSlot("title"), l = [a ? a({
      title: (c = (f = r.refRule) == null ? void 0 : f.__$title) == null ? void 0 : c.value,
      rule: r.rule,
      options: this.options
    }) : ((p = (h = r.refRule) == null ? void 0 : h.__$title) == null ? void 0 : p.value) + (s.labelSuffix || s["label-suffix"] || "")];
    if (!ke(o.show) && (o.info || o.native) && !ke(o.icon)) {
      const y = {
        type: o.type || "popover",
        props: yt(o),
        key: `${e}pop`
      };
      delete y.props.icon, delete y.props.show, delete y.props.info, delete y.props.align, delete y.props.native, delete y.props.render, y.props.width = "auto", l[o.align !== "left" ? "unshift" : "push"](this.$r(Ae([o, y]), {
        [i ? "content" : "default"]: () => {
          var V, O;
          return this.$r(ws((O = (V = r.refRule) == null ? void 0 : V.__$info) == null ? void 0 : O.value, _s(o)));
        },
        [n.slot || (i ? "default" : "reference")]: () => this.$r({
          type: "ElIcon",
          style: "top:2px",
          key: `${e}i`
        }, {
          default: () => this.$r({
            type: o.icon === !0 ? "icon-warning" : o.icon
          })
        }, !0)
      }));
    }
    const u = Ae([n, {
      props: yt(n),
      key: `${e}tit`,
      class: "fc-form-title",
      type: n.type || "span",
      on: {
        click: (...y) => {
          this.$handle.targetHook(r, "titleClick", { args: y });
        }
      }
    }]);
    return delete u.props.show, delete u.props.title, delete u.props.native, this.$r(u, l);
  },
  makeCol(t, e, r) {
    const n = C({}, t.col);
    return delete n.show, this.$r({
      class: this.$render.mergeClass(n.class, "fc-form-col"),
      type: "col",
      props: n || { span: 24 },
      key: `${e}col`
    }, r);
  },
  makeRow(t) {
    const e = this.options.row || {};
    return this.$r({
      type: "row",
      props: e,
      class: this.$render.mergeClass(e.class, "fc-form-row"),
      key: `${this.key}row`
    }, t);
  },
  makeFormBtn() {
    let t = [];
    if (ke(this.options.submitBtn.show) || t.push(this.makeSubmitBtn()), ke(this.options.resetBtn.show) || t.push(this.makeResetBtn()), !t.length)
      return;
    const e = this.$r({
      type: "formItem",
      class: "fc-form-item",
      key: `${this.key}fb`
    }, t);
    return this.rule.props.inline === !0 ? e : this.$r({
      type: "col",
      class: "fc-form-col fc-form-footer",
      props: { span: 24 },
      key: `${this.key}fc`
    }, [e]);
  },
  makeResetBtn() {
    const t = C({}, this.options.resetBtn), e = t.innerText || this.$handle.api.t("reset") || "重置";
    return delete t.innerText, delete t.click, delete t.col, delete t.show, this.$r({
      type: "button",
      props: t,
      class: "fc-reset-btn",
      style: { width: t.width },
      on: {
        click: () => {
          const r = this.$handle.api;
          this.options.resetBtn.click ? this.options.resetBtn.click(r) : r.resetFields();
        }
      },
      key: `${this.key}b2`
    }, [e]);
  },
  makeSubmitBtn() {
    const t = C({}, this.options.submitBtn), e = t.innerText || this.$handle.api.t("submit") || "提交";
    return delete t.innerText, delete t.click, delete t.col, delete t.show, this.$r({
      type: "button",
      props: t,
      class: "fc-submit-btn",
      style: { width: t.width },
      on: {
        click: () => {
          const r = this.$handle.api;
          this.options.submitBtn.click ? this.options.submitBtn.click(r) : r.submit().catch(() => {
          });
        }
      },
      key: `${this.key}b1`
    }, [e]);
  }
}, xe = {};
Ss(xe);
Ds(xe);
Vs(xe);
Fs(xe);
Es(xe);
ks(xe);
function Ss(t) {
  ["group", "tree", "switch", "upload", "autoComplete", "checkbox", "cascader", "colorPicker", "datePicker", "frame", "inputNumber", "inputTag", "inputOtp", "mention", "transfer", "treeSelect", "radio", "rate"].forEach((e) => {
    t[e] = se(e);
  }), t.auto = t.autoComplete, t.number = t.inputNumber, t.color = t.colorPicker, t.tag = t.inputTag;
}
function Ds(t) {
  t.treeSelectMultiple = se("treeSelect", { multiple: !0 });
}
function Vs(t) {
  const e = "select", r = "multiple";
  t.selectMultiple = se(e, { [r]: !0 }), t.selectOne = se(e, { [r]: !1 });
}
function Fs(t) {
  const e = "tree", r = { treeSelected: "selected", treeChecked: "checked" };
  Object.keys(r).reduce((n, o) => (n[o] = se(e, { type: r[o] }), n), t);
}
function Es(t) {
  const e = "upload", r = {
    image: ["image", 0],
    file: ["file", 0],
    uploadFileOne: ["file", 1],
    uploadImageOne: ["image", 1]
  };
  Object.keys(r).reduce((n, o) => (n[o] = se(e, (i) => i.props({ uploadType: r[o][0], maxLength: r[o][1] })), n), t), t.uploadImage = t.image, t.uploadFile = t.file;
}
function ks(t) {
  const e = {
    frameInputs: ["input", 0],
    frameFiles: ["file", 0],
    frameImages: ["image", 0],
    frameInputOne: ["input", 1],
    frameFileOne: ["file", 1],
    frameImageOne: ["image", 1]
  };
  return Object.keys(e).reduce((r, n) => (r[n] = se("frame", (o) => o.props({ type: e[n][0], maxLength: e[n][1] })), r), t), t.frameInput = t.frameInputs, t.frameFile = t.frameFiles, t.frameImage = t.frameImages, t;
}
function nr(t, e) {
  return m.Boolean(t) ? t = { show: t } : !m.Undef(t) && !m.Object(t) && (t = { show: e }), t;
}
function Rs(t, e) {
  return {
    formEl() {
      return e.$manager.form();
    },
    wrapEl(r) {
      const n = e.getFieldCtx(r);
      if (n)
        return e.vm.refs[n.wrapRef];
    },
    validate(r) {
      return new Promise((n, o) => {
        const i = t.children, s = [e.$manager.validate()];
        i.filter((a) => !a.isScope).forEach((a) => {
          s.push(a.validate());
        }), Promise.all(s).then(() => {
          n(!0), r && r(!0);
        }).catch((a) => {
          o(a), r && r(a), e.vm.emit("validate-fail", a, { api: t }), e.emitEvent("validate-fail", a, { api: t });
        });
      });
    },
    validateField(r, n) {
      return new Promise((o, i) => {
        const a = typeof r == "object" ? Oe(r) : e.getCtx(r);
        if (!a) {
          o(null), n && n(null);
          return;
        }
        const l = e.subForm[a.id], u = [e.$manager.validateField(a.id)];
        he(l).filter((f) => !f.isScope).forEach((f) => {
          u.push(f.validate());
        }), Promise.all(u).then(() => {
          o(null), n && n(null);
        }).catch((f) => {
          i(f), n && n(f), e.vm.emit("validate-field-fail", f, { field: r, api: t });
        });
      });
    },
    validateFields(r, n) {
      return new Promise((o, i) => {
        Array.isArray(r) || (r = [r]);
        const s = r.map((a) => t.validateField(a));
        Promise.all(s).then(() => {
          o(null), n && n(null);
        }).catch((a) => {
          i(a), n && n(a);
        });
      });
    },
    clearValidateState(r, n = !0) {
      t.helper.tidyFields(r).forEach((o) => {
        n && this.clearSubValidateState(o), e.getCtxs(o).forEach((i) => {
          e.$manager.clearValidateState(i);
        });
      });
    },
    clearSubValidateState(r) {
      t.helper.tidyFields(r).forEach((n) => {
        e.getCtxs(n).forEach((o) => {
          const i = e.subForm[o.id];
          i && (Array.isArray(i) ? i.forEach((s) => {
            s.clearValidateState();
          }) : i && i.clearValidateState());
        });
      });
    },
    btn: {
      loading: (r = !0) => {
        t.submitBtnProps({ loading: !!r });
      },
      disabled: (r = !0) => {
        t.submitBtnProps({ disabled: !!r });
      },
      show: (r = !0) => {
        t.submitBtnProps({ show: !!r });
      }
    },
    resetBtn: {
      loading: (r = !0) => {
        t.resetBtnProps({ loading: !!r });
      },
      disabled: (r = !0) => {
        t.resetBtnProps({ disabled: !!r });
      },
      show: (r = !0) => {
        t.resetBtnProps({ show: !!r });
      }
    },
    submitBtnProps: (r = {}) => {
      let n = nr(e.options.submitBtn, !0);
      R(n, r), e.options.submitBtn = n, t.refreshOptions();
    },
    resetBtnProps: (r = {}) => {
      let n = nr(e.options.resetBtn, !1);
      R(n, r), e.options.resetBtn = n, t.refreshOptions();
    },
    submit(r, n) {
      return new Promise((o, i) => {
        (e.options.validateOnSubmit === !1 ? Promise.resolve() : t.validate()).then(() => {
          let a = t.formData();
          e.beforeSubmit(a).then(() => {
            m.Function(r) && M(() => r(a, t)), m.Function(e.options.onSubmit) && M(() => e.options.onSubmit(a, t)), e.vm.emit("submit", a, t), o(a);
          }).catch((l) => {
          });
        }).catch((...a) => {
          m.Function(n) && M(() => n(t, ...a)), i(...a);
        });
      });
    }
  };
}
const kr = {
  name: "required",
  load(t, e, r) {
    const n = As(t.getValue());
    let o;
    if (n.required === !1)
      t.clearProp(), r.clearValidateState([e.field]);
    else {
      const i = C({
        required: !0,
        validator(a, l, u) {
          s(), m.empty(l) ? u(i.message) : u();
        }
      }, n), s = () => {
        var l;
        const a = (l = e.__fc__.refRule.__$title) == null ? void 0 : l.value;
        if (o !== a)
          if (o = a, !n.message)
            i.message = r.t("required", { title: a }) || a + (r.getLocale() === "en" ? " is required" : "不能为空");
          else {
            const u = n.message.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
            u && (i.message = r.t(u[1], { title: a }));
          }
      };
      s(), t.getProp().validate = [i];
    }
    r.sync(e);
  },
  watch(...t) {
    kr.load(...t);
  }
};
function As(t) {
  return m.Boolean(t) ? { required: t } : m.String(t) ? { message: t } : m.Undef(t) ? { required: !1 } : m.Function(t) ? { validator: t } : m.Object(t) ? t : {};
}
function js(t) {
  t.componentAlias($s), Kn.forEach((e) => {
    t.component(e.name, e);
  }), t.register(kr), ys.forEach((e) => {
    t.parser(e);
  }), Object.keys(xe).forEach((e) => {
    t.maker[e] = xe[e];
  }), typeof window != "undefined" && window.ElementPlus && t.useApp((e, r) => {
    r.use(window.ElementPlus);
  });
}
function Ms() {
  return Er({
    ui: "element-ui",
    version: "3.3.6",
    manager: Cs,
    extendApi: Rs,
    install: js,
    attrs: {
      normal: ["col", "wrap"],
      array: ["className"],
      key: ["title", "info"]
    }
  });
}
const Rr = Ms();
typeof window != "undefined" && (window.formCreate = Rr);
const Ts = Rr.maker;
export {
  Rr as default,
  Ts as maker
};