reactaform 1.9.1 → 1.9.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/reactaform.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react/jsx-runtime"),J=require("react"),ft=require("react-dom");function ar(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const l=ar(J),de=ar(ft),pt=`/* ReactaForm CSS Custom Properties (CSS Variables) */\r
|
|
2
2
|
\r
|
|
3
3
|
/* Default Light Theme */\r
|
|
4
4
|
:root {\r
|
|
@@ -390,9 +390,9 @@
|
|
|
390
390
|
\r
|
|
391
391
|
\r
|
|
392
392
|
}\r
|
|
393
|
-
`,Ne=G.createContext(void 0),O=()=>{const e=G.useContext(Ne);if(!e)throw new Error("❌ useReactaFormContext must be used within a <ReactaFormProvider>");return e};class ne{map={};register(r,t){if(!r||typeof r!="string")throw new Error("Registry key must be a non-empty string");this.map[r]=t}get(r){if(!(!r||typeof r!="string"))return this.map[r]}has(r){return!r||typeof r!="string"?!1:r in this.map}list(){return Object.keys(this.map)}entries(){return Object.entries(this.map)}values(){return Object.values(this.map)}size(){return Object.keys(this.map).length}unregister(r){return r in this.map?(delete this.map[r],!0):!1}clear(){this.map={}}registerAll(r){Array.isArray(r)?r.forEach(([t,n])=>{t&&typeof t=="string"&&this.register(t,n)}):r&&typeof r=="object"&&Object.entries(r).forEach(([t,n])=>{t&&typeof t=="string"&&this.register(t,n)})}getOrDefault(r,t){const n=this.get(r);return n!==void 0?n:t}}const or=typeof process<"u"&&process.env.NODE_ENV==="test";function sr(e,r=300,t){const n=G.useRef(),a=G.useRef(e),o=G.useRef(null),c=t?.leading===!0,i=t?.trailing!==!1;G.useEffect(()=>{a.current=e},[e]),G.useEffect(()=>()=>{n.current&&clearTimeout(n.current)},[]);const s=p=>{a.current(...p)},d=G.useCallback(()=>{n.current&&(clearTimeout(n.current),n.current=void 0),o.current=null},[]),m=G.useCallback(()=>{n.current&&(clearTimeout(n.current),n.current=void 0),i&&o.current&&(s(o.current),o.current=null)},[i]);return{callback:G.useCallback((...p)=>{if(or){s(p);return}const b=c&&!n.current;o.current=p,b&&s(p),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{n.current=void 0,i&&o.current&&(s(o.current),o.current=null)},r)},[c,i,r]),cancel:d,flush:m}}const V={field:"reactaform-field",label:"reactaform-label",input:"reactaform-input",textInput:"reactaform-input--text",inputNumber:"reactaform-input--number",inputSelect:"reactaform-select",rangeInput:"reactaform-input--range",button:"reactaform-button",description:"reactaform-description"},B=(...e)=>{const r=[];for(const t of e)t&&(typeof t=="string"?r.push(t):typeof t=="object"&&Object.entries(t).forEach(([n,a])=>{a&&r.push(n)}));return r.join(" ")};function ae(e){return e.toLowerCase().includes("dark")}function pt(e){if(!e)return!1;const r=e.trim();let t=0,n=0,a=0;if(r.startsWith("#")){const c=r.substring(1);c.length===3||c.length===4?(t=parseInt(c[0]+c[0],16),n=parseInt(c[1]+c[1],16),a=parseInt(c[2]+c[2],16)):(c.length===6||c.length===8)&&(t=parseInt(c.substring(0,2),16),n=parseInt(c.substring(2,4),16),a=parseInt(c.substring(4,6),16))}else if(r.startsWith("rgb")){const c=r.match(/\d+(\.\d+)?/g);c&&c.length>=3&&(t=Math.min(255,Math.max(0,parseFloat(c[0]))),n=Math.min(255,Math.max(0,parseFloat(c[1]))),a=Math.min(255,Math.max(0,parseFloat(c[2]))))}else return!1;return(t*299+n*587+a*114)/1e3<128}const gt=()=>f.jsxs("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[f.jsx("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}),f.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),ht=({content:e,size:r="medium",animation:t=!0})=>{const{t:n,theme:a,formStyle:o,fieldStyle:c}=O(),[i,s]=l.useState(!1),[d,m]=l.useState({x:0,y:0}),[u,p]=l.useState(!1),b=l.useRef(null),C=l.useRef(null),N=l.useRef(null),h=l.useId(),y=ae(a),[I,F]=l.useState(void 0);l.useLayoutEffect(()=>{if(!b.current)return;const j="rgba(255,255,255,0.1)",g=getComputedStyle(b.current).getPropertyValue("--reactaform-primary-bg").trim();if(g&&typeof CSS<"u"&&CSS.supports?.("color: color-mix(in srgb, red, blue)")){const w=pt(g)?"black":"white";F(`color-mix(in srgb, var(--reactaform-primary-bg) 85%, ${w} 15%)`)}else F(j)},[]);const E=l.useMemo(()=>{const v={icon:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"1.2em",height:"1.2em",fontSize:"0.9em",fontWeight:"bold",borderRadius:"50%",backgroundColor:I??(y?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"),color:`var(--reactaform-text-color, ${y?"#f0f0f0":"#333"})`,border:`1px solid ${y?"rgba(255,255,255,0.2)":"rgba(0,0,0,0.1)"}`,cursor:"pointer",transition:t?"all 0.2s ease":void 0,marginLeft:"0.3em"},text:{...{small:{padding:"4px 8px",fontSize:"11px",maxWidth:"200px"},medium:{padding:"6px 10px",fontSize:"12px",maxWidth:"240px"},large:{padding:"8px 12px",fontSize:"13px",maxWidth:"280px"}}[r],position:"fixed",backgroundColor:`var(--reactaform-tooltip-color-bg, ${y?"rgba(45,45,45,0.95)":"rgba(34, 10, 170, 0.92)"})`,color:`var(--reactaform-tooltip-color, ${y?"#f0f0f0":"#fff"})`,borderRadius:"6px",border:`1px solid ${y?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`,boxShadow:y?"0 8px 16px rgba(0,0,0,0.4)":"0 6px 18px rgba(0,0,0,0.12)",zIndex:2147483647,opacity:0,pointerEvents:"none",transition:t?"opacity 0.2s ease":void 0,whiteSpace:"normal",wordBreak:"break-word",boxSizing:"border-box"},textVisible:{opacity:1,pointerEvents:"auto"}},g=(x,k,S)=>{const T=x?.[k];return(S&&T?T[S]:void 0)??{}};return{icon:{...v.icon,...g(o,"tooltip","icon"),...g(c,"tooltip","icon")},text:{...v.text,...g(o,"tooltip","text"),...g(c,"tooltip","text")},textVisible:v.textVisible}},[y,r,t,o,c,I]);l.useLayoutEffect(()=>{if(!i||!b.current||!C.current){p(!1);return}const j=b.current.getBoundingClientRect();N.current=j;const v=C.current.getBoundingClientRect(),g=8,w=window.innerWidth,x=window.innerHeight,k=-4;let S=j.right+g,$=j.top+j.height/2-v.height/2+k;S+v.width>w-g&&(S=j.left-g-v.width),S=Math.max(g,Math.min(S,w-v.width-g)),$=Math.max(g,Math.min($,x-v.height-g)),m({x:S,y:$}),p(!0);const T=b.current.closest("[data-reactaform-theme]"),_=document.getElementById("popup-root");if(T&&_){const ce=getComputedStyle(T);_.style.setProperty("--reactaform-tooltip-color-bg",ce.getPropertyValue("--reactaform-tooltip-color-bg")),_.style.setProperty("--reactaform-tooltip-color",ce.getPropertyValue("--reactaform-tooltip-color"))}},[i]);const M=typeof document<"u"?document.getElementById("popup-root"):null,R=f.jsx("div",{ref:C,"data-tooltip-id":h,style:{...E.text,transform:u?"translateY(0) scale(1)":"translateY(-4px) scale(0.98)",transition:"opacity 120ms ease, transform 120ms ease, visibility 120ms ease",width:240,...u?E.textVisible:{},top:d.y,left:d.x},children:n(e)});return f.jsxs(f.Fragment,{children:[f.jsx("span",{"data-testid":"tooltip-icon",ref:b,"aria-describedby":i?h:void 0,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),style:{...E.icon},children:f.jsx(gt,{})}),i&&(M?de.createPortal(R,M):R)]})},ir=l.memo(ht),be=l.memo(({field:e,error:r,children:t,showLabel:n=!0})=>{const{t:a}=O(),o=e.labelLayout==="column-center"?"center":"left",c=l.useMemo(()=>{const d={display:"flex",flexDirection:"column",gap:"var(--reactaform-label-gap, 4px)"};return d["--label-align"]=o,d},[o]),i=l.useMemo(()=>({textAlign:o,width:"100%",minWidth:"unset",display:"block",marginBottom:"10px"}),[o]),s=l.useMemo(()=>({display:"flex",alignItems:"center",gap:"var(--reactaform-inline-gap, 8px)",width:"100%"}),[]);return f.jsxs("div",{className:`${V.field} column-layout`,style:c,children:[n&&f.jsx("label",{id:`${e.name}-label`,className:V.label,htmlFor:e.name,style:i,children:a(e.displayName)}),f.jsxs("div",{style:s,children:[f.jsx("div",{style:{flex:1,minWidth:0},children:t}),e.tooltip&&f.jsx(ir,{content:e.tooltip})]}),r&&f.jsx(ke,{id:`${e.name}-error`,children:r})]})});be.displayName="ColumnFieldLayout";const cr=l.memo(({field:e,error:r,children:t,rightAlign:n=!1})=>{const{t:a}=O(),o=l.useMemo(()=>({display:"flex",alignItems:"center",gap:"3px"}),[]);return f.jsxs("div",{className:`${V.field} row-layout`,children:[f.jsx("label",{id:`${e.name}-label`,className:V.label,htmlFor:e.name,style:{textAlign:"left"},children:a(e.displayName)}),f.jsxs("div",{children:[f.jsxs("div",{style:o,children:[n?f.jsx("div",{style:{display:"flex",flex:1,justifyContent:"flex-end"},children:t}):t,e.tooltip&&f.jsx(ir,{content:e.tooltip})]}),r&&f.jsx(ke,{id:`${e.name}-error`,children:r})]})]})});cr.displayName="RowFieldLayout";const z=l.memo(({field:e,error:r,children:t,rightAlign:n=!1})=>e.labelLayout==="column-left"||e.labelLayout==="column-center"?f.jsx(be,{field:e,error:r,showLabel:!0,children:t}):e.type==="checkbox"||e.type==="switch"?f.jsx(be,{field:e,error:r,showLabel:!1,children:t}):f.jsx(cr,{field:e,error:r,rightAlign:n,children:t}));z.displayName="StandardFieldLayout";const ke=l.memo(({children:e,id:r})=>{const t=l.useMemo(()=>({color:"var(--reactaform-error-color, red)",fontSize:"13px",marginTop:"4px",fontWeight:"var(--reactaform-font-weight)",display:"flex",flex:1,justifyContent:"flex-start",alignItems:"flex-start",userSelect:"none"}),[]);return f.jsx("div",{id:r,style:t,children:e})});ke.displayName="ErrorDiv";const lr=l.memo(({name:e,onChange:r})=>{const{t}=O();return f.jsxs("div",{style:{marginBottom:16},children:[f.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 2fr",gap:12,alignItems:"center"},children:[f.jsx("label",{htmlFor:"instance-name-input",style:{margin:0,fontSize:"0.95em",fontWeight:500,color:"var(--reactaform-text-color, #333)"},children:t("Instance Name")}),f.jsx("input",{id:"instance-name-input",type:"text",value:e,className:B(V.input,V.textInput),onChange:n=>r(n.target.value),placeholder:t("Enter instance name")})]}),f.jsx("div",{style:{height:"1px",backgroundColor:"var(--reactaform-separator, #e6e6e6)",marginTop:12,marginBottom:12}})]})});lr.displayName="InstanceName";class bt extends ne{registerInCategory(r,t,n){this.get(r)||this.register(r,{});const a=this.get(r);a[t]=n}getFromCategory(r,t){return this.get(r)?.[t]}listFromCategory(r){return Object.keys(this.get(r)||{})}listCategories(){return this.list()}}const ur=new ne,mr=new bt,je=new ne;function dr(e,r){ur.register(e,r)}function fr(e,r,t){mr.registerInCategory(e,r,t)}function pr(e,r){if(mn(e)){console.warn(`[ReactaForm] Can't override builtin type field validation handler for type "${e}".`);return}je.register(e,r)}function H(e,r){je.register(e,r)}function gr(e,r){return mr.getFromCategory(e,r)||null}function hr(e){return ur.get(e)||null}function br(e){return je.get(e)||null}function yt(e){return(typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}const We=new Map,_e=new Map;function Ie(e,r,t,n){if(!r||!r.validationHandlerName)return null;let a,o;if(typeof r.validationHandlerName=="string")a=e,o=r.validationHandlerName;else if(Array.isArray(r.validationHandlerName)){const[s,d]=r.validationHandlerName;if(d)a=s,o=d;else if(s)a=e,o=s;else return null}else return null;const c=`${a}:${o}`;let i=We.get(c);if(i===void 0&&(i=gr(a,o)||null,We.set(c,i)),i)try{return i(r.name,t,n)||null}catch(s){return String(s instanceof Error?s.message:s)}return null}function vt(e,r,t,n){return Ie(e,r,t,n)}function yr(e,r,t,n){const a=br(r.type);if(a){const o=a(r,t,n);if(o)return o}else if(String(t??"").trim()==="")return r.required?n("Value required"):null;return Ie(e,r,t,n)}async function xt(e,r,t){if(!e||typeof e.validationHandlerName!="string")return null;const n=e.validationHandlerName;let a=_e.get(n);if(a===void 0&&(a=hr(n)||null,_e.set(n,a)),a)try{const o=a(r,t);return yt(o)?await o||null:o||null}catch(o){return[String(o instanceof Error?o.message:o)]}return null}function L(e,r){const{definitionName:t,t:n,fieldValidationMode:a}=O();return l.useCallback(o=>a==="realTime"?yr(t,e,o,n):r??null,[t,e,n,a,r])}const vr=({field:e,value:r=!1,onChange:t,onError:n,error:a})=>{const{t:o}=O(),i=L(e,a)(r);l.useEffect(()=>{a||n?.(i)},[i,a,n]);const s=l.useCallback(u=>{t?.(u.target.checked)},[t]),d=l.useCallback(u=>{(u.key===" "||u.key==="Space"||u.key==="Spacebar"||u.code==="Space"||u.key==="Enter")&&(u.preventDefault(),t?.(!r))},[t,r]),m=e.name;return f.jsx(z,{field:e,rightAlign:!1,error:i,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[f.jsx("label",{className:V.label,htmlFor:m,style:{textAlign:"left",justifyContent:"flex-start"},children:o(e.displayName)}),f.jsx("input",{id:m,"data-testid":"boolean-checkbox",type:"checkbox",checked:r,onChange:s,onKeyDown:d,"aria-checked":r,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0,style:{cursor:"pointer",margin:"8px 0",width:"1.2em",height:"1.2em",verticalAlign:"middle",accentColor:"#0000FF"}})]})})};vr.displayName="CheckboxInput";const wt=l.memo(vr);function W({value:e,onChange:r,onError:t,validate:n}){const a=l.useRef(null),o=l.useRef(null),c=l.useRef(t),[i,s]=l.useState(null);l.useEffect(()=>{c.current=t},[t]),l.useEffect(()=>{const m=String(e??"");if(!(document.activeElement===a.current)){const p=n(m);p!==o.current&&(o.current=p,c.current?.(p??null),s(p)),a.current&&a.current.value!==m&&(a.current.value=m)}},[e,n]);const d=l.useCallback(m=>{const u=m.target.value,p=n(u);p!==o.current&&(o.current=p,s(p),c.current?.(p??null)),r?.(u)},[r,n]);return{inputRef:a,error:i,handleChange:d}}const Ke=[{label:"Black",value:"#000000"},{label:"White",value:"#ffffff"},{label:"Red",value:"#ff0000"},{label:"Green",value:"#008000"},{label:"Blue",value:"#0000ff"},{label:"Yellow",value:"#ffff00"},{label:"Cyan",value:"#00ffff"},{label:"Magenta",value:"#ff00ff"},{label:"Orange",value:"#ffa500"},{label:"Purple",value:"#800080"},{label:"Brown",value:"#a52a2a"},{label:"Gray",value:"#808080"},{label:"Light Gray",value:"#d3d3d3"},{label:"Pink",value:"#ffc0cb"}],St=/^#([0-9A-F]{3}){1,2}$/i,Ct="#000000",Nt=e=>St.test(e),pe=e=>{if(!e||!Nt(e))return Ct;const r=e.toLowerCase();return r.length===4?"#"+r.slice(1).split("").map(t=>t+t).join(""):r},kt=e=>{const r=parseInt(e.slice(1),16);return{r:r>>16&255,g:r>>8&255,b:r&255}},xr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=O(),c=L(e,a),i=l.useMemo(()=>pe(r),[r]),{inputRef:s,error:d,handleChange:m}=W({value:i,onChange:t,onError:n,validate:c}),[u,p]=l.useState(i);l.useEffect(()=>{p(i)},[i]);const b=l.useCallback(E=>{const M=pe(E.target.value);p(M),m({target:{value:M}})},[m]),C=l.useCallback(E=>{const M=pe(E.target.value);p(M),m({target:{value:M}})},[m]),h=l.useMemo(()=>new Set(Ke.map(E=>E.value)),[]).has(u),{r:y,g:I,b:F}=l.useMemo(()=>kt(u),[u]);return f.jsx(z,{field:e,error:d,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[f.jsxs("select",{id:e.name,value:u,onChange:C,className:B(V.input,V.inputSelect),"aria-invalid":!!d,children:[Ke.map(E=>f.jsx("option",{value:E.value,children:o(E.label)},E.value)),!h&&f.jsxs("option",{value:u,children:["(",y,", ",I,", ",F,")"]})]}),f.jsx("label",{style:{width:"2.5em",height:"1.8em",border:"1px solid #ccc",borderRadius:4,backgroundColor:u,cursor:"pointer",overflow:"hidden",flexShrink:0},children:f.jsx("input",{ref:s,id:`${e.name}-color`,type:"color",defaultValue:u,onChange:b,style:{opacity:0,width:"100%",height:"100%"},"aria-invalid":!!d})})]})})};xr.displayName="ColorInput";const jt=l.memo(xr),Je=e=>{if(!e)return null;const r=new Date(e);return isNaN(r.getTime())?null:r},Ge=e=>{if(!e)return"";if(/^\d{4}-\d{2}-\d{2}$/.test(e))return Je(e)?e:"";const t=Je(e);if(t){const n=t.getUTCFullYear(),a=String(t.getUTCMonth()+1).padStart(2,"0"),o=String(t.getUTCDate()).padStart(2,"0");return`${n}-${a}-${o}`}return""},wr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),c=Ge(r),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"date",ref:i,defaultValue:Ge(r),onChange:d,className:B(V.input,V.textInput),...e.minDate?{min:e.minDate}:{},...e.maxDate?{max:e.maxDate}:{},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};wr.displayName="DateInput";const It=l.memo(wr),Sr=({field:e})=>{const{t:r}=O(),{displayText:t="",textAlign:n="left",allowHtml:a=!1}=e;return f.jsx("div",{className:V.description,style:{textAlign:n},...a?{dangerouslySetInnerHTML:{__html:r(t)}}:{children:r(t)}})};Sr.displayName="Description";const Et=l.memo(Sr),Cr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,theme:c,formStyle:i,fieldStyle:s}=O(),d=l.useRef(null),m=l.useRef(n),[u,p]=l.useState(!1),[b,C]=l.useState(null);l.useEffect(()=>{m.current=n},[n]);const N=L(e,a),[h,y]=l.useState(null),I=l.useRef(null);l.useEffect(()=>{const g=String(r??"");let w=N(g);if(w&&e.options.length>0){const x=String(e.options[0].value);t?.(x),w=null}w!==I.current&&(I.current=w,y(w),m.current?.(w??null))},[r,N,t,e.options]);const F=()=>{if(!d.current)return;const g=d.current.getBoundingClientRect();C({x:g.left,y:g.bottom}),p(w=>!w)},E=g=>{const w=N(g);w!==I.current&&(I.current=w,y(w),m.current?.(w??null)),t?.(g),p(!1)},M=l.useMemo(()=>{const g=e.options.find(w=>String(w.value)===String(r));return g?o(g.label):""},[e.options,r,o]),R=(g,w,x)=>{if(!w)return{};const S=g?.[w];return(x&&S?S[x]:void 0)??{}},j=l.useMemo(()=>({height:"var(--reactaform-input-height, 2.5em)",display:"flex",alignItems:"center",boxSizing:"border-box",padding:"0 0.75em",cursor:"pointer",position:"relative",textAlign:"left",...R(i,"dropdown","control"),...R(s,void 0,"control")}),[i,s]),v=l.useMemo(()=>({position:"absolute",right:"0.7em",top:"50%",transform:"translateY(-50%)",pointerEvents:"none",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",...R(i,"dropdown","arrow"),...R(s,void 0,"arrow")}),[i,s]);return f.jsxs("div",{children:[f.jsx(z,{field:e,error:h,children:f.jsxs("div",{ref:d,className:"reactaform-input",style:j,onClick:F,tabIndex:0,role:"combobox","aria-haspopup":"listbox","aria-expanded":u,"aria-invalid":!!h,"aria-describedby":h?`${e.name}-error`:void 0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),F())},children:[f.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingRight:"1.8em",display:"block"},children:M}),f.jsx("span",{style:v,"aria-hidden":!0,children:"▼"})]})}),u&&b&&f.jsx(Ft,{position:b,options:e.options,selectedValue:String(r),onSelect:E,onClose:()=>p(!1),controlRef:d,theme:c,t:o})]})},Ft=({position:e,options:r,selectedValue:t,onSelect:n,onClose:a,controlRef:o,theme:c,t:i})=>{const s=l.useRef(null),[d,m]=l.useState(-1),{formStyle:u,fieldStyle:p}=O(),b=ae(c??"light");l.useLayoutEffect(()=>{if(!o.current)return;const v=o.current.closest("[data-reactaform-theme]"),g=document.getElementById("popup-root");if(v&&g){const w=getComputedStyle(v);g.style.setProperty("--reactaform-secondary-bg",w.getPropertyValue("--reactaform-secondary-bg")),g.style.setProperty("--reactaform-text-color",w.getPropertyValue("--reactaform-text-color")),g.style.setProperty("--reactaform-option-menu-hover-bg",w.getPropertyValue("--reactaform-option-menu-hover-bg"))}},[o]);const C=(v,g,w)=>{if(!g)return{};const k=v?.[g];return(w&&k?k[w]:void 0)??{}},N=l.useMemo(()=>({maxHeight:200,overflowY:"auto",background:"var(--reactaform-secondary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:4,zIndex:2e3,boxShadow:"var(--reactaform-shadow, 0 2px 8px rgba(0,0,0,0.15))",pointerEvents:"auto",color:"var(--reactaform-text-color, #000)",fontSize:"var(--reactaform-popup-font-size, 0.875rem)",...C(u,"dropdown","popup"),...C(p,void 0,"popup")}),[u,p]),h=l.useMemo(()=>({padding:"6px 8px",cursor:"pointer",display:"flex",alignItems:"center",background:"transparent",color:"var(--reactaform-text-color, #000)",...C(u,"dropdown","option"),...C(p,void 0,"option")}),[u,p]);l.useEffect(()=>{const v=g=>{const w=g.target;!s.current?.contains(w)&&!o.current?.contains(w)&&a()};return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[a,o]),l.useEffect(()=>{if(s.current&&r.length>0){const v=r.findIndex(g=>String(g.value)===t);requestAnimationFrame(()=>m(v>=0?v:0))}},[r,t]),l.useEffect(()=>{if(!s.current||d<0)return;const v=s.current.querySelector(`#opt-${d}`);v&&requestAnimationFrame(()=>v.focus())},[d]);const y=250,I=200,[F,E]=l.useState(null),[M,R]=l.useState(null);if(l.useEffect(()=>{if(typeof window>"u")return;const v=()=>{let x=e.x,k=e.y,S=y;const $=o?.current;if($){const T=$.getBoundingClientRect();x=T.left,k=T.bottom,S=Math.max(80,Math.round(T.width))}x=Math.min(x,window.innerWidth-S),k=Math.min(k,window.innerHeight-I),E({left:x,top:k}),R(S)};v(),window.addEventListener("scroll",v,!0),window.addEventListener("resize",v);let g=null;const w=o?.current;return typeof ResizeObserver<"u"&&w&&(g=new ResizeObserver(()=>v()),g.observe(w)),()=>{window.removeEventListener("scroll",v,!0),window.removeEventListener("resize",v),g&&w&&g.unobserve(w)}},[o,e.x,e.y]),typeof window>"u")return null;let j=document.getElementById("popup-root");return j||(j=document.createElement("div"),j.id="popup-root",document.body.appendChild(j)),de.createPortal(f.jsx("div",{ref:s,role:"listbox","aria-activedescendant":d>=0?`opt-${d}`:void 0,style:{position:"fixed",top:F?F.top:e.y,left:F?F.left:e.x,width:M??y,...N},"data-reactaform-theme":c??"light",children:r.map((v,g)=>{const w=String(v.value)===t,x=b?"var(--reactaform-option-menu-hover-bg, rgba(255,255,255,0.01))":"var(--reactaform-option-menu-hover-bg, #eee)",k={...h,background:g===d?x:h.background,fontWeight:w?"bold":"normal"};return f.jsx("div",{id:`opt-${g}`,onMouseDown:S=>{S.stopPropagation(),n(String(v.value))},onKeyDown:S=>{const $=r.length;switch(S.key){case"ArrowDown":S.preventDefault(),m(T=>(T+1)%$);break;case"ArrowUp":S.preventDefault(),m(T=>(T-1+$)%$);break;case"Home":S.preventDefault(),m(0);break;case"End":S.preventDefault(),m($-1);break;case"Enter":case" ":S.preventDefault(),S.stopPropagation(),n(String(v.value));break;case"Escape":S.preventDefault(),a(),o?.current?.focus();break}},tabIndex:g===d?0:-1,role:"option","aria-selected":w,style:k,onMouseEnter:S=>{S.currentTarget.style.background=x,m(g)},onMouseLeave:S=>{S.currentTarget.style.background="transparent",m($=>$===g?-1:$)},children:i(v.label)},String(v.value))})}),j)};Cr.displayName="DropdownInput";const Mt=l.memo(Cr),Nr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"email",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Nr.displayName="EmailInput";const Vt=l.memo(Nr),kr=({field:e})=>{const{theme:r}=O(),{color:t=ae(r)?"#444444":"#CCCCCC",thickness:n=1,margin:a="8px 0"}=e;return f.jsx("div",{style:{width:"auto",height:"0",borderTop:`${n}px solid ${t}`,margin:a}})};kr.displayName="FieldSeparator";const $t=l.memo(kr),jr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,theme:c}=O(),[i,s]=l.useState(!1),d=l.useRef(null),m=l.useRef(n),u=l.useRef(null),[p,b]=l.useState(null),C=ae(c);l.useEffect(()=>{m.current=n},[n]);const N=(g,w)=>w.some(x=>x.name===g.name&&x.size===g.size&&x.lastModified===g.lastModified),h=L(e,a);l.useEffect(()=>{const g=h(r??[]);t?.(r),g!==u.current&&(u.current=g,b(g),m.current?.(g??null))},[r,h]);const y=g=>{const w=g.target.files;let x=null;if(w&&w.length>0){const S=Array.from(w);if(e.multiple){const $=Array.isArray(r)?r:[],T=S.filter(_=>!N(_,$));x=[...$,...T]}else x=S[0]}const k=h(x??[]);k!==u.current&&(u.current=k,b(k),m.current?.(k??null)),t?.(x),g.target&&(g.target.value="")},I=g=>{g.preventDefault(),g.stopPropagation(),s(!1);const w=g.dataTransfer.files;if(w&&w.length>0){const x=Array.from(w);let k=null;if(e.multiple){const $=Array.isArray(r)?r:[],T=x.filter(_=>!N(_,$));k=[...$,...T]}else k=x[0];const S=h(k);S!==u.current&&(u.current=S,b(S),m.current?.(S??null)),t?.(k)}},F=g=>{g.preventDefault(),g.stopPropagation(),s(!0)},E=g=>{g.preventDefault(),g.stopPropagation(),s(!1)},M=g=>{if(Array.isArray(r)&&typeof g=="number"){const w=r.filter((S,$)=>$!==g),x=w.length>0?w:null,k=h(x??[]);k!==u.current&&(u.current=k,b(k),m.current?.(k??null)),t?.(x)}else{const w=h([]);w!==u.current&&(u.current=w,b(w),m.current?.(w??null)),t?.(null)}},R=()=>{const g=Array.isArray(r)?r:r?[r]:[];return g.length===0?null:f.jsx("div",{style:{marginTop:"8px",marginLeft:"20px",display:"flex",flexDirection:"column",gap:"6px",maxHeight:"200px",overflowY:"auto"},children:g.map((w,x)=>f.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[f.jsx("input",{type:"text",value:w.name,disabled:!0,readOnly:!0,title:w.name,className:"reactaform-input",style:{flex:1,cursor:"default",opacity:.8,minWidth:0}}),f.jsx("button",{type:"button",onClick:()=>M(Array.isArray(r)?x:void 0),"aria-label":o("Remove file"),style:{background:"transparent",border:"none",color:"var(--reactaform-color-error, #ef4444)",cursor:"pointer",padding:"2px 6px",fontSize:"1.125rem",lineHeight:1,borderRadius:"4px",transition:"background-color 0.2s",flexShrink:0},onMouseEnter:k=>{k.currentTarget.style.backgroundColor="var(--reactaform-bg-hover, #fee)"},onMouseLeave:k=>{k.currentTarget.style.backgroundColor="transparent"},children:"×"})]},`${w.name}-${x}`))})},[j,v]=l.useState(!1);return f.jsx(z,{field:e,error:p,children:f.jsxs("div",{style:{width:"100%"},children:[f.jsxs("div",{className:"reactaform-input",onDrop:I,onDragOver:F,onDragLeave:E,onMouseEnter:()=>v(!0),onMouseLeave:()=>v(!1),style:{position:"relative",borderStyle:"dashed",borderColor:i?"var(--reactaform-color-primary, #2563eb)":j?"var(--reactaform-border-hover, #4A4A4A)":p?"var(--reactaform-color-error, #ef4444)":void 0,borderWidth:"1px",borderRadius:"var(--reactaform-border-radius, 4px)",padding:"8px 12px",textAlign:"center",backgroundColor:i?`var(--reactaform-bg-hover, ${C?"#070707":"#eff6ff"})`:void 0,transition:"all 0.2s ease",cursor:"pointer",minHeight:"var(--reactaform-input-height, 34px)",width:"100%",maxWidth:"100%",alignSelf:"stretch",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",userSelect:"none"},onClick:()=>d.current?.click(),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),d.current?.click())},role:"button","aria-label":e.multiple?o("Choose Files or Drag & Drop"):o("Choose File or Drag & Drop"),"aria-invalid":!!p,"aria-describedby":p?`${e.name}-error`:void 0,children:[f.jsx("input",{id:e.name,ref:d,type:"file",accept:e.accept,multiple:e.multiple,style:{display:"none"},onChange:y}),f.jsx("div",{style:{fontSize:"1.25rem",opacity:.6,lineHeight:1,flexShrink:0},children:"📁"}),f.jsx("div",{style:{fontSize:"0.875rem",fontWeight:400,color:"var(--reactaform-text-color, #111827)",flex:1,textAlign:"left"},children:i?o("Drop files here"):e.multiple?o("Choose Files or Drag & Drop"):o("Choose File or Drag & Drop")})]}),R()]})})};jr.displayName="FileInput";const Rt=l.memo(jr),Ir=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),c=Array.isArray(r)?r.join(", "):String(r??""),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"text",defaultValue:c,ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};Ir.displayName="FloatArrayInput";const At=l.memo(Ir),Er=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",ref:c,defaultValue:String(r??""),onChange:s,className:B(V.input,V.inputNumber),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Er.displayName="FloatInput";const Dt=l.memo(Er);function Pt(){try{return"/"}catch{}try{if(typeof process<"u"&&process?.env?.PUBLIC_URL)return process.env.PUBLIC_URL}catch{}return"/"}const Fr=({field:e,value:r})=>{const{language:t,t:n}=O(),a=e.alignment||"center",o={left:"flex-start",center:"center",right:"flex-end"},c=typeof r=="string"?r:"";let i=c&&c.trim()!==""?c:typeof e.defaultValue=="string"?e.defaultValue:"";i&&!i.startsWith("/")&&(i=`${Pt()}${i}`);const s=e.localized?.split(";").map(h=>h.trim()),[d,m]=l.useState(i||""),u=l.useRef(i||null);if(l.useEffect(()=>{if(!i)return;const h=i.split("/"),y=h.pop(),I=y.lastIndexOf(".");if(I===-1)return;const F=y.substring(0,I),E=y.substring(I);let M=null;s?.includes(t)&&(M=`${F}_${t}${E}`);const R=new AbortController;if(M){const j=[...h,M].join("/");fetch(j,{method:"HEAD",signal:R.signal}).then(v=>{const g=v.ok?j:i;g!==u.current&&(u.current=g,m(g))}).catch(()=>{i!==u.current&&(u.current=i,m(i))})}else{const j=i;j!==u.current&&(u.current=j,requestAnimationFrame(()=>m(j)))}return()=>{R.abort()}},[i,t,s]),!d)return null;const{width:p,height:b}=e,C={},N={borderRadius:"8px",objectFit:"contain",boxShadow:"0 2px 6px rgba(0,0,0,0.1)",margin:"0 0 8px 0"};return p&&b?(C.width=p,C.height=b,N.width=`${p}px`,N.height=`${b}px`):p&&!b?(C.width=p,N.width=`${p}px`,N.height="auto"):!p&&b&&(C.height=b,N.width="auto",N.height=`${b}px`),f.jsx(z,{field:e,children:f.jsx("div",{"data-testid":"image-wrapper",style:{display:"flex",justifyContent:o[a]||"center",margin:"0 0"},children:f.jsx("img",{src:d,alt:n?.(e.displayName||"Image")||e.displayName||"Image",...C,style:N})})})};Fr.displayName="ImageDisplay";const zt=l.memo(Fr),Mr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),c=Array.isArray(r)?r.join(", "):String(r??""),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"text",defaultValue:c,ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};Mr.displayName="IntegerArrayInput";const Lt=l.memo(Mr),Vr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.inputNumber),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Vr.displayName="IntegerInput";const Ot=l.memo(Vr),$r=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("textarea",{id:e.name,defaultValue:String(r??""),ref:c,onChange:s,style:{resize:"vertical",minHeight:e.minHeight??"80px",width:"100%",boxSizing:"border-box"},className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};$r.displayName="MultilineTextInput";const Tt=l.memo($r),Rr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=l.useRef(n);l.useEffect(()=>{o.current=n},[n]);const{t:c,theme:i,formStyle:s,fieldStyle:d}=O(),m=(x,k,S)=>{if(!k)return{};const T=x?.[k];return(S&&T?T[S]:void 0)??{}},u=l.useRef(null),[p,b]=l.useState(!1),[C,N]=l.useState(null),h=l.useMemo(()=>e.options.map(x=>({value:x.value,label:c(x.label)})),[e.options,c]),y=l.useMemo(()=>{const x=Array.isArray(r)?r:[],k=new Set(h.map(S=>S.value));return x.filter(S=>k.has(S))},[r,h]),I=L(e,a),[F,E]=l.useState(null),M=l.useRef(null);l.useEffect(()=>{const x=I(Array.isArray(r)?r:[]);x!==M.current&&(M.current=x,E(x),o.current?.(x??null))},[r,I]);const R=()=>{if(!u.current)return;const x=u.current.getBoundingClientRect();N({x:x.left,y:x.bottom}),b(k=>!k)},j=x=>{const k=y.includes(x)?y.filter($=>$!==x):[...y,x],S=I(k);S!==M.current&&(M.current=S,E(S),o.current?.(S??null)),t?.(k)},v=l.useMemo(()=>({height:"var(--reactaform-input-height, 2.5rem)",display:"flex",alignItems:"center",cursor:"pointer",position:"relative",textAlign:"left",...m(s,"multiSelect","control"),...m(d,void 0,"control")}),[s,d]),g=l.useMemo(()=>({position:"absolute",right:"1.5em",top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",padding:0,...m(s,"multiSelect","clearButton"),...m(d,void 0,"clearButton")}),[s,d]),w=l.useMemo(()=>({position:"absolute",right:"0.7em",top:"50%",transform:"translateY(-50%)",pointerEvents:"none",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",...m(s,"multiSelect","arrow"),...m(d,void 0,"arrow")}),[s,d]);return f.jsxs("div",{children:[f.jsx(z,{field:e,error:F,children:f.jsx("div",{style:{width:"100%"},children:f.jsxs("div",{ref:u,className:"reactaform-multiselection-control reactaform-input",style:v,onClick:R,role:"button","aria-haspopup":"listbox","aria-expanded":p,"aria-invalid":!!F,"aria-describedby":F?`${e.name}-error`:void 0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),R())},children:[f.jsxs("span",{style:{flex:1,color:"var(--reactaform-text-muted, #888)"},children:[y.length," / ",h.length," selected"]}),y.length>0&&f.jsx("button",{type:"button","aria-label":"Clear selections",onClick:x=>{x.stopPropagation(),t?.([])},style:g,children:f.jsx("span",{style:g,"aria-hidden":!0,children:"✖"})}),f.jsx("span",{style:w,"aria-hidden":!0,children:"▼"})]})})}),p&&C&&f.jsx(Ht,{position:C,options:h,selectedValues:y,onToggleOption:j,onClose:()=>b(!1),controlRef:u,theme:i})]})},Ht=({position:e,options:r,selectedValues:t,onToggleOption:n,onClose:a,controlRef:o,theme:c})=>{const i=l.useRef(null),[s,d]=l.useState(-1),{formStyle:m,fieldStyle:u}=O(),p=ae(c??"light");l.useLayoutEffect(()=>{if(!o.current)return;const j=o.current.closest("[data-reactaform-theme]"),v=document.getElementById("popup-root");if(j&&v){const g=getComputedStyle(j);v.style.setProperty("--reactaform-secondary-bg",g.getPropertyValue("--reactaform-secondary-bg")),v.style.setProperty("--reactaform-text-color",g.getPropertyValue("--reactaform-text-color")),v.style.setProperty("--reactaform-option-menu-hover-bg",g.getPropertyValue("--reactaform-option-menu-hover-bg"))}},[o]);const b=(j,v,g)=>{if(!v)return{};const x=j?.[v];return(g&&x?x[g]:void 0)??{}},C=l.useMemo(()=>({maxHeight:200,overflowY:"auto",background:"var(--reactaform-secondary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:4,zIndex:2e3,boxShadow:"var(--reactaform-shadow, 0 2px 8px rgba(0,0,0,0.15))",pointerEvents:"auto",color:"var(--reactaform-text-color, #000)",fontSize:"var(--reactaform-popup-font-size, 0.875rem)",...b(m,"multiSelect","popup"),...b(u,void 0,"popup")}),[m,u]),N=l.useMemo(()=>({padding:"6px 8px",cursor:"pointer",display:"flex",alignItems:"center",background:"transparent",color:"var(--reactaform-text-color, #000)",...b(m,"multiSelect","option"),...b(u,void 0,"option")}),[m,u]);l.useEffect(()=>{const j=v=>{const g=v.target;!i.current?.contains(g)&&!o.current?.contains(g)&&a()};return document.addEventListener("mousedown",j),()=>document.removeEventListener("mousedown",j)},[a,o]),l.useEffect(()=>{i.current&&r.length>0&&requestAnimationFrame(()=>d(j=>j===-1?0:j))},[r.length]),l.useEffect(()=>{if(!i.current||s<0)return;const j=i.current.querySelector(`#multi-opt-${s}`);j&&requestAnimationFrame(()=>j.focus())},[s]);const h=250,y=200,[I,F]=l.useState(null),[E,M]=l.useState(null);if(l.useEffect(()=>{if(typeof window>"u")return;const j=()=>{let w=e.x,x=e.y,k=h;const S=o?.current;if(S){const $=S.getBoundingClientRect();w=$.left,x=$.bottom,k=Math.max(80,Math.round($.width))}w=Math.min(w,window.innerWidth-k),x=Math.min(x,window.innerHeight-y),F({left:w,top:x}),M(k)};j(),window.addEventListener("scroll",j,!0),window.addEventListener("resize",j);let v=null;const g=o?.current;return typeof ResizeObserver<"u"&&g&&(v=new ResizeObserver(()=>j()),v.observe(g)),()=>{window.removeEventListener("scroll",j,!0),window.removeEventListener("resize",j),v&&g&&v.unobserve(g)}},[o,e.x,e.y]),typeof window>"u")return null;let R=document.getElementById("popup-root");return R||(R=document.createElement("div"),R.id="popup-root",document.body.appendChild(R)),de.createPortal(f.jsx("div",{ref:i,role:"listbox","aria-activedescendant":s>=0?`multi-opt-${s}`:void 0,style:{position:"fixed",top:I?I.top:e.y,left:I?I.left:e.x,width:E??h,...C},"data-reactaform-theme":c??"light",children:r.map((j,v)=>{const g=t.includes(j.value),w=p?"var(--reactaform-option-menu-hover-bg, rgba(255,255,255,0.01))":"var(--reactaform-option-menu-hover-bg, #eee)",x={...N,background:v===s?w:N.background};return f.jsxs("div",{id:`multi-opt-${v}`,onMouseDown:k=>{k.stopPropagation(),n(j.value)},onKeyDown:k=>{const S=r.length;switch(k.key){case"ArrowDown":k.preventDefault(),d($=>($+1)%S);break;case"ArrowUp":k.preventDefault(),d($=>($-1+S)%S);break;case"Home":k.preventDefault(),d(0);break;case"End":k.preventDefault(),d(S-1);break;case"Enter":case" ":k.preventDefault(),k.stopPropagation(),n(j.value);break;case"Escape":k.preventDefault(),a(),o?.current?.focus();break}},tabIndex:v===s?0:-1,role:"option","aria-selected":g,style:x,onMouseEnter:k=>{k.currentTarget.style.background=w,d(v)},onMouseLeave:k=>{k.currentTarget.style.background="transparent",d(S=>S===v?-1:S)},children:[f.jsx("input",{type:"checkbox",checked:g,readOnly:!0,style:{marginRight:8,width:"1.125em",height:"1.125em",verticalAlign:"middle",accentColor:p?"#10b981":"#22c55e",cursor:"pointer"}}),j.label]},j.value)})}),R)};Rr.displayName="MultiSelect";const Bt=l.memo(Rr),Ar=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:String(r??""),onChange:t,onError:n,validate:o}),d=Math.max(1,Math.round(e.step??1));return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"number",defaultValue:String(r??""),ref:c,min:e.min??void 0,max:e.max??void 0,step:d,onChange:s,style:{width:"100%",height:"100%"},className:V.input,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Ar.displayName="NumericStepperInput";const qt=l.memo(Ar),Dr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"tel",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Dr.displayName="PhoneInput";const Ut=l.memo(Dr),Pr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=O(),c=L(e,a),i=e.layout?.toLowerCase()==="horizontal"?"row":"column",s=l.useRef(n);l.useEffect(()=>{s.current=n},[n]);const[d,m]=l.useState(null),u=l.useRef(null),p=l.useCallback(h=>{h!==u.current&&(u.current=h,m(h),s.current?.(h))},[]);l.useEffect(()=>{const h=r!=null?String(r):"",y=c(h);if(y&&e.options.length>0){const I=String(e.options[0].value);t?.(I)}p(y)},[r,e.options,c,t,p]);const b=h=>{const y=h.target.value,I=c(y);p(I),t?.(y)},C={display:"flex",flexDirection:i,flexWrap:i==="row"?"wrap":"nowrap",gap:i==="row"?"12px":"4px",alignItems:i==="row"?"center":"stretch",width:"100%",padding:i==="row"?"8px":void 0,boxSizing:"border-box"},N={display:i==="column"?"flex":"inline-flex",gap:"8px",alignItems:"center",whiteSpace:"nowrap",marginBottom:i==="column"?6:0,cursor:"pointer",width:i==="column"?"100%":void 0,justifyContent:"flex-start"};return f.jsx(z,{field:e,error:d,children:f.jsx("div",{className:V.input,"aria-labelledby":`${e.name}-label`,"aria-invalid":!!d,style:C,children:e.options.map(h=>{const y=String(h.value),I=`${e.name}-${y}`;return f.jsxs("label",{className:B(V.label),style:N,onMouseDown:F=>F.preventDefault(),onClick:()=>{String(r??"")!==y&&b({target:{value:y}})},children:[f.jsx("input",{id:I,type:"radio",name:e.name,value:y,checked:String(r??"")===y,onChange:b,style:{width:"1.1em",height:"1.1em"}}),f.jsx("span",{style:{userSelect:"none",textAlign:i==="column"?"left":void 0,flex:i==="column"?1:void 0,fontWeight:400},children:o(h.label)})]},y)})})})};Pr.displayName="RadioInput";const Wt=l.memo(Pr),_t={display:"flex",gap:4},Kt={cursor:"pointer",fontSize:"1.5rem",lineHeight:1,display:"inline-block",marginRight:"0.25rem",userSelect:"none",transition:"color 0.12s ease"},zr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=O(),c=L(e,a),i=e.max??5,s=e.icon?.trim()||"★",[d,m]=l.useState(null),u=l.useRef([]),p=l.useMemo(()=>Math.min(Math.max(r??0,0),i),[r,i]),b=l.useMemo(()=>c(p)??null,[c,p]);l.useEffect(()=>{n?.(b)},[b,n]);const C=l.useCallback(h=>{const y=Math.min(Math.max(h,0),i);t?.(y)},[i,t]),N=l.useCallback((h,y)=>{switch(h.key){case"Enter":case" ":h.preventDefault(),C(y+1);break;case"ArrowRight":case"ArrowUp":h.preventDefault(),u.current[Math.min(i-1,y+1)]?.focus();break;case"ArrowLeft":case"ArrowDown":h.preventDefault(),u.current[Math.max(0,y-1)]?.focus();break}},[i,C]);return f.jsx(z,{field:e,error:b,children:f.jsx("div",{role:"radiogroup","aria-labelledby":`${e.name}-label`,"aria-invalid":!!b,"aria-describedby":b?`${e.name}-error`:void 0,style:_t,children:Array.from({length:i},(h,y)=>{const I=y<p,E=d!==null&&y<=d||I?"gold":"lightgray";return f.jsx("span",{ref:M=>u.current[y]=M,role:"radio",tabIndex:p>0?y===p-1?0:-1:y===0?0:-1,"aria-checked":I,"aria-label":`Rating ${y+1}`,title:o(`${e.displayName} ${y+1}`),onClick:()=>C(y+1),onKeyDown:M=>N(M,y),onMouseEnter:()=>m(y),onMouseLeave:()=>m(null),style:{...Kt,color:E},children:s},y)})})})};zr.displayName="RatingInput";const Jt=l.memo(zr),Lr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=O(),c=L(e,a),{inputRef:i,error:s,handleChange:d}=W({value:r,onChange:t,onError:n,validate:c}),[m,u]=l.useState(!1),p=()=>u(b=>!b);return f.jsx(z,{field:e,error:s,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[f.jsx("input",{id:e.name,type:m?"text":"password",defaultValue:String(r??""),ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1,minWidth:0},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0}),f.jsx("button",{type:"button",onClick:p,"aria-label":o(m?"Hide password":"Show password"),style:{background:"transparent",border:"none",cursor:"pointer",fontSize:16,lineHeight:1,padding:"4px 6px",flexShrink:0},children:m?"🙈":"👁️"})]})})};Lr.displayName="PasswordInput";const Gt=l.memo(Lr),Or=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),c=e.min??0,i=e.max??100,[s,d]=l.useState(()=>isNaN(Number(r))?String(c):String(Number(r)));l.useEffect(()=>{const b=isNaN(Number(r))?String(c):String(Number(r));d(b)},[r,c]);const m=l.useMemo(()=>o(s)??null,[o,s]);l.useEffect(()=>{n?.(m)},[m,n]);const u=l.useCallback(b=>{const C=b.target.value;d(C),t?.(C)},[t]),p=isNaN(Number(s))?String(c):String(Number(s));return f.jsx(z,{field:e,error:m,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",width:"100%"},children:[f.jsx("input",{id:`${e.name}-range`,type:"range",value:p,onChange:u,min:c,max:i,step:"1.0",style:{padding:0,flex:1},className:V.rangeInput,"aria-invalid":!!m,"aria-describedby":m?`${e.name}-error`:void 0}),f.jsx("input",{id:e.name,type:"text",value:s,onChange:u,required:!0,style:{width:"40px",minWidth:"40px",height:"2.3em",textAlign:"center",flexShrink:0},className:B(V.input,V.textInput),"aria-invalid":!!m,"aria-describedby":m?`${e.name}-error`:void 0})]})})};Or.displayName="SliderInput";const Yt=l.memo(Or),Tr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,formStyle:c,fieldStyle:i}=O(),d=L(e,a)(r);l.useEffect(()=>{n?.(d)},[d,n]);const m=c,u=i,p=(F,E,M)=>{if(!E)return{};const R=F?.[E];return(M&&R?R[M]:void 0)??{}},b=l.useMemo(()=>({display:"inline-block",position:"relative",width:44,height:24,...p(m,"switch","label"),...p(u,void 0,"label")}),[m,u]),C=l.useMemo(()=>({position:"absolute",opacity:0,top:0,left:0,width:"100%",height:"100%",margin:0,cursor:"pointer",pointerEvents:"none",...p(m,"switch","hiddenInput"),...p(u,void 0,"hiddenInput")}),[m,u]),N=l.useMemo(()=>({position:"absolute",cursor:"pointer",top:0,left:0,right:0,bottom:0,backgroundColor:"var(--reactaform-switch-off-bg, #ccc)",transition:"0.3s",borderRadius:24,borderWidth:2,borderStyle:"solid",borderColor:"transparent",...p(m,"switch","slider"),...p(u,void 0,"slider")}),[m,u]),h=l.useMemo(()=>({position:"absolute",height:16,width:16,left:2,bottom:2,backgroundColor:"white",transition:"0.3s",borderRadius:"50%",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.3)",...p(m,"switch","knob"),...p(u,void 0,"knob")}),[m,u]),y=!!r,I=()=>{t?.(!y)};return f.jsx(z,{field:e,error:null,rightAlign:!1,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[f.jsx("label",{className:V.label,htmlFor:e.name,style:{textAlign:"left",justifyContent:"flex-start"},children:o(e.displayName)}),f.jsxs("label",{style:b,children:[f.jsx("input",{id:e.name,type:"checkbox",checked:y,readOnly:!0,"aria-label":o(e.displayName),"aria-invalid":!1,"aria-describedby":void 0,style:C,tabIndex:-1}),f.jsx("span",{role:"switch","data-testid":"switch",tabIndex:0,"aria-checked":y,"aria-invalid":!1,"aria-describedby":void 0,onClick:I,onKeyDown:F=>{(F.key===" "||F.key==="Spacebar"||F.key==="Space"||F.key==="Enter")&&(F.preventDefault(),I())},className:`reactaform-switch ${y?"active checked on":""} `,style:y?{...N,backgroundColor:"var(--reactaform-switch-on-bg, #22c55e)",borderColor:"var(--reactaform-switch-on-border, #16a34a)"}:N,children:f.jsx("span",{style:{...h,transform:y?"translateX(20px)":void 0}})})]})]})})};Tr.displayName="SwitchInput";const Xt=l.memo(Tr),ye=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),placeholder:e.placeholder,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};ye.displayName="TextInput";const Hr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"time",ref:c,defaultValue:r,step:e.includeSeconds?1:60,onChange:s,min:typeof e.min=="string"?e.min:void 0,max:typeof e.max=="string"?e.max:void 0,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Hr.displayName="TimeInput";const Zt=l.memo(Hr);function Qt({pos:e,options:r,onClose:t,onClickOption:n}){const a=l.useRef(null),o=l.useRef(!1),[c,i]=l.useState({top:e?.y??0,left:e?.x??0,ready:!1}),s=typeof window<"u"?document.getElementById("popup-root")||document.body:null;return l.useEffect(()=>{function d(m){o.current||m.target.dataset?.popupMenu==="item"||a.current&&m.target instanceof Node&&!a.current.contains(m.target)&&t()}return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[t]),l.useLayoutEffect(()=>{if(!a.current||!e||e.x==null||e.y==null)return;const d=a.current.getBoundingClientRect(),m=window.innerWidth,u=window.innerHeight;let p=e.x,b=e.y;p+d.width>m&&(p=Math.max(0,m-d.width-10)),b+d.height>u&&(b=Math.max(0,e.y-d.height-5)),i({top:b,left:p,ready:!0})},[e,r]),!s||r===void 0||r.length===0||!e||e.x==null||e.y==null?null:de.createPortal(f.jsx("div",{ref:a,onMouseDown:d=>{d.stopPropagation()},style:{position:"fixed",top:c.top,left:c.left,visibility:c.ready?"visible":"hidden",backgroundColor:"var(--reactaform-primary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:"var(--reactaform-border-radius, 4px)",boxShadow:"var(--reactaform-shadow, 0 2px 10px rgba(0,0,0,0.2))",zIndex:9999,minWidth:"var(--reactaform-menu-min-width, 150px)",maxHeight:"var(--reactaform-menu-max-height, 300px)",overflowY:"auto",pointerEvents:"auto"},children:r.map((d,m)=>f.jsx("div",{"data-popup-menu":"item",onMouseDown:u=>{u.stopPropagation(),o.current=!0},onClick:u=>{u.stopPropagation(),u.preventDefault(),n(d),t(),setTimeout(()=>{o.current=!1},100)},style:{padding:"var(--reactaform-menu-item-padding, 8px 12px)",cursor:"pointer",fontSize:"var(--reactaform-menu-item-font-size, 0.8em)",borderBottom:m<r.length-1?"1px solid var(--reactaform-border-light, #eee)":void 0,transition:"background-color 0.15s ease"},onMouseEnter:u=>{u.currentTarget.style.backgroundColor="var(--reactaform-option-menu-hover-bg, #e0e0e0)"},onMouseLeave:u=>{u.currentTarget.style.backgroundColor="transparent"},children:d.label},d.label??m))}),s)}const Ee={length:["m","cm","mm","km","in","ft","yd","mi"],area:["m^2","cm^2","mm^2","in^2","ft^2","yd^2"],volume:["L","m^3","cm^3","mL","in^3","ft^3","yd^3"],weight:["kg","g","mg","t","lb","oz"],time:["min","s","h","ms","d"],temperature:["C","F","K"],angle:["deg","rad","rev"]},Fe={length:{m:"Meter (m)",mm:"Millimeter (mm)",cm:"Centimeter (cm)",km:"Kilometer (km)",in:"Inch (in)",ft:"Foot (ft)",yd:"Yard (yd)",mi:"Mile (mi)"},area:{"m^2":"Square meter (m^2)","mm^2":"Square millimeter (mm^2)","cm^2":"Square centimeter (cm^2)","in^2":"Square inch (in^2)","ft^2":"Square foot (ft^2)","yd^2":"Square yard (yd^2)"},volume:{L:"Liter (L)","cm^3":"Cubic centimeter (cm^3)","m^3":"Cubic meter (m^3)",mL:"Milliliter (mL)","in^3":"Cubic inch (in^3)","ft^3":"Cubic foot (ft^3)","yd^3":"Cubic yard (yd^3)"},weight:{kg:"Kilogram (kg)",g:"Gram (g)",mg:"Milligram (mg)",t:"Tonne (t)",lb:"Pound (lb)",oz:"Ounce (oz)"},time:{s:"Second (s)",min:"Minute (min)",h:"Hour (h)",ms:"Millisecond (ms)",d:"Day (d)",wk:"Week (wk)"},temperature:{C:"Celsius (C)",F:"Fahrenheit (F)",K:"Kelvin (K)"},angle:{deg:"Degree (deg)",rad:"Radian (rad)",rev:"Revolution (rev)"}},Me={length:{mm:1e3,cm:100,m:1,km:.001,in:100/2.54,ft:100/(2.54*12),yd:100/(2.54*36),mi:1/1609.344},area:{"m^2":1,"mm^2":1e6,"cm^2":1e4,"km^2":1/1e6,"in^2":(100/2.54)**2,"ft^2":(100/(2.54*12))**2,"yd^2":(100/(2.54*36))**2},volume:{"cm^3":1e6,"m^3":1,L:1,mL:1e6,"in^3":(100/2.54)**3,"ft^3":(100/(2.54*12))**3,"yd^3":(100/(2.54*36))**3},weight:{mg:1e6,g:1e3,kg:1,t:.001,lb:1/.45359237,oz:1/.028349523125},time:{ms:1e3,s:1,min:1/60,h:1/3600,d:1/86400,wk:1/604800},temperature:{C:1,F:33.8,K:274.15},angle:{deg:1,rad:Math.PI/180,rev:1/360}},Ve={},en=new Set([...Object.keys(Ee),...Object.keys(Fe),...Object.keys(Me)]);for(const e of en){const r={},t=Ee[e]??[],n=Fe[e]??{},a=Me[e]??{};for(const o of t){const c=n[o];r[o]={name:typeof c=="string"?c:String(o),shortName:o,factor:o in a?a[o]:void 0}}for(const[o,c]of Object.entries(n))if(!r[o]){const i=typeof c=="string"?c:String(o);r[o]={name:i,shortName:o,factor:o in a?a[o]:void 0}}for(const[o,c]of Object.entries(a))r[o]||(r[o]={name:String(o),shortName:String(o),factor:c});Ve[e]=r}function Br(e,r,t){if(e==="C"){if(r==="F")return t*(9/5)+32;if(r==="K")return t+273.15}else if(e==="F"){if(r==="C")return(t-32)*5/9;if(r==="K")return(t-32)*5/9+273.15}else if(e==="K"){if(r==="C")return t-273.15;if(r==="F")return(t-273.15)*9/5+32}return t}function qr(e){const r=Ve[e];if(!r)return null;const t={},n=[];for(const[o,c]of Object.entries(r))typeof c.factor=="number"&&(t[o]=c.factor),n.push(o);return{default:Object.keys(r)[0]??"",units:n,factors:t}}const rn=Object.freeze(Object.defineProperty({__proto__:null,convertTemperature:Br,dimensionUnitDisplayMap:Fe,dimensionUnitsMap:Ee,dimensonUnitFactorsMap:Me,getUnitFactors:qr,unitsByDimension:Ve},Symbol.toStringTag,{value:"Module"})),Ur=l.memo(({disabled:e,inputValue:r,selectedUnit:t,dimension:n,unitFactors:a,onConversionSelect:o,t:c})=>{const[i,s]=l.useState(!1),[d,m]=l.useState(null),[u,p]=l.useState([]),b=l.useCallback(h=>{if(e)return;const y=parseFloat(r);if(!Number.isFinite(y))return;const I=h.currentTarget.getBoundingClientRect();m({x:I.left,y:I.bottom});const F=[];if(n==="temperature")a.units.forEach(M=>{const R=Br(t,M,y);Number.isFinite(R)&&F.push({label:`${R.toFixed(6)} ${c(M)}`,value:R.toString(),unit:M})});else{const M=a.factors[t];M!==void 0&&Object.entries(a.factors).forEach(([R,j])=>{const v=y/M*j;Number.isFinite(v)&&F.push({label:`${v.toFixed(6)} ${c(R)}`,value:v.toString(),unit:R})})}p(F),s(F.length>0)},[e,r,t,n,a,c]),C=l.useCallback(h=>{s(!1),m(null),o(h)},[o]),N=l.useCallback(()=>{s(!1),m(null)},[]);return f.jsxs(f.Fragment,{children:[f.jsx("button",{onClick:b,disabled:e,"aria-disabled":e,style:{width:"var(--reactaform-unit-btn-width, 2.5em)",height:"auto",padding:"var(--reactaform-input-padding)",boxSizing:"border-box",border:"none",borderRadius:"var(--reactaform-button-border-radius, var(--reactaform-border-radius, 0.25em))",backgroundColor:e?"var(--reactaform-button-disabled-bg, #cccccc)":"var(--reactaform-button-bg, var(--reactaform-success-color))",color:"var(--reactaform-button-text, #ffffff)",cursor:e?"not-allowed":"pointer",opacity:e?.6:1,display:"flex",alignItems:"center",justifyContent:"center",alignSelf:"center",lineHeight:1},children:f.jsx("span",{style:{fontSize:"1em",pointerEvents:"none"},children:"⇄"})}),i&&u.length>0&&f.jsx(Qt,{pos:d,options:u,onClose:N,onClickOption:C})]})});Ur.displayName="ConversionButton";const Wr=({field:e,value:r,onChange:t,onError:n})=>{const{t:a}=O(),o=L(e),c=e.dimension,i=l.useMemo(()=>c?qr(c):null,[c]),s=String(r?.[0]??""),d=String(r?.[1]??i?.default??""),[m,u]=l.useState(s),[p,b]=l.useState(d);l.useEffect(()=>{u(s)},[s]),l.useEffect(()=>{b(d)},[d]);const C=o([m,p]);l.useEffect(()=>{n?.(C)},[C,n]);const N=l.useCallback(E=>{const M=E.target.value;u(M),o([M,p]),t?.([M,p])},[p,o,t]),h=l.useCallback(E=>{const M=E.target.value;b(M),o([m,M]),t?.([m,M])},[m,o,t]),y=l.useCallback(E=>{u(E.value),b(E.unit),t?.([E.value,E.unit])},[t]),I=l.useMemo(()=>i?i.units.map(E=>f.jsx("option",{value:E,children:a(E)},E)):[],[i,a]);if(!c||!i)return null;const F=!!C||!m.trim();return f.jsx(z,{field:e,error:C,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"var(--reactaform-unit-gap, 8px)",width:"100%"},children:[f.jsx("input",{id:e.name,type:"text",value:m,onChange:N,style:{flex:"2 1 0"},className:B(V.input,V.textInput),"aria-invalid":!!C,"aria-describedby":C?`${e.name}-error`:void 0}),f.jsx("select",{id:`${e.name}-unit`,value:p,onChange:h,style:{flex:"1 1 0"},className:B(V.input,V.inputSelect),"aria-invalid":!!C,"aria-describedby":C?`${e.name}-error`:void 0,children:I}),f.jsx(Ur,{disabled:F,inputValue:m,selectedUnit:p,dimension:c,unitFactors:i,onConversionSelect:y,t:a})]})})};Wr.displayName="UnitValueInput";const tn=l.memo(Wr),_r=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=L(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"url",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),placeholder:"https://example.com","aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};_r.displayName="UrlInput";const nn=l.memo(_r),ie=new ne;function an(e,r){ie.register(e,r)}function Kr(e){return ie.get(e)}function on(e){return ie.has(e)}function sn(e){return ie.unregister(e)}function cn(){return ie.list()}const Jr=({field:e,valuesMap:r,handleChange:t,handleError:n})=>{const{t:a}=O(),[o,c]=l.useState(!1),[i,s]=l.useState(null),d=l.useCallback(async()=>{if(!e.action){console.warn(`Button "${e.name}" has no action defined`);return}const p=Kr(e.action);if(!p){const b=`Button handler "${e.action}" not found`;console.error(b),s(b);return}c(!0),s(null);try{await p(r,t,n,a)}catch(b){const C=b instanceof Error?b.message:String(b);console.error(`Button handler "${e.action}" failed:`,C),s(C)}finally{c(!1)}},[e,r,t,n,a]),u={...{cursor:o?"wait":"pointer",opacity:o?.6:1}};return e.width&&typeof e.width=="number"&&e.width>0&&(u.width=`${e.width}px`),f.jsx(z,{field:e,rightAlign:!0,error:i,children:f.jsx("button",{type:"button",className:V.button,onClick:d,disabled:o,"aria-label":a(e.displayName),"aria-busy":o,style:u,children:a(o?"Processing...":e.displayName)})})};Jr.displayName="Button";const ln=l.memo(Jr),un={checkbox:!1,switch:!1,radio:!1,dropdown:!1,"multi-selection":!1,color:!1,rating:!1,file:!1,image:!1,separator:!1,description:!1,button:!1,string:{wait:200},text:{wait:200},multiline:{wait:200},email:{wait:200},password:{wait:200},phone:{wait:200},url:{wait:200},int:{wait:200},float:{wait:200},unit:{wait:100},date:{wait:150},time:{wait:150},slider:{wait:100,leading:!0,trailing:!0},stepper:{wait:100,leading:!0,trailing:!0}},me=new ne,$e={button:ln,checkbox:wt,color:jt,date:It,description:Et,dropdown:Mt,email:Vt,file:Rt,float:Dt,"float-array":At,image:zt,int:Ot,"int-array":Lt,"multi-selection":Bt,multiline:Tt,password:Gt,phone:Ut,radio:Wt,rating:Jt,separator:$t,slider:Yt,string:ye,stepper:qt,switch:Xt,text:ye,time:Zt,unit:tn,url:nn};function mn(e){return e in $e}function dn(e,r){const{wait:t=200,leading:n,trailing:a}=r,o=l.memo(c=>{const i=l.useRef(c.onChange);l.useEffect(()=>{i.current=c.onChange},[c.onChange]);const{callback:s,cancel:d}=sr((...m)=>{i.current?.(...m)},t,{leading:n,trailing:a});return l.useEffect(()=>d,[d]),l.createElement(e,{...c,onChange:s})});return o.displayName="DebouncedFieldWrapper",o}function Gr(e,r,t){const n=r;if(!t&&e in $e){console.warn(`Can't overwrite base component type "${e}".`);return}const a=un[e];if(a===!1){me.register(e,n);return}const o=a??{wait:200};or?me.register(e,n):me.register(e,dn(n,o))}function Re(e,r){Gr(e,r,!1)}function Ae(e){return me.get(e)}let Ye=!1;function fn(){Ye||(Object.entries($e).forEach(([e,r])=>{Gr(e,r,!0)}),Ye=!0)}const De=l.memo(({field:e,valuesMap:r,handleChange:t,handleError:n,errorsMap:a})=>{const o=Ae(e.type),c=r[e.name],i=a?a[e.name]??null:void 0,s=l.useMemo(()=>c,[c]),d=l.useCallback(u=>t(e.name,u),[t,e.name]),m=l.useCallback(u=>n?.(e.name,u),[n,e.name]);if(!o)return null;if(e.type==="button"){const u={field:e,value:null,valuesMap:r,handleChange:t,handleError:n||(()=>{})};return f.jsx(o,{...u})}return f.jsx(o,{field:e,value:s,onChange:d,onError:m,error:i})},(e,r)=>e.field===r.field&&e.valuesMap[e.field.name]===r.valuesMap[r.field.name]&&e.handleChange===r.handleChange&&e.handleError===r.handleError&&e.errorsMap?.[e.field.name]===r.errorsMap?.[r.field.name]);De.displayName="FieldRenderer";const Yr=l.memo(({groupName:e,defaultOpen:r=!0,fields:t,valuesMap:n,handleChange:a,handleError:o,errorsMap:c,t:i})=>{const[s,d]=l.useState(r),m=l.useCallback(()=>d(u=>!u),[]);return f.jsxs("fieldset",{className:"reactaform-group",children:[f.jsxs("legend",{onClick:m,className:"reactaform-group_legend",children:[f.jsx("span",{children:i(e)}),f.jsx("span",{className:"reactaform-group_legend_arrow",children:s?"▼":"▶"})]}),s&&t.map(u=>f.jsx(De,{field:u,valuesMap:n,handleChange:a,handleError:o,errorsMap:c},u.name))]})});Yr.displayName="FieldGroup";const Pe=(e,r,t,n)=>{const a=r[e];if(!a?.children)return;const o=t[e],c=o!=null?String(o):"",i=a.children[c];if(Array.isArray(i))for(const s of i)typeof s=="string"&&r[s]&&(n[s]=!0,Pe(s,r,t,n))},Xr=(e,r,t)=>{const n=r[e];if(!n?.children)return;const a=Object.values(n.children).flat();for(const o of a)typeof o=="string"&&o in t&&(t[o]=!1,Xr(o,r,t))},pn=(e,r,t,n)=>{const a={...t};return e.forEach(o=>{(!o.parents||Object.keys(o.parents).length===0)&&(a[o.name]=!0,Pe(o.name,n,r,a))}),a},gn=(e,r,t,n,a)=>{const o={...e},c=r[n];if(Xr(n,r,o),a!=null&&c?.children){const i=String(a),s=c.children[i];if(Array.isArray(s))for(const d of s)typeof d=="string"&&r[d]&&(o[d]=!0,Pe(d,r,t,o))}return o},hn=(e,r)=>{const t=new Map;let n=null,a=null,o=0;for(const c of e){const i=c.group;if(!i){n=null,a=null;continue}if(i===n)r[c.name].group=a??i;else{if(!t.has(i))t.set(i,1),a=null,r[c.name].group=i;else{const s=t.get(i),d=`${i}(${s})`;t.set(i,s+1),a=d,r[c.name].group=d,o++}n=i}}return o},bn=(e,r={})=>{const{includeEmpty:t=!0}=r,n=[];let a=null,o=[],c=0;for(const s of e){const d=s.group||null;d!==a?((o.length>0||t)&&n.push({name:a,fields:o}),a=d,o=[s]):o.push(s)}(o.length>0||t)&&n.push({name:a,fields:o}),c=n.filter(s=>s.fields.length===0).length;const i=Math.max(0,...n.map(s=>s.fields.length));return{groups:n,metadata:{totalGroups:n.length,emptyGroups:c,largestGroup:i}}},ze=new ne;function Le(e,r){ze.register(e,r)}function yn(e){return ze.get(e)}function vn(e){return ze.get(e)}Le("Preset_AlertSubmitHandler",(e,r,t)=>{const n={name:r||"Unnamed Instance",version:e.version,definition:e.name,values:t},a=JSON.stringify(n,null,2);alert(a)});async function xn(e,r,t,n,a,o,c){const i=a?Object.values(a).filter(Boolean):[];if(i.length>0)return{success:!1,message:n("Please fix validation errors before submitting the form."),errors:i};const s={...t},d=[];if(e&&Array.isArray(e.properties))for(const u of e.properties){const p=u.name,b=s[p];if(b==null)continue;const C=u.type;try{if(C==="int"){const N=String(b).trim();if(N==="")s[p]=0;else{const h=Number(N);Number.isInteger(h)?s[p]=Math.trunc(h):d.push(n("Invalid integer format for field {{1}}",u.displayName||p))}}else if(C==="number"||C==="float"){const N=String(b).trim();if(N==="")s[p]=0;else{const h=Number(N);isNaN(h)?d.push(n("Invalid number format for field {{1}}",u.displayName||p)):s[p]=h}}else if(C==="int-array"||C==="float-array"){const N=String(b).split(",").map(I=>I.trim()).filter(Boolean),h=[];let y=!1;for(const I of N){const F=Number(I);if(isNaN(F)){d.push(n("Invalid number {{1}} in array for field {{2}}",I,u.displayName||p)),y=!0;break}h.push(F)}y||(s[p]=h)}}catch(N){d.push(n("Error processing field {{1}}: {{2}}",u.displayName||p,N instanceof Error?N.message:String(N)))}}if(d.length>0)return{success:!1,message:n("Data transformation errors occurred."),errors:d};if(c){const u=await c(s,n);if(u&&u.length>0)return{success:!1,message:n("Validation failed"),errors:u}}else{const u=await xt(e,s,n);if(u&&u.length>0)return{success:!1,message:n("Validation failed"),errors:u}}const m=u=>u?Array.isArray(u)?u.map(p=>String(p)):typeof u=="string"?u.trim()?[u]:[]:[String(u)]:[];if(o)try{const u=await o(e,r?.name??null,s,n),p=m(u);if(p.length>0)return{success:!1,message:n("Submission failed"),errors:p}}catch(u){return{success:!1,message:n("Submission handler error occurred"),errors:[String(u instanceof Error?u.message:u)]}}else if(e&&typeof e.submitHandlerName=="string"){const u=yn(e.submitHandlerName);if(u)try{const p=await u(e,r?.name??null,s,n),b=m(p);if(b.length>0)return{success:!1,message:n("Submission failed"),errors:b}}catch(p){return{success:!1,message:n("Submission handler error occurred"),errors:[String(p instanceof Error?p.message:p)]}}}return{success:!0,message:n("Form submitted successfully."),data:s}}const Zr=({message:e,success:r,onDismiss:t,t:n})=>e?f.jsxs("div",{role:"status",style:{marginBottom:12,padding:12,borderRadius:6,backgroundColor:r?"rgba(76, 175, 80, 0.12)":"rgba(225, 29, 72, 0.06)",border:`1px solid ${r?"rgba(76,175,80,0.3)":"rgba(225,29,72,0.12)"}`,color:r?"var(--reactaform-success-color, #4CAF50)":"var(--reactaform-error-color, #e11d48)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[f.jsx("div",{style:{whiteSpace:"pre-wrap",flex:1},children:e}),f.jsx("button",{onClick:t,"aria-label":n("Dismiss"),style:{marginLeft:12,background:"transparent",border:"none",cursor:"pointer",color:"inherit",fontSize:16,lineHeight:1},children:"×"})]}):null;Zr.displayName="SubmissionMessage";const wn=({onClick:e,disabled:r=!1,t})=>{const[n,a]=l.useState(!1);return f.jsx("button",{onClick:e,disabled:r,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),style:{padding:"var(--reactaform-button-padding, var(--reactaform-space) 12px)",backgroundColor:r?"var(--reactaform-button-disabled-bg, #cccccc)":"var(--reactaform-button-bg, var(--reactaform-success-color))",color:"var(--reactaform-button-text, #ffffff)",border:"none",borderRadius:"4px",cursor:r?"var(--reactaform-button-disabled-cursor, not-allowed)":"pointer",fontSize:"var(--reactaform-button-font-size, 14px)",fontWeight:"var(--reactaform-button-font-weight, 500)",boxShadow:"var(--reactaform-button-shadow, none)",marginTop:"var(--reactaform-button-margin-top, 0.5em)",transition:"opacity 0.2s ease",opacity:r?"var(--reactaform-button-disabled-opacity, 0.6)":n?"var(--reactaform-button-hover-opacity, 0.9)":"1"},children:t("Submit")})},Qr=({definition:e,instance:r,onSubmit:t=void 0,onValidation:n=void 0,chunkSize:a=50,chunkDelay:o=50})=>{const{properties:c,displayName:i}=e,s=O(),{t:d,formStyle:m,language:u,displayInstanceName:p}=s,b={...s,definitionName:e?.name??s.definitionName},[C,N]=l.useState("en"),[h,y]=l.useState([]),[I,F]=l.useState({}),[E,M]=l.useState({}),[R,j]=l.useState({}),[v,g]=l.useState({}),[w,x]=l.useState(null),[k,S]=l.useState(null),[$,T]=l.useState(0),[_,ce]=l.useState(!1),[He,oe]=l.useState(r.name||""),Y=l.useRef(r),fe=l.useRef(!1);l.useEffect(()=>{const A=Object.fromEntries(c.map(P=>[P.name,{...P,children:{}}]));c.forEach(P=>{P.parents&&Object.entries(P.parents).forEach(([Q,re])=>{const X=A[Q];X&&re.forEach(mt=>{X.children||(X.children={});const Ue=String(mt);X.children[Ue]=[...X.children[Ue]||[],P.name]})})}),hn(c,A);const q=Object.values(A),D={};q.forEach(P=>{if(P.type==="unit"){const Q=typeof P.defaultValue=="number"?String(P.defaultValue):"",re=typeof P.defaultUnit=="string"?P.defaultUnit:String(P.defaultUnit??"m");D[P.name]=[Q,re]}else D[P.name]=P.defaultValue}),Y.current=r,Object.keys(r.values).forEach(P=>{A[P]!==void 0&&(D[P]=r.values[P])});const J=Object.fromEntries(q.map(P=>[P.name,!1])),K=requestAnimationFrame(()=>{y(q),F(A),M(D),j(pn(q,D,J,A)),ce(!0),oe(r.name)});return()=>cancelAnimationFrame(K)},[c,r,e]),l.useEffect(()=>{if(!_||$>=h.length)return;const A=setTimeout(()=>{T(q=>Math.min(q+a,h.length))},o);return()=>clearTimeout(A)},[_,$,h.length,a,o]);const Be=l.useCallback((A,q)=>{x(null),S(null),M(J=>({...J,[A]:q}));const D=I[A];D&&D.children&&Object.keys(D.children).length>0&&j(J=>{const K={...E,[A]:q};return gn(J,I,K,A,q)})},[I,E]);l.useEffect(()=>{let A=0;return A=requestAnimationFrame(()=>{u!==C&&(N(u||"en"),x(null),S(null))}),()=>cancelAnimationFrame(A)},[u,C]),l.useEffect(()=>{let A=0;return A=requestAnimationFrame(()=>{if(fe.current){fe.current=!1,Y.current=r,oe(r.name||"");return}Y.current=r,x(null),S(null),oe(r.name||"")}),()=>cancelAnimationFrame(A)},[r,r.name]);const qe=l.useCallback((A,q)=>{g(D=>q?{...D,[A]:String(q)}:Object.fromEntries(Object.entries(D).filter(([K])=>K!==A)))},[]),lt=async()=>{fe.current=!0;const A=Y.current?.name;Y.current.name=He;let q=v;if(b.fieldValidationMode==="onSubmission"){const P={};if(h.forEach(Q=>{const re=E[Q.name];if(re===void 0)return;const X=yr(b.definitionName,Q,re,d);X&&(P[Q.name]=X)}),g(P),q=P,Object.keys(P).length>0){x(d("Please fix validation errors before submitting the form.")),S(!1);return}else x(null),S(null)}const D=await xn(e,Y.current,E,d,q,t,n),J=typeof D.message=="string"?D.message:String(D.message),K=Object.values(D.errors??{}).join(`
|
|
394
|
-
`);x(K?
|
|
395
|
-
`+K:J),S(D.success),D.success||(Y.current.name=A??Y.current.name,oe(A??""))},ut=l.useMemo(()=>b.fieldValidationMode==="realTime"?Object.values(v).some(Boolean):!1,[v,b.fieldValidationMode]);return f.jsx(Ne.Provider,{value:b,children:f.jsxs("div",{style:m.container,children:[i&&f.jsx("h2",{style:m.titleStyle,children:d(i)}),f.jsx(Zr,{message:w,success:k,onDismiss:()=>{x(null),S(null)},t:d}),p&&r&&f.jsx(lr,{name:He,onChange:A=>{oe(A),x(null),S(null)}}),f.jsxs(f.Fragment,{children:[(()=>{const A=h.slice(0,$).filter(D=>R[D.name]),{groups:q}=bn(A);return q.map((D,J)=>D.name?f.jsx(Yr,{groupName:D.name,defaultOpen:!0,fields:D.fields,valuesMap:E,handleChange:Be,handleError:qe,errorsMap:v,t:d},D.name):f.jsx(l.Fragment,{children:D.fields.map(K=>f.jsx(De,{field:K,valuesMap:E,handleChange:Be,handleError:qe,errorsMap:v},K.name))},`ungrouped-${J}`))})(),$<h.length&&f.jsx("div",{style:{fontSize:"0.9em",color:"var(--reactaform-text-muted, #666)"},children:d(`Loading more fields... (${$}/${h.length})`)})]}),f.jsx(wn,{onClick:lt,disabled:ut,t:d})]})})},et={en:{name:"English",nativeName:"English"},fr:{name:"French",nativeName:"Français"},de:{name:"German",nativeName:"Deutsch"},es:{name:"Spanish",nativeName:"Español"},"zh-cn":{name:"Chinese (Simplified)",nativeName:"简体中文"},bg:{name:"Bulgarian",nativeName:"Български"},cs:{name:"Czech",nativeName:"Čeština"},da:{name:"Danish",nativeName:"Dansk"},el:{name:"Greek",nativeName:"Ελληνικά"},fi:{name:"Finnish",nativeName:"Suomi"},hi:{name:"Hindi",nativeName:"हिन्दी"},hu:{name:"Hungarian",nativeName:"Magyar"},id:{name:"Indonesian",nativeName:"Bahasa Indonesia"},it:{name:"Italian",nativeName:"Italiano"},ja:{name:"Japanese",nativeName:"日本語"},ko:{name:"Korean",nativeName:"한국어"},ms:{name:"Malay",nativeName:"Bahasa Melayu"},nl:{name:"Dutch",nativeName:"Nederlands"},no:{name:"Norwegian",nativeName:"Norsk"},pl:{name:"Polish",nativeName:"Polski"},pt:{name:"Portuguese",nativeName:"Português"},ro:{name:"Romanian",nativeName:"Română"},ru:{name:"Russian",nativeName:"Русский"},sk:{name:"Slovak",nativeName:"Slovenčina"},sv:{name:"Swedish",nativeName:"Svenska"},th:{name:"Thai",nativeName:"ไทย"},tr:{name:"Turkish",nativeName:"Türkçe"},uk:{name:"Ukrainian",nativeName:"Українська"},vi:{name:"Vietnamese",nativeName:"Tiếng Việt"},"zh-tw":{name:"Chinese (Traditional)",nativeName:"繁體中文"}},Sn=()=>et,ge=new Map,le=new Map,te=new Set,ve=new Map,Cn=async e=>{try{let r={};const t=e.toLowerCase();if(t==="en")r={};else if(et[t]){const a=`https://reactaform.com/locales/${t}/common.json`,o=await fetch(a);o.ok&&(r=await o.json())}else r={};return{success:!0,translations:r,fromCache:!1}}catch(r){return{success:!1,translations:{},error:`Failed to load common translations for ${e}: ${r}`}}},Nn=async e=>{if(!e||e.toLowerCase()==="en")return{success:!0,translations:{},fromCache:!1};const r=e.toLowerCase();if(ge.has(r))return{success:!0,translations:ge.get(r)||{},fromCache:!0};const t=await Cn(r);return t.success&&(ge.set(r,t.translations),ve.set(r,{loadedAt:new Date,size:Object.keys(t.translations).length,source:"common"})),t},kn=async(e,r)=>{if(!e||!r)return{success:!1,translations:{},error:"Both language and localizeName are required"};const t=`${e.toLowerCase()}/${r}`;if(te.has(t))return{success:!1,translations:{},error:"Previously failed to load",fromCache:!0};if(le.has(t))return{success:!0,translations:le.get(t)||{},fromCache:!0};try{let n=r;!r.includes("/")&&!r.includes(".")&&(n=`/locales/${e}/${r}.json`);const a=await fetch(n);if(!a.ok)return a.status===404?(le.set(t,{}),ve.set(t,{loadedAt:new Date,size:0,source:"user"}),{success:!0,translations:{},fromCache:!1}):(te.add(t),{success:!1,translations:{},error:`HTTP ${a.status}`,fromCache:!1});const o=a.headers.get("content-type")||"";!o.includes("application/json")&&!o.includes("text/json")&&rt()&&console.warn(`Translation file at ${n} has unexpected content-type: ${o}`);const c=await a.text();if(!c){const d="Empty translation file";return te.add(t),{success:!1,translations:{},error:d}}let i;try{i=JSON.parse(c)}catch(d){const m=`Invalid JSON in translation file: ${d instanceof Error?d.message:String(d)}`;return te.add(t),{success:!1,translations:{},error:m}}if(!i||typeof i!="object"){const d="Invalid translation file format";return te.add(t),{success:!1,translations:{},error:d}}const s=Object.fromEntries(Object.entries(i).map(([d,m])=>[d,typeof m=="string"?m:String(m)]));return le.set(t,s),ve.set(t,{loadedAt:new Date,size:Object.keys(s).length,source:"user"}),{success:!0,translations:s,fromCache:!1}}catch(n){const a=`Failed to load user translations: ${n instanceof Error?n.message:"Unknown error"}`;return te.add(t),{success:!1,translations:{},error:a}}};function rt(){try{if(typeof process<"u"&&process?.env?.NODE_ENV==="development")return!0}catch{}return!1}function jn(e,r){return r.length===0?e:e.replace(/\{\{(\d+)\}\}/g,(t,n)=>{const a=parseInt(n,10)-1,o=r[a];return o==null?t:String(o)})}const In=(e,r,t)=>(n,...a)=>{let o=n,c=!1;return!n||typeof n!="string"?String(n||""):(e.toLowerCase()==="en"?(o=n,c=!0):n in t?(o=t[n],c=!0):n in r?(o=r[n],c=!0):o=n,o=jn(o,a),!c&&rt()&&console.debug(`Missing translation for "${n}" in language "${e}"`),o)};function En(e){return/^[-+]?\d*$/.test(e)}function Fn(e){const r=/^[-+]?\d*$/;return e.split(",").map(t=>t.trim()).every(t=>r.test(t))}const Mn=",",Vn=e=>!e||e.trim()===""?[]:e.split(Mn).map(r=>r.trim()).filter(Boolean).map(r=>Number(r)),Xe=(e,r,t)=>{const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!En(n))return t("Must be a valid integer");const a=parseInt(n,10);if(Number.isNaN(a))return t("Must be a valid integer");if(e.min!==void 0&&(e.minInclusive?a<e.min:a<=e.min))return t("Must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?a>e.max:a>=e.max))return t("Must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max);if(e.step!==void 0){const o=Number(e.step);if(!Number.isInteger(o))return t("Invalid step value");if(a%o!==0)return t("Must be a multiple of {{1}}",o)}};function $n(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!Fn(n))return t("Each value must be a valid integer");const a=Vn(n);if(e.minCount!==void 0&&a.length<e.minCount)return t("Minimum number of values: {{1}}",`${e.minCount}`);if(e.maxCount!==void 0&&a.length>e.maxCount)return t("Maximum number of values: {{1}}",`${e.maxCount}`);for(const o of a){if(e.min!==void 0&&(e.minInclusive?o<e.min:o<=e.min))return t("Each value must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?o>e.max:o>=e.max))return t("Each value must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max)}}function tt(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;const a=Number(n);if(Number.isNaN(a))return t("Must be a valid float");if(e.min!==void 0){const o=e.type==="slider"?!0:e.minInclusive??!0;if(o?a<e.min:a<=e.min)return t("Must be {{1}} {{2}}",o?"≥":">",e.min)}if(e.max!==void 0){const o=e.type==="slider"?!0:e.maxInclusive??!0;if(o?a>e.max:a>=e.max)return t("Must be {{1}} {{2}}",o?"≤":"<",e.max)}}const Rn=/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/;function An(e){return e.split(",").map(r=>r.trim()).every(r=>Rn.test(r))}const Dn=",",Pn=e=>!e||e.trim()===""?[]:e.split(Dn).map(r=>r.trim()).filter(Boolean).map(r=>Number(r));function zn(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!An(n))return t("Each value must be a valid float");const a=Pn(n);if(e.minCount!==void 0&&a.length<e.minCount)return t("Minimum number of values: {{1}}",e.minCount);if(e.maxCount!==void 0&&a.length>e.maxCount)return t("Maximum number of values: {{1}}",e.maxCount);for(const o of a){if(e.min!==void 0&&(e.minInclusive?o<e.min:o<=e.min))return t("Each value must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?o>e.max:o>=e.max))return t("Each value must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max)}}const he=new WeakMap;function Oe(e,r,t,n,...a){if(e.pattern==null)return;const o=String(r);let c=null;if(e.pattern){const i=he.get(e);if(i&&i.pattern===e.pattern)c=i.regex;else try{const s=new RegExp(e.pattern);he.set(e,{pattern:e.pattern,regex:s}),c=s}catch{he.set(e,{pattern:e.pattern,regex:null}),c=null}}if(c&&!c.test(o))return e.patternErrorMessage?t(e.patternErrorMessage):n?t(n,...a):t("Input does not match pattern: {{1}}",e.pattern)}function ue(e,r,t){const n=String(r);if(n==="")return e.minLength!==void 0||e.maxLength!==void 0?e.required?t("Value required when minLength or maxLength is set"):void 0:e.required?t("Value required"):void 0;const a=Math.max(e.minLength??0,0);return n.length<a?t("Must be at least {{1}} characters",a):e.maxLength!==void 0&&n.length>e.maxLength?t("Must be at most {{1}} characters",e.maxLength):Oe(e,r,t,"Invalid text format")}const xe=e=>{if(!e)return null;const r=Date.parse(e);return Number.isNaN(r)?null:r},Ze=new WeakMap,Ln=e=>{let r=Ze.get(e);return r||(r={minTime:xe(e.minDate),maxTime:xe(e.maxDate)},Ze.set(e,r)),r};function On(e,r,t){if(r==null||String(r).trim()==="")return e.required?t("Value required"):void 0;const n=String(r).trim(),a=xe(n);if(a===null)return t("Invalid date format");const{minTime:o,maxTime:c}=Ln(e);if(o!==null&&a<o)return t("Date must be on or after {{1}}",e.minDate);if(c!==null&&a>c)return t("Date must be on or before {{1}}",e.maxDate)}function Tn(e,r,t){const n=String(r);if(!n||n.trim()==="")return e.required||e.min||e.max?t("Value required"):void 0;const a=c=>{const i=c.split(":").map(m=>parseInt(m,10));if(i.some(m=>Number.isNaN(m)))return NaN;const s=i.length;if(s<2||s>3)return NaN;if(s===2&&(i[0]<0||i[0]>23||i[1]<0||i[1]>59))return NaN;if(s===3&&(i[0]<0||i[0]>23||i[1]<0||i[1]>59||i[2]<0||i[2]>59))return NaN;let d=0;if(i.length===3)d=i[0]*3600+i[1]*60+i[2];else if(i.length===2)d=i[0]*3600+i[1]*60;else if(i.length===1)d=i[0]*3600;else return NaN;return d},o=a(n);if(Number.isNaN(o))return t("Invalid time format");if(e.min&&typeof e.min=="string"){const c=a(e.min);if(!Number.isNaN(c)&&o<c)return t("Time must be on or after {{1}}",e.min)}if(e.max&&typeof e.max=="string"){const c=a(e.max);if(!Number.isNaN(c)&&o>c)return t("Time must be on or before {{1}}",e.max)}}function Hn(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}function Bn(e,r,t){const n=String(r??"").trim();return n===""?e.required?t("Value required"):void 0:Hn(n)?Oe(e,r,t,t("Email does not match pattern: {{1}}",e.pattern)):t("Must be valid email format")}function qn(e,r,t){const n=String(r??"").trim();return n===""?e.required?t("Value required"):void 0:Oe(e,n,t,"Invalid phone number format")}const Un=/^(https?|ftp|file):\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$/i,Wn=e=>{try{return new URL(e),!0}catch{return!1}};function _n(e,r,t){const n=String(r??"").trim();if(n==="")return e.required?t("Value required"):void 0;if(!(Un.test(n)||Wn(n))){if(e.allowRelative===!0){if(!n.startsWith("/")||encodeURI(n)!==n)return t("Must be a valid URL");try{new URL(n,"http://example.com");return}catch{return t("Must be a valid URL")}}return t("Must be a valid URL")}}function Kn(e,r,t){const n=Array.isArray(r)?r:[],a=n[0],o=n[1]?String(n[1]).trim():"";return String(a??"").trim()===""||o===""?e.required?t("Value required"):void 0:tt(e,a,t)}function Jn(e,r,t){if(Array.isArray(r))return r.length===0?t("Select a file"):r.every(n=>n instanceof File)?void 0:t("Invalid file input");if(!(r instanceof File)){const n=String(r);return e.required&&(r==null||typeof n=="string"&&n.trim()==="")?t("Select a file"):t("Invalid file input: {{1}}",n)}}function Gn(e,r,t){const n=String(r);if(n===""||n===null||n===void 0)return e.required?t("Value required"):void 0;if(!e.options?.some(a=>String(a.value)===n))return t("Invalid option selected")}function Yn(e,r,t){const a=String(r??"").trim();if(a==="")return e.required?t("Value required"):void 0;const o=a.split(",").map(c=>c.trim()).filter(c=>c!=="");if(o.length===0)return e.required?t("Value required"):void 0;for(const c of o)if(!e.options?.some(i=>String(i.value)===c))return t("Invalid option selected")}const Xn=/^#([0-9A-F]{3}){1,2}$/i,Zn=e=>Xn.test(e);function Qn(e,r,t){const n=String(r).trim();if(n==="")return e.required?t("Value required"):void 0;if(!Zn(n))return t("Invalid color format")}function ea(e,r,t){const n=String(r??"").trim();if(n==="")return e.required?t("Value required"):void 0;let a=r;if(typeof r!="number"&&(a=parseFloat(n)),Number.isNaN(a)||a<=0)return t("Invalid value");if(e.max!==void 0&&a>e.max)return t("Must be ≤ {{1}}",e.max)}function ra(e,r,t){const n=String(r);if(n.trim()==="")return e.required?t("Value required"):void 0;const a=Number(n);if(Number.isNaN(a))return t("Must be a valid float");const o=e.min??0,c=e.max??100;if(a<o)return t("Must be ≥ {{1}}",o);if(a>c)return t("Must be ≤ {{1}}",c)}let Qe=!1;function nt(){Qe||(H("int",Xe),H("stepper",Xe),H("int-array",$n),H("float",tt),H("slider",ra),H("float-array",zn),H("text",ue),H("string",ue),H("multiline",ue),H("password",ue),H("email",Bn),H("date",On),H("time",Tn),H("url",_n),H("phone",qn),H("unit",Kn),H("dropdown",Gn),H("multi-selection",Yn),H("color",Qn),H("rating",ea),H("file",Jn),Qe=!0)}nt();fn();nt();const ta=e=>({container:{padding:"var(--reactaform-space-sm, 8px)",margin:"0 auto",backgroundColor:"transparent",borderRadius:0,color:"var(--reactaform-color-text)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, system-ui, -apple-system, sans-serif)",boxSizing:"border-box",minHeight:e?.minHeight??"0",...e?.width?{width:e.width,overflowX:"auto"}:{maxWidth:"100%"},...e?.height?{height:e.height,overflowY:"auto"}:{}},buttonStyle:{padding:"var(--reactaform-space-sm, 8px) var(--reactaform-space-md, 16px)",backgroundColor:"var(--reactaform-color-primary)",color:"var(--reactaform-color-background)",border:"1px solid var(--reactaform-color-primary)",borderRadius:"var(--reactaform-border-radius, 6px)",cursor:"pointer",fontSize:e?.fontSize||"1rem",fontWeight:"600",transition:"all 0.2s ease",boxShadow:"var(--reactaform-shadow-small, 0 1px 3px rgba(0, 0, 0, 0.12))"},titleStyle:{marginBottom:"var(--reactaform-space-lg, 24px)",color:"var(--reactaform-color-text)",fontSize:typeof e?.fontSize=="number"?`${e.fontSize*1.5}px`:"1.5rem",fontWeight:"700",lineHeight:"1.2",textAlign:"left"}}),na=e=>{const r={color:"var(--reactaform-color-text)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)",transition:"all 0.2s ease",outline:"none",width:"100%",boxSizing:"border-box"};return{container:{fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)",fontSize:e?.fontSize||"var(--reactaform-font-size, 1rem)",width:"100%",maxWidth:e?.width||"100%",marginBottom:"var(--reactaform-space-md, 16px)"},label:{display:"block",marginBottom:"var(--reactaform-space-xs, 4px)",fontWeight:"500",color:"var(--reactaform-color-text)",fontSize:"var(--reactaform-font-size, 1rem)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)"},input:r,textInput:r,optionInput:r,select:{...r,cursor:"pointer",backgroundRepeat:"no-repeat",backgroundPosition:"right 8px center",backgroundSize:"16px",paddingRight:"32px",backgroundImage:`url("data:image/svg+xml;utf8,<svg
|
|
393
|
+
`,Ne=J.createContext(void 0),L=()=>{const e=J.useContext(Ne);if(!e)throw new Error("❌ useReactaFormContext must be used within a <ReactaFormProvider>");return e};class ne{map={};register(r,t){if(!r||typeof r!="string")throw new Error("Registry key must be a non-empty string");this.map[r]=t}get(r){if(!(!r||typeof r!="string"))return this.map[r]}has(r){return!r||typeof r!="string"?!1:r in this.map}list(){return Object.keys(this.map)}entries(){return Object.entries(this.map)}values(){return Object.values(this.map)}size(){return Object.keys(this.map).length}unregister(r){return r in this.map?(delete this.map[r],!0):!1}clear(){this.map={}}registerAll(r){Array.isArray(r)?r.forEach(([t,n])=>{t&&typeof t=="string"&&this.register(t,n)}):r&&typeof r=="object"&&Object.entries(r).forEach(([t,n])=>{t&&typeof t=="string"&&this.register(t,n)})}getOrDefault(r,t){const n=this.get(r);return n!==void 0?n:t}}const or=typeof process<"u"&&process.env.NODE_ENV==="test";function sr(e,r=300,t){const n=J.useRef(),a=J.useRef(e),o=J.useRef(null),c=t?.leading===!0,i=t?.trailing!==!1;J.useEffect(()=>{a.current=e},[e]),J.useEffect(()=>()=>{n.current&&clearTimeout(n.current)},[]);const s=p=>{a.current(...p)},d=J.useCallback(()=>{n.current&&(clearTimeout(n.current),n.current=void 0),o.current=null},[]),m=J.useCallback(()=>{n.current&&(clearTimeout(n.current),n.current=void 0),i&&o.current&&(s(o.current),o.current=null)},[i]);return{callback:J.useCallback((...p)=>{if(or){s(p);return}const b=c&&!n.current;o.current=p,b&&s(p),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{n.current=void 0,i&&o.current&&(s(o.current),o.current=null)},r)},[c,i,r]),cancel:d,flush:m}}const V={field:"reactaform-field",label:"reactaform-label",input:"reactaform-input",textInput:"reactaform-input--text",inputNumber:"reactaform-input--number",inputSelect:"reactaform-select",rangeInput:"reactaform-input--range",button:"reactaform-button",description:"reactaform-description"},B=(...e)=>{const r=[];for(const t of e)t&&(typeof t=="string"?r.push(t):typeof t=="object"&&Object.entries(t).forEach(([n,a])=>{a&&r.push(n)}));return r.join(" ")};function ae(e){return e.toLowerCase().includes("dark")}function gt(e){if(!e)return!1;const r=e.trim();let t=0,n=0,a=0;if(r.startsWith("#")){const c=r.substring(1);c.length===3||c.length===4?(t=parseInt(c[0]+c[0],16),n=parseInt(c[1]+c[1],16),a=parseInt(c[2]+c[2],16)):(c.length===6||c.length===8)&&(t=parseInt(c.substring(0,2),16),n=parseInt(c.substring(2,4),16),a=parseInt(c.substring(4,6),16))}else if(r.startsWith("rgb")){const c=r.match(/\d+(\.\d+)?/g);c&&c.length>=3&&(t=Math.min(255,Math.max(0,parseFloat(c[0]))),n=Math.min(255,Math.max(0,parseFloat(c[1]))),a=Math.min(255,Math.max(0,parseFloat(c[2]))))}else return!1;return(t*299+n*587+a*114)/1e3<128}const ht=()=>f.jsxs("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[f.jsx("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}),f.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),bt=({content:e,size:r="medium",animation:t=!0})=>{const{t:n,theme:a,formStyle:o,fieldStyle:c}=L(),[i,s]=l.useState(!1),[d,m]=l.useState({x:0,y:0}),[u,p]=l.useState(!1),b=l.useRef(null),C=l.useRef(null),N=l.useRef(null),h=l.useId(),y=ae(a),[I,F]=l.useState(void 0);l.useLayoutEffect(()=>{if(!b.current)return;const k="rgba(255,255,255,0.1)",g=getComputedStyle(b.current).getPropertyValue("--reactaform-primary-bg").trim();if(g&&typeof CSS<"u"&&CSS.supports?.("color: color-mix(in srgb, red, blue)")){const w=gt(g)?"black":"white";F(`color-mix(in srgb, var(--reactaform-primary-bg) 85%, ${w} 15%)`)}else F(k)},[]);const E=l.useMemo(()=>{const v={icon:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"1.2em",height:"1.2em",fontSize:"0.9em",fontWeight:"bold",borderRadius:"50%",backgroundColor:I??(y?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"),color:`var(--reactaform-text-color, ${y?"#f0f0f0":"#333"})`,border:`1px solid ${y?"rgba(255,255,255,0.2)":"rgba(0,0,0,0.1)"}`,cursor:"pointer",transition:t?"all 0.2s ease":void 0,marginLeft:"0.3em"},text:{...{small:{padding:"4px 8px",fontSize:"11px",maxWidth:"200px"},medium:{padding:"6px 10px",fontSize:"12px",maxWidth:"240px"},large:{padding:"8px 12px",fontSize:"13px",maxWidth:"280px"}}[r],position:"fixed",backgroundColor:`var(--reactaform-tooltip-color-bg, ${y?"rgba(45,45,45,0.95)":"rgba(34, 10, 170, 0.92)"})`,color:`var(--reactaform-tooltip-color, ${y?"#f0f0f0":"#fff"})`,borderRadius:"6px",border:`1px solid ${y?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`,boxShadow:y?"0 8px 16px rgba(0,0,0,0.4)":"0 6px 18px rgba(0,0,0,0.12)",zIndex:2147483647,opacity:0,pointerEvents:"none",transition:t?"opacity 0.2s ease":void 0,whiteSpace:"normal",wordBreak:"break-word",boxSizing:"border-box"},textVisible:{opacity:1,pointerEvents:"auto"}},g=(x,j,S)=>{const T=x?.[j];return(S&&T?T[S]:void 0)??{}};return{icon:{...v.icon,...g(o,"tooltip","icon"),...g(c,"tooltip","icon")},text:{...v.text,...g(o,"tooltip","text"),...g(c,"tooltip","text")},textVisible:v.textVisible}},[y,r,t,o,c,I]);l.useLayoutEffect(()=>{if(!i||!b.current||!C.current){p(!1);return}const k=b.current.getBoundingClientRect();N.current=k;const v=C.current.getBoundingClientRect(),g=8,w=window.innerWidth,x=window.innerHeight,j=-4;let S=k.right+g,$=k.top+k.height/2-v.height/2+j;S+v.width>w-g&&(S=k.left-g-v.width),S=Math.max(g,Math.min(S,w-v.width-g)),$=Math.max(g,Math.min($,x-v.height-g)),m({x:S,y:$}),p(!0);const T=b.current.closest("[data-reactaform-theme]"),_=document.getElementById("popup-root");if(T&&_){const ce=getComputedStyle(T);_.style.setProperty("--reactaform-tooltip-color-bg",ce.getPropertyValue("--reactaform-tooltip-color-bg")),_.style.setProperty("--reactaform-tooltip-color",ce.getPropertyValue("--reactaform-tooltip-color"))}},[i]);const M=typeof document<"u"?document.getElementById("popup-root"):null,R=f.jsx("div",{ref:C,"data-tooltip-id":h,style:{...E.text,transform:u?"translateY(0) scale(1)":"translateY(-4px) scale(0.98)",transition:"opacity 120ms ease, transform 120ms ease, visibility 120ms ease",width:240,...u?E.textVisible:{},top:d.y,left:d.x},children:n(e)});return f.jsxs(f.Fragment,{children:[f.jsx("span",{"data-testid":"tooltip-icon",ref:b,"aria-describedby":i?h:void 0,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),style:{...E.icon},children:f.jsx(ht,{})}),i&&(M?de.createPortal(R,M):R)]})},ir=l.memo(bt),be=l.memo(({field:e,error:r,children:t,showLabel:n=!0})=>{const{t:a}=L(),o=e.labelLayout==="column-center"?"center":"left",c=l.useMemo(()=>{const d={display:"flex",flexDirection:"column",gap:"var(--reactaform-label-gap, 4px)"};return d["--label-align"]=o,d},[o]),i=l.useMemo(()=>({textAlign:o,width:"100%",minWidth:"unset",display:"block",marginBottom:"10px"}),[o]),s=l.useMemo(()=>({display:"flex",alignItems:"center",gap:"var(--reactaform-inline-gap, 8px)",width:"100%"}),[]);return f.jsxs("div",{className:`${V.field} column-layout`,style:c,children:[n&&f.jsx("label",{id:`${e.name}-label`,className:V.label,htmlFor:e.name,style:i,children:a(e.displayName)}),f.jsxs("div",{style:s,children:[f.jsx("div",{style:{flex:1,minWidth:0},children:t}),e.tooltip&&f.jsx(ir,{content:e.tooltip})]}),r&&f.jsx(je,{id:`${e.name}-error`,children:r})]})});be.displayName="ColumnFieldLayout";const cr=l.memo(({field:e,error:r,children:t,rightAlign:n=!1})=>{const{t:a}=L(),o=l.useMemo(()=>({display:"flex",alignItems:"center",gap:"3px"}),[]);return f.jsxs("div",{className:`${V.field} row-layout`,children:[f.jsx("label",{id:`${e.name}-label`,className:V.label,htmlFor:e.name,style:{textAlign:"left"},children:a(e.displayName)}),f.jsxs("div",{children:[f.jsxs("div",{style:o,children:[n?f.jsx("div",{style:{display:"flex",flex:1,justifyContent:"flex-end"},children:t}):t,e.tooltip&&f.jsx(ir,{content:e.tooltip})]}),r&&f.jsx(je,{id:`${e.name}-error`,children:r})]})]})});cr.displayName="RowFieldLayout";const z=l.memo(({field:e,error:r,children:t,rightAlign:n=!1})=>e.labelLayout==="column-left"||e.labelLayout==="column-center"?f.jsx(be,{field:e,error:r,showLabel:!0,children:t}):e.type==="checkbox"||e.type==="switch"?f.jsx(be,{field:e,error:r,showLabel:!1,children:t}):f.jsx(cr,{field:e,error:r,rightAlign:n,children:t}));z.displayName="StandardFieldLayout";const je=l.memo(({children:e,id:r})=>{const t=l.useMemo(()=>({color:"var(--reactaform-error-color, red)",fontSize:"13px",marginTop:"4px",fontWeight:"var(--reactaform-font-weight)",display:"flex",flex:1,justifyContent:"flex-start",alignItems:"flex-start",userSelect:"none"}),[]);return f.jsx("div",{id:r,style:t,children:e})});je.displayName="ErrorDiv";const lr=l.memo(({name:e,onChange:r})=>{const{t}=L();return f.jsxs("div",{style:{marginBottom:16},children:[f.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 2fr",gap:12,alignItems:"center"},children:[f.jsx("label",{htmlFor:"instance-name-input",style:{margin:0,fontSize:"0.95em",fontWeight:500,color:"var(--reactaform-text-color, #333)"},children:t("Instance Name")}),f.jsx("input",{id:"instance-name-input",type:"text",value:e,className:B(V.input,V.textInput),onChange:n=>r(n.target.value),placeholder:t("Enter instance name")})]}),f.jsx("div",{style:{height:"1px",backgroundColor:"var(--reactaform-separator, #e6e6e6)",marginTop:12,marginBottom:12}})]})});lr.displayName="InstanceName";class yt extends ne{registerInCategory(r,t,n){this.get(r)||this.register(r,{});const a=this.get(r);a[t]=n}getFromCategory(r,t){return this.get(r)?.[t]}listFromCategory(r){return Object.keys(this.get(r)||{})}listCategories(){return this.list()}}const ur=new ne,mr=new yt,ke=new ne;function dr(e,r){ur.register(e,r)}function fr(e,r,t){mr.registerInCategory(e,r,t)}function pr(e,r){if(dn(e)){console.warn(`[ReactaForm] Can't override builtin type field validation handler for type "${e}".`);return}ke.register(e,r)}function H(e,r){ke.register(e,r)}function gr(e,r){return mr.getFromCategory(e,r)||null}function hr(e){return ur.get(e)||null}function br(e){return ke.get(e)||null}function vt(e){return(typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}const We=new Map,_e=new Map;function Ie(e,r,t,n){if(!r||!r.validationHandlerName)return null;let a,o;if(typeof r.validationHandlerName=="string")a=e,o=r.validationHandlerName;else if(Array.isArray(r.validationHandlerName)){const[s,d]=r.validationHandlerName;if(d)a=s,o=d;else if(s)a=e,o=s;else return null}else return null;const c=`${a}:${o}`;let i=We.get(c);if(i===void 0&&(i=gr(a,o)||null,We.set(c,i)),i)try{return i(r.name,t,n)||null}catch(s){return String(s instanceof Error?s.message:s)}return null}function xt(e,r,t,n){return Ie(e,r,t,n)}function yr(e,r,t,n){const a=br(r.type);if(a){const o=a(r,t,n);if(o)return o}else if(String(t??"").trim()==="")return r.required?n("Value required"):null;return Ie(e,r,t,n)}async function wt(e,r,t){if(!e||typeof e.validationHandlerName!="string")return null;const n=e.validationHandlerName;let a=_e.get(n);if(a===void 0&&(a=hr(n)||null,_e.set(n,a)),a)try{const o=a(r,t);return vt(o)?await o||null:o||null}catch(o){return[String(o instanceof Error?o.message:o)]}return null}function O(e,r){const{definitionName:t,t:n,fieldValidationMode:a}=L();return l.useCallback(o=>a==="onEdit"||a==="realTime"?yr(t,e,o,n):r??null,[t,e,n,a,r])}const vr=({field:e,value:r=!1,onChange:t,onError:n,error:a})=>{const{t:o}=L(),i=O(e,a)(r);l.useEffect(()=>{a||n?.(i)},[i,a,n]);const s=l.useCallback(u=>{t?.(u.target.checked)},[t]),d=l.useCallback(u=>{(u.key===" "||u.key==="Space"||u.key==="Spacebar"||u.code==="Space"||u.key==="Enter")&&(u.preventDefault(),t?.(!r))},[t,r]),m=e.name;return f.jsx(z,{field:e,rightAlign:!1,error:i,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[f.jsx("label",{className:V.label,htmlFor:m,style:{textAlign:"left",justifyContent:"flex-start"},children:o(e.displayName)}),f.jsx("input",{id:m,"data-testid":"boolean-checkbox",type:"checkbox",checked:r,onChange:s,onKeyDown:d,"aria-checked":r,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0,style:{cursor:"pointer",margin:"8px 0",width:"1.2em",height:"1.2em",verticalAlign:"middle",accentColor:"#0000FF"}})]})})};vr.displayName="CheckboxInput";const St=l.memo(vr);function W({value:e,onChange:r,onError:t,validate:n}){const a=l.useRef(null),o=l.useRef(null),c=l.useRef(t),[i,s]=l.useState(null);l.useEffect(()=>{c.current=t},[t]),l.useEffect(()=>{const m=String(e??"");if(!(document.activeElement===a.current)){const p=n(m);p!==o.current&&(o.current=p,c.current?.(p??null),s(p)),a.current&&a.current.value!==m&&(a.current.value=m)}},[e,n]);const d=l.useCallback(m=>{const u=m.target.value,p=n(u);p!==o.current&&(o.current=p,s(p),c.current?.(p??null)),r?.(u)},[r,n]);return{inputRef:a,error:i,handleChange:d}}const Ke=[{label:"Black",value:"#000000"},{label:"White",value:"#ffffff"},{label:"Red",value:"#ff0000"},{label:"Green",value:"#008000"},{label:"Blue",value:"#0000ff"},{label:"Yellow",value:"#ffff00"},{label:"Cyan",value:"#00ffff"},{label:"Magenta",value:"#ff00ff"},{label:"Orange",value:"#ffa500"},{label:"Purple",value:"#800080"},{label:"Brown",value:"#a52a2a"},{label:"Gray",value:"#808080"},{label:"Light Gray",value:"#d3d3d3"},{label:"Pink",value:"#ffc0cb"}],Ct=/^#([0-9A-F]{3}){1,2}$/i,Nt="#000000",jt=e=>Ct.test(e),pe=e=>{if(!e||!jt(e))return Nt;const r=e.toLowerCase();return r.length===4?"#"+r.slice(1).split("").map(t=>t+t).join(""):r},kt=e=>{const r=parseInt(e.slice(1),16);return{r:r>>16&255,g:r>>8&255,b:r&255}},xr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=L(),c=O(e,a),i=l.useMemo(()=>pe(r),[r]),{inputRef:s,error:d,handleChange:m}=W({value:i,onChange:t,onError:n,validate:c}),[u,p]=l.useState(i);l.useEffect(()=>{p(i)},[i]);const b=l.useCallback(E=>{const M=pe(E.target.value);p(M),m({target:{value:M}})},[m]),C=l.useCallback(E=>{const M=pe(E.target.value);p(M),m({target:{value:M}})},[m]),h=l.useMemo(()=>new Set(Ke.map(E=>E.value)),[]).has(u),{r:y,g:I,b:F}=l.useMemo(()=>kt(u),[u]);return f.jsx(z,{field:e,error:d,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[f.jsxs("select",{id:e.name,value:u,onChange:C,className:B(V.input,V.inputSelect),"aria-invalid":!!d,children:[Ke.map(E=>f.jsx("option",{value:E.value,children:o(E.label)},E.value)),!h&&f.jsxs("option",{value:u,children:["(",y,", ",I,", ",F,")"]})]}),f.jsx("label",{style:{width:"2.5em",height:"1.8em",border:"1px solid #ccc",borderRadius:4,backgroundColor:u,cursor:"pointer",overflow:"hidden",flexShrink:0},children:f.jsx("input",{ref:s,id:`${e.name}-color`,type:"color",defaultValue:u,onChange:b,style:{opacity:0,width:"100%",height:"100%"},"aria-invalid":!!d})})]})})};xr.displayName="ColorInput";const It=l.memo(xr),Je=e=>{if(!e)return null;const r=new Date(e);return isNaN(r.getTime())?null:r},Ge=e=>{if(!e)return"";if(/^\d{4}-\d{2}-\d{2}$/.test(e))return Je(e)?e:"";const t=Je(e);if(t){const n=t.getUTCFullYear(),a=String(t.getUTCMonth()+1).padStart(2,"0"),o=String(t.getUTCDate()).padStart(2,"0");return`${n}-${a}-${o}`}return""},wr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),c=Ge(r),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"date",ref:i,defaultValue:Ge(r),onChange:d,className:B(V.input,V.textInput),...e.minDate?{min:e.minDate}:{},...e.maxDate?{max:e.maxDate}:{},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};wr.displayName="DateInput";const Et=l.memo(wr),Sr=({field:e})=>{const{t:r}=L(),{displayText:t="",textAlign:n="left",allowHtml:a=!1}=e;return f.jsx("div",{className:V.description,style:{textAlign:n},...a?{dangerouslySetInnerHTML:{__html:r(t)}}:{children:r(t)}})};Sr.displayName="Description";const Ft=l.memo(Sr),Cr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,theme:c,formStyle:i,fieldStyle:s}=L(),d=l.useRef(null),m=l.useRef(n),[u,p]=l.useState(!1),[b,C]=l.useState(null);l.useEffect(()=>{m.current=n},[n]);const N=O(e,a),[h,y]=l.useState(null),I=l.useRef(null);l.useEffect(()=>{const g=String(r??"");let w=N(g);if(w&&e.options.length>0){const x=String(e.options[0].value);t?.(x),w=null}w!==I.current&&(I.current=w,y(w),m.current?.(w??null))},[r,N,t,e.options]);const F=()=>{if(!d.current)return;const g=d.current.getBoundingClientRect();C({x:g.left,y:g.bottom}),p(w=>!w)},E=g=>{const w=N(g);w!==I.current&&(I.current=w,y(w),m.current?.(w??null)),t?.(g),p(!1)},M=l.useMemo(()=>{const g=e.options.find(w=>String(w.value)===String(r));return g?o(g.label):""},[e.options,r,o]),R=(g,w,x)=>{if(!w)return{};const S=g?.[w];return(x&&S?S[x]:void 0)??{}},k=l.useMemo(()=>({height:"var(--reactaform-input-height, 2.5em)",display:"flex",alignItems:"center",boxSizing:"border-box",padding:"0 0.75em",cursor:"pointer",position:"relative",textAlign:"left",...R(i,"dropdown","control"),...R(s,void 0,"control")}),[i,s]),v=l.useMemo(()=>({position:"absolute",right:"0.7em",top:"50%",transform:"translateY(-50%)",pointerEvents:"none",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",...R(i,"dropdown","arrow"),...R(s,void 0,"arrow")}),[i,s]);return f.jsxs("div",{children:[f.jsx(z,{field:e,error:h,children:f.jsxs("div",{ref:d,className:"reactaform-input",style:k,onClick:F,tabIndex:0,role:"combobox","aria-haspopup":"listbox","aria-expanded":u,"aria-invalid":!!h,"aria-describedby":h?`${e.name}-error`:void 0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),F())},children:[f.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingRight:"1.8em",display:"block"},children:M}),f.jsx("span",{style:v,"aria-hidden":!0,children:"▼"})]})}),u&&b&&f.jsx(Mt,{position:b,options:e.options,selectedValue:String(r),onSelect:E,onClose:()=>p(!1),controlRef:d,theme:c,t:o})]})},Mt=({position:e,options:r,selectedValue:t,onSelect:n,onClose:a,controlRef:o,theme:c,t:i})=>{const s=l.useRef(null),[d,m]=l.useState(-1),{formStyle:u,fieldStyle:p}=L(),b=ae(c??"light");l.useLayoutEffect(()=>{if(!o.current)return;const v=o.current.closest("[data-reactaform-theme]"),g=document.getElementById("popup-root");if(v&&g){const w=getComputedStyle(v);g.style.setProperty("--reactaform-secondary-bg",w.getPropertyValue("--reactaform-secondary-bg")),g.style.setProperty("--reactaform-text-color",w.getPropertyValue("--reactaform-text-color")),g.style.setProperty("--reactaform-option-menu-hover-bg",w.getPropertyValue("--reactaform-option-menu-hover-bg"))}},[o]);const C=(v,g,w)=>{if(!g)return{};const j=v?.[g];return(w&&j?j[w]:void 0)??{}},N=l.useMemo(()=>({maxHeight:200,overflowY:"auto",background:"var(--reactaform-secondary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:4,zIndex:2e3,boxShadow:"var(--reactaform-shadow, 0 2px 8px rgba(0,0,0,0.15))",pointerEvents:"auto",color:"var(--reactaform-text-color, #000)",fontSize:"var(--reactaform-popup-font-size, 0.875rem)",...C(u,"dropdown","popup"),...C(p,void 0,"popup")}),[u,p]),h=l.useMemo(()=>({padding:"6px 8px",cursor:"pointer",display:"flex",alignItems:"center",background:"transparent",color:"var(--reactaform-text-color, #000)",...C(u,"dropdown","option"),...C(p,void 0,"option")}),[u,p]);l.useEffect(()=>{const v=g=>{const w=g.target;!s.current?.contains(w)&&!o.current?.contains(w)&&a()};return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[a,o]),l.useEffect(()=>{if(s.current&&r.length>0){const v=r.findIndex(g=>String(g.value)===t);requestAnimationFrame(()=>m(v>=0?v:0))}},[r,t]),l.useEffect(()=>{if(!s.current||d<0)return;const v=s.current.querySelector(`#opt-${d}`);v&&requestAnimationFrame(()=>v.focus())},[d]);const y=250,I=200,[F,E]=l.useState(null),[M,R]=l.useState(null);if(l.useEffect(()=>{if(typeof window>"u")return;const v=()=>{let x=e.x,j=e.y,S=y;const $=o?.current;if($){const T=$.getBoundingClientRect();x=T.left,j=T.bottom,S=Math.max(80,Math.round(T.width))}x=Math.min(x,window.innerWidth-S),j=Math.min(j,window.innerHeight-I),E({left:x,top:j}),R(S)};v(),window.addEventListener("scroll",v,!0),window.addEventListener("resize",v);let g=null;const w=o?.current;return typeof ResizeObserver<"u"&&w&&(g=new ResizeObserver(()=>v()),g.observe(w)),()=>{window.removeEventListener("scroll",v,!0),window.removeEventListener("resize",v),g&&w&&g.unobserve(w)}},[o,e.x,e.y]),typeof window>"u")return null;let k=document.getElementById("popup-root");return k||(k=document.createElement("div"),k.id="popup-root",document.body.appendChild(k)),de.createPortal(f.jsx("div",{ref:s,role:"listbox","aria-activedescendant":d>=0?`opt-${d}`:void 0,style:{position:"fixed",top:F?F.top:e.y,left:F?F.left:e.x,width:M??y,...N},"data-reactaform-theme":c??"light",children:r.map((v,g)=>{const w=String(v.value)===t,x=b?"var(--reactaform-option-menu-hover-bg, rgba(255,255,255,0.01))":"var(--reactaform-option-menu-hover-bg, #eee)",j={...h,background:g===d?x:h.background,fontWeight:w?"bold":"normal"};return f.jsx("div",{id:`opt-${g}`,onMouseDown:S=>{S.stopPropagation(),n(String(v.value))},onKeyDown:S=>{const $=r.length;switch(S.key){case"ArrowDown":S.preventDefault(),m(T=>(T+1)%$);break;case"ArrowUp":S.preventDefault(),m(T=>(T-1+$)%$);break;case"Home":S.preventDefault(),m(0);break;case"End":S.preventDefault(),m($-1);break;case"Enter":case" ":S.preventDefault(),S.stopPropagation(),n(String(v.value));break;case"Escape":S.preventDefault(),a(),o?.current?.focus();break}},tabIndex:g===d?0:-1,role:"option","aria-selected":w,style:j,onMouseEnter:S=>{S.currentTarget.style.background=x,m(g)},onMouseLeave:S=>{S.currentTarget.style.background="transparent",m($=>$===g?-1:$)},children:i(v.label)},String(v.value))})}),k)};Cr.displayName="DropdownInput";const Vt=l.memo(Cr),Nr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"email",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Nr.displayName="EmailInput";const $t=l.memo(Nr),jr=({field:e})=>{const{theme:r}=L(),{color:t=ae(r)?"#444444":"#CCCCCC",thickness:n=1,margin:a="8px 0"}=e;return f.jsx("div",{style:{width:"auto",height:"0",borderTop:`${n}px solid ${t}`,margin:a}})};jr.displayName="FieldSeparator";const Rt=l.memo(jr),kr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,theme:c}=L(),[i,s]=l.useState(!1),d=l.useRef(null),m=l.useRef(n),u=l.useRef(null),[p,b]=l.useState(null),C=ae(c);l.useEffect(()=>{m.current=n},[n]);const N=(g,w)=>w.some(x=>x.name===g.name&&x.size===g.size&&x.lastModified===g.lastModified),h=O(e,a);l.useEffect(()=>{const g=h(r??[]);t?.(r),g!==u.current&&(u.current=g,b(g),m.current?.(g??null))},[r,h]);const y=g=>{const w=g.target.files;let x=null;if(w&&w.length>0){const S=Array.from(w);if(e.multiple){const $=Array.isArray(r)?r:[],T=S.filter(_=>!N(_,$));x=[...$,...T]}else x=S[0]}const j=h(x??[]);j!==u.current&&(u.current=j,b(j),m.current?.(j??null)),t?.(x),g.target&&(g.target.value="")},I=g=>{g.preventDefault(),g.stopPropagation(),s(!1);const w=g.dataTransfer.files;if(w&&w.length>0){const x=Array.from(w);let j=null;if(e.multiple){const $=Array.isArray(r)?r:[],T=x.filter(_=>!N(_,$));j=[...$,...T]}else j=x[0];const S=h(j);S!==u.current&&(u.current=S,b(S),m.current?.(S??null)),t?.(j)}},F=g=>{g.preventDefault(),g.stopPropagation(),s(!0)},E=g=>{g.preventDefault(),g.stopPropagation(),s(!1)},M=g=>{if(Array.isArray(r)&&typeof g=="number"){const w=r.filter((S,$)=>$!==g),x=w.length>0?w:null,j=h(x??[]);j!==u.current&&(u.current=j,b(j),m.current?.(j??null)),t?.(x)}else{const w=h([]);w!==u.current&&(u.current=w,b(w),m.current?.(w??null)),t?.(null)}},R=()=>{const g=Array.isArray(r)?r:r?[r]:[];return g.length===0?null:f.jsx("div",{style:{marginTop:"8px",marginLeft:"20px",display:"flex",flexDirection:"column",gap:"6px",maxHeight:"200px",overflowY:"auto"},children:g.map((w,x)=>f.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[f.jsx("input",{type:"text",value:w.name,disabled:!0,readOnly:!0,title:w.name,className:"reactaform-input",style:{flex:1,cursor:"default",opacity:.8,minWidth:0}}),f.jsx("button",{type:"button",onClick:()=>M(Array.isArray(r)?x:void 0),"aria-label":o("Remove file"),style:{background:"transparent",border:"none",color:"var(--reactaform-color-error, #ef4444)",cursor:"pointer",padding:"2px 6px",fontSize:"1.125rem",lineHeight:1,borderRadius:"4px",transition:"background-color 0.2s",flexShrink:0},onMouseEnter:j=>{j.currentTarget.style.backgroundColor="var(--reactaform-bg-hover, #fee)"},onMouseLeave:j=>{j.currentTarget.style.backgroundColor="transparent"},children:"×"})]},`${w.name}-${x}`))})},[k,v]=l.useState(!1);return f.jsx(z,{field:e,error:p,children:f.jsxs("div",{style:{width:"100%"},children:[f.jsxs("div",{className:"reactaform-input",onDrop:I,onDragOver:F,onDragLeave:E,onMouseEnter:()=>v(!0),onMouseLeave:()=>v(!1),style:{position:"relative",borderStyle:"dashed",borderColor:i?"var(--reactaform-color-primary, #2563eb)":k?"var(--reactaform-border-hover, #4A4A4A)":p?"var(--reactaform-color-error, #ef4444)":void 0,borderWidth:"1px",borderRadius:"var(--reactaform-border-radius, 4px)",padding:"8px 12px",textAlign:"center",backgroundColor:i?`var(--reactaform-bg-hover, ${C?"#070707":"#eff6ff"})`:void 0,transition:"all 0.2s ease",cursor:"pointer",minHeight:"var(--reactaform-input-height, 34px)",width:"100%",maxWidth:"100%",alignSelf:"stretch",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",userSelect:"none"},onClick:()=>d.current?.click(),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),d.current?.click())},role:"button","aria-label":e.multiple?o("Choose Files or Drag & Drop"):o("Choose File or Drag & Drop"),"aria-invalid":!!p,"aria-describedby":p?`${e.name}-error`:void 0,children:[f.jsx("input",{id:e.name,ref:d,type:"file",accept:e.accept,multiple:e.multiple,style:{display:"none"},onChange:y}),f.jsx("div",{style:{fontSize:"1.25rem",opacity:.6,lineHeight:1,flexShrink:0},children:"📁"}),f.jsx("div",{style:{fontSize:"0.875rem",fontWeight:400,color:"var(--reactaform-text-color, #111827)",flex:1,textAlign:"left"},children:i?o("Drop files here"):e.multiple?o("Choose Files or Drag & Drop"):o("Choose File or Drag & Drop")})]}),R()]})})};kr.displayName="FileInput";const At=l.memo(kr),Ir=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),c=Array.isArray(r)?r.join(", "):String(r??""),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"text",defaultValue:c,ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};Ir.displayName="FloatArrayInput";const Dt=l.memo(Ir),Er=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",ref:c,defaultValue:String(r??""),onChange:s,className:B(V.input,V.inputNumber),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Er.displayName="FloatInput";const Pt=l.memo(Er);function zt(){try{return"/"}catch{}try{if(typeof process<"u"&&process?.env?.PUBLIC_URL)return process.env.PUBLIC_URL}catch{}return"/"}const Fr=({field:e,value:r})=>{const{language:t,t:n}=L(),a=e.alignment||"center",o={left:"flex-start",center:"center",right:"flex-end"},c=typeof r=="string"?r:"";let i=c&&c.trim()!==""?c:typeof e.defaultValue=="string"?e.defaultValue:"";i&&!i.startsWith("/")&&(i=`${zt()}${i}`);const s=e.localized?.split(";").map(h=>h.trim()),[d,m]=l.useState(i||""),u=l.useRef(i||null);if(l.useEffect(()=>{if(!i)return;const h=i.split("/"),y=h.pop(),I=y.lastIndexOf(".");if(I===-1)return;const F=y.substring(0,I),E=y.substring(I);let M=null;s?.includes(t)&&(M=`${F}_${t}${E}`);const R=new AbortController;if(M){const k=[...h,M].join("/");fetch(k,{method:"HEAD",signal:R.signal}).then(v=>{const g=v.ok?k:i;g!==u.current&&(u.current=g,m(g))}).catch(()=>{i!==u.current&&(u.current=i,m(i))})}else{const k=i;k!==u.current&&(u.current=k,requestAnimationFrame(()=>m(k)))}return()=>{R.abort()}},[i,t,s]),!d)return null;const{width:p,height:b}=e,C={},N={borderRadius:"8px",objectFit:"contain",boxShadow:"0 2px 6px rgba(0,0,0,0.1)",margin:"0 0 8px 0"};return p&&b?(C.width=p,C.height=b,N.width=`${p}px`,N.height=`${b}px`):p&&!b?(C.width=p,N.width=`${p}px`,N.height="auto"):!p&&b&&(C.height=b,N.width="auto",N.height=`${b}px`),f.jsx(z,{field:e,children:f.jsx("div",{"data-testid":"image-wrapper",style:{display:"flex",justifyContent:o[a]||"center",margin:"0 0"},children:f.jsx("img",{src:d,alt:n?.(e.displayName||"Image")||e.displayName||"Image",...C,style:N})})})};Fr.displayName="ImageDisplay";const Ot=l.memo(Fr),Mr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),c=Array.isArray(r)?r.join(", "):String(r??""),{inputRef:i,error:s,handleChange:d}=W({value:c,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:s,children:f.jsx("input",{id:e.name,type:"text",defaultValue:c,ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0})})};Mr.displayName="IntegerArrayInput";const Lt=l.memo(Mr),Vr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.inputNumber),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Vr.displayName="IntegerInput";const Tt=l.memo(Vr),$r=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("textarea",{id:e.name,defaultValue:String(r??""),ref:c,onChange:s,style:{resize:"vertical",minHeight:e.minHeight??"80px",width:"100%",boxSizing:"border-box"},className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};$r.displayName="MultilineTextInput";const Ht=l.memo($r),Rr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=l.useRef(n);l.useEffect(()=>{o.current=n},[n]);const{t:c,theme:i,formStyle:s,fieldStyle:d}=L(),m=(x,j,S)=>{if(!j)return{};const T=x?.[j];return(S&&T?T[S]:void 0)??{}},u=l.useRef(null),[p,b]=l.useState(!1),[C,N]=l.useState(null),h=l.useMemo(()=>e.options.map(x=>({value:x.value,label:c(x.label)})),[e.options,c]),y=l.useMemo(()=>{const x=Array.isArray(r)?r:[],j=new Set(h.map(S=>S.value));return x.filter(S=>j.has(S))},[r,h]),I=O(e,a),[F,E]=l.useState(null),M=l.useRef(null);l.useEffect(()=>{const x=I(Array.isArray(r)?r:[]);x!==M.current&&(M.current=x,E(x),o.current?.(x??null))},[r,I]);const R=()=>{if(!u.current)return;const x=u.current.getBoundingClientRect();N({x:x.left,y:x.bottom}),b(j=>!j)},k=x=>{const j=y.includes(x)?y.filter($=>$!==x):[...y,x],S=I(j);S!==M.current&&(M.current=S,E(S),o.current?.(S??null)),t?.(j)},v=l.useMemo(()=>({height:"var(--reactaform-input-height, 2.5rem)",display:"flex",alignItems:"center",cursor:"pointer",position:"relative",textAlign:"left",...m(s,"multiSelect","control"),...m(d,void 0,"control")}),[s,d]),g=l.useMemo(()=>({position:"absolute",right:"1.5em",top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",padding:0,...m(s,"multiSelect","clearButton"),...m(d,void 0,"clearButton")}),[s,d]),w=l.useMemo(()=>({position:"absolute",right:"0.7em",top:"50%",transform:"translateY(-50%)",pointerEvents:"none",fontSize:"0.8em",color:"var(--reactaform-text-muted, #999)",...m(s,"multiSelect","arrow"),...m(d,void 0,"arrow")}),[s,d]);return f.jsxs("div",{children:[f.jsx(z,{field:e,error:F,children:f.jsx("div",{style:{width:"100%"},children:f.jsxs("div",{ref:u,className:"reactaform-multiselection-control reactaform-input",style:v,onClick:R,role:"button","aria-haspopup":"listbox","aria-expanded":p,"aria-invalid":!!F,"aria-describedby":F?`${e.name}-error`:void 0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),R())},children:[f.jsxs("span",{style:{flex:1,color:"var(--reactaform-text-muted, #888)"},children:[y.length," / ",h.length," selected"]}),y.length>0&&f.jsx("button",{type:"button","aria-label":"Clear selections",onClick:x=>{x.stopPropagation(),t?.([])},style:g,children:f.jsx("span",{style:g,"aria-hidden":!0,children:"✖"})}),f.jsx("span",{style:w,"aria-hidden":!0,children:"▼"})]})})}),p&&C&&f.jsx(Bt,{position:C,options:h,selectedValues:y,onToggleOption:k,onClose:()=>b(!1),controlRef:u,theme:i})]})},Bt=({position:e,options:r,selectedValues:t,onToggleOption:n,onClose:a,controlRef:o,theme:c})=>{const i=l.useRef(null),[s,d]=l.useState(-1),{formStyle:m,fieldStyle:u}=L(),p=ae(c??"light");l.useLayoutEffect(()=>{if(!o.current)return;const k=o.current.closest("[data-reactaform-theme]"),v=document.getElementById("popup-root");if(k&&v){const g=getComputedStyle(k);v.style.setProperty("--reactaform-secondary-bg",g.getPropertyValue("--reactaform-secondary-bg")),v.style.setProperty("--reactaform-text-color",g.getPropertyValue("--reactaform-text-color")),v.style.setProperty("--reactaform-option-menu-hover-bg",g.getPropertyValue("--reactaform-option-menu-hover-bg"))}},[o]);const b=(k,v,g)=>{if(!v)return{};const x=k?.[v];return(g&&x?x[g]:void 0)??{}},C=l.useMemo(()=>({maxHeight:200,overflowY:"auto",background:"var(--reactaform-secondary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:4,zIndex:2e3,boxShadow:"var(--reactaform-shadow, 0 2px 8px rgba(0,0,0,0.15))",pointerEvents:"auto",color:"var(--reactaform-text-color, #000)",fontSize:"var(--reactaform-popup-font-size, 0.875rem)",...b(m,"multiSelect","popup"),...b(u,void 0,"popup")}),[m,u]),N=l.useMemo(()=>({padding:"6px 8px",cursor:"pointer",display:"flex",alignItems:"center",background:"transparent",color:"var(--reactaform-text-color, #000)",...b(m,"multiSelect","option"),...b(u,void 0,"option")}),[m,u]);l.useEffect(()=>{const k=v=>{const g=v.target;!i.current?.contains(g)&&!o.current?.contains(g)&&a()};return document.addEventListener("mousedown",k),()=>document.removeEventListener("mousedown",k)},[a,o]),l.useEffect(()=>{i.current&&r.length>0&&requestAnimationFrame(()=>d(k=>k===-1?0:k))},[r.length]),l.useEffect(()=>{if(!i.current||s<0)return;const k=i.current.querySelector(`#multi-opt-${s}`);k&&requestAnimationFrame(()=>k.focus())},[s]);const h=250,y=200,[I,F]=l.useState(null),[E,M]=l.useState(null);if(l.useEffect(()=>{if(typeof window>"u")return;const k=()=>{let w=e.x,x=e.y,j=h;const S=o?.current;if(S){const $=S.getBoundingClientRect();w=$.left,x=$.bottom,j=Math.max(80,Math.round($.width))}w=Math.min(w,window.innerWidth-j),x=Math.min(x,window.innerHeight-y),F({left:w,top:x}),M(j)};k(),window.addEventListener("scroll",k,!0),window.addEventListener("resize",k);let v=null;const g=o?.current;return typeof ResizeObserver<"u"&&g&&(v=new ResizeObserver(()=>k()),v.observe(g)),()=>{window.removeEventListener("scroll",k,!0),window.removeEventListener("resize",k),v&&g&&v.unobserve(g)}},[o,e.x,e.y]),typeof window>"u")return null;let R=document.getElementById("popup-root");return R||(R=document.createElement("div"),R.id="popup-root",document.body.appendChild(R)),de.createPortal(f.jsx("div",{ref:i,role:"listbox","aria-activedescendant":s>=0?`multi-opt-${s}`:void 0,style:{position:"fixed",top:I?I.top:e.y,left:I?I.left:e.x,width:E??h,...C},"data-reactaform-theme":c??"light",children:r.map((k,v)=>{const g=t.includes(k.value),w=p?"var(--reactaform-option-menu-hover-bg, rgba(255,255,255,0.01))":"var(--reactaform-option-menu-hover-bg, #eee)",x={...N,background:v===s?w:N.background};return f.jsxs("div",{id:`multi-opt-${v}`,onMouseDown:j=>{j.stopPropagation(),n(k.value)},onKeyDown:j=>{const S=r.length;switch(j.key){case"ArrowDown":j.preventDefault(),d($=>($+1)%S);break;case"ArrowUp":j.preventDefault(),d($=>($-1+S)%S);break;case"Home":j.preventDefault(),d(0);break;case"End":j.preventDefault(),d(S-1);break;case"Enter":case" ":j.preventDefault(),j.stopPropagation(),n(k.value);break;case"Escape":j.preventDefault(),a(),o?.current?.focus();break}},tabIndex:v===s?0:-1,role:"option","aria-selected":g,style:x,onMouseEnter:j=>{j.currentTarget.style.background=w,d(v)},onMouseLeave:j=>{j.currentTarget.style.background="transparent",d(S=>S===v?-1:S)},children:[f.jsx("input",{type:"checkbox",checked:g,readOnly:!0,style:{marginRight:8,width:"1.125em",height:"1.125em",verticalAlign:"middle",accentColor:p?"#10b981":"#22c55e",cursor:"pointer"}}),k.label]},k.value)})}),R)};Rr.displayName="MultiSelect";const qt=l.memo(Rr),Ar=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:String(r??""),onChange:t,onError:n,validate:o}),d=Math.max(1,Math.round(e.step??1));return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"number",defaultValue:String(r??""),ref:c,min:e.min??void 0,max:e.max??void 0,step:d,onChange:s,style:{width:"100%",height:"100%"},className:V.input,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Ar.displayName="NumericStepperInput";const Ut=l.memo(Ar),Dr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"tel",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Dr.displayName="PhoneInput";const Wt=l.memo(Dr),Pr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=L(),c=O(e,a),i=e.layout?.toLowerCase()==="horizontal"?"row":"column",s=l.useRef(n);l.useEffect(()=>{s.current=n},[n]);const[d,m]=l.useState(null),u=l.useRef(null),p=l.useCallback(h=>{h!==u.current&&(u.current=h,m(h),s.current?.(h))},[]);l.useEffect(()=>{const h=r!=null?String(r):"",y=c(h);if(y&&e.options.length>0){const I=String(e.options[0].value);t?.(I)}p(y)},[r,e.options,c,t,p]);const b=h=>{const y=h.target.value,I=c(y);p(I),t?.(y)},C={display:"flex",flexDirection:i,flexWrap:i==="row"?"wrap":"nowrap",gap:i==="row"?"12px":"4px",alignItems:i==="row"?"center":"stretch",width:"100%",padding:i==="row"?"8px":void 0,boxSizing:"border-box"},N={display:i==="column"?"flex":"inline-flex",gap:"8px",alignItems:"center",whiteSpace:"nowrap",marginBottom:i==="column"?6:0,cursor:"pointer",width:i==="column"?"100%":void 0,justifyContent:"flex-start"};return f.jsx(z,{field:e,error:d,children:f.jsx("div",{className:V.input,"aria-labelledby":`${e.name}-label`,"aria-invalid":!!d,style:C,children:e.options.map(h=>{const y=String(h.value),I=`${e.name}-${y}`;return f.jsxs("label",{className:B(V.label),style:N,onMouseDown:F=>F.preventDefault(),onClick:()=>{String(r??"")!==y&&b({target:{value:y}})},children:[f.jsx("input",{id:I,type:"radio",name:e.name,value:y,checked:String(r??"")===y,onChange:b,style:{width:"1.1em",height:"1.1em"}}),f.jsx("span",{style:{userSelect:"none",textAlign:i==="column"?"left":void 0,flex:i==="column"?1:void 0,fontWeight:400},children:o(h.label)})]},y)})})})};Pr.displayName="RadioInput";const _t=l.memo(Pr),Kt={display:"flex",gap:4},Jt={cursor:"pointer",fontSize:"1.5rem",lineHeight:1,display:"inline-block",marginRight:"0.25rem",userSelect:"none",transition:"color 0.12s ease"},zr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=L(),c=O(e,a),i=e.max??5,s=e.icon?.trim()||"★",[d,m]=l.useState(null),u=l.useRef([]),p=l.useMemo(()=>Math.min(Math.max(r??0,0),i),[r,i]),b=l.useMemo(()=>c(p)??null,[c,p]);l.useEffect(()=>{n?.(b)},[b,n]);const C=l.useCallback(h=>{const y=Math.min(Math.max(h,0),i);t?.(y)},[i,t]),N=l.useCallback((h,y)=>{switch(h.key){case"Enter":case" ":h.preventDefault(),C(y+1);break;case"ArrowRight":case"ArrowUp":h.preventDefault(),u.current[Math.min(i-1,y+1)]?.focus();break;case"ArrowLeft":case"ArrowDown":h.preventDefault(),u.current[Math.max(0,y-1)]?.focus();break}},[i,C]);return f.jsx(z,{field:e,error:b,children:f.jsx("div",{role:"radiogroup","aria-labelledby":`${e.name}-label`,"aria-invalid":!!b,"aria-describedby":b?`${e.name}-error`:void 0,style:Kt,children:Array.from({length:i},(h,y)=>{const I=y<p,E=d!==null&&y<=d||I?"gold":"lightgray";return f.jsx("span",{ref:M=>u.current[y]=M,role:"radio",tabIndex:p>0?y===p-1?0:-1:y===0?0:-1,"aria-checked":I,"aria-label":`Rating ${y+1}`,title:o(`${e.displayName} ${y+1}`),onClick:()=>C(y+1),onKeyDown:M=>N(M,y),onMouseEnter:()=>m(y),onMouseLeave:()=>m(null),style:{...Jt,color:E},children:s},y)})})})};zr.displayName="RatingInput";const Gt=l.memo(zr),Or=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o}=L(),c=O(e,a),{inputRef:i,error:s,handleChange:d}=W({value:r,onChange:t,onError:n,validate:c}),[m,u]=l.useState(!1),p=()=>u(b=>!b);return f.jsx(z,{field:e,error:s,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[f.jsx("input",{id:e.name,type:m?"text":"password",defaultValue:String(r??""),ref:i,onChange:d,className:B(V.input,V.textInput),style:{flex:1,minWidth:0},"aria-invalid":!!s,"aria-describedby":s?`${e.name}-error`:void 0}),f.jsx("button",{type:"button",onClick:p,"aria-label":o(m?"Hide password":"Show password"),style:{background:"transparent",border:"none",cursor:"pointer",fontSize:16,lineHeight:1,padding:"4px 6px",flexShrink:0},children:m?"🙈":"👁️"})]})})};Or.displayName="PasswordInput";const Yt=l.memo(Or),Lr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),c=e.min??0,i=e.max??100,[s,d]=l.useState(()=>isNaN(Number(r))?String(c):String(Number(r)));l.useEffect(()=>{const b=isNaN(Number(r))?String(c):String(Number(r));d(b)},[r,c]);const m=l.useMemo(()=>o(s)??null,[o,s]);l.useEffect(()=>{n?.(m)},[m,n]);const u=l.useCallback(b=>{const C=b.target.value;d(C),t?.(C)},[t]),p=isNaN(Number(s))?String(c):String(Number(s));return f.jsx(z,{field:e,error:m,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",width:"100%"},children:[f.jsx("input",{id:`${e.name}-range`,type:"range",value:p,onChange:u,min:c,max:i,step:"1.0",style:{padding:0,flex:1},className:V.rangeInput,"aria-invalid":!!m,"aria-describedby":m?`${e.name}-error`:void 0}),f.jsx("input",{id:e.name,type:"text",value:s,onChange:u,required:!0,style:{width:"40px",minWidth:"40px",height:"2.3em",textAlign:"center",flexShrink:0},className:B(V.input,V.textInput),"aria-invalid":!!m,"aria-describedby":m?`${e.name}-error`:void 0})]})})};Lr.displayName="SliderInput";const Xt=l.memo(Lr),Tr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const{t:o,formStyle:c,fieldStyle:i}=L(),d=O(e,a)(r);l.useEffect(()=>{n?.(d)},[d,n]);const m=c,u=i,p=(F,E,M)=>{if(!E)return{};const R=F?.[E];return(M&&R?R[M]:void 0)??{}},b=l.useMemo(()=>({display:"inline-block",position:"relative",width:44,height:24,...p(m,"switch","label"),...p(u,void 0,"label")}),[m,u]),C=l.useMemo(()=>({position:"absolute",opacity:0,top:0,left:0,width:"100%",height:"100%",margin:0,cursor:"pointer",pointerEvents:"none",...p(m,"switch","hiddenInput"),...p(u,void 0,"hiddenInput")}),[m,u]),N=l.useMemo(()=>({position:"absolute",cursor:"pointer",top:0,left:0,right:0,bottom:0,backgroundColor:"var(--reactaform-switch-off-bg, #ccc)",transition:"0.3s",borderRadius:24,borderWidth:2,borderStyle:"solid",borderColor:"transparent",...p(m,"switch","slider"),...p(u,void 0,"slider")}),[m,u]),h=l.useMemo(()=>({position:"absolute",height:16,width:16,left:2,bottom:2,backgroundColor:"white",transition:"0.3s",borderRadius:"50%",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.3)",...p(m,"switch","knob"),...p(u,void 0,"knob")}),[m,u]),y=!!r,I=()=>{t?.(!y)};return f.jsx(z,{field:e,error:null,rightAlign:!1,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[f.jsx("label",{className:V.label,htmlFor:e.name,style:{textAlign:"left",justifyContent:"flex-start"},children:o(e.displayName)}),f.jsxs("label",{style:b,children:[f.jsx("input",{id:e.name,type:"checkbox",checked:y,readOnly:!0,"aria-label":o(e.displayName),"aria-invalid":!1,"aria-describedby":void 0,style:C,tabIndex:-1}),f.jsx("span",{role:"switch","data-testid":"switch",tabIndex:0,"aria-checked":y,"aria-invalid":!1,"aria-describedby":void 0,onClick:I,onKeyDown:F=>{(F.key===" "||F.key==="Spacebar"||F.key==="Space"||F.key==="Enter")&&(F.preventDefault(),I())},className:`reactaform-switch ${y?"active checked on":""} `,style:y?{...N,backgroundColor:"var(--reactaform-switch-on-bg, #22c55e)",borderColor:"var(--reactaform-switch-on-border, #16a34a)"}:N,children:f.jsx("span",{style:{...h,transform:y?"translateX(20px)":void 0}})})]})]})})};Tr.displayName="SwitchInput";const Zt=l.memo(Tr),ye=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"text",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),placeholder:e.placeholder,"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};ye.displayName="TextInput";const Hr=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"time",ref:c,defaultValue:r,step:e.includeSeconds?1:60,onChange:s,min:typeof e.min=="string"?e.min:void 0,max:typeof e.max=="string"?e.max:void 0,className:B(V.input,V.textInput),"aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};Hr.displayName="TimeInput";const Qt=l.memo(Hr);function en({pos:e,options:r,onClose:t,onClickOption:n}){const a=l.useRef(null),o=l.useRef(!1),[c,i]=l.useState({top:e?.y??0,left:e?.x??0,ready:!1}),s=typeof window<"u"?document.getElementById("popup-root")||document.body:null;return l.useEffect(()=>{function d(m){o.current||m.target.dataset?.popupMenu==="item"||a.current&&m.target instanceof Node&&!a.current.contains(m.target)&&t()}return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[t]),l.useLayoutEffect(()=>{if(!a.current||!e||e.x==null||e.y==null)return;const d=a.current.getBoundingClientRect(),m=window.innerWidth,u=window.innerHeight;let p=e.x,b=e.y;p+d.width>m&&(p=Math.max(0,m-d.width-10)),b+d.height>u&&(b=Math.max(0,e.y-d.height-5)),i({top:b,left:p,ready:!0})},[e,r]),!s||r===void 0||r.length===0||!e||e.x==null||e.y==null?null:de.createPortal(f.jsx("div",{ref:a,onMouseDown:d=>{d.stopPropagation()},style:{position:"fixed",top:c.top,left:c.left,visibility:c.ready?"visible":"hidden",backgroundColor:"var(--reactaform-primary-bg, #fff)",border:"1px solid var(--reactaform-border-color, #ccc)",borderRadius:"var(--reactaform-border-radius, 4px)",boxShadow:"var(--reactaform-shadow, 0 2px 10px rgba(0,0,0,0.2))",zIndex:9999,minWidth:"var(--reactaform-menu-min-width, 150px)",maxHeight:"var(--reactaform-menu-max-height, 300px)",overflowY:"auto",pointerEvents:"auto"},children:r.map((d,m)=>f.jsx("div",{"data-popup-menu":"item",onMouseDown:u=>{u.stopPropagation(),o.current=!0},onClick:u=>{u.stopPropagation(),u.preventDefault(),n(d),t(),setTimeout(()=>{o.current=!1},100)},style:{padding:"var(--reactaform-menu-item-padding, 8px 12px)",cursor:"pointer",fontSize:"var(--reactaform-menu-item-font-size, 0.8em)",borderBottom:m<r.length-1?"1px solid var(--reactaform-border-light, #eee)":void 0,transition:"background-color 0.15s ease"},onMouseEnter:u=>{u.currentTarget.style.backgroundColor="var(--reactaform-option-menu-hover-bg, #e0e0e0)"},onMouseLeave:u=>{u.currentTarget.style.backgroundColor="transparent"},children:d.label},d.label??m))}),s)}const Ee={length:["m","cm","mm","km","in","ft","yd","mi"],area:["m^2","cm^2","mm^2","in^2","ft^2","yd^2"],volume:["L","m^3","cm^3","mL","in^3","ft^3","yd^3"],weight:["kg","g","mg","t","lb","oz"],time:["min","s","h","ms","d"],temperature:["C","F","K"],angle:["deg","rad","rev"]},Fe={length:{m:"Meter (m)",mm:"Millimeter (mm)",cm:"Centimeter (cm)",km:"Kilometer (km)",in:"Inch (in)",ft:"Foot (ft)",yd:"Yard (yd)",mi:"Mile (mi)"},area:{"m^2":"Square meter (m^2)","mm^2":"Square millimeter (mm^2)","cm^2":"Square centimeter (cm^2)","in^2":"Square inch (in^2)","ft^2":"Square foot (ft^2)","yd^2":"Square yard (yd^2)"},volume:{L:"Liter (L)","cm^3":"Cubic centimeter (cm^3)","m^3":"Cubic meter (m^3)",mL:"Milliliter (mL)","in^3":"Cubic inch (in^3)","ft^3":"Cubic foot (ft^3)","yd^3":"Cubic yard (yd^3)"},weight:{kg:"Kilogram (kg)",g:"Gram (g)",mg:"Milligram (mg)",t:"Tonne (t)",lb:"Pound (lb)",oz:"Ounce (oz)"},time:{s:"Second (s)",min:"Minute (min)",h:"Hour (h)",ms:"Millisecond (ms)",d:"Day (d)",wk:"Week (wk)"},temperature:{C:"Celsius (C)",F:"Fahrenheit (F)",K:"Kelvin (K)"},angle:{deg:"Degree (deg)",rad:"Radian (rad)",rev:"Revolution (rev)"}},Me={length:{mm:1e3,cm:100,m:1,km:.001,in:100/2.54,ft:100/(2.54*12),yd:100/(2.54*36),mi:1/1609.344},area:{"m^2":1,"mm^2":1e6,"cm^2":1e4,"km^2":1/1e6,"in^2":(100/2.54)**2,"ft^2":(100/(2.54*12))**2,"yd^2":(100/(2.54*36))**2},volume:{"cm^3":1e6,"m^3":1,L:1,mL:1e6,"in^3":(100/2.54)**3,"ft^3":(100/(2.54*12))**3,"yd^3":(100/(2.54*36))**3},weight:{mg:1e6,g:1e3,kg:1,t:.001,lb:1/.45359237,oz:1/.028349523125},time:{ms:1e3,s:1,min:1/60,h:1/3600,d:1/86400,wk:1/604800},temperature:{C:1,F:33.8,K:274.15},angle:{deg:1,rad:Math.PI/180,rev:1/360}},Ve={},rn=new Set([...Object.keys(Ee),...Object.keys(Fe),...Object.keys(Me)]);for(const e of rn){const r={},t=Ee[e]??[],n=Fe[e]??{},a=Me[e]??{};for(const o of t){const c=n[o];r[o]={name:typeof c=="string"?c:String(o),shortName:o,factor:o in a?a[o]:void 0}}for(const[o,c]of Object.entries(n))if(!r[o]){const i=typeof c=="string"?c:String(o);r[o]={name:i,shortName:o,factor:o in a?a[o]:void 0}}for(const[o,c]of Object.entries(a))r[o]||(r[o]={name:String(o),shortName:String(o),factor:c});Ve[e]=r}function Br(e,r,t){if(e==="C"){if(r==="F")return t*(9/5)+32;if(r==="K")return t+273.15}else if(e==="F"){if(r==="C")return(t-32)*5/9;if(r==="K")return(t-32)*5/9+273.15}else if(e==="K"){if(r==="C")return t-273.15;if(r==="F")return(t-273.15)*9/5+32}return t}function qr(e){const r=Ve[e];if(!r)return null;const t={},n=[];for(const[o,c]of Object.entries(r))typeof c.factor=="number"&&(t[o]=c.factor),n.push(o);return{default:Object.keys(r)[0]??"",units:n,factors:t}}const tn=Object.freeze(Object.defineProperty({__proto__:null,convertTemperature:Br,dimensionUnitDisplayMap:Fe,dimensionUnitsMap:Ee,dimensonUnitFactorsMap:Me,getUnitFactors:qr,unitsByDimension:Ve},Symbol.toStringTag,{value:"Module"})),Ur=l.memo(({disabled:e,inputValue:r,selectedUnit:t,dimension:n,unitFactors:a,onConversionSelect:o,t:c})=>{const[i,s]=l.useState(!1),[d,m]=l.useState(null),[u,p]=l.useState([]),b=l.useCallback(h=>{if(e)return;const y=parseFloat(r);if(!Number.isFinite(y))return;const I=h.currentTarget.getBoundingClientRect();m({x:I.left,y:I.bottom});const F=[];if(n==="temperature")a.units.forEach(M=>{const R=Br(t,M,y);Number.isFinite(R)&&F.push({label:`${R.toFixed(6)} ${c(M)}`,value:R.toString(),unit:M})});else{const M=a.factors[t];M!==void 0&&Object.entries(a.factors).forEach(([R,k])=>{const v=y/M*k;Number.isFinite(v)&&F.push({label:`${v.toFixed(6)} ${c(R)}`,value:v.toString(),unit:R})})}p(F),s(F.length>0)},[e,r,t,n,a,c]),C=l.useCallback(h=>{s(!1),m(null),o(h)},[o]),N=l.useCallback(()=>{s(!1),m(null)},[]);return f.jsxs(f.Fragment,{children:[f.jsx("button",{onClick:b,disabled:e,"aria-disabled":e,style:{width:"var(--reactaform-unit-btn-width, 2.5em)",height:"auto",padding:"var(--reactaform-input-padding)",boxSizing:"border-box",border:"none",borderRadius:"var(--reactaform-button-border-radius, var(--reactaform-border-radius, 0.25em))",backgroundColor:e?"var(--reactaform-button-disabled-bg, #cccccc)":"var(--reactaform-button-bg, var(--reactaform-success-color))",color:"var(--reactaform-button-text, #ffffff)",cursor:e?"not-allowed":"pointer",opacity:e?.6:1,display:"flex",alignItems:"center",justifyContent:"center",alignSelf:"center",lineHeight:1},children:f.jsx("span",{style:{fontSize:"1em",pointerEvents:"none"},children:"⇄"})}),i&&u.length>0&&f.jsx(en,{pos:d,options:u,onClose:N,onClickOption:C})]})});Ur.displayName="ConversionButton";const Wr=({field:e,value:r,onChange:t,onError:n})=>{const{t:a}=L(),o=O(e),c=e.dimension,i=l.useMemo(()=>c?qr(c):null,[c]),s=String(r?.[0]??""),d=String(r?.[1]??i?.default??""),[m,u]=l.useState(s),[p,b]=l.useState(d);l.useEffect(()=>{u(s)},[s]),l.useEffect(()=>{b(d)},[d]);const C=o([m,p]);l.useEffect(()=>{n?.(C)},[C,n]);const N=l.useCallback(E=>{const M=E.target.value;u(M),o([M,p]),t?.([M,p])},[p,o,t]),h=l.useCallback(E=>{const M=E.target.value;b(M),o([m,M]),t?.([m,M])},[m,o,t]),y=l.useCallback(E=>{u(E.value),b(E.unit),t?.([E.value,E.unit])},[t]),I=l.useMemo(()=>i?i.units.map(E=>f.jsx("option",{value:E,children:a(E)},E)):[],[i,a]);if(!c||!i)return null;const F=!!C||!m.trim();return f.jsx(z,{field:e,error:C,children:f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"var(--reactaform-unit-gap, 8px)",width:"100%"},children:[f.jsx("input",{id:e.name,type:"text",value:m,onChange:N,style:{flex:"2 1 0"},className:B(V.input,V.textInput),"aria-invalid":!!C,"aria-describedby":C?`${e.name}-error`:void 0}),f.jsx("select",{id:`${e.name}-unit`,value:p,onChange:h,style:{flex:"1 1 0"},className:B(V.input,V.inputSelect),"aria-invalid":!!C,"aria-describedby":C?`${e.name}-error`:void 0,children:I}),f.jsx(Ur,{disabled:F,inputValue:m,selectedUnit:p,dimension:c,unitFactors:i,onConversionSelect:y,t:a})]})})};Wr.displayName="UnitValueInput";const nn=l.memo(Wr),_r=({field:e,value:r,onChange:t,onError:n,error:a})=>{const o=O(e,a),{inputRef:c,error:i,handleChange:s}=W({value:r,onChange:t,onError:n,validate:o});return f.jsx(z,{field:e,error:i,children:f.jsx("input",{id:e.name,type:"url",defaultValue:String(r??""),ref:c,onChange:s,className:B(V.input,V.textInput),placeholder:"https://example.com","aria-invalid":!!i,"aria-describedby":i?`${e.name}-error`:void 0})})};_r.displayName="UrlInput";const an=l.memo(_r),ie=new ne;function on(e,r){ie.register(e,r)}function Kr(e){return ie.get(e)}function sn(e){return ie.has(e)}function cn(e){return ie.unregister(e)}function ln(){return ie.list()}const Jr=({field:e,valuesMap:r,handleChange:t,handleError:n})=>{const{t:a}=L(),[o,c]=l.useState(!1),[i,s]=l.useState(null),d=l.useCallback(async()=>{if(!e.action){console.warn(`Button "${e.name}" has no action defined`);return}const p=Kr(e.action);if(!p){const b=`Button handler "${e.action}" not found`;console.error(b),s(b);return}c(!0),s(null);try{await p(r,t,n,a)}catch(b){const C=b instanceof Error?b.message:String(b);console.error(`Button handler "${e.action}" failed:`,C),s(C)}finally{c(!1)}},[e,r,t,n,a]),u={...{cursor:o?"wait":"pointer",opacity:o?.6:1}};return e.width&&typeof e.width=="number"&&e.width>0&&(u.width=`${e.width}px`),f.jsx(z,{field:e,rightAlign:!0,error:i,children:f.jsx("button",{type:"button",className:V.button,onClick:d,disabled:o,"aria-label":a(e.displayName),"aria-busy":o,style:u,children:a(o?"Processing...":e.displayName)})})};Jr.displayName="Button";const un=l.memo(Jr),mn={checkbox:!1,switch:!1,radio:!1,dropdown:!1,"multi-selection":!1,color:!1,rating:!1,file:!1,image:!1,separator:!1,description:!1,button:!1,string:{wait:200},text:{wait:200},multiline:{wait:200},email:{wait:200},password:{wait:200},phone:{wait:200},url:{wait:200},int:{wait:200},float:{wait:200},unit:{wait:100},date:{wait:150},time:{wait:150},slider:{wait:100,leading:!0,trailing:!0},stepper:{wait:100,leading:!0,trailing:!0}},me=new ne,$e={button:un,checkbox:St,color:It,date:Et,description:Ft,dropdown:Vt,email:$t,file:At,float:Pt,"float-array":Dt,image:Ot,int:Tt,"int-array":Lt,"multi-selection":qt,multiline:Ht,password:Yt,phone:Wt,radio:_t,rating:Gt,separator:Rt,slider:Xt,string:ye,stepper:Ut,switch:Zt,text:ye,time:Qt,unit:nn,url:an};function dn(e){return e in $e}function fn(e,r){const{wait:t=200,leading:n,trailing:a}=r,o=l.memo(c=>{const i=l.useRef(c.onChange);l.useEffect(()=>{i.current=c.onChange},[c.onChange]);const{callback:s,cancel:d}=sr((...m)=>{i.current?.(...m)},t,{leading:n,trailing:a});return l.useEffect(()=>d,[d]),l.createElement(e,{...c,onChange:s})});return o.displayName="DebouncedFieldWrapper",o}function Gr(e,r,t){const n=r;if(!t&&e in $e){console.warn(`Can't overwrite base component type "${e}".`);return}const a=mn[e];if(a===!1){me.register(e,n);return}const o=a??{wait:200};or?me.register(e,n):me.register(e,fn(n,o))}function Re(e,r){Gr(e,r,!1)}function Ae(e){return me.get(e)}let Ye=!1;function pn(){Ye||(Object.entries($e).forEach(([e,r])=>{Gr(e,r,!0)}),Ye=!0)}const De=l.memo(({field:e,valuesMap:r,handleChange:t,handleError:n,errorsMap:a})=>{const o=Ae(e.type),c=r[e.name],i=a?a[e.name]??null:void 0,s=l.useMemo(()=>c,[c]),d=l.useCallback(u=>t(e.name,u),[t,e.name]),m=l.useCallback(u=>n?.(e.name,u),[n,e.name]);if(!o)return null;if(e.type==="button"){const u={field:e,value:null,valuesMap:r,handleChange:t,handleError:n||(()=>{})};return f.jsx(o,{...u})}return f.jsx(o,{field:e,value:s,onChange:d,onError:m,error:i})},(e,r)=>e.field===r.field&&e.valuesMap[e.field.name]===r.valuesMap[r.field.name]&&e.handleChange===r.handleChange&&e.handleError===r.handleError&&e.errorsMap?.[e.field.name]===r.errorsMap?.[r.field.name]);De.displayName="FieldRenderer";const Yr=l.memo(({groupName:e,defaultOpen:r=!0,fields:t,valuesMap:n,handleChange:a,handleError:o,errorsMap:c,t:i})=>{const[s,d]=l.useState(r),m=l.useCallback(()=>d(u=>!u),[]);return f.jsxs("fieldset",{className:"reactaform-group",children:[f.jsxs("legend",{onClick:m,className:"reactaform-group_legend",children:[f.jsx("span",{children:i(e)}),f.jsx("span",{className:"reactaform-group_legend_arrow",children:s?"▼":"▶"})]}),s&&t.map(u=>f.jsx(De,{field:u,valuesMap:n,handleChange:a,handleError:o,errorsMap:c},u.name))]})});Yr.displayName="FieldGroup";const Pe=(e,r,t,n)=>{const a=r[e];if(!a?.children)return;const o=t[e],c=o!=null?String(o):"",i=a.children[c];if(Array.isArray(i))for(const s of i)typeof s=="string"&&r[s]&&(n[s]=!0,Pe(s,r,t,n))},Xr=(e,r,t)=>{const n=r[e];if(!n?.children)return;const a=Object.values(n.children).flat();for(const o of a)typeof o=="string"&&o in t&&(t[o]=!1,Xr(o,r,t))},gn=(e,r,t,n)=>{const a={...t};return e.forEach(o=>{(!o.parents||Object.keys(o.parents).length===0)&&(a[o.name]=!0,Pe(o.name,n,r,a))}),a},hn=(e,r,t,n,a)=>{const o={...e},c=r[n];if(Xr(n,r,o),a!=null&&c?.children){const i=String(a),s=c.children[i];if(Array.isArray(s))for(const d of s)typeof d=="string"&&r[d]&&(o[d]=!0,Pe(d,r,t,o))}for(const[i,s]of Object.entries(r))s.parents&&n in s.parents&&(o[i]=Zr(i,r,t));return o},Zr=(e,r,t)=>{const n=r[e];if(!n)return!1;if(!n.parents||Object.keys(n.parents).length===0)return!0;for(const[a,o]of Object.entries(n.parents)){if(!r[a]||!Zr(a,r,t))continue;const i=t[a];if(i==null)continue;const s=o.map(d=>String(d));if(Array.isArray(i)){if(i.map(u=>String(u)).some(u=>s.includes(u)))return!0}else{const d=String(i);if(s.includes(d))return!0}}return!1},bn=(e,r)=>{const t=new Map;let n=null,a=null,o=0;for(const c of e){const i=c.group;if(!i){n=null,a=null;continue}if(i===n)r[c.name].group=a??i;else{if(!t.has(i))t.set(i,1),a=null,r[c.name].group=i;else{const s=t.get(i),d=`${i}(${s})`;t.set(i,s+1),a=d,r[c.name].group=d,o++}n=i}}return o},yn=(e,r={})=>{const{includeEmpty:t=!0}=r,n=[];let a=null,o=[],c=0;for(const s of e){const d=s.group||null;d!==a?((o.length>0||t)&&n.push({name:a,fields:o}),a=d,o=[s]):o.push(s)}(o.length>0||t)&&n.push({name:a,fields:o}),c=n.filter(s=>s.fields.length===0).length;const i=Math.max(0,...n.map(s=>s.fields.length));return{groups:n,metadata:{totalGroups:n.length,emptyGroups:c,largestGroup:i}}},ze=new ne;function Oe(e,r){ze.register(e,r)}function vn(e){return ze.get(e)}function xn(e){return ze.get(e)}Oe("Preset_AlertSubmitHandler",(e,r,t)=>{const n={name:r||"Unnamed Instance",version:e.version,definition:e.name,values:t},a=JSON.stringify(n,null,2);alert(a)});async function wn(e,r,t,n,a,o,c){const i=a?Object.values(a).filter(Boolean):[];if(i.length>0)return{success:!1,message:n("Please fix validation errors before submitting the form."),errors:i};const s={...t},d=[];if(e&&Array.isArray(e.properties))for(const u of e.properties){const p=u.name,b=s[p];if(b==null)continue;const C=u.type;try{if(C==="int"){const N=String(b).trim();if(N==="")s[p]=0;else{const h=Number(N);Number.isInteger(h)?s[p]=Math.trunc(h):d.push(n("Invalid integer format for field {{1}}",u.displayName||p))}}else if(C==="number"||C==="float"){const N=String(b).trim();if(N==="")s[p]=0;else{const h=Number(N);isNaN(h)?d.push(n("Invalid number format for field {{1}}",u.displayName||p)):s[p]=h}}else if(C==="int-array"||C==="float-array"){const N=String(b).split(",").map(I=>I.trim()).filter(Boolean),h=[];let y=!1;for(const I of N){const F=Number(I);if(isNaN(F)){d.push(n("Invalid number {{1}} in array for field {{2}}",I,u.displayName||p)),y=!0;break}h.push(F)}y||(s[p]=h)}}catch(N){d.push(n("Error processing field {{1}}: {{2}}",u.displayName||p,N instanceof Error?N.message:String(N)))}}if(d.length>0)return{success:!1,message:n("Data transformation errors occurred."),errors:d};if(c){const u=await c(s,n);if(u&&u.length>0)return{success:!1,message:n("Validation failed"),errors:u}}else{const u=await wt(e,s,n);if(u&&u.length>0)return{success:!1,message:n("Validation failed"),errors:u}}const m=u=>u?Array.isArray(u)?u.map(p=>String(p)):typeof u=="string"?u.trim()?[u]:[]:[String(u)]:[];if(o)try{const u=await o(e,r?.name??null,s,n),p=m(u);if(p.length>0)return{success:!1,message:n("Submission failed"),errors:p}}catch(u){return{success:!1,message:n("Submission handler error occurred"),errors:[String(u instanceof Error?u.message:u)]}}else if(e&&typeof e.submitHandlerName=="string"){const u=vn(e.submitHandlerName);if(u)try{const p=await u(e,r?.name??null,s,n),b=m(p);if(b.length>0)return{success:!1,message:n("Submission failed"),errors:b}}catch(p){return{success:!1,message:n("Submission handler error occurred"),errors:[String(p instanceof Error?p.message:p)]}}}return{success:!0,message:n("Form submitted successfully."),data:s}}const Qr=({message:e,success:r,onDismiss:t,t:n})=>e?f.jsxs("div",{role:"status",style:{marginBottom:12,padding:12,borderRadius:6,backgroundColor:r?"rgba(76, 175, 80, 0.12)":"rgba(225, 29, 72, 0.06)",border:`1px solid ${r?"rgba(76,175,80,0.3)":"rgba(225,29,72,0.12)"}`,color:r?"var(--reactaform-success-color, #4CAF50)":"var(--reactaform-error-color, #e11d48)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[f.jsx("div",{style:{whiteSpace:"pre-wrap",flex:1},children:e}),f.jsx("button",{onClick:t,"aria-label":n("Dismiss"),style:{marginLeft:12,background:"transparent",border:"none",cursor:"pointer",color:"inherit",fontSize:16,lineHeight:1},children:"×"})]}):null;Qr.displayName="SubmissionMessage";const Sn=({onClick:e,disabled:r=!1,t})=>{const[n,a]=l.useState(!1);return f.jsx("button",{onClick:e,disabled:r,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),style:{padding:"var(--reactaform-button-padding, var(--reactaform-space) 12px)",backgroundColor:r?"var(--reactaform-button-disabled-bg, #cccccc)":"var(--reactaform-button-bg, var(--reactaform-success-color))",color:"var(--reactaform-button-text, #ffffff)",border:"none",borderRadius:"4px",cursor:r?"var(--reactaform-button-disabled-cursor, not-allowed)":"pointer",fontSize:"var(--reactaform-button-font-size, 14px)",fontWeight:"var(--reactaform-button-font-weight, 500)",boxShadow:"var(--reactaform-button-shadow, none)",marginTop:"var(--reactaform-button-margin-top, 0.5em)",transition:"opacity 0.2s ease",opacity:r?"var(--reactaform-button-disabled-opacity, 0.6)":n?"var(--reactaform-button-hover-opacity, 0.9)":"1"},children:t("Submit")})},et=({definition:e,instance:r,onSubmit:t=void 0,onValidation:n=void 0,chunkSize:a=50,chunkDelay:o=50})=>{const{properties:c,displayName:i}=e,s=L(),{t:d,formStyle:m,language:u,displayInstanceName:p}=s,b={...s,definitionName:e?.name??s.definitionName},[C,N]=l.useState("en"),[h,y]=l.useState([]),[I,F]=l.useState({}),[E,M]=l.useState({}),[R,k]=l.useState({}),[v,g]=l.useState({}),[w,x]=l.useState(null),[j,S]=l.useState(null),[$,T]=l.useState(0),[_,ce]=l.useState(!1),[He,oe]=l.useState(r.name||""),X=l.useRef(r),fe=l.useRef(!1);l.useEffect(()=>{const D=Object.fromEntries(c.map(A=>[A.name,{...A,children:{}}]));c.forEach(A=>{A.parents&&Object.entries(A.parents).forEach(([G,re])=>{const Z=D[G];Z&&re.forEach(dt=>{Z.children||(Z.children={});const Ue=String(dt);Z.children[Ue]=[...Z.children[Ue]||[],A.name]})})}),bn(c,D);const q=Object.values(D),P={};q.forEach(A=>{if(A.type==="unit"){const G=typeof A.defaultValue=="number"?String(A.defaultValue):"",re=typeof A.defaultUnit=="string"?A.defaultUnit:String(A.defaultUnit??"m");P[A.name]=[G,re]}else P[A.name]=A.defaultValue}),X.current=r,Object.keys(r.values).forEach(A=>{D[A]!==void 0&&(P[A]=r.values[A])});const Y=Object.fromEntries(q.map(A=>[A.name,!1])),K=requestAnimationFrame(()=>{y(q),F(D),M(P),k(gn(q,P,Y,D)),ce(!0),oe(r.name)});return()=>cancelAnimationFrame(K)},[c,r,e]),l.useEffect(()=>{if(!_||$>=h.length)return;const D=setTimeout(()=>{T(q=>Math.min(q+a,h.length))},o);return()=>clearTimeout(D)},[_,$,h.length,a,o]);const Be=l.useCallback((D,q)=>{x(null),S(null),M(A=>({...A,[D]:q}));const P=I[D],Y=P&&P.children&&Object.keys(P.children).length>0,K=Object.values(I).some(A=>A.parents&&D in A.parents);(Y||K)&&k(A=>{const G={...E,[D]:q};return hn(A,I,G,D,q)})},[I,E]);l.useEffect(()=>{let D=0;return D=requestAnimationFrame(()=>{u!==C&&(N(u||"en"),x(null),S(null))}),()=>cancelAnimationFrame(D)},[u,C]),l.useEffect(()=>{let D=0;return D=requestAnimationFrame(()=>{if(fe.current){fe.current=!1,X.current=r,oe(r.name||"");return}X.current=r,x(null),S(null),oe(r.name||"")}),()=>cancelAnimationFrame(D)},[r,r.name]);const qe=l.useCallback((D,q)=>{g(P=>q?{...P,[D]:String(q)}:Object.fromEntries(Object.entries(P).filter(([K])=>K!==D)))},[]),ut=async()=>{fe.current=!0;const D=X.current?.name;X.current.name=He;let q=v;if(b.fieldValidationMode==="onSubmission"){const A={};if(h.forEach(G=>{const re=E[G.name];if(re===void 0)return;const Z=yr(b.definitionName,G,re,d);Z&&(A[G.name]=Z)}),g(A),q=A,Object.keys(A).length>0){x(d("Please fix validation errors before submitting the form.")),S(!1);return}else x(null),S(null)}const P=await wn(e,X.current,E,d,q,t,n),Y=typeof P.message=="string"?P.message:String(P.message),K=Object.values(P.errors??{}).join(`
|
|
394
|
+
`);x(K?Y+`
|
|
395
|
+
`+K:Y),S(P.success),P.success||(X.current.name=D??X.current.name,oe(D??""))},mt=l.useMemo(()=>b.fieldValidationMode==="onEdit"||b.fieldValidationMode==="realTime"?Object.values(v).some(Boolean):!1,[v,b.fieldValidationMode]);return f.jsx(Ne.Provider,{value:b,children:f.jsxs("div",{style:m.container,children:[i&&f.jsx("h2",{style:m.titleStyle,children:d(i)}),f.jsx(Qr,{message:w,success:j,onDismiss:()=>{x(null),S(null)},t:d}),p&&r&&f.jsx(lr,{name:He,onChange:D=>{oe(D),x(null),S(null)}}),f.jsxs(f.Fragment,{children:[(()=>{const D=h.slice(0,$).filter(P=>R[P.name]),{groups:q}=yn(D);return q.map((P,Y)=>P.name?f.jsx(Yr,{groupName:P.name,defaultOpen:!0,fields:P.fields,valuesMap:E,handleChange:Be,handleError:qe,errorsMap:v,t:d},P.name):f.jsx(l.Fragment,{children:P.fields.map(K=>f.jsx(De,{field:K,valuesMap:E,handleChange:Be,handleError:qe,errorsMap:v},K.name))},`ungrouped-${Y}`))})(),$<h.length&&f.jsx("div",{style:{fontSize:"0.9em",color:"var(--reactaform-text-muted, #666)"},children:d(`Loading more fields... (${$}/${h.length})`)})]}),f.jsx(Sn,{onClick:ut,disabled:mt,t:d})]})})},rt={en:{name:"English",nativeName:"English"},fr:{name:"French",nativeName:"Français"},de:{name:"German",nativeName:"Deutsch"},es:{name:"Spanish",nativeName:"Español"},"zh-cn":{name:"Chinese (Simplified)",nativeName:"简体中文"},bg:{name:"Bulgarian",nativeName:"Български"},cs:{name:"Czech",nativeName:"Čeština"},da:{name:"Danish",nativeName:"Dansk"},el:{name:"Greek",nativeName:"Ελληνικά"},fi:{name:"Finnish",nativeName:"Suomi"},hi:{name:"Hindi",nativeName:"हिन्दी"},hu:{name:"Hungarian",nativeName:"Magyar"},id:{name:"Indonesian",nativeName:"Bahasa Indonesia"},it:{name:"Italian",nativeName:"Italiano"},ja:{name:"Japanese",nativeName:"日本語"},ko:{name:"Korean",nativeName:"한국어"},ms:{name:"Malay",nativeName:"Bahasa Melayu"},nl:{name:"Dutch",nativeName:"Nederlands"},no:{name:"Norwegian",nativeName:"Norsk"},pl:{name:"Polish",nativeName:"Polski"},pt:{name:"Portuguese",nativeName:"Português"},ro:{name:"Romanian",nativeName:"Română"},ru:{name:"Russian",nativeName:"Русский"},sk:{name:"Slovak",nativeName:"Slovenčina"},sv:{name:"Swedish",nativeName:"Svenska"},th:{name:"Thai",nativeName:"ไทย"},tr:{name:"Turkish",nativeName:"Türkçe"},uk:{name:"Ukrainian",nativeName:"Українська"},vi:{name:"Vietnamese",nativeName:"Tiếng Việt"},"zh-tw":{name:"Chinese (Traditional)",nativeName:"繁體中文"}},Cn=()=>rt,ge=new Map,le=new Map,te=new Set,ve=new Map,Nn=async e=>{try{let r={};const t=e.toLowerCase();if(t==="en")r={};else if(rt[t]){const a=`https://reactaform.com/locales/${t}/common.json`,o=await fetch(a);o.ok&&(r=await o.json())}else r={};return{success:!0,translations:r,fromCache:!1}}catch(r){return{success:!1,translations:{},error:`Failed to load common translations for ${e}: ${r}`}}},jn=async e=>{if(!e||e.toLowerCase()==="en")return{success:!0,translations:{},fromCache:!1};const r=e.toLowerCase();if(ge.has(r))return{success:!0,translations:ge.get(r)||{},fromCache:!0};const t=await Nn(r);return t.success&&(ge.set(r,t.translations),ve.set(r,{loadedAt:new Date,size:Object.keys(t.translations).length,source:"common"})),t},kn=async(e,r)=>{if(!e||!r)return{success:!1,translations:{},error:"Both language and localizeName are required"};const t=`${e.toLowerCase()}/${r}`;if(te.has(t))return{success:!1,translations:{},error:"Previously failed to load",fromCache:!0};if(le.has(t))return{success:!0,translations:le.get(t)||{},fromCache:!0};try{let n=r;!r.includes("/")&&!r.includes(".")&&(n=`/locales/${e}/${r}.json`);const a=await fetch(n);if(!a.ok)return a.status===404?(le.set(t,{}),ve.set(t,{loadedAt:new Date,size:0,source:"user"}),{success:!0,translations:{},fromCache:!1}):(te.add(t),{success:!1,translations:{},error:`HTTP ${a.status}`,fromCache:!1});const o=a.headers.get("content-type")||"";!o.includes("application/json")&&!o.includes("text/json")&&tt()&&console.warn(`Translation file at ${n} has unexpected content-type: ${o}`);const c=await a.text();if(!c){const d="Empty translation file";return te.add(t),{success:!1,translations:{},error:d}}let i;try{i=JSON.parse(c)}catch(d){const m=`Invalid JSON in translation file: ${d instanceof Error?d.message:String(d)}`;return te.add(t),{success:!1,translations:{},error:m}}if(!i||typeof i!="object"){const d="Invalid translation file format";return te.add(t),{success:!1,translations:{},error:d}}const s=Object.fromEntries(Object.entries(i).map(([d,m])=>[d,typeof m=="string"?m:String(m)]));return le.set(t,s),ve.set(t,{loadedAt:new Date,size:Object.keys(s).length,source:"user"}),{success:!0,translations:s,fromCache:!1}}catch(n){const a=`Failed to load user translations: ${n instanceof Error?n.message:"Unknown error"}`;return te.add(t),{success:!1,translations:{},error:a}}};function tt(){try{if(typeof process<"u"&&process?.env?.NODE_ENV==="development")return!0}catch{}return!1}function In(e,r){return r.length===0?e:e.replace(/\{\{(\d+)\}\}/g,(t,n)=>{const a=parseInt(n,10)-1,o=r[a];return o==null?t:String(o)})}const En=(e,r,t)=>(n,...a)=>{let o=n,c=!1;return!n||typeof n!="string"?String(n||""):(e.toLowerCase()==="en"?(o=n,c=!0):n in t?(o=t[n],c=!0):n in r?(o=r[n],c=!0):o=n,o=In(o,a),!c&&tt()&&console.debug(`Missing translation for "${n}" in language "${e}"`),o)};function Fn(e){return/^[-+]?\d*$/.test(e)}function Mn(e){const r=/^[-+]?\d*$/;return e.split(",").map(t=>t.trim()).every(t=>r.test(t))}const Vn=",",$n=e=>!e||e.trim()===""?[]:e.split(Vn).map(r=>r.trim()).filter(Boolean).map(r=>Number(r)),Xe=(e,r,t)=>{const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!Fn(n))return t("Must be a valid integer");const a=parseInt(n,10);if(Number.isNaN(a))return t("Must be a valid integer");if(e.min!==void 0&&(e.minInclusive?a<e.min:a<=e.min))return t("Must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?a>e.max:a>=e.max))return t("Must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max);if(e.step!==void 0){const o=Number(e.step);if(!Number.isInteger(o))return t("Invalid step value");if(a%o!==0)return t("Must be a multiple of {{1}}",o)}};function Rn(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!Mn(n))return t("Each value must be a valid integer");const a=$n(n);if(e.minCount!==void 0&&a.length<e.minCount)return t("Minimum number of values: {{1}}",`${e.minCount}`);if(e.maxCount!==void 0&&a.length>e.maxCount)return t("Maximum number of values: {{1}}",`${e.maxCount}`);for(const o of a){if(e.min!==void 0&&(e.minInclusive?o<e.min:o<=e.min))return t("Each value must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?o>e.max:o>=e.max))return t("Each value must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max)}}function nt(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;const a=Number(n);if(Number.isNaN(a))return t("Must be a valid float");if(e.min!==void 0){const o=e.type==="slider"?!0:e.minInclusive??!0;if(o?a<e.min:a<=e.min)return t("Must be {{1}} {{2}}",o?"≥":">",e.min)}if(e.max!==void 0){const o=e.type==="slider"?!0:e.maxInclusive??!0;if(o?a>e.max:a>=e.max)return t("Must be {{1}} {{2}}",o?"≤":"<",e.max)}}const An=/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/;function Dn(e){return e.split(",").map(r=>r.trim()).every(r=>An.test(r))}const Pn=",",zn=e=>!e||e.trim()===""?[]:e.split(Pn).map(r=>r.trim()).filter(Boolean).map(r=>Number(r));function On(e,r,t){const n=String(r);if(n.trim()==="")return e.min!==void 0||e.max!==void 0?t("Value required when min or max constraints is set"):e.required?t("Value required"):void 0;if(!Dn(n))return t("Each value must be a valid float");const a=zn(n);if(e.minCount!==void 0&&a.length<e.minCount)return t("Minimum number of values: {{1}}",e.minCount);if(e.maxCount!==void 0&&a.length>e.maxCount)return t("Maximum number of values: {{1}}",e.maxCount);for(const o of a){if(e.min!==void 0&&(e.minInclusive?o<e.min:o<=e.min))return t("Each value must be {{1}} {{2}}",e.minInclusive?"≥":">",e.min);if(e.max!==void 0&&(e.maxInclusive?o>e.max:o>=e.max))return t("Each value must be {{1}} {{2}}",e.maxInclusive?"≤":"<",e.max)}}const he=new WeakMap;function Le(e,r,t,n,...a){if(e.pattern==null)return;const o=String(r);let c=null;if(e.pattern){const i=he.get(e);if(i&&i.pattern===e.pattern)c=i.regex;else try{const s=new RegExp(e.pattern);he.set(e,{pattern:e.pattern,regex:s}),c=s}catch{he.set(e,{pattern:e.pattern,regex:null}),c=null}}if(c&&!c.test(o))return e.patternErrorMessage?t(e.patternErrorMessage):n?t(n,...a):t("Input does not match pattern: {{1}}",e.pattern)}function ue(e,r,t){const n=String(r);if(n==="")return e.minLength!==void 0||e.maxLength!==void 0?e.required?t("Value required when minLength or maxLength is set"):void 0:e.required?t("Value required"):void 0;const a=Math.max(e.minLength??0,0);return n.length<a?t("Must be at least {{1}} characters",a):e.maxLength!==void 0&&n.length>e.maxLength?t("Must be at most {{1}} characters",e.maxLength):Le(e,r,t,"Invalid text format")}const xe=e=>{if(!e)return null;const r=Date.parse(e);return Number.isNaN(r)?null:r},Ze=new WeakMap,Ln=e=>{let r=Ze.get(e);return r||(r={minTime:xe(e.minDate),maxTime:xe(e.maxDate)},Ze.set(e,r)),r};function Tn(e,r,t){if(r==null||String(r).trim()==="")return e.required?t("Value required"):void 0;const n=String(r).trim(),a=xe(n);if(a===null)return t("Invalid date format");const{minTime:o,maxTime:c}=Ln(e);if(o!==null&&a<o)return t("Date must be on or after {{1}}",e.minDate);if(c!==null&&a>c)return t("Date must be on or before {{1}}",e.maxDate)}function Hn(e,r,t){const n=String(r);if(!n||n.trim()==="")return e.required||e.min||e.max?t("Value required"):void 0;const a=c=>{const i=c.split(":").map(m=>parseInt(m,10));if(i.some(m=>Number.isNaN(m)))return NaN;const s=i.length;if(s<2||s>3)return NaN;if(s===2&&(i[0]<0||i[0]>23||i[1]<0||i[1]>59))return NaN;if(s===3&&(i[0]<0||i[0]>23||i[1]<0||i[1]>59||i[2]<0||i[2]>59))return NaN;let d=0;if(i.length===3)d=i[0]*3600+i[1]*60+i[2];else if(i.length===2)d=i[0]*3600+i[1]*60;else if(i.length===1)d=i[0]*3600;else return NaN;return d},o=a(n);if(Number.isNaN(o))return t("Invalid time format");if(e.min&&typeof e.min=="string"){const c=a(e.min);if(!Number.isNaN(c)&&o<c)return t("Time must be on or after {{1}}",e.min)}if(e.max&&typeof e.max=="string"){const c=a(e.max);if(!Number.isNaN(c)&&o>c)return t("Time must be on or before {{1}}",e.max)}}function Bn(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}function qn(e,r,t){const n=String(r??"").trim();return n===""?e.required?t("Value required"):void 0:Bn(n)?Le(e,r,t,t("Email does not match pattern: {{1}}",e.pattern)):t("Must be valid email format")}function Un(e,r,t){const n=String(r??"").trim();return n===""?e.required?t("Value required"):void 0:Le(e,n,t,"Invalid phone number format")}const Wn=/^(https?|ftp|file):\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$/i,_n=e=>{try{return new URL(e),!0}catch{return!1}};function Kn(e,r,t){const n=String(r??"").trim();if(n==="")return e.required?t("Value required"):void 0;if(!(Wn.test(n)||_n(n))){if(e.allowRelative===!0){if(!n.startsWith("/")||encodeURI(n)!==n)return t("Must be a valid URL");try{new URL(n,"http://example.com");return}catch{return t("Must be a valid URL")}}return t("Must be a valid URL")}}function Jn(e,r,t){const n=Array.isArray(r)?r:[],a=n[0],o=n[1]?String(n[1]).trim():"";return String(a??"").trim()===""||o===""?e.required?t("Value required"):void 0:nt(e,a,t)}function Gn(e,r,t){if(Array.isArray(r))return r.length===0?t("Select a file"):r.every(n=>n instanceof File)?void 0:t("Invalid file input");if(!(r instanceof File)){const n=String(r);return e.required&&(r==null||typeof n=="string"&&n.trim()==="")?t("Select a file"):t("Invalid file input: {{1}}",n)}}function Yn(e,r,t){const n=String(r);if(n===""||n===null||n===void 0)return e.required?t("Value required"):void 0;if(!e.options?.some(a=>String(a.value)===n))return t("Invalid option selected")}function Xn(e,r,t){const a=String(r??"").trim();if(a==="")return e.required?t("Value required"):void 0;const o=a.split(",").map(c=>c.trim()).filter(c=>c!=="");if(o.length===0)return e.required?t("Value required"):void 0;for(const c of o)if(!e.options?.some(i=>String(i.value)===c))return t("Invalid option selected")}const Zn=/^#([0-9A-F]{3}){1,2}$/i,Qn=e=>Zn.test(e);function ea(e,r,t){const n=String(r).trim();if(n==="")return e.required?t("Value required"):void 0;if(!Qn(n))return t("Invalid color format")}function ra(e,r,t){const n=String(r??"").trim();if(n==="")return e.required?t("Value required"):void 0;let a=r;if(typeof r!="number"&&(a=parseFloat(n)),Number.isNaN(a)||a<=0)return t("Invalid value");if(e.max!==void 0&&a>e.max)return t("Must be ≤ {{1}}",e.max)}function ta(e,r,t){const n=String(r);if(n.trim()==="")return e.required?t("Value required"):void 0;const a=Number(n);if(Number.isNaN(a))return t("Must be a valid float");const o=e.min??0,c=e.max??100;if(a<o)return t("Must be ≥ {{1}}",o);if(a>c)return t("Must be ≤ {{1}}",c)}let Qe=!1;function at(){Qe||(H("int",Xe),H("stepper",Xe),H("int-array",Rn),H("float",nt),H("slider",ta),H("float-array",On),H("text",ue),H("string",ue),H("multiline",ue),H("password",ue),H("email",qn),H("date",Tn),H("time",Hn),H("url",Kn),H("phone",Un),H("unit",Jn),H("dropdown",Yn),H("multi-selection",Xn),H("color",ea),H("rating",ra),H("file",Gn),Qe=!0)}at();pn();at();const na=e=>({container:{padding:"var(--reactaform-space-sm, 8px)",margin:"0 auto",backgroundColor:"transparent",borderRadius:0,color:"var(--reactaform-color-text)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, system-ui, -apple-system, sans-serif)",boxSizing:"border-box",minHeight:e?.minHeight??"0",...e?.width?{width:e.width,overflowX:"auto"}:{maxWidth:"100%"},...e?.height?{height:e.height,overflowY:"auto"}:{}},buttonStyle:{padding:"var(--reactaform-space-sm, 8px) var(--reactaform-space-md, 16px)",backgroundColor:"var(--reactaform-color-primary)",color:"var(--reactaform-color-background)",border:"1px solid var(--reactaform-color-primary)",borderRadius:"var(--reactaform-border-radius, 6px)",cursor:"pointer",fontSize:e?.fontSize||"1rem",fontWeight:"600",transition:"all 0.2s ease",boxShadow:"var(--reactaform-shadow-small, 0 1px 3px rgba(0, 0, 0, 0.12))"},titleStyle:{marginBottom:"var(--reactaform-space-lg, 24px)",color:"var(--reactaform-color-text)",fontSize:typeof e?.fontSize=="number"?`${e.fontSize*1.5}px`:"1.5rem",fontWeight:"700",lineHeight:"1.2",textAlign:"left"}}),aa=e=>{const r={color:"var(--reactaform-color-text)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)",transition:"all 0.2s ease",outline:"none",width:"100%",boxSizing:"border-box"};return{container:{fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)",fontSize:e?.fontSize||"var(--reactaform-font-size, 1rem)",width:"100%",maxWidth:e?.width||"100%",marginBottom:"var(--reactaform-space-md, 16px)"},label:{display:"block",marginBottom:"var(--reactaform-space-xs, 4px)",fontWeight:"500",color:"var(--reactaform-color-text)",fontSize:"var(--reactaform-font-size, 1rem)",fontFamily:e?.fontFamily||"var(--reactaform-font-family, inherit)"},input:r,textInput:r,optionInput:r,select:{...r,cursor:"pointer",backgroundRepeat:"no-repeat",backgroundPosition:"right 8px center",backgroundSize:"16px",paddingRight:"32px",backgroundImage:`url("data:image/svg+xml;utf8,<svg
|
|
396
396
|
xmlns='http://www.w3.org/2000/svg'
|
|
397
397
|
viewBox='0 0 24 24'
|
|
398
398
|
fill='none'
|
|
@@ -401,4 +401,4 @@
|
|
|
401
401
|
stroke-linecap='round'
|
|
402
402
|
stroke-linejoin='round'>
|
|
403
403
|
<polyline points='6,9 12,15 18,9'/>
|
|
404
|
-
</svg>")`},textarea:{...r,minHeight:"80px",resize:"vertical",paddingTop:"var(--reactaform-space-sm, 8px)"},error:{color:"var(--reactaform-color-error)",fontSize:"0.875rem",marginTop:"var(--reactaform-space-xs, 4px)",display:"block"}}},at=({children:e,definitionName:r="",defaultStyle:t,defaultLanguage:n="en",defaultTheme:a="light",defaultLocalizeName:o="",defaultFieldValidationMode:c="realTime",className:i="reactaform-container",defaultDisplayInstanceName:s=!0})=>{const d=r,m=o,u=a,p=n,b=l.useMemo(()=>t??{},[t]),[C,N]=l.useState({}),[h,y]=l.useState({});l.useEffect(()=>{let v=!0;return(async()=>{if(p==="en"){v&&(N({}),y({}));return}try{const w=await Nn(p),x=w.success?w.translations:{};v&&N(x);const k=await kn(p,m),S=k.success?k.translations:{};v&&y(S)}catch{v&&(N({}),y({}))}})(),()=>{v=!1}},[p,m]);const I=l.useMemo(()=>ta(b),[b]),F=l.useMemo(()=>na(b),[b]),E=l.useMemo(()=>In(p,C,h),[p,C,h]),M=l.useCallback((v,...g)=>E(v,...g),[E]),R=l.useMemo(()=>({definitionName:d,language:p,theme:u,formStyle:I,fieldStyle:F,t:M,fieldValidationMode:c,displayInstanceName:s}),[d,p,u,F,I,M,c,s]),j=b?.height?{height:"100%"}:void 0;return f.jsx(Ne.Provider,{value:R,children:f.jsx("div",{"data-reactaform-theme":u,className:i,style:j,children:e})})};function aa(e){if(!e||typeof e!="object")return"Definition must be an object";const r=e;if(!r.name||typeof r.name!="string")return"Definition must include a 'name' string";if(r.name.trim()==="")return"Definition 'name' cannot be empty";if(!r.version||typeof r.version!="string")return"Definition must include a 'version' string";if(r.properties!==void 0&&!Array.isArray(r.properties))return"'properties' must be an array if provided";if(Array.isArray(r.properties))for(let t=0;t<r.properties.length;t++){const n=r.properties[t];if(!n||typeof n!="object")return`Property at index ${t} must be an object`;if(!n.name||typeof n.name!="string")return`Property at index ${t} must have a string 'name'`;if(n.name.trim()==="")return`Property at index ${t} has an empty 'name'`;if(!n.type||typeof n.type!="string")return`Property '${n.name}' must have a string 'type'`;if(n.type.trim()==="")return`Property '${n.name}' has an empty 'type'`}return null}async function oa(e,r={}){const{validateSchema:t=!0}=r;try{if(!e||typeof e!="string")return{success:!1,error:"jsonData must be a non-empty JSON string"};const n=e.trim();if(!n)return{success:!1,error:"jsonData is empty"};let a;try{a=JSON.parse(n)}catch(o){return{success:!1,error:`Invalid JSON format: ${o instanceof Error?o.message:"Unknown parsing error"}`}}if(t){const o=aa(a);if(o)return{success:!1,error:`Schema validation failed: ${o}`}}return{success:!0,definition:a}}catch(n){return{success:!1,error:`Unexpected error loading definition: ${n instanceof Error?n.message:"Unknown error"}`}}}function ot(e,r){try{if(!e)return{success:!1,error:"Definition is required"};if(!r||typeof r!="string")return{success:!1,error:"Instance name is required"};const t={name:r,definition:e.name??"unknown",version:e.version??"1.0.0",values:{}},n=e.properties||[];return Array.isArray(n)&&n.forEach(a=>{const o=a;if(o.type==="unit"){const c=o.defaultUnit,i=Number(o.defaultValue)||void 0;t.values[o.name]=[i||0,c||"m"]}else o.defaultValue!==void 0&&(t.values[o.name]=o.defaultValue)}),{success:!0,instance:t}}catch(t){return{success:!1,error:`Error creating instance: ${t instanceof Error?t.message:"Unknown error"}`}}}function sa(e){try{if(!e)return{success:!1,error:"Instance data is required"};let r;if(typeof e=="string")try{r=JSON.parse(e)}catch(t){return{success:!1,error:`Invalid JSON format: ${t instanceof Error?t.message:"Unknown parsing error"}`}}else r=e;return typeof r!="object"||r===null?{success:!1,error:"Instance must be a valid object"}:{success:!0,instance:r}}catch(r){return{success:!1,error:`Error loading instance: ${r instanceof Error?r.message:"Unknown error"}`}}}function ia(e,r,t){try{if(!e)return{success:!1,error:"Instance is required"};if(!r)return{success:!1,error:"Latest definition is required"};if(e.definition===r.name&&e.version===r.version)return{success:!0,instance:e};const n={name:e.name||r.name+"-instance",definition:r.name,version:r.version,values:{}},a=n.values,o={};(r.properties||[]).forEach(s=>{o[s.name]=s});const c=(s,d,m)=>{if(s==null)return s;const u=d.toLowerCase();try{if(u==="string"||u==="text")return String(s);if(u==="int"||u==="integer"||u==="number"||u==="float"){if(typeof s=="number")return s;if(typeof s=="boolean")return s?1:0;if(typeof s=="string"){const p=s.trim();if(p==="")return null;const b=Number(p);return Number.isNaN(b)?0:b}return 0}if(u==="boolean"||u==="bool"||u==="checkbox"||u==="switch"){if(typeof s=="boolean")return s;if(typeof s=="number")return s!==0;if(typeof s=="string"){const p=s.toLowerCase().trim();return["true","1","yes","on"].includes(p)}return!!s}if(u==="unit"){if(Array.isArray(s)&&s.length>=2)return s;if(Array.isArray(s)&&s.length===1)return[s[0],m&&m.defaultUnit||"m"];if(typeof s=="number")return[s,m&&m.defaultUnit||"m"];if(typeof s=="string"){const p=Number(s);return[Number.isNaN(p)?0:p,m&&m.defaultUnit||"m"]}return[0,m&&m.defaultUnit||"m"]}if(u.endsWith("[]")||u==="array"||u==="int-array"||u==="float-array")return Array.isArray(s)?s:typeof s=="string"?s.split(",").map(p=>p.trim()).filter(Boolean):[s]}catch{}return s},i=e.values||{};Object.keys(i).forEach(s=>{const d=i[s],m=o[s];if(!m)return;const u=Array.isArray(d)?"array":d===null?"null":typeof d,p=(m.type||"").toLowerCase();u===p||p==="string"&&typeof d=="string"?a[s]=d:a[s]=c(d,p,m)}),(r.properties||[]).forEach(s=>{const d=s.name;d in a||(a[d]=s.defaultValue)});try{typeof t=="function"&&t?.(e,n,r)}catch(s){return{success:!1,error:`Upgrade callback error: ${s instanceof Error?s.message:String(s)}`}}return{success:!0,instance:n}}catch(n){return{success:!1,error:`Error upgrading instance: ${n instanceof Error?n.message:"Unknown error"}`}}}function ca(e){const[r,t]=l.useState(null);return l.useEffect(()=>{const n=document.querySelector("[data-reactaform-theme]");if(!n)return;const a=n.closest("[data-reactaform-theme]");if(!a)return;const o=()=>t(a.getAttribute("data-reactaform-theme"));o();const c=new MutationObserver(i=>{for(const s of i)s.type==="attributes"&&s.attributeName==="data-reactaform-theme"&&o()});return c.observe(a,{attributes:!0,attributeFilter:["data-reactaform-theme"]}),()=>c.disconnect()},[e]),r}const la=({definitionData:e,instance:r,language:t,className:n,theme:a,style:o,fieldValidationMode:c="realTime",displayInstanceName:i=!0,onSubmit:s=void 0,onValidation:d=void 0})=>{const m=l.useMemo(()=>{try{return typeof e=="string"?JSON.parse(e):e??null}catch{return null}},[e]),u={fontSize:"inherit",fontFamily:"inherit",...o},p=ca(),b=a??p??"light",C=t??"en";l.useEffect(()=>{let h=document.getElementById("popup-root");h||(h=document.createElement("div"),h.id="popup-root",document.body.appendChild(h))},[]);const N=l.useMemo(()=>{if(r)return r;if(!m)return null;const h=ot(m,m.name);return!h.success||!h.instance?null:h.instance},[r,m]);return m?N?f.jsx(at,{definitionName:m.name,defaultStyle:u,defaultLanguage:C,defaultTheme:b,defaultLocalizeName:m.localization||"",className:n,defaultFieldValidationMode:c,defaultDisplayInstanceName:i,children:f.jsx(Qr,{definition:m,instance:N,onSubmit:s,onValidation:d})}):f.jsx("div",{style:{color:"red"},children:"Error: Failed to create instance from definition."}):f.jsx("div",{style:{color:"red"},children:"Error: No form definition provided."})},Z=new Map,U={components:new Map,fieldValidators:new Map,fieldTypeValidators:new Map,formValidators:new Map,submissionHandlers:new Map};function st(e,r,t){if(!e)return!0;if(t&&!t(e))return!1;switch(r){case"error":throw new Error(`Plugin conflict: "${e.newPlugin}" tried to register ${e.type} "${e.name}" already registered by "${e.existingPlugin}"`);case"warn":return console.warn(`Plugin conflict: "${e.newPlugin}" tried to register ${e.type} "${e.name}" already registered by "${e.existingPlugin}". Skipping.`),!1;case"override":return console.info(`Plugin "${e.newPlugin}" is overriding ${e.type} "${e.name}" previously registered by "${e.existingPlugin}"`),!0;case"skip":return!1}}function ua(e){const r=[];if(e.components)for(const t of Object.keys(e.components)){const n=Ae(t);if(n){let a;for(const[o,c]of Z)if(c.components&&c.components[t]===n){a=o;break}a&&a!==e.name&&r.push({type:"component",name:t,existingPlugin:a,newPlugin:e.name})}}if(e.fieldCustomValidators)for(const[t,n]of Object.entries(e.fieldCustomValidators))for(const a of Object.keys(n)){const c=U.fieldValidators.get(t)?.get(a);gr(t,a)&&c&&c!==e.name&&r.push({type:"fieldCustomValidator",name:`${t}:${a}`,existingPlugin:c,newPlugin:e.name})}if(e.fieldTypeValidators)for(const t of Object.keys(e.fieldTypeValidators)){const n=br(t),a=U.fieldTypeValidators.get(t);n&&a&&a!==e.name&&r.push({type:"fieldTypeValidator",name:`type:${t}`,existingPlugin:a,newPlugin:e.name})}if(e.formValidators)for(const t of Object.keys(e.formValidators)){const n=hr(t),a=U.formValidators.get(t);n&&a&&a!==e.name&&r.push({type:"formValidator",name:t,existingPlugin:a,newPlugin:e.name})}if(e.submissionHandlers)for(const t of Object.keys(e.submissionHandlers)){const n=vn(t),a=U.submissionHandlers.get(t);n&&a&&a!==e.name&&r.push({type:"submissionHandler",name:t,existingPlugin:a,newPlugin:e.name})}return r}function se(e,r,t,n,a,o,c,i){for(const s of Object.keys(e)){let d;if(i?d=a.find(m=>m.type==="fieldCustomValidator"&&m.name===`${i}:${s}`):e===n.components?d=a.find(m=>m.type==="component"&&m.name===s):e===n.formValidators?d=a.find(m=>m.type==="formValidator"&&m.name===s):e===n.fieldTypeValidators?d=a.find(m=>m.type==="fieldTypeValidator"&&m.name===`type:${s}`):e===n.submissionHandlers&&(d=a.find(m=>m.type==="submissionHandler"&&m.name===s)),st(d||null,o,c))if(i){const m=r.get(i)||new Map;m.set(s,n.name),r.set(i,m),t(s,e[s])}else r===U.components?r.set(s,e[s]):r.set(s,n.name),t(s,e[s])}}function ma(e,r){const t=r?.conflictResolution||"error";if(Z.has(e.name)){const a={type:"plugin",name:e.name,existingPlugin:e.name,newPlugin:e.name};if(!st(a,t,r?.onConflict))return}const n=ua(e);if(e.components&&se(e.components,U.components,Re,e,n,t,r?.onConflict),e.fieldCustomValidators)for(const[a,o]of Object.entries(e.fieldCustomValidators))se(o,U.fieldValidators,(c,i)=>fr(a,c,i),e,n,t,r?.onConflict,a);e.formValidators&&se(e.formValidators,U.formValidators,dr,e,n,t,r?.onConflict),e.fieldTypeValidators&&se(e.fieldTypeValidators,U.fieldTypeValidators,pr,e,n,t,r?.onConflict),e.submissionHandlers&&se(e.submissionHandlers,U.submissionHandlers,Le,e,n,t,r?.onConflict),e.setup&&e.setup(),Z.set(e.name,e)}function da(e,r=!1){const t=Z.get(e);if(!t)return!1;if(t.cleanup&&t.cleanup(),r){if(t.components)for(const n of Object.keys(t.components))U.components.delete(n);if(t.fieldCustomValidators)for(const[n,a]of Object.entries(t.fieldCustomValidators)){const o=U.fieldValidators.get(n);if(o){for(const c of Object.keys(a))o.delete(c);o.size===0&&U.fieldValidators.delete(n)}}if(t.formValidators)for(const n of Object.keys(t.formValidators))U.formValidators.delete(n);if(t.fieldTypeValidators)for(const n of Object.keys(t.fieldTypeValidators))U.fieldTypeValidators.delete(n);if(t.submissionHandlers)for(const n of Object.keys(t.submissionHandlers))U.submissionHandlers.delete(n)}return Z.delete(e),!0}function fa(e){return Z.get(e)}function pa(){return Array.from(Z.values())}function ga(e){return Z.has(e)}function ha(e){for(const[r,t]of Object.entries(e))Re(r,t)}function ee(e){return typeof e=="object"&&e!==null}function Te(e){if(!ee(e))return!1;const r=e;return typeof r.name=="string"&&typeof r.displayName=="string"}function it(e){if(!ee(e))return!1;const r=e;return typeof r.name!="string"||typeof r.version!="string"||!Array.isArray(r.properties)?!1:r.properties.every(t=>Te(t))}function we(e){try{return typeof File<"u"&&e instanceof File}catch{const r=ee(e)?e:void 0;return!!r&&typeof r.name=="string"&&typeof r.size=="number"}}function ba(e,r,t={}){try{const{includeMetadata:n=!1,dateFormat:a="iso",fileHandling:o="metadata",prettify:c=!1,excludeFields:i=[],includeOnlyFields:s=[]}=t;if(!e||typeof e!="object")return{success:!1,error:"Instance must be a valid object"};const d=[],m=[],u={},b=(it(r)||ee(r)&&Array.isArray(r.properties)?r.properties:[]).filter(Te),C=new Map(b.map(h=>[h.name,h]));for(const[h,y]of Object.entries(e)){if(i.includes(h)){m.push(h);continue}if(s.length>0&&!s.includes(h)){m.push(h);continue}if(y===void 0)continue;const I=C.get(h);try{u[h]=ya(y,I,{dateFormat:a,fileHandling:o})}catch(F){d.push(`Error serializing field '${h}': ${String(F)}`),u[h]=null}}return n&&(u._metadata={serializedAt:new Date().toISOString(),version:(ee(r)?r.version:void 0)||"1.0.0",fieldCount:Object.keys(u).length-1}),{success:!0,data:c?JSON.stringify(u,null,2):JSON.stringify(u),metadata:{fieldCount:Object.keys(u).length,excludedFields:m,warnings:d}}}catch(n){return{success:!1,error:`Serialization failed: ${n instanceof Error?n.message:"Unknown error"}`}}}function ya(e,r,t={}){const{dateFormat:n="iso",fileHandling:a="metadata"}=t;if(e==null)return null;if(r)switch(r.type){case"date":case"datetime":case"date-time":return er(e,n);case"file":return rr(e,a);case"int":case"integer":return typeof e=="string"?parseInt(e,10):e;case"float":case"number":return typeof e=="string"?parseFloat(e):e;case"boolean":return typeof e=="string"?e==="true":!!e;case"int-array":case"float-array":return Array.isArray(e)?e.map(o=>typeof o=="string"?Number(o):o):e;default:return e}return e instanceof Date?er(e,n):we(e)||Array.isArray(e)&&we(e[0])?rr(e,a):e}function er(e,r){let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){const n=new Date(e);if(!isNaN(n.getTime()))t=n;else return e}else return e;switch(r){case"timestamp":return t.getTime();case"locale":return t.toLocaleString();case"iso":default:return t.toISOString()}}function rr(e,r){return r==="skip"?null:Array.isArray(e)?e.map(t=>tr(t,r)):tr(e,r)}function tr(e,r){if(!we(e))return e;const t=e;return r==="metadata"?{name:t.name,size:t.size,type:t.type,lastModified:t.lastModified}:{name:t.name,size:t.size,type:t.type,lastModified:t.lastModified,_note:"Base64 encoding requires async implementation"}}function va(e,r,t={}){try{const{strict:n=!1,validateTypes:a=!0,preserveUnknownFields:o=!0,dateFormat:c="auto"}=t;if(!e||typeof e!="string")return{success:!1,error:"Serialized data must be a non-empty string"};let i;try{i=JSON.parse(e)}catch(N){return{success:!1,error:`Invalid JSON: ${N instanceof Error?N.message:"Unknown parsing error"}`}}if(!i||typeof i!="object")return{success:!1,error:"Parsed data must be an object"};const s=[],d=[],m={},p=(it(r)||ee(r)&&Array.isArray(r.properties)?r.properties:[]).filter(Te),b=new Map(p.map(N=>[N.name,N]));for(const N of p){const h=N.name,y=i[h];if(y===void 0){n&&N.required&&d.push(`Required field '${h}' is missing`);continue}try{m[h]=xa(y,N,{validateTypes:a,dateFormat:c})}catch(I){const F=`Error deserializing field '${h}': ${String(I)}`;n?d.push(F):(s.push(F),m[h]=y)}}if(o)for(const[N,h]of Object.entries(i))!b.has(N)&&N!=="_metadata"&&(n&&s.push(`Unknown field '${N}' preserved`),m[N]=h);const C=d.length>0;return{success:!C,data:m,warnings:s.length>0?s:void 0,validationErrors:C?d:void 0}}catch(n){return{success:!1,error:`Deserialization failed: ${n instanceof Error?n.message:"Unknown error"}`}}}function xa(e,r,t={}){const{validateTypes:n=!0,dateFormat:a="auto"}=t;if(e==null)return e;try{switch(r.type){case"date":case"datetime":case"date-time":return Ca(e,a,n);case"int":case"integer":return Se(e,n);case"float":case"number":return Ce(e,n);case"boolean":return Na(e,n);case"int-array":return nr(e,"integer",n);case"float-array":return nr(e,"number",n);case"string":case"text":case"email":case"url":case"phone":return n?String(e):e;default:return e}}catch(o){if(n)throw new Error(`Type conversion failed: ${String(o)}`);return e}}function wa(e,r={}){try{const{prettify:t=!0,includeMetadata:n=!0}=r;if(!e||typeof e!="object")return{success:!1,error:"Definition must be a valid object"};const a={...e};return n&&(a._metadata={serializedAt:new Date().toISOString(),version:a.version||"1.0.0",propertyCount:(Array.isArray(a.properties)?a.properties.length:0)||0}),{success:!0,data:t?JSON.stringify(a,null,2):JSON.stringify(a),metadata:{fieldCount:(Array.isArray(a.properties)?a.properties.length:0)||0,excludedFields:[],warnings:[]}}}catch(t){return{success:!1,error:`Definition serialization failed: ${t instanceof Error?t.message:"Unknown error"}`}}}function Sa(e,r={}){try{const{strict:t=!1,validateTypes:n=!0}=r;let a;if(typeof e=="string")try{a=JSON.parse(e)}catch(m){return{success:!1,error:`Invalid JSON for definition: ${m instanceof Error?m.message:"Unknown parsing error"}`}}else if(e&&typeof e=="object")a={...e};else return{success:!1,error:"Input must be a string or object"};const o=[],c=[],i=["name","version","displayName"];for(const m of i)if(!(m in a)||!a[m])if(t)c.push(`Required field '${m}' is missing`);else switch(o.push(`Missing field '${m}', using default`),m){case"name":a.name="unnamed-definition";break;case"version":a.version="1.0.0";break;case"displayName":a.displayName=a.name||"Unnamed Definition";break}const s=Array.isArray(a.properties)?a.properties:null;s?a.properties=s.map((m,u)=>{const p=ee(m)?m:{},b={...p};if(!p.name){const C=`Property at index ${u} missing 'name'`;t?c.push(C):(o.push(`${C}, using 'field_${u}'`),b.name=`field_${u}`)}return p.displayName||(b.displayName=p.name||`Field ${u}`),p.type||(t&&n?c.push(`Property '${p.name||u}' missing 'type'`):(o.push(`Property '${p.name||u}' missing 'type', using 'string'`),b.type="string")),p.defaultValue===void 0&&(b.defaultValue=null),p.required===void 0&&(b.required=!1),b}):t?c.push("Properties must be an array"):(o.push("Properties not found or invalid, using empty array"),a.properties=[]);const d=c.length>0;return{success:!d,data:a,warnings:o.length>0?o:void 0,validationErrors:d?c:void 0}}catch(t){return{success:!1,error:`Definition deserialization failed: ${t instanceof Error?t.message:"Unknown error"}`}}}function Ca(e,r,t){if(e instanceof Date)return e;if(typeof e=="number"){const n=new Date(e);if(t&&isNaN(n.getTime()))throw new Error(`Invalid timestamp: ${e}`);return n}if(typeof e=="string"){const n=new Date(e);if(t&&isNaN(n.getTime()))throw new Error(`Invalid date string: ${e}`);return n}if(t)throw new Error(`Cannot convert ${typeof e} to Date`);return e}function Se(e,r){if(typeof e=="number"){if(Number.isInteger(e))return e;if(r)throw new Error(`Number ${e} is not an integer`);return Math.floor(e)}if(typeof e=="string"){const t=e.trim();if(t===""){if(r)throw new Error("Cannot convert empty string to integer");return e}const n=parseInt(t,10);if(r&&isNaN(n))throw new Error(`Cannot convert "${e}" to integer`);return n}if(r)throw new Error(`Cannot convert ${typeof e} to integer`);return e}function Ce(e,r){if(typeof e=="number"){if(r&&!isFinite(e))throw new Error(`Number ${e} is not finite`);return e}if(typeof e=="string"){const t=e.trim();if(t===""){if(r)throw new Error("Cannot convert empty string to number");return e}const n=parseFloat(t);if(r&&(isNaN(n)||!isFinite(n)))throw new Error(`Cannot convert "${e}" to number`);return n}if(r)throw new Error(`Cannot convert ${typeof e} to number`);return e}function Na(e,r){if(typeof e=="boolean")return e;if(typeof e=="string"){const t=e.toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1;if(r)throw new Error(`Cannot convert "${e}" to boolean`)}if(typeof e=="number")return!!e;if(r)throw new Error(`Cannot convert ${typeof e} to boolean`);return e}function nr(e,r,t){if(!Array.isArray(e)){if(typeof e=="string")return e.split(",").map(a=>a.trim()).filter(Boolean).map(a=>r==="integer"?Se(a,t):Ce(a,t));if(t)throw new Error(`Expected array, got ${typeof e}`);return e}return e.map((n,a)=>{try{return r==="integer"?Se(n,t):Ce(n,t)}catch(o){if(t)throw new Error(`Array element ${a}: ${o}`);return n}})}function ct(){if(!document.getElementById("reactaform-styles"))try{const e=document.createElement("style");e.id="reactaform-styles",e.textContent=ft,document.head.appendChild(e)}catch{}}typeof document<"u"&&ct();exports.CSS_CLASSES=V;exports.ReactaForm=la;exports.ReactaFormProvider=at;exports.ReactaFormRenderer=Qr;exports.StandardFieldLayout=z;exports.Units=rn;exports.combineClasses=B;exports.createInstanceFromDefinition=ot;exports.deserializeDefinition=Sa;exports.deserializeInstance=va;exports.getAllPlugins=pa;exports.getButtonHandler=Kr;exports.getComponent=Ae;exports.getPlugin=fa;exports.getSupportedLanguages=Sn;exports.hasButtonHandler=on;exports.hasPlugin=ga;exports.injectReactaFormStyles=ct;exports.isDarkTheme=ae;exports.listButtonHandlers=cn;exports.loadInstance=sa;exports.loadJsonDefinition=oa;exports.registerButtonHandler=an;exports.registerComponent=Re;exports.registerComponents=ha;exports.registerFieldCustomValidationHandler=fr;exports.registerFieldTypeValidationHandler=pr;exports.registerFormValidationHandler=dr;exports.registerPlugin=ma;exports.registerSubmissionHandler=Le;exports.serializeDefinition=wa;exports.serializeInstance=ba;exports.unregisterButtonHandler=sn;exports.unregisterPlugin=da;exports.upgradeInstanceToLatestDefinition=ia;exports.useDebouncedCallback=sr;exports.useFieldValidator=L;exports.useReactaFormContext=O;exports.useUncontrolledValidatedInput=W;exports.validateFieldValue=vt;exports.validateFieldWithCustomHandler=Ie;
|
|
404
|
+
</svg>")`},textarea:{...r,minHeight:"80px",resize:"vertical",paddingTop:"var(--reactaform-space-sm, 8px)"},error:{color:"var(--reactaform-color-error)",fontSize:"0.875rem",marginTop:"var(--reactaform-space-xs, 4px)",display:"block"}}},ot=({children:e,definitionName:r="",defaultStyle:t,defaultLanguage:n="en",defaultTheme:a="light",defaultLocalizeName:o="",defaultFieldValidationMode:c="onEdit",className:i="reactaform-container",defaultDisplayInstanceName:s=!0})=>{const d=r,m=o,u=a,p=n,b=l.useMemo(()=>t??{},[t]),[C,N]=l.useState({}),[h,y]=l.useState({});l.useEffect(()=>{let v=!0;return(async()=>{if(p==="en"){v&&(N({}),y({}));return}try{const w=await jn(p),x=w.success?w.translations:{};v&&N(x);const j=await kn(p,m),S=j.success?j.translations:{};v&&y(S)}catch{v&&(N({}),y({}))}})(),()=>{v=!1}},[p,m]);const I=l.useMemo(()=>na(b),[b]),F=l.useMemo(()=>aa(b),[b]),E=l.useMemo(()=>En(p,C,h),[p,C,h]),M=l.useCallback((v,...g)=>E(v,...g),[E]),R=l.useMemo(()=>({definitionName:d,language:p,theme:u,formStyle:I,fieldStyle:F,t:M,fieldValidationMode:c,displayInstanceName:s}),[d,p,u,F,I,M,c,s]),k=b?.height?{height:"100%"}:void 0;return f.jsx(Ne.Provider,{value:R,children:f.jsx("div",{"data-reactaform-theme":u,className:i,style:k,children:e})})};function oa(e){if(!e||typeof e!="object")return"Definition must be an object";const r=e;if(!r.name||typeof r.name!="string")return"Definition must include a 'name' string";if(r.name.trim()==="")return"Definition 'name' cannot be empty";if(!r.version||typeof r.version!="string")return"Definition must include a 'version' string";if(r.properties!==void 0&&!Array.isArray(r.properties))return"'properties' must be an array if provided";if(Array.isArray(r.properties))for(let t=0;t<r.properties.length;t++){const n=r.properties[t];if(!n||typeof n!="object")return`Property at index ${t} must be an object`;if(!n.name||typeof n.name!="string")return`Property at index ${t} must have a string 'name'`;if(n.name.trim()==="")return`Property at index ${t} has an empty 'name'`;if(!n.type||typeof n.type!="string")return`Property '${n.name}' must have a string 'type'`;if(n.type.trim()==="")return`Property '${n.name}' has an empty 'type'`}return null}async function sa(e,r={}){const{validateSchema:t=!0}=r;try{if(!e||typeof e!="string")return{success:!1,error:"jsonData must be a non-empty JSON string"};const n=e.trim();if(!n)return{success:!1,error:"jsonData is empty"};let a;try{a=JSON.parse(n)}catch(o){return{success:!1,error:`Invalid JSON format: ${o instanceof Error?o.message:"Unknown parsing error"}`}}if(t){const o=oa(a);if(o)return{success:!1,error:`Schema validation failed: ${o}`}}return{success:!0,definition:a}}catch(n){return{success:!1,error:`Unexpected error loading definition: ${n instanceof Error?n.message:"Unknown error"}`}}}function st(e,r){try{if(!e)return{success:!1,error:"Definition is required"};if(!r||typeof r!="string")return{success:!1,error:"Instance name is required"};const t={name:r,definition:e.name??"unknown",version:e.version??"1.0.0",values:{}},n=e.properties||[];return Array.isArray(n)&&n.forEach(a=>{const o=a;if(o.type==="unit"){const c=o.defaultUnit,i=Number(o.defaultValue)||void 0;t.values[o.name]=[i||0,c||"m"]}else o.defaultValue!==void 0&&(t.values[o.name]=o.defaultValue)}),{success:!0,instance:t}}catch(t){return{success:!1,error:`Error creating instance: ${t instanceof Error?t.message:"Unknown error"}`}}}function ia(e){try{if(!e)return{success:!1,error:"Instance data is required"};let r;if(typeof e=="string")try{r=JSON.parse(e)}catch(t){return{success:!1,error:`Invalid JSON format: ${t instanceof Error?t.message:"Unknown parsing error"}`}}else r=e;return typeof r!="object"||r===null?{success:!1,error:"Instance must be a valid object"}:{success:!0,instance:r}}catch(r){return{success:!1,error:`Error loading instance: ${r instanceof Error?r.message:"Unknown error"}`}}}function ca(e,r,t){try{if(!e)return{success:!1,error:"Instance is required"};if(!r)return{success:!1,error:"Latest definition is required"};if(e.definition===r.name&&e.version===r.version)return{success:!0,instance:e};const n={name:e.name||r.name+"-instance",definition:r.name,version:r.version,values:{}},a=n.values,o={};(r.properties||[]).forEach(s=>{o[s.name]=s});const c=(s,d,m)=>{if(s==null)return s;const u=d.toLowerCase();try{if(u==="string"||u==="text")return String(s);if(u==="int"||u==="integer"||u==="number"||u==="float"){if(typeof s=="number")return s;if(typeof s=="boolean")return s?1:0;if(typeof s=="string"){const p=s.trim();if(p==="")return null;const b=Number(p);return Number.isNaN(b)?0:b}return 0}if(u==="boolean"||u==="bool"||u==="checkbox"||u==="switch"){if(typeof s=="boolean")return s;if(typeof s=="number")return s!==0;if(typeof s=="string"){const p=s.toLowerCase().trim();return["true","1","yes","on"].includes(p)}return!!s}if(u==="unit"){if(Array.isArray(s)&&s.length>=2)return s;if(Array.isArray(s)&&s.length===1)return[s[0],m&&m.defaultUnit||"m"];if(typeof s=="number")return[s,m&&m.defaultUnit||"m"];if(typeof s=="string"){const p=Number(s);return[Number.isNaN(p)?0:p,m&&m.defaultUnit||"m"]}return[0,m&&m.defaultUnit||"m"]}if(u.endsWith("[]")||u==="array"||u==="int-array"||u==="float-array")return Array.isArray(s)?s:typeof s=="string"?s.split(",").map(p=>p.trim()).filter(Boolean):[s]}catch{}return s},i=e.values||{};Object.keys(i).forEach(s=>{const d=i[s],m=o[s];if(!m)return;const u=Array.isArray(d)?"array":d===null?"null":typeof d,p=(m.type||"").toLowerCase();u===p||p==="string"&&typeof d=="string"?a[s]=d:a[s]=c(d,p,m)}),(r.properties||[]).forEach(s=>{const d=s.name;d in a||(a[d]=s.defaultValue)});try{typeof t=="function"&&t?.(e,n,r)}catch(s){return{success:!1,error:`Upgrade callback error: ${s instanceof Error?s.message:String(s)}`}}return{success:!0,instance:n}}catch(n){return{success:!1,error:`Error upgrading instance: ${n instanceof Error?n.message:"Unknown error"}`}}}function la(e){const[r,t]=l.useState(null);return l.useEffect(()=>{const n=document.querySelector("[data-reactaform-theme]");if(!n)return;const a=n.closest("[data-reactaform-theme]");if(!a)return;const o=()=>t(a.getAttribute("data-reactaform-theme"));o();const c=new MutationObserver(i=>{for(const s of i)s.type==="attributes"&&s.attributeName==="data-reactaform-theme"&&o()});return c.observe(a,{attributes:!0,attributeFilter:["data-reactaform-theme"]}),()=>c.disconnect()},[e]),r}const ua=({definitionData:e,instance:r,language:t,className:n,theme:a,style:o,fieldValidationMode:c="onEdit",displayInstanceName:i=!0,onSubmit:s=void 0,onValidation:d=void 0})=>{const m=l.useMemo(()=>{try{return typeof e=="string"?JSON.parse(e):e??null}catch{return null}},[e]),u={fontSize:"inherit",fontFamily:"inherit",...o},p=la(),b=a??p??"light",C=t??"en";l.useEffect(()=>{let h=document.getElementById("popup-root");h||(h=document.createElement("div"),h.id="popup-root",document.body.appendChild(h))},[]);const N=l.useMemo(()=>{if(r)return r;if(!m)return null;const h=st(m,m.name);return!h.success||!h.instance?null:h.instance},[r,m]);return m?N?f.jsx(ot,{definitionName:m.name,defaultStyle:u,defaultLanguage:C,defaultTheme:b,defaultLocalizeName:m.localization||"",className:n,defaultFieldValidationMode:c,defaultDisplayInstanceName:i,children:f.jsx(et,{definition:m,instance:N,onSubmit:s,onValidation:d})}):f.jsx("div",{style:{color:"red"},children:"Error: Failed to create instance from definition."}):f.jsx("div",{style:{color:"red"},children:"Error: No form definition provided."})},Q=new Map,U={components:new Map,fieldValidators:new Map,fieldTypeValidators:new Map,formValidators:new Map,submissionHandlers:new Map};function it(e,r,t){if(!e)return!0;if(t&&!t(e))return!1;switch(r){case"error":throw new Error(`Plugin conflict: "${e.newPlugin}" tried to register ${e.type} "${e.name}" already registered by "${e.existingPlugin}"`);case"warn":return console.warn(`Plugin conflict: "${e.newPlugin}" tried to register ${e.type} "${e.name}" already registered by "${e.existingPlugin}". Skipping.`),!1;case"override":return console.info(`Plugin "${e.newPlugin}" is overriding ${e.type} "${e.name}" previously registered by "${e.existingPlugin}"`),!0;case"skip":return!1}}function ma(e){const r=[];if(e.components)for(const t of Object.keys(e.components)){const n=Ae(t);if(n){let a;for(const[o,c]of Q)if(c.components&&c.components[t]===n){a=o;break}a&&a!==e.name&&r.push({type:"component",name:t,existingPlugin:a,newPlugin:e.name})}}if(e.fieldCustomValidators)for(const[t,n]of Object.entries(e.fieldCustomValidators))for(const a of Object.keys(n)){const c=U.fieldValidators.get(t)?.get(a);gr(t,a)&&c&&c!==e.name&&r.push({type:"fieldCustomValidator",name:`${t}:${a}`,existingPlugin:c,newPlugin:e.name})}if(e.fieldTypeValidators)for(const t of Object.keys(e.fieldTypeValidators)){const n=br(t),a=U.fieldTypeValidators.get(t);n&&a&&a!==e.name&&r.push({type:"fieldTypeValidator",name:`type:${t}`,existingPlugin:a,newPlugin:e.name})}if(e.formValidators)for(const t of Object.keys(e.formValidators)){const n=hr(t),a=U.formValidators.get(t);n&&a&&a!==e.name&&r.push({type:"formValidator",name:t,existingPlugin:a,newPlugin:e.name})}if(e.submissionHandlers)for(const t of Object.keys(e.submissionHandlers)){const n=xn(t),a=U.submissionHandlers.get(t);n&&a&&a!==e.name&&r.push({type:"submissionHandler",name:t,existingPlugin:a,newPlugin:e.name})}return r}function se(e,r,t,n,a,o,c,i){for(const s of Object.keys(e)){let d;if(i?d=a.find(m=>m.type==="fieldCustomValidator"&&m.name===`${i}:${s}`):e===n.components?d=a.find(m=>m.type==="component"&&m.name===s):e===n.formValidators?d=a.find(m=>m.type==="formValidator"&&m.name===s):e===n.fieldTypeValidators?d=a.find(m=>m.type==="fieldTypeValidator"&&m.name===`type:${s}`):e===n.submissionHandlers&&(d=a.find(m=>m.type==="submissionHandler"&&m.name===s)),it(d||null,o,c))if(i){const m=r.get(i)||new Map;m.set(s,n.name),r.set(i,m),t(s,e[s])}else r===U.components?r.set(s,e[s]):r.set(s,n.name),t(s,e[s])}}function da(e,r){const t=r?.conflictResolution||"error";if(Q.has(e.name)){const a={type:"plugin",name:e.name,existingPlugin:e.name,newPlugin:e.name};if(!it(a,t,r?.onConflict))return}const n=ma(e);if(e.components&&se(e.components,U.components,Re,e,n,t,r?.onConflict),e.fieldCustomValidators)for(const[a,o]of Object.entries(e.fieldCustomValidators))se(o,U.fieldValidators,(c,i)=>fr(a,c,i),e,n,t,r?.onConflict,a);e.formValidators&&se(e.formValidators,U.formValidators,dr,e,n,t,r?.onConflict),e.fieldTypeValidators&&se(e.fieldTypeValidators,U.fieldTypeValidators,pr,e,n,t,r?.onConflict),e.submissionHandlers&&se(e.submissionHandlers,U.submissionHandlers,Oe,e,n,t,r?.onConflict),e.setup&&e.setup(),Q.set(e.name,e)}function fa(e,r=!1){const t=Q.get(e);if(!t)return!1;if(t.cleanup&&t.cleanup(),r){if(t.components)for(const n of Object.keys(t.components))U.components.delete(n);if(t.fieldCustomValidators)for(const[n,a]of Object.entries(t.fieldCustomValidators)){const o=U.fieldValidators.get(n);if(o){for(const c of Object.keys(a))o.delete(c);o.size===0&&U.fieldValidators.delete(n)}}if(t.formValidators)for(const n of Object.keys(t.formValidators))U.formValidators.delete(n);if(t.fieldTypeValidators)for(const n of Object.keys(t.fieldTypeValidators))U.fieldTypeValidators.delete(n);if(t.submissionHandlers)for(const n of Object.keys(t.submissionHandlers))U.submissionHandlers.delete(n)}return Q.delete(e),!0}function pa(e){return Q.get(e)}function ga(){return Array.from(Q.values())}function ha(e){return Q.has(e)}function ba(e){for(const[r,t]of Object.entries(e))Re(r,t)}function ee(e){return typeof e=="object"&&e!==null}function Te(e){if(!ee(e))return!1;const r=e;return typeof r.name=="string"&&typeof r.displayName=="string"}function ct(e){if(!ee(e))return!1;const r=e;return typeof r.name!="string"||typeof r.version!="string"||!Array.isArray(r.properties)?!1:r.properties.every(t=>Te(t))}function we(e){try{return typeof File<"u"&&e instanceof File}catch{const r=ee(e)?e:void 0;return!!r&&typeof r.name=="string"&&typeof r.size=="number"}}function ya(e,r,t={}){try{const{includeMetadata:n=!1,dateFormat:a="iso",fileHandling:o="metadata",prettify:c=!1,excludeFields:i=[],includeOnlyFields:s=[]}=t;if(!e||typeof e!="object")return{success:!1,error:"Instance must be a valid object"};const d=[],m=[],u={},b=(ct(r)||ee(r)&&Array.isArray(r.properties)?r.properties:[]).filter(Te),C=new Map(b.map(h=>[h.name,h]));for(const[h,y]of Object.entries(e)){if(i.includes(h)){m.push(h);continue}if(s.length>0&&!s.includes(h)){m.push(h);continue}if(y===void 0)continue;const I=C.get(h);try{u[h]=va(y,I,{dateFormat:a,fileHandling:o})}catch(F){d.push(`Error serializing field '${h}': ${String(F)}`),u[h]=null}}return n&&(u._metadata={serializedAt:new Date().toISOString(),version:(ee(r)?r.version:void 0)||"1.0.0",fieldCount:Object.keys(u).length-1}),{success:!0,data:c?JSON.stringify(u,null,2):JSON.stringify(u),metadata:{fieldCount:Object.keys(u).length,excludedFields:m,warnings:d}}}catch(n){return{success:!1,error:`Serialization failed: ${n instanceof Error?n.message:"Unknown error"}`}}}function va(e,r,t={}){const{dateFormat:n="iso",fileHandling:a="metadata"}=t;if(e==null)return null;if(r)switch(r.type){case"date":case"datetime":case"date-time":return er(e,n);case"file":return rr(e,a);case"int":case"integer":return typeof e=="string"?parseInt(e,10):e;case"float":case"number":return typeof e=="string"?parseFloat(e):e;case"boolean":return typeof e=="string"?e==="true":!!e;case"int-array":case"float-array":return Array.isArray(e)?e.map(o=>typeof o=="string"?Number(o):o):e;default:return e}return e instanceof Date?er(e,n):we(e)||Array.isArray(e)&&we(e[0])?rr(e,a):e}function er(e,r){let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){const n=new Date(e);if(!isNaN(n.getTime()))t=n;else return e}else return e;switch(r){case"timestamp":return t.getTime();case"locale":return t.toLocaleString();case"iso":default:return t.toISOString()}}function rr(e,r){return r==="skip"?null:Array.isArray(e)?e.map(t=>tr(t,r)):tr(e,r)}function tr(e,r){if(!we(e))return e;const t=e;return r==="metadata"?{name:t.name,size:t.size,type:t.type,lastModified:t.lastModified}:{name:t.name,size:t.size,type:t.type,lastModified:t.lastModified,_note:"Base64 encoding requires async implementation"}}function xa(e,r,t={}){try{const{strict:n=!1,validateTypes:a=!0,preserveUnknownFields:o=!0,dateFormat:c="auto"}=t;if(!e||typeof e!="string")return{success:!1,error:"Serialized data must be a non-empty string"};let i;try{i=JSON.parse(e)}catch(N){return{success:!1,error:`Invalid JSON: ${N instanceof Error?N.message:"Unknown parsing error"}`}}if(!i||typeof i!="object")return{success:!1,error:"Parsed data must be an object"};const s=[],d=[],m={},p=(ct(r)||ee(r)&&Array.isArray(r.properties)?r.properties:[]).filter(Te),b=new Map(p.map(N=>[N.name,N]));for(const N of p){const h=N.name,y=i[h];if(y===void 0){n&&N.required&&d.push(`Required field '${h}' is missing`);continue}try{m[h]=wa(y,N,{validateTypes:a,dateFormat:c})}catch(I){const F=`Error deserializing field '${h}': ${String(I)}`;n?d.push(F):(s.push(F),m[h]=y)}}if(o)for(const[N,h]of Object.entries(i))!b.has(N)&&N!=="_metadata"&&(n&&s.push(`Unknown field '${N}' preserved`),m[N]=h);const C=d.length>0;return{success:!C,data:m,warnings:s.length>0?s:void 0,validationErrors:C?d:void 0}}catch(n){return{success:!1,error:`Deserialization failed: ${n instanceof Error?n.message:"Unknown error"}`}}}function wa(e,r,t={}){const{validateTypes:n=!0,dateFormat:a="auto"}=t;if(e==null)return e;try{switch(r.type){case"date":case"datetime":case"date-time":return Na(e,a,n);case"int":case"integer":return Se(e,n);case"float":case"number":return Ce(e,n);case"boolean":return ja(e,n);case"int-array":return nr(e,"integer",n);case"float-array":return nr(e,"number",n);case"string":case"text":case"email":case"url":case"phone":return n?String(e):e;default:return e}}catch(o){if(n)throw new Error(`Type conversion failed: ${String(o)}`);return e}}function Sa(e,r={}){try{const{prettify:t=!0,includeMetadata:n=!0}=r;if(!e||typeof e!="object")return{success:!1,error:"Definition must be a valid object"};const a={...e};return n&&(a._metadata={serializedAt:new Date().toISOString(),version:a.version||"1.0.0",propertyCount:(Array.isArray(a.properties)?a.properties.length:0)||0}),{success:!0,data:t?JSON.stringify(a,null,2):JSON.stringify(a),metadata:{fieldCount:(Array.isArray(a.properties)?a.properties.length:0)||0,excludedFields:[],warnings:[]}}}catch(t){return{success:!1,error:`Definition serialization failed: ${t instanceof Error?t.message:"Unknown error"}`}}}function Ca(e,r={}){try{const{strict:t=!1,validateTypes:n=!0}=r;let a;if(typeof e=="string")try{a=JSON.parse(e)}catch(m){return{success:!1,error:`Invalid JSON for definition: ${m instanceof Error?m.message:"Unknown parsing error"}`}}else if(e&&typeof e=="object")a={...e};else return{success:!1,error:"Input must be a string or object"};const o=[],c=[],i=["name","version","displayName"];for(const m of i)if(!(m in a)||!a[m])if(t)c.push(`Required field '${m}' is missing`);else switch(o.push(`Missing field '${m}', using default`),m){case"name":a.name="unnamed-definition";break;case"version":a.version="1.0.0";break;case"displayName":a.displayName=a.name||"Unnamed Definition";break}const s=Array.isArray(a.properties)?a.properties:null;s?a.properties=s.map((m,u)=>{const p=ee(m)?m:{},b={...p};if(!p.name){const C=`Property at index ${u} missing 'name'`;t?c.push(C):(o.push(`${C}, using 'field_${u}'`),b.name=`field_${u}`)}return p.displayName||(b.displayName=p.name||`Field ${u}`),p.type||(t&&n?c.push(`Property '${p.name||u}' missing 'type'`):(o.push(`Property '${p.name||u}' missing 'type', using 'string'`),b.type="string")),p.defaultValue===void 0&&(b.defaultValue=null),p.required===void 0&&(b.required=!1),b}):t?c.push("Properties must be an array"):(o.push("Properties not found or invalid, using empty array"),a.properties=[]);const d=c.length>0;return{success:!d,data:a,warnings:o.length>0?o:void 0,validationErrors:d?c:void 0}}catch(t){return{success:!1,error:`Definition deserialization failed: ${t instanceof Error?t.message:"Unknown error"}`}}}function Na(e,r,t){if(e instanceof Date)return e;if(typeof e=="number"){const n=new Date(e);if(t&&isNaN(n.getTime()))throw new Error(`Invalid timestamp: ${e}`);return n}if(typeof e=="string"){const n=new Date(e);if(t&&isNaN(n.getTime()))throw new Error(`Invalid date string: ${e}`);return n}if(t)throw new Error(`Cannot convert ${typeof e} to Date`);return e}function Se(e,r){if(typeof e=="number"){if(Number.isInteger(e))return e;if(r)throw new Error(`Number ${e} is not an integer`);return Math.floor(e)}if(typeof e=="string"){const t=e.trim();if(t===""){if(r)throw new Error("Cannot convert empty string to integer");return e}const n=parseInt(t,10);if(r&&isNaN(n))throw new Error(`Cannot convert "${e}" to integer`);return n}if(r)throw new Error(`Cannot convert ${typeof e} to integer`);return e}function Ce(e,r){if(typeof e=="number"){if(r&&!isFinite(e))throw new Error(`Number ${e} is not finite`);return e}if(typeof e=="string"){const t=e.trim();if(t===""){if(r)throw new Error("Cannot convert empty string to number");return e}const n=parseFloat(t);if(r&&(isNaN(n)||!isFinite(n)))throw new Error(`Cannot convert "${e}" to number`);return n}if(r)throw new Error(`Cannot convert ${typeof e} to number`);return e}function ja(e,r){if(typeof e=="boolean")return e;if(typeof e=="string"){const t=e.toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1;if(r)throw new Error(`Cannot convert "${e}" to boolean`)}if(typeof e=="number")return!!e;if(r)throw new Error(`Cannot convert ${typeof e} to boolean`);return e}function nr(e,r,t){if(!Array.isArray(e)){if(typeof e=="string")return e.split(",").map(a=>a.trim()).filter(Boolean).map(a=>r==="integer"?Se(a,t):Ce(a,t));if(t)throw new Error(`Expected array, got ${typeof e}`);return e}return e.map((n,a)=>{try{return r==="integer"?Se(n,t):Ce(n,t)}catch(o){if(t)throw new Error(`Array element ${a}: ${o}`);return n}})}function lt(){if(!document.getElementById("reactaform-styles"))try{const e=document.createElement("style");e.id="reactaform-styles",e.textContent=pt,document.head.appendChild(e)}catch{}}typeof document<"u"&<();exports.CSS_CLASSES=V;exports.ReactaForm=ua;exports.ReactaFormProvider=ot;exports.ReactaFormRenderer=et;exports.StandardFieldLayout=z;exports.Units=tn;exports.combineClasses=B;exports.createInstanceFromDefinition=st;exports.deserializeDefinition=Ca;exports.deserializeInstance=xa;exports.getAllPlugins=ga;exports.getButtonHandler=Kr;exports.getComponent=Ae;exports.getPlugin=pa;exports.getSupportedLanguages=Cn;exports.hasButtonHandler=sn;exports.hasPlugin=ha;exports.injectReactaFormStyles=lt;exports.isDarkTheme=ae;exports.listButtonHandlers=ln;exports.loadInstance=ia;exports.loadJsonDefinition=sa;exports.registerButtonHandler=on;exports.registerComponent=Re;exports.registerComponents=ba;exports.registerFieldCustomValidationHandler=fr;exports.registerFieldTypeValidationHandler=pr;exports.registerFormValidationHandler=dr;exports.registerPlugin=da;exports.registerSubmissionHandler=Oe;exports.serializeDefinition=Sa;exports.serializeInstance=ya;exports.unregisterButtonHandler=cn;exports.unregisterPlugin=fa;exports.upgradeInstanceToLatestDefinition=ca;exports.useDebouncedCallback=sr;exports.useFieldValidator=O;exports.useReactaFormContext=L;exports.useUncontrolledValidatedInput=W;exports.validateFieldValue=xt;exports.validateFieldWithCustomHandler=Ie;
|