import {
  H as e,
  I as a,
  ae as r,
  ad as t,
  v as n,
  J as o,
  K as l,
  aE as s,
  bm as i,
  Q as d,
} from "./index-476be0bb.js";
const [m, u] = e("form");
const c = d(
  a({
    name: m,
    props: {
      colon: Boolean,
      disabled: Boolean,
      readonly: Boolean,
      showError: Boolean,
      labelWidth: o,
      labelAlign: String,
      inputAlign: String,
      scrollToError: Boolean,
      validateFirst: Boolean,
      submitOnEnter: l,
      showErrorMessage: l,
      errorMessageAlign: String,
      validateTrigger: { type: [String, Array], default: "onBlur" },
    },
    emits: ["submit", "failed"],
    setup(e, { emit: a, slots: o }) {
      const { children: l, linkChildren: d } = r(i),
        m = (e) => (e ? l.filter((a) => e.includes(a.name)) : l),
        c = (a) => {
          return "string" == typeof a
            ? ((e) => {
                const a = l.find((a) => a.name === e);
                return a
                  ? new Promise((e, r) => {
                      a.validate().then((a) => {
                        a ? r(a) : e();
                      });
                    })
                  : Promise.reject();
              })(a)
            : e.validateFirst
            ? ((r = a),
              new Promise((e, a) => {
                const t = [];
                m(r)
                  .reduce(
                    (e, a) =>
                      e.then(() => {
                        if (!t.length)
                          return a.validate().then((e) => {
                            e && t.push(e);
                          });
                      }),
                    Promise.resolve()
                  )
                  .then(() => {
                    t.length ? a(t) : e();
                  });
              }))
            : ((e) =>
                new Promise((a, r) => {
                  const t = m(e);
                  Promise.all(t.map((e) => e.validate())).then((e) => {
                    (e = e.filter(Boolean)).length ? r(e) : a();
                  });
                }))(a);
          var r;
        },
        g = (e, a) => {
          l.some((r) => r.name === e && (r.$el.scrollIntoView(a), !0));
        },
        h = () =>
          l.reduce(
            (e, a) => (void 0 !== a.name && (e[a.name] = a.formValue.value), e),
            {}
          ),
        f = () => {
          const r = h();
          c()
            .then(() => a("submit", r))
            .catch((t) => {
              a("failed", { values: r, errors: t }),
                e.scrollToError && t[0].name && g(t[0].name);
            });
        },
        v = (e) => {
          s(e), f();
        };
      return (
        d({ props: e }),
        t({
          submit: f,
          validate: c,
          getValues: h,
          scrollToField: g,
          resetValidation: (e) => {
            "string" == typeof e && (e = [e]);
            m(e).forEach((e) => {
              e.resetValidation();
            });
          },
          getValidationStatus: () =>
            l.reduce((e, a) => ((e[a.name] = a.getValidationStatus()), e), {}),
        }),
        () => {
          var e;
          return n("form", { class: u(), onSubmit: v }, [
            null == (e = o.default) ? void 0 : e.call(o),
          ]);
        }
      );
    },
  })
);
export { c as F };