formguardian-react
Version:
A reusable, customizable Form Validator Widget for React with comprehensive validation, error handling, and micro-animations.
23 lines (22 loc) • 22.5 kB
JavaScript
(function(p,g){typeof exports=="object"&&typeof module<"u"?g(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],g):(p=typeof globalThis<"u"?globalThis:p||self,g(p.ReactFormGuard={},p.React))})(this,(function(p,g){"use strict";var V={exports:{}},A={};/**
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var X;function ye(){if(X)return A;X=1;var e=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function t(n,i,d){var b=null;if(d!==void 0&&(b=""+d),i.key!==void 0&&(b=""+i.key),"key"in i){d={};for(var v in i)v!=="key"&&(d[v]=i[v])}else d=i;return i=d.ref,{$$typeof:e,type:n,key:b,ref:i!==void 0?i:null,props:d}}return A.Fragment=s,A.jsx=t,A.jsxs=t,A}var C={};/**
* @license React
* react-jsx-runtime.development.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var q;function Te(){return q||(q=1,process.env.NODE_ENV!=="production"&&(function(){function e(r){if(r==null)return null;if(typeof r=="function")return r.$$typeof===z?null:r.displayName||r.name||null;if(typeof r=="string")return r;switch(r){case h:return"Fragment";case k:return"Profiler";case x:return"StrictMode";case D:return"Suspense";case U:return"SuspenseList";case H:return"Activity"}if(typeof r=="object")switch(typeof r.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),r.$$typeof){case m:return"Portal";case F:return r.displayName||"Context";case _:return(r._context.displayName||"Context")+".Consumer";case P:var u=r.render;return r=r.displayName,r||(r=u.displayName||u.name||"",r=r!==""?"ForwardRef("+r+")":"ForwardRef"),r;case W:return u=r.displayName||null,u!==null?u:e(r.type)||"Memo";case O:u=r._payload,r=r._init;try{return e(r(u))}catch{}}return null}function s(r){return""+r}function t(r){try{s(r);var u=!1}catch{u=!0}if(u){u=console;var y=u.error,j=typeof Symbol=="function"&&Symbol.toStringTag&&r[Symbol.toStringTag]||r.constructor.name||"Object";return y.call(u,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",j),s(r)}}function n(r){if(r===h)return"<>";if(typeof r=="object"&&r!==null&&r.$$typeof===O)return"<...>";try{var u=e(r);return u?"<"+u+">":"<...>"}catch{return"<...>"}}function i(){var r=S.A;return r===null?null:r.getOwner()}function d(){return Error("react-stack-top-frame")}function b(r){if(me.call(r,"key")){var u=Object.getOwnPropertyDescriptor(r,"key").get;if(u&&u.isReactWarning)return!1}return r.key!==void 0}function v(r,u){function y(){be||(be=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",u))}y.isReactWarning=!0,Object.defineProperty(r,"key",{get:y,configurable:!0})}function T(){var r=e(this.type);return pe[r]||(pe[r]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),r=this.props.ref,r!==void 0?r:null}function R(r,u,y,j,L,G){var E=y.ref;return r={$$typeof:o,type:r,key:u,props:y,_owner:j},(E!==void 0?E:null)!==null?Object.defineProperty(r,"ref",{enumerable:!1,get:T}):Object.defineProperty(r,"ref",{enumerable:!1,value:null}),r._store={},Object.defineProperty(r._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(r,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(r,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:L}),Object.defineProperty(r,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:G}),Object.freeze&&(Object.freeze(r.props),Object.freeze(r)),r}function w(r,u,y,j,L,G){var E=u.children;if(E!==void 0)if(j)if(_e(E)){for(j=0;j<E.length;j++)f(E[j]);Object.freeze&&Object.freeze(E)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else f(E);if(me.call(u,"key")){E=e(r);var B=Object.keys(u).filter(function(Se){return Se!=="key"});j=0<B.length?"{key: someKey, "+B.join(": ..., ")+": ...}":"{key: someKey}",xe[E+j]||(B=0<B.length?"{"+B.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
let props = %s;
<%s {...props} />
React keys must be passed directly to JSX without using spread:
let props = %s;
<%s key={someKey} {...props} />`,j,E,B,E),xe[E+j]=!0)}if(E=null,y!==void 0&&(t(y),E=""+y),b(u)&&(t(u.key),E=""+u.key),"key"in u){y={};for(var J in u)J!=="key"&&(y[J]=u[J])}else y=u;return E&&v(y,typeof r=="function"?r.displayName||r.name||"Unknown":r),R(r,E,y,i(),L,G)}function f(r){l(r)?r._store&&(r._store.validated=1):typeof r=="object"&&r!==null&&r.$$typeof===O&&(r._payload.status==="fulfilled"?l(r._payload.value)&&r._payload.value._store&&(r._payload.value._store.validated=1):r._store&&(r._store.validated=1))}function l(r){return typeof r=="object"&&r!==null&&r.$$typeof===o}var c=g,o=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),_=Symbol.for("react.consumer"),F=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),D=Symbol.for("react.suspense"),U=Symbol.for("react.suspense_list"),W=Symbol.for("react.memo"),O=Symbol.for("react.lazy"),H=Symbol.for("react.activity"),z=Symbol.for("react.client.reference"),S=c.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,me=Object.prototype.hasOwnProperty,_e=Array.isArray,M=console.createTask?console.createTask:function(){return null};c={react_stack_bottom_frame:function(r){return r()}};var be,pe={},ge=c.react_stack_bottom_frame.bind(c,d)(),he=M(n(d)),xe={};C.Fragment=h,C.jsx=function(r,u,y){var j=1e4>S.recentlyCreatedOwnerStacks++;return w(r,u,y,!1,j?Error("react-stack-top-frame"):ge,j?M(n(r)):he)},C.jsxs=function(r,u,y){var j=1e4>S.recentlyCreatedOwnerStacks++;return w(r,u,y,!0,j?Error("react-stack-top-frame"):ge,j?M(n(r)):he)}})()),C}var Z;function ve(){return Z||(Z=1,process.env.NODE_ENV==="production"?V.exports=ye():V.exports=Te()),V.exports}var a=ve();function je(e,s=300){let t=null;return(...n)=>{t&&clearTimeout(t),t=setTimeout(()=>{e(...n)},s)}}function Ee(e,s=1e3){let t=!1,n=null;const i=(...d)=>{e(...d)};return(...d)=>{t?n=d:(i(...d),t=!0,setTimeout(()=>{t=!1,n&&(i(...n),n=null)},s))}}const Q={required:e=>typeof e=="string"?e.trim().length>0:Array.isArray(e)?e.length>0:e!=null&&e!=="",email:e=>typeof e!="string"?!1:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),minLength:(e,s)=>{if(typeof e!="string")return!1;const t=s?.value??s?.minLength??0;return e.length>=t},maxLength:(e,s)=>{if(typeof e!="string")return!1;const t=s?.value??s?.maxLength??1/0;return e.length<=t},pattern:(e,s)=>{if(typeof e!="string")return!1;const t=s?.value;return t?(typeof t=="string"?new RegExp(t):t).test(e):!0},match:(e,s)=>{if(typeof e!="string")return!1;const t=s?.value;return t?(typeof t=="string"?new RegExp(t):t).test(e):!0},custom:(e,s)=>s?.custom?s.custom(e):!0,number:e=>!isNaN(Number(e))&&e!=="",url:e=>{if(typeof e!="string")return!1;try{return new URL(e),!0}catch{return!1}},phone:e=>typeof e!="string"?!1:/^\d{10}$/.test(e)},K={required:"This field is required",email:"Please enter a valid email address",minLength:"This field must be at least {value} characters",maxLength:"This field must not exceed {value} characters",pattern:"This field format is invalid",match:"This field does not match the required pattern",custom:"This field is invalid",number:"Please enter a valid number",url:"Please enter a valid URL",phone:"Please enter a valid phone number"};async function I(e,s,t){let n;if(typeof s=="string"?n={type:s}:n=s,n.type==="custom"&&n.custom)return{isValid:await n.custom(e,t),message:n.message||K[n.type]};if(n.type==="match"&&n.matchField&&t){const T=t[n.matchField];return{isValid:e===T,message:n.message||`This field must match ${n.matchField}`}}if(!(T=>T in Q)(n.type))return{isValid:!0,message:""};const d=Q[n.type];if(!d)return{isValid:!0,message:""};const b=await d(e,n);let v=n.message||K[n.type];return n.value!==void 0&&(v=v.replace("{value}",String(n.value))),{isValid:b,message:v}}async function $(e,s){const t={};return await Promise.all(s.map(async n=>{if(!(!n.validators||n.validators.length===0))for(const i of n.validators){const{isValid:d,message:b}=await I(e[n.name],i,e);if(!d){t[n.name]=b;break}}})),t}function Re(e){return e==null?!0:typeof e=="string"?e.trim().length===0:Array.isArray(e)?e.length===0:typeof e=="object"?Object.keys(e).length===0:!1}function ke(e,s){const t={};return Object.entries(e).forEach(([n,i])=>{const d=s.find(b=>b.name===n);if(i===""&&d?.type!=="password"){t[n]=void 0;return}if(typeof i=="string"){t[n]=i.trim();return}t[n]=i}),t}function ee(e,s="onBlur",t=300){const[n,i]=g.useState(()=>{const l={},c={};return e.forEach(o=>{l[o.name]=o.defaultValue??"",c[o.name]=!1}),{values:l,errors:{},touched:c,isValidating:!1,isValid:!0}}),d=g.useCallback(async(l,c)=>{const o=e.find(x=>x.name===l);if(!o||!o.validators)return"";const m=Array.isArray(o.validators)?o.validators.map(x=>typeof x=="string"?{type:x}:x):[{type:o.validators[0]}],h={...n.values,[l]:c};for(const x of m){const{isValid:k,message:_}=await I(c,x,h);if(!k)return _}return""},[e,n.values]),b=g.useRef(null);g.useEffect(()=>{b.current=je(async(l,c)=>{const o=await d(l,c);i(m=>{const h={...m.errors,[l]:o},x=Object.values(h).every(F=>!F),k={...m.touched},_=m.values[l];return o&&(typeof _=="string"&&_.trim().length>0||typeof _!="string"&&_!==void 0&&_!==null)&&(k[l]=!0),{...m,errors:h,touched:k,isValid:x}})},t)},[d,t]);const v=g.useCallback(async(l,c)=>{i(o=>({...o,values:{...o.values,[l]:c}})),s==="onChange"&&b.current?.(l,c)},[s]),T=g.useCallback(async l=>{if(i(c=>({...c,touched:{...c.touched,[l]:!0}})),s==="onBlur"){const c=n.values[l],o=await d(l,c);i(m=>{const h={...m.errors,[l]:o},x=Object.values(h).every(k=>!k);return{...m,errors:h,isValid:x}})}},[s,n.values,d]),R=g.useCallback(async()=>{i(m=>({...m,isValidating:!0}));const l=e.map(m=>({name:m.name,validators:m.validators?.map(h=>typeof h=="string"?{type:h}:h)})),c=await $(n.values,l),o=Object.keys(c).length===0;return i(m=>({...m,errors:c,isValid:o,isValidating:!1})),o},[e,n.values]),w=g.useCallback(()=>{const l={},c={};e.forEach(o=>{l[o.name]=o.defaultValue??"",c[o.name]=!1}),i({values:l,errors:{},touched:c,isValidating:!1,isValid:!0})},[e]),f=g.useCallback(l=>{i(c=>({...c,values:{...c.values,...l}}))},[]);return{formState:n,setFieldValue:v,setFieldTouched:T,validateFormFields:R,validateSingleField:d,resetForm:w,setFieldValues:f,setFormState:i}}function re(e,s,t,n=1e3,i){const[d,b]=g.useState(!1),[v,T]=g.useState(null),[R,w]=g.useState(!1),f=g.useRef(null);return g.useEffect(()=>{f.current=Ee(async c=>{c&&c.preventDefault(),b(!0),T(null);try{if(!await s()){i&&i(m=>{const h={};return Object.keys(m.values).forEach(x=>{h[x]=!0}),{...m,touched:h}}),T("Please fix the errors in the form"),b(!1);return}w(!0),setTimeout(()=>w(!1),n),await e(t),b(!1)}catch(o){const m=o instanceof Error?o.message:"An error occurred during submission";T(m),b(!1)}},n)},[e,s,t,n]),{handleSubmit:g.useCallback(c=>{f.current?.(c)},[]),isSubmitting:d,isThrottled:R,submitError:v,setSubmitError:T}}const N={spacingBase:"1rem",borderRadius:"0.5rem",fontSize:"1rem",fontWeight:"500",fontFamily:'"Inter", "Segoe UI", system-ui, sans-serif',transitionDuration:"0.2s",shadowSm:"0 1px 2px rgba(0, 0, 0, 0.05)",shadowMd:"0 4px 12px rgba(0, 0, 0, 0.08)",shadowLg:"0 8px 24px rgba(0, 0, 0, 0.12)"},Y={name:"modern",...N,primary:"#1e40af",secondary:"#7c3aed",success:"#10b981",danger:"#f43f5e",warning:"#f59e0b",background:"linear-gradient(135deg, #dbeafe 0%, #f0fdf4 100%)",inputBg:"#ffffff",inputBorder:"#60a5fa",inputBorderHover:"#3b82f6",inputBorderFocus:"#1e40af",inputText:"#0f172a",labelText:"#1e40af",errorText:"#dc2626",successText:"#059669"},ne={name:"dark",...N,primary:"#f43f5e",secondary:"#06b6d4",success:"#34d399",danger:"#ff6b6b",warning:"#fbbf24",background:"linear-gradient(135deg, #0f172a 0%, #1e293b 100%)",inputBg:"#1e293b",inputBorder:"#38bdf8",inputBorderHover:"#22d3ee",inputBorderFocus:"#f43f5e",inputText:"#f1f5f9",labelText:"#f43f5e",errorText:"#ff6b6b",successText:"#34d399"},ae={name:"minimal",...N,borderRadius:"0.25rem",primary:"#d946ef",secondary:"#ec4899",success:"#22d3ee",danger:"#ef4444",warning:"#fbbf24",background:"#ffffff",inputBg:"#f9fafb",inputBorder:"#d946ef",inputBorderHover:"#ec4899",inputBorderFocus:"#d946ef",inputText:"#0f172a",labelText:"#d946ef",errorText:"#ef4444",successText:"#22d3ee"},te={name:"gradient",...N,borderRadius:"0.75rem",primary:"#ec4899",secondary:"#06b6d4",success:"#10b981",danger:"#ff1744",warning:"#ffb300",background:"linear-gradient(135deg, #fce7f3 0%, #e0e7ff 100%)",inputBg:"#fef2f9",inputBorder:"#f472b6",inputBorderHover:"#ec4899",inputBorderFocus:"#ec4899",inputText:"#831843",labelText:"#ec4899",errorText:"#ff1744",successText:"#10b981"},se={name:"ocean",...N,borderRadius:"0.5rem",primary:"#0ea5e9",secondary:"#06b6d4",success:"#10b981",danger:"#f43f5e",warning:"#fbbf24",background:"linear-gradient(135deg, #cffafe 0%, #e0f2fe 100%)",inputBg:"#ecf9fd",inputBorder:"#38bdf8",inputBorderHover:"#0ea5e9",inputBorderFocus:"#0284c7",inputText:"#065f46",labelText:"#0284c7",errorText:"#f43f5e",successText:"#10b981"},oe={name:"sunset",...N,borderRadius:"0.625rem",primary:"#f97316",secondary:"#ec4899",success:"#22c55e",danger:"#f43f5e",warning:"#fbbf24",background:"linear-gradient(135deg, #fed7aa 0%, #fbcfe8 100%)",inputBg:"#fff7ed",inputBorder:"#fb923c",inputBorderHover:"#f97316",inputBorderFocus:"#f97316",inputText:"#7c2d12",labelText:"#f97316",errorText:"#f43f5e",successText:"#22c55e"},ie={name:"purple",...N,borderRadius:"0.625rem",primary:"#a78bfa",secondary:"#ec4899",success:"#06b6d4",danger:"#ff4757",warning:"#fbbf24",background:"linear-gradient(135deg, #ede9fe 0%, #f3e8ff 100%)",inputBg:"#faf5ff",inputBorder:"#c4b5fd",inputBorderHover:"#a78bfa",inputBorderFocus:"#7c3aed",inputText:"#581c87",labelText:"#7c3aed",errorText:"#ff4757",successText:"#06b6d4"},ce={name:"forest",...N,borderRadius:"0.5rem",primary:"#059669",secondary:"#14b8a6",success:"#10b981",danger:"#f43f5e",warning:"#fbbf24",background:"linear-gradient(135deg, #d1fae5 0%, #e0f2fe 100%)",inputBg:"#ecfdf5",inputBorder:"#6ee7b7",inputBorderHover:"#2dd4bf",inputBorderFocus:"#059669",inputText:"#065f46",labelText:"#059669",errorText:"#f43f5e",successText:"#10b981"},le={modern:Y,dark:ne,minimal:ae,gradient:te,ocean:se,sunset:oe,purple:ie,forest:ce};function ue(e){return typeof e=="string"?le[e]||Y:e}function de(e){return{"--form-primary":e.primary,"--form-secondary":e.secondary,"--form-success":e.success,"--form-danger":e.danger,"--form-warning":e.warning,"--form-background":e.background,"--form-input-bg":e.inputBg,"--form-input-border":e.inputBorder,"--form-input-border-hover":e.inputBorderHover,"--form-input-border-focus":e.inputBorderFocus,"--form-input-text":e.inputText,"--form-label-text":e.labelText,"--form-error-text":e.errorText,"--form-success-text":e.successText,"--form-spacing-base":e.spacingBase,"--form-border-radius":e.borderRadius,"--form-font-size":e.fontSize,"--form-font-weight":e.fontWeight,"--form-font-family":e.fontFamily,"--form-transition-duration":e.transitionDuration,"--form-shadow-sm":e.shadowSm,"--form-shadow-md":e.shadowMd,"--form-shadow-lg":e.shadowLg}}const fe=({field:e,value:s,error:t,touched:n,onChange:i,onBlur:d,disabled:b=!1,showAnimation:v=!0})=>{const T=g.useCallback(o=>{const m=o.target.type==="checkbox"?o.target.checked:o.target.value;i(e.name,m)},[e.name,i]),R=g.useCallback(()=>{d(e.name)},[e.name,d]),w=g.useCallback(()=>{},[]),f=n&&t,l=["form-group",f&&v&&"has-error"].filter(Boolean).join(" "),c=["form-input",f&&"error",!f&&s&&"success"].filter(Boolean).join(" ");switch(e.type){case"textarea":return a.jsxs("div",{className:l,children:[e.label&&a.jsxs("label",{className:`form-label ${f?"error":""}`,children:[e.label,e.required&&a.jsx("span",{className:"required-indicator",children:"*"})]}),a.jsx("textarea",{id:e.name,name:e.name,placeholder:e.placeholder,value:String(s??""),onChange:T,onBlur:R,onFocus:w,disabled:b||e.disabled,rows:e.rows||4,className:`${c} form-textarea`,"aria-invalid":!!f,"aria-describedby":f?`${e.name}-error`:void 0}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]});case"select":return a.jsxs("div",{className:l,children:[e.label&&a.jsxs("label",{className:`form-label ${f?"error":""}`,children:[e.label,e.required&&a.jsx("span",{className:"required-indicator",children:"*"})]}),a.jsxs("select",{id:e.name,name:e.name,value:String(s??""),onChange:T,onBlur:R,onFocus:w,disabled:b||e.disabled,className:`${c} form-select`,"aria-invalid":!!f,"aria-describedby":f?`${e.name}-error`:void 0,children:[a.jsxs("option",{value:"",children:["Select ",e.label||e.name]}),e.options?.map(o=>a.jsx("option",{value:o.value,children:o.label},o.value))]}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]});case"checkbox":if(e.options&&e.options.length>0){const o=Array.isArray(s)?s:[];return a.jsxs("div",{className:l,children:[e.label&&a.jsxs("label",{className:`form-label ${f?"error":""}`,children:[e.label,e.required&&a.jsx("span",{className:"required-indicator",children:"*"})]}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem",marginTop:"0.5rem"},children:e.options.map(m=>a.jsxs("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[a.jsx("input",{type:"checkbox",name:e.name,value:m.value,checked:o.includes(m.value),onChange:h=>{let x=o.slice();h.target.checked?x.push(m.value):x=x.filter(k=>k!==m.value),i(e.name,x)},onBlur:R,disabled:b||e.disabled,className:"form-checkbox"}),a.jsx("span",{style:{marginLeft:"0.5rem"},children:m.label})]},m.value))}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]})}return a.jsxs("div",{className:l,children:[a.jsxs("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[a.jsx("input",{id:e.name,name:e.name,type:"checkbox",checked:!!s,onChange:T,onBlur:R,onFocus:w,disabled:b||e.disabled,className:"form-checkbox","aria-invalid":!!f}),a.jsx("span",{className:"form-label",style:{margin:0},children:e.label||e.placeholder})]}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]});case"radio":return a.jsxs("div",{className:l,children:[e.label&&a.jsxs("label",{className:"form-label",children:[e.label,e.required&&a.jsx("span",{className:"required-indicator",children:"*"})]}),a.jsx("fieldset",{children:e.options?.map(o=>a.jsxs("label",{style:{display:"flex",alignItems:"center",marginBottom:"0.5rem",cursor:"pointer"},children:[a.jsx("input",{name:e.name,type:"radio",value:o.value,checked:s===o.value,onChange:T,onBlur:R,disabled:b||e.disabled,className:"form-radio"}),a.jsx("span",{style:{marginLeft:"0.5rem"},children:o.label})]},o.value))}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]});default:return a.jsxs("div",{className:l,children:[e.label&&a.jsxs("label",{className:`form-label ${f?"error":""}`,children:[e.label,e.required&&a.jsx("span",{className:"required-indicator",children:"*"})]}),a.jsx("input",{id:e.name,name:e.name,type:e.type||"text",placeholder:e.placeholder,value:String(s??""),onChange:T,onBlur:R,onFocus:w,disabled:b||e.disabled,minLength:e.minLength,maxLength:e.maxLength,pattern:typeof e.pattern=="string"?e.pattern:void 0,className:c,"aria-invalid":!!f,"aria-describedby":f?`${e.name}-error`:void 0}),f&&a.jsxs("div",{id:`${e.name}-error`,className:"form-error",children:[a.jsx("span",{className:"error-icon",children:"⚠"}),a.jsx("span",{children:t})]})]})}},we=({fields:e,onSubmit:s,validationMode:t="onBlur",customization:n,submitButtonText:i="Submit",resetButtonText:d="Reset",showResetButton:b=!1,disabled:v=!1,className:T,submitThrottleMs:R=1e3,theme:w="modern"})=>{const{formState:f,setFieldValue:l,setFieldTouched:c,validateFormFields:o,resetForm:m,setFormState:h}=ee(e,t),{handleSubmit:x,isSubmitting:k,isThrottled:_,submitError:F,setSubmitError:P}=re(s,o,f.values,R,h);g.useEffect(()=>{!Object.values(f.errors).some(Boolean)&&F&&P(null)},[f.errors,F,P]);const D=ue(w),U=de(D),W=["form-container",T,n?.containerClass].filter(Boolean).join(" "),O=["form-button","primary",n?.buttonClass,k&&"loading"].filter(Boolean).join(" "),H=["form-button","secondary",n?.buttonClass].filter(Boolean).join(" "),z=[n?.formClass].filter(Boolean).join(" ");return a.jsx("div",{style:U,children:a.jsx("form",{onSubmit:x,className:z,children:a.jsxs("div",{className:W,children:[e.map(S=>a.jsx(fe,{field:S,value:f.values[S.name],error:f.errors[S.name]||"",touched:f.touched[S.name]||!1,onChange:l,onBlur:c,disabled:v||S.disabled,showAnimation:n?.showAnimations!==!1},S.name)),F&&a.jsx("div",{className:"error-boundary",children:a.jsxs("span",{children:["⚠ ",F]})}),a.jsxs("div",{style:{display:"flex",gap:"1rem",marginTop:"1rem"},children:[a.jsx("button",{type:"submit",disabled:v||k||_,className:O,children:k?"Submitting...":i}),b&&a.jsx("button",{type:"button",onClick:m,disabled:v||k,className:H,children:d})]})]})})})};p.DynamicForm=we,p.FormField=fe,p.darkTheme=ne,p.forestTheme=ce,p.generateThemeVariables=de,p.getTheme=ue,p.gradientTheme=te,p.isEmpty=Re,p.minimalTheme=ae,p.modernTheme=Y,p.oceanTheme=se,p.purpleTheme=ie,p.sanitizeValues=ke,p.sunsetTheme=oe,p.themes=le,p.useFormSubmission=re,p.useFormValidator=ee,p.validateField=I,p.validateForm=$,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})}));