const n = (r = "This field is required") => (e) => {
  const i = e == null || typeof e == "string" && e.trim() === "" || Array.isArray(e) && e.length === 0;
  return {
    isValid: !i,
    error: i ? r : void 0
  };
}, f = (r, e) => (i) => {
  const s = e || `Must be at least ${r} characters`, t = typeof i == "string" && i.length >= r;
  return {
    isValid: t,
    error: t ? void 0 : s
  };
}, l = (r, e) => (i) => {
  const s = e || `Must be no more than ${r} characters`, t = typeof i == "string" && i.length <= r;
  return {
    isValid: t,
    error: t ? void 0 : s
  };
}, v = (r, e = "Invalid format") => (i) => {
  const s = typeof i == "string" && r.test(i);
  return {
    isValid: s,
    error: s ? void 0 : e
  };
}, g = (r = "Invalid email address") => {
  const e = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
  return (i) => {
    if (!i) return { isValid: !0 };
    const s = e.test(i);
    return {
      isValid: s,
      error: s ? void 0 : r
    };
  };
}, p = (r = "Invalid phone number") => {
  const e = /^\+?[1-9]\d{1,14}$/;
  return (i) => {
    if (!i) return { isValid: !0 };
    const s = i.replace(/[^\d+]/g, ""), t = e.test(s);
    return {
      isValid: t,
      error: t ? void 0 : r
    };
  };
}, h = (r = "Username must be 3-30 characters and contain only letters, numbers, and underscores") => {
  const e = /^[a-zA-Z0-9_]{3,30}$/;
  return (i) => {
    if (!i) return { isValid: !0 };
    const s = e.test(i);
    return {
      isValid: s,
      error: s ? void 0 : r
    };
  };
}, w = (r = {}) => {
  const {
    minLength: e = 8,
    requireUppercase: i = !0,
    requireLowercase: s = !0,
    requireNumbers: t = !0,
    requireSymbols: a = !1,
    message: d
  } = r;
  return (c) => {
    if (!c) return { isValid: !0 };
    const o = [];
    c.length < e && o.push(`Must be at least ${e} characters long`), i && !/[A-Z]/.test(c) && o.push("Must contain at least one uppercase letter"), s && !/[a-z]/.test(c) && o.push("Must contain at least one lowercase letter"), t && !/\d/.test(c) && o.push("Must contain at least one number"), a && !/[^A-Za-z0-9]/.test(c) && o.push("Must contain at least one special character");
    const u = o.length === 0;
    return {
      isValid: u,
      error: d || (u ? void 0 : o[0]),
      errors: o.length > 0 ? o : void 0
    };
  };
}, V = (r, e = "Passwords do not match") => (i) => {
  const s = i === r;
  return {
    isValid: s,
    error: s ? void 0 : e
  };
}, b = (r = "Invalid URL") => (e) => {
  if (!e) return { isValid: !0 };
  try {
    return new URL(e), { isValid: !0 };
  } catch {
    return {
      isValid: !1,
      error: r
    };
  }
}, y = (r = {}) => {
  const { min: e, max: i, integer: s = !1, message: t } = r;
  return (a) => {
    if (a == null || a === "")
      return { isValid: !0 };
    const d = Number(a);
    return isNaN(d) ? {
      isValid: !1,
      error: t || "Must be a valid number"
    } : s && !Number.isInteger(d) ? {
      isValid: !1,
      error: t || "Must be a whole number"
    } : e !== void 0 && d < e ? {
      isValid: !1,
      error: t || `Must be at least ${e}`
    } : i !== void 0 && d > i ? {
      isValid: !1,
      error: t || `Must be no more than ${i}`
    } : { isValid: !0 };
  };
}, A = (r, e) => (i) => {
  if (!i) return { isValid: !0 };
  const s = r.includes(i), t = e || `Must be one of: ${r.join(", ")}`;
  return {
    isValid: s,
    error: s ? void 0 : t
  };
}, z = (r, e = "Invalid value") => (i) => {
  const s = r(i);
  return typeof s == "boolean" ? {
    isValid: s,
    error: s ? void 0 : e
  } : {
    isValid: !1,
    error: s
  };
}, q = (r, e = "Invalid value") => async (i) => {
  try {
    const s = await r(i);
    return typeof s == "boolean" ? {
      isValid: s,
      error: s ? void 0 : e
    } : {
      isValid: !1,
      error: s
    };
  } catch (s) {
    return {
      isValid: !1,
      error: s instanceof Error ? s.message : "Validation failed"
    };
  }
}, N = (...r) => async (e) => {
  for (const i of r) {
    const s = await i(e);
    if (!s.isValid)
      return s;
  }
  return { isValid: !0 };
}, m = async (r, e) => {
  const i = {}, s = {};
  for (const [t, a] of Object.entries(e)) {
    const d = r[t], c = Array.isArray(a) ? a : [a];
    for (const o of c) {
      const u = await o(d);
      if (!u.isValid) {
        i[t] = u.error || "Invalid value", u.errors ? s[t] = u.errors : u.error && (s[t] = [u.error]);
        break;
      }
    }
  }
  return {
    isValid: Object.keys(i).length === 0,
    errors: i,
    fieldErrors: s
  };
}, Z = async (r, e) => {
  const i = Array.isArray(e) ? e : [e];
  for (const s of i) {
    const t = await s(r);
    if (!t.isValid)
      return t;
  }
  return { isValid: !0 };
}, M = async (r) => {
  const e = {
    identifier: [
      n("Email or username is required")
      // Could be email or username, so we don't validate format here
    ]
  };
  return r.password !== void 0 && (e.password = n("Password is required")), m(r, e);
}, P = async (r) => {
  const e = {};
  return r.emailAddress !== void 0 && (e.emailAddress = [n("Email is required"), g()]), r.username !== void 0 && (e.username = [n("Username is required"), h()]), r.password !== void 0 && (e.password = [n("Password is required"), w()]), r.confirmPassword !== void 0 && (e.confirmPassword = [
    n("Please confirm your password"),
    V(r.password || "")
  ]), r.firstName !== void 0 && (e.firstName = [
    n("First name is required"),
    f(1),
    l(50)
  ]), r.lastName !== void 0 && (e.lastName = [
    n("Last name is required"),
    f(1),
    l(50)
  ]), r.phoneNumber !== void 0 && (e.phoneNumber = p()), m(r, e);
}, $ = async (r) => {
  const e = {
    emailAddress: [n("Email is required"), g()]
  };
  return m(r, e);
}, R = async (r) => {
  const e = {
    currentPassword: n("Current password is required"),
    newPassword: [n("New password is required"), w()],
    confirmPassword: [
      n("Please confirm your new password"),
      V(r.newPassword)
    ]
  };
  return m(r, e);
}, I = async (r) => {
  const e = {};
  return r.firstName !== void 0 && (e.firstName = [f(1), l(50)]), r.lastName !== void 0 && (e.lastName = [f(1), l(50)]), r.username !== void 0 && (e.username = h()), r.emailAddress !== void 0 && (e.emailAddress = g()), r.phoneNumber !== void 0 && (e.phoneNumber = p()), r.bio !== void 0 && (e.bio = l(500)), r.website !== void 0 && (e.website = b()), m(r, e);
}, E = async (r) => {
  const e = {
    name: [
      n("Organization name is required"),
      f(1),
      l(100)
    ]
  };
  return r.slug !== void 0 && (e.slug = [
    v(/^[a-z0-9-]+$/, "Slug can only contain lowercase letters, numbers, and hyphens"),
    f(3),
    l(50)
  ]), r.description !== void 0 && (e.description = l(500)), r.website !== void 0 && (e.website = b()), r.billingEmail !== void 0 && (e.billingEmail = g()), m(r, e);
}, x = async (r) => {
  const e = {
    emailAddress: [n("Email is required"), g()],
    roleId: n("Role is required")
  };
  return r.customMessage !== void 0 && (e.customMessage = l(500)), m(r, e);
}, F = (r) => /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r), L = (r) => {
  const e = /^\+?[1-9]\d{1,14}$/, i = r.replace(/[^\d+]/g, "");
  return e.test(i);
}, U = (r) => /^[a-zA-Z0-9_]{3,30}$/.test(r), O = (r) => {
  try {
    return new URL(r), !0;
  } catch {
    return !1;
  }
}, S = (r) => r.trim().replace(/[<>]/g, ""), _ = (r) => r.toLowerCase().trim(), j = (r) => r.replace(/[^\d+]/g, "");
export {
  q as asyncValidation,
  N as combine,
  V as confirmPassword,
  z as custom,
  g as email,
  F as isValidEmail,
  L as isValidPhone,
  O as isValidUrl,
  U as isValidUsername,
  l as maxLength,
  f as minLength,
  _ as normalizeEmail,
  j as normalizePhone,
  y as number,
  A as oneOf,
  w as password,
  v as pattern,
  p as phone,
  n as required,
  S as sanitizeInput,
  b as url,
  h as username,
  Z as validateField,
  m as validateForm,
  x as validateInvitationForm,
  E as validateOrganizationForm,
  R as validatePasswordChangeForm,
  $ as validatePasswordResetForm,
  I as validateProfileForm,
  M as validateSignInForm,
  P as validateSignUpForm
};
//# sourceMappingURL=validation.js.map
