@formhaus/react 0.7.0 → 0.7.2
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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {memo,useCallback,useSyncExternalStore,useState,useRef,useEffect,useMemo}from'react';import {evaluateCondition,FormEngine}from'@formhaus/core';import {jsx,jsxs}from'react/jsx-runtime';function we(e,r,o){return o?true:!e?.disabled||e.disabled.length===0?false:e.disabled.every(t=>evaluateCondition(t,r))}function $({submitAction:e,backAction:r,cancelAction:o,isFirstStep:t,isLastStep:a,isMultiStep:p,loading:d,showPrimary:c=true,values:i={},onSubmit:n,onNext:s,onPrev:m,onCancel:u,primaryLabel:f,showBack:l,backLabel:h,onPrimary:F}){let y=l??(p&&!t&&r!==false),k=h??(typeof r=="object"?r?.label??"Back":"Back"),M=f??(p&&!a?"Continue":e?.label??"Submit"),L=we(p&&!a?void 0:e,i,d);function v(){F?F():p&&!a?s():n();}return jsxs("div",{className:"fh-form-actions",children:[jsxs("div",{className:"fh-form-actions__secondary",children:[y&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--text",disabled:d,onClick:m,children:k}),o&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--text",disabled:d,onClick:u,children:o.label})]}),c&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--primary",disabled:L,"aria-busy":d,onClick:v,children:M})]})}function D({current:e,total:r,stepTitle:o,stepDescription:t}){let a=e/r*100;return jsxs("div",{className:"fh-step-progress",children:[jsx("div",{className:"fh-step-progress__bar",children:jsx("div",{className:"fh-step-progress__fill",style:{width:`${a}%`}})}),jsx("div",{className:"fh-step-progress__info",children:jsxs("span",{className:"fh-step-progress__counter",children:["Step ",e," of ",r]})}),o&&jsx("h3",{className:"fh-step-progress__title",children:o}),t&&jsx("p",{className:"fh-step-progress__description",children:t})]})}function C(e){let r=useCallback(t=>e.subscribe(t),[e]),o=useCallback(()=>e.getSnapshot(),[e]);return useSyncExternalStore(r,o,o)}function B(e){let r=useCallback(t=>e.subscribeStructure(t),[e]),o=useCallback(()=>e.getStructureSnapshot(),[e]);return useSyncExternalStore(r,o,o)}function oe({engine:e,definition:r,loading:o,ActionsComponent:t,onSubmit:a,onNext:p,onPrev:d,onCancel:c}){C(e);let i=e.isLastStep||!e.isMultiStep,n=e.isMultiStep&&!i?typeof e.currentStep?.next=="object"?e.currentStep.next.label??"Continue":"Continue":r.submit?.label??"Submit",s=e.isMultiStep&&!e.isFirstStep&&e.currentStep?.back!==false,m=typeof e.currentStep?.back=="object"?e.currentStep.back.label??"Back":"Back",u=useCallback(async()=>{e.isMultiStep&&!i?await p():a();},[e,i,p,a]);return t?jsx(t,{submitAction:r.submit,backAction:e.currentStep?.back,cancelAction:r.cancel,isFirstStep:e.isFirstStep,isLastStep:i,isMultiStep:e.isMultiStep,loading:o||e.stepValidating||e.submitting,values:e.values,onSubmit:a,onNext:p,onPrev:d,onCancel:c,primaryLabel:n,showPrimary:i||e.currentStep?.next!==false,showBack:s,backLabel:m,onPrimary:u}):null}function re({field:e,value:r,error:o,loading:t,disabled:a,components:p,onChange:d,onCommit:c,onBlur:i,onFocus:n}){let s=p?.[e.type];return s?jsx(s,{field:e,value:r,error:o,loading:t,disabled:a,onChange:d,onCommit:c,onBlur:i,onFocus:n}):jsxs("div",{children:["Unsupported field type: ",e.type]})}var te=memo(function({engine:r,field:o,options:t,disabled:a,components:p,onChange:d,onCommit:c,onBlur:i,onFocus:n}){let s=useCallback(y=>r.subscribeField(o.key,y),[r,o.key]),m=useCallback(()=>r.getFieldSnapshot(o.key),[r,o.key]);useSyncExternalStore(s,m,m);let u=useCallback(y=>d(o.key,y),[o.key,d]),f=useCallback(y=>c(o.key,y),[o.key,c]),l=useCallback(()=>i(o.key),[o.key,i]),h=useCallback(()=>n(o.key),[o.key,n]),F=t?{...o,options:t}:o;return jsx(re,{field:F,value:r.values[o.key],error:r.errors[o.key],loading:r.fieldLoading[o.key],disabled:a,components:p,onChange:u,onCommit:f,onBlur:l,onFocus:h})});function qe(e,r){return e?.length===r.length&&e.every((o,t)=>o.value===r[t].value&&o.label===r[t].label)}function ne(e,r,o){let[t,a]=useState({}),p=useRef(new Map);return useEffect(()=>{if(!o){a(n=>Object.keys(n).length>0?{}:n);return}let d=true,c=[],i=(n,s)=>{d&&a(m=>qe(m[n],s)?m:{...m,[n]:s});};for(let n of e){if(!n.optionsFrom)continue;let s=o[n.optionsFrom];if(!s)continue;let m=()=>{let u=(p.current.get(n.key)??0)+1;p.current.set(n.key,u);try{let f=s(r.values);if(Array.isArray(f)){i(n.key,f);return}f.then(l=>{p.current.get(n.key)===u&&i(n.key,l);}).catch(()=>{});}catch{}};m();for(let u of new Set(n.optionsDependsOn??[]))c.push(r.subscribeField(u,m));}return ()=>{d=false;for(let n of c)n();}},[r,e,o]),t}var ie=memo(function({engine:r,loading:o,components:t,optionsProviders:a,onChange:p,onCommit:d,onBlur:c,onFocus:i}){B(r),C(r);let n=r.visibleFields,s=ne(n,r,a);return jsx("div",{className:"fh-form__fields",children:n.map(m=>jsx(te,{engine:r,field:m,options:s[m.key]??m.options,disabled:o||r.stepValidating||r.submitting,components:t,onChange:p,onCommit:d,onBlur:c,onFocus:i},m.key))})});function le({engine:e,ProgressComponent:r}){return B(e),!e.isMultiStep||!r?null:jsx(r,{current:e.progress.current,total:e.progress.total,stepTitle:e.currentStep?.title,stepDescription:e.currentStep?.description})}function pe({engine:e}){return C(e),e.topLevelErrors.length===0?null:jsx("div",{className:"fh-form__top-errors",children:e.topLevelErrors.map(r=>jsx("p",{className:"fh-form__top-error",children:r},r))})}function H(e,r,o){let t=useRef(o);t.current=o;let a=useRef(null),p=useRef(e.id);(a.current===null||p.current!==e.id)&&(a.current=new FormEngine(e,r,{validators:o?.validators,get onStepValidate(){return t.current?.onStepValidate},get onBeforeStepChange(){return t.current?.onBeforeStepChange},get onAfterStepChange(){return t.current?.onAfterStepChange},get onBeforeSubmit(){return t.current?.onBeforeSubmit},get onAfterSubmit(){return t.current?.onAfterSubmit}}),p.current=e.id);let d=a.current;return useEffect(()=>()=>d.cancelPendingActions(),[d]),d}function Je(e,r,o){let t=H(e,r,o),a=useCallback(d=>t.subscribe(d),[t]),p=useCallback(()=>t.getSnapshot(),[t]);return useSyncExternalStore(a,p,p),t}function me(e,r){let{loading:o,onError:t,onFieldChange:a,onSubmit:p,onAnalyticsEvent:d}=r,c=useCallback(async f=>{if(!o)try{await f();}catch(l){t?t(l):e.setErrors({_form:l instanceof Error?l.message:"Form action failed"});}},[e,o,t]),i=useCallback(()=>c(()=>e.nextStepAsync()),[c,e]),n=useCallback(()=>c(()=>e.prevStepAsync()),[c,e]),s=useCallback((f,l)=>{o||e.stepValidating||e.submitting||(e.setValue(f,l),a?.(f,l,e.values));},[e,o,a]),m=useCallback((f,l)=>{if(o||e.stepValidating||e.submitting)return;let h=e.currentStep,F=e.visibleFields.find(y=>y.key===f);F&&(s(f,l),F.autoAdvance&&e.currentStep?.id===h?.id&&!e.isLastStep&&c(()=>e.nextStepAsync("autoAdvance")));},[e,o,c,s]),u=useCallback(()=>c(async()=>{if(e.definition.submit.disabled?.every(l=>evaluateCondition(l,e.values))&&e.definition.submit.disabled.length>0)return false;let f=await e.submitAsync(async l=>{d?.({type:"form_submitted",fieldCount:Object.keys(l).length}),await p(l);});if(!f)for(let[l,h]of Object.entries(e.errors))l!=="_form"&&d?.({type:"field_error",fieldKey:l,error:h});return f}),[e,c,p,d]);return {next:i,prev:n,update:s,commit:m,submit:u}}function K(e){let{definition:r,initialValues:o,loading:t=false,components:a,optionsProviders:p,ActionsComponent:d,ProgressComponent:c,onAnalyticsEvent:i}=e,n=useRef(null),s=useRef(false),m=useRef(null),u=useRef(false),f={...e,onAfterStepChange:async v=>{s.current=true,e.onStepChange?.(v.toStepId,v.direction),v.direction==="next"&&(i?.({type:"step_completed",stepId:v.fromStepId}),i?.({type:"step_viewed",stepId:v.toStepId,stepIndex:l.currentStepIndex})),await e.onAfterStepChange?.(v);}},l=H(r,o,f),h=C(l),F=useRef(l.currentStep?.id),y=me(l,e);useEffect(()=>{e.errors&&l.setErrors(e.errors);},[e.errors,l]),useEffect(()=>{if(F.current!==l.currentStep?.id&&(s.current=true),F.current=l.currentStep?.id,l.stepValidating||l.submitting){u.current=true;return}let v=u.current;if(u.current=false,!s.current){let Y=n.current?.ownerDocument;v&&Y?.activeElement===Y?.body&&m.current?.isConnected&&m.current.focus();return}s.current=false,(n.current?.querySelector(".fh-form__fields input:not(:disabled), .fh-form__fields select:not(:disabled), .fh-form__fields textarea:not(:disabled), .fh-form__fields button:not(:disabled)")??n.current)?.focus();},[l,h]);let k=useCallback(v=>{i?.({type:"field_focused",fieldKey:v});},[i]),M=useCallback(v=>{i?.({type:"field_blurred",fieldKey:v,hasValue:l.values[v]!==void 0&&l.values[v]!==""});},[l,i]),L=useCallback(()=>e.onCancel?.(),[e.onCancel]);return jsxs("form",{ref:n,onFocusCapture:v=>{m.current=v.target;},className:"fh-form",tabIndex:-1,"aria-busy":l.stepValidating||l.submitting||t,onSubmit:v=>{v.preventDefault(),l.isLastStep?y.submit():y.next();},children:[jsx(le,{engine:l,ProgressComponent:c}),jsx(ie,{engine:l,loading:t,components:a,optionsProviders:p,onChange:y.update,onCommit:y.commit,onBlur:M,onFocus:k},r.id),jsx(pe,{engine:l}),jsx(oe,{engine:l,definition:r,loading:t,ActionsComponent:d,onSubmit:y.submit,onNext:y.next,onPrev:y.prev,onCancel:L})]})}function g({field:e,inputId:r}){return e.label?jsxs("label",{className:"fh-field__label",htmlFor:r,children:[e.label,e.validation?.required&&jsx("span",{className:"fh-field__required","aria-hidden":"true",children:" *"})]}):null}function b({error:e,helperText:r,errorId:o,helperId:t}){return e?jsx("p",{id:o,className:"fh-field__error",role:"alert",children:e}):r?jsx("p",{id:t,className:"fh-field__helper",children:r}):null}function fe({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-list`,s=`${e.key}-helper`,m=`${e.key}-error`,u=o?m:e.helperText?s:void 0,f=e.options??[];return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsx("input",{id:i,type:"text",list:n,className:"fh-field__input fh-field__input--autocomplete",value:r??"",placeholder:e.placeholder,disabled:a||t,"aria-invalid":!!o,"aria-describedby":u,autoComplete:"off",onChange:l=>p(l.target.value),onBlur:d,onFocus:c}),jsx("datalist",{id:n,children:f.map(l=>jsx("option",{value:l.value,children:l.label},l.value))}),jsx(b,{error:o,helperText:e.helperText,errorId:m,helperId:s})]})}function Fe({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0;return jsxs("div",{className:"fh-field fh-field--checkbox",children:[jsxs("div",{className:"fh-field__checkbox-wrapper",children:[jsx("input",{id:i,type:"checkbox",className:"fh-field__checkbox",checked:!!r,disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u=>p(u.target.checked),onBlur:d,onFocus:c}),e.label&&jsx("label",{className:"fh-field__label",htmlFor:i,children:e.label})]}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function ye({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0;return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsx("input",{id:i,type:"date",className:"fh-field__input fh-field__input--date",value:String(r??""),disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u=>p(u.target.value),onBlur:d,onFocus:c}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function be({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0;return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsx("input",{id:i,type:"datetime-local",className:"fh-field__input fh-field__input--datetime",value:String(r??""),disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u=>p(u.target.value),onBlur:d,onFocus:c}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function ve({field:e,error:r,loading:o,disabled:t,onChange:a,onBlur:p,onFocus:d}){let c=e.key,i=`${e.key}-helper`,n=`${e.key}-error`,s=r?n:e.helperText?i:void 0;return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:c}),jsx("input",{id:c,type:"file",className:"fh-field__input fh-field__input--file",accept:e.accept,disabled:t||o,"aria-invalid":!!r,"aria-describedby":s,onChange:m=>{let u=m.target.files;a(u&&u.length>0?u[0]:null);},onBlur:p,onFocus:d}),jsx(b,{error:r,helperText:e.helperText,errorId:n,helperId:i})]})}function ke({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0,u=e.options??[],f=Array.isArray(r)?r:[];function l(h){let F=f.includes(h)?f.filter(y=>y!==h):[...f,h];p(F);}return jsxs("fieldset",{className:"fh-field fh-field--multiselect","aria-invalid":!!o||void 0,"aria-describedby":m,children:[e.label&&jsx("legend",{className:"fh-field__label",children:e.label}),jsx("div",{className:"fh-field__multiselect-group",children:u.map(h=>{let F=`${i}-${h.value}`;return jsxs("div",{className:"fh-field__multiselect-option",children:[jsx("input",{id:F,type:"checkbox",className:"fh-field__checkbox",checked:f.includes(h.value),disabled:a||t,onChange:()=>l(h.value),onBlur:d,onFocus:c}),jsx("label",{className:"fh-field__multiselect-label",htmlFor:F,children:h.label})]},h.value)})}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function _e({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onCommit:d,onBlur:c,onFocus:i}){let n=useRef(false),s=e.autoAdvance&&d,m=e.key,u=`${e.key}-helper`,f=`${e.key}-error`,l=o?f:e.helperText?u:void 0,h=e.options??[];return jsxs("fieldset",{className:"fh-field fh-field--radio","aria-invalid":!!o||void 0,"aria-describedby":l,children:[e.label&&jsx("legend",{className:"fh-field__label",children:e.label}),jsx("div",{className:"fh-field__radio-group",children:h.map(F=>{let y=`${m}-${F.value}`;return jsxs("div",{className:"fh-field__radio-option",children:[jsx("input",{id:y,type:"radio",className:"fh-field__radio",name:m,value:F.value,checked:String(r)===String(F.value),disabled:a||t,onChange:()=>{(!s||n.current)&&p(F.value);},onKeyDown:k=>{n.current=k.key.startsWith("Arrow"),s&&k.key===" "&&k.preventDefault(),s&&k.key==="Enter"&&(k.preventDefault(),k.repeat||s(F.value));},onKeyUp:k=>{n.current=false,s&&k.key===" "&&(k.preventDefault(),s(F.value));},onPointerDown:()=>{n.current=false;},onClick:()=>{s&&!n.current&&s(F.value);},onBlur:c,onFocus:i}),jsx("label",{className:"fh-field__radio-label",htmlFor:y,children:F.label})]},F.value)})}),jsx(b,{error:o,helperText:e.helperText,errorId:f,helperId:u})]})}function Pe({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0,u=e.options??[];return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsxs("select",{id:i,className:"fh-field__input fh-field__input--select",value:r??"",disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:f=>p(f.target.value),onBlur:d,onFocus:c,children:[e.placeholder&&jsx("option",{value:"",disabled:true,children:e.placeholder}),u.map(f=>jsx("option",{value:f.value,children:f.label},f.value))]}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function Ie({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0;return jsxs("div",{className:"fh-field fh-field--switch",children:[jsxs("div",{className:"fh-field__switch-wrapper",children:[jsx("input",{id:i,type:"checkbox",role:"switch",className:"fh-field__switch",checked:!!r,disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u=>p(u.target.checked),onBlur:d,onFocus:c}),e.label&&jsx("label",{className:"fh-field__label",htmlFor:i,children:e.label})]}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}function P({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0,u=l=>{let h=l.target.value;p(e.type==="number"&&h!==""?Number(h):h);},f=e.type==="email"?"email":e.type==="phone"?"tel":e.type==="number"?"number":e.type==="password"?"password":"text";return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsx("input",{id:i,type:f,className:"fh-field__input",value:r!=null?String(r):"",placeholder:e.placeholder??e.mask,disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u,onBlur:d,onFocus:c}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}var so=3;function Ne({field:e,value:r,error:o,loading:t,disabled:a,onChange:p,onBlur:d,onFocus:c}){let i=e.key,n=`${e.key}-helper`,s=`${e.key}-error`,m=o?s:e.helperText?n:void 0;return jsxs("div",{className:"fh-field",children:[jsx(g,{field:e,inputId:i}),jsx("textarea",{id:i,className:"fh-field__input fh-field__input--textarea",value:r??"",placeholder:e.placeholder,rows:e.rows??so,disabled:a||t,"aria-invalid":!!o,"aria-describedby":m,onChange:u=>p(u.target.value),onBlur:d,onFocus:c}),jsx(b,{error:o,helperText:e.helperText,errorId:s,helperId:n})]})}var lo={text:P,email:P,phone:P,number:P,password:P,select:Pe,autocomplete:fe,multiselect:ke,checkbox:Fe,radio:_e,switch:Ie,file:ve,date:ye,datetime:be,textarea:Ne};function Te(e){let r={...lo};for(let[o,t]of Object.entries(e??{}))t&&(r[o]=t);return r}function po({components:e,ActionsComponent:r,ProgressComponent:o,...t}){let a=useMemo(()=>Te(e),[e]);return jsx(K,{...t,components:a,ActionsComponent:r??$,ProgressComponent:o??D})}export{$ as FormActions,po as FormRenderer,D as FormStepProgress,K as HeadlessFormRenderer,Je as useFormEngine};//# sourceMappingURL=index.js.map
|
|
1
|
+
import {memo,useCallback,useSyncExternalStore,useState,useRef,useEffect,useMemo}from'react';import {shouldApplyExternalErrors,evaluateCondition,FormEngine}from'@formhaus/core';import {jsx,jsxs}from'react/jsx-runtime';function Ae(e,o,r){return r?true:!e?.disabled||e.disabled.length===0?false:e.disabled.every(n=>evaluateCondition(n,o))}function D({submitAction:e,backAction:o,cancelAction:r,isFirstStep:n,isLastStep:l,isMultiStep:a,loading:p,showPrimary:u=true,values:i={},onSubmit:t,onNext:s,onPrev:d,onCancel:m,primaryLabel:F,showBack:c,backLabel:y,onPrimary:h}){let f=c??(a&&!n&&o!==false),b=y??(typeof o=="object"?o?.label??"Back":"Back"),_=F??(a&&!l?"Continue":e?.label??"Submit"),E=Ae(a&&!l?void 0:e,i,p);function O(){h?h():a&&!l?s():t();}return jsxs("div",{className:"fh-form-actions",children:[jsxs("div",{className:"fh-form-actions__secondary",children:[f&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--text",disabled:p,onClick:d,children:b}),r&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--text",disabled:p,onClick:m,children:r.label})]}),u&&jsx("button",{type:"button",className:"fh-form-actions__button fh-form-actions__button--primary",disabled:E,"aria-busy":p,onClick:O,children:_})]})}function V({current:e,total:o,stepTitle:r,stepDescription:n}){let l=e/o*100;return jsxs("div",{className:"fh-step-progress",children:[jsx("div",{className:"fh-step-progress__bar",children:jsx("div",{className:"fh-step-progress__fill",style:{width:`${l}%`}})}),jsx("div",{className:"fh-step-progress__info",children:jsxs("span",{className:"fh-step-progress__counter",children:["Step ",e," of ",o]})}),r&&jsx("h3",{className:"fh-step-progress__title",children:r}),n&&jsx("p",{className:"fh-step-progress__description",children:n})]})}function C(e){let o=useCallback(n=>e.subscribe(n),[e]),r=useCallback(()=>e.getSnapshot(),[e]);return useSyncExternalStore(o,r,r)}function R(e){let o=useCallback(n=>e.subscribeStructure(n),[e]),r=useCallback(()=>e.getStructureSnapshot(),[e]);return useSyncExternalStore(o,r,r)}function oe({engine:e,definition:o,loading:r,ActionsComponent:n,onSubmit:l,onNext:a,onPrev:p,onCancel:u}){C(e);let i=e.isLastStep||!e.isMultiStep,t=e.isMultiStep&&!i?typeof e.currentStep?.next=="object"?e.currentStep.next.label??"Continue":"Continue":o.submit?.label??"Submit",s=e.isMultiStep&&!e.isFirstStep&&e.currentStep?.back!==false,d=typeof e.currentStep?.back=="object"?e.currentStep.back.label??"Back":"Back",m=useCallback(async()=>{e.isMultiStep&&!i?await a():l();},[e,i,a,l]);return n?jsx(n,{submitAction:o.submit,backAction:e.currentStep?.back,cancelAction:o.cancel,isFirstStep:e.isFirstStep,isLastStep:i,isMultiStep:e.isMultiStep,loading:r||e.stepValidating||e.submitting,values:e.values,onSubmit:l,onNext:a,onPrev:p,onCancel:u,primaryLabel:t,showPrimary:i||e.currentStep?.next!==false,showBack:s,backLabel:d,onPrimary:m}):null}function te({field:e,value:o,error:r,loading:n,disabled:l,components:a,onChange:p,onCommit:u,onBlur:i,onFocus:t}){let s=a?.[e.type];return s?jsx(s,{field:e,value:o,error:r,loading:n,disabled:l,onChange:p,onCommit:u,onBlur:i,onFocus:t}):jsxs("div",{children:["Unsupported field type: ",e.type]})}var ne=memo(function({engine:o,field:r,options:n,disabled:l,components:a,onChange:p,onCommit:u,onBlur:i,onFocus:t}){let s=useCallback(f=>o.subscribeField(r.key,f),[o,r.key]),d=useCallback(()=>o.getFieldSnapshot(r.key),[o,r.key]);useSyncExternalStore(s,d,d);let m=useCallback(f=>p(r.key,f),[r.key,p]),F=useCallback(f=>u(r.key,f),[r.key,u]),c=useCallback(()=>i(r.key),[r.key,i]),y=useCallback(()=>t(r.key),[r.key,t]),h=n?{...r,options:n}:r;return jsx(te,{field:h,value:o.values[r.key],error:o.errors[r.key],loading:o.fieldLoading[r.key],disabled:l,components:a,onChange:m,onCommit:F,onBlur:c,onFocus:y})});function Ke(e,o){return e?.length===o.length&&e.every((r,n)=>r.value===o[n].value&&r.label===o[n].label)}function se(e,o,r){let[n,l]=useState({}),a=useRef(new Map);return useEffect(()=>{if(!r){l(t=>Object.keys(t).length>0?{}:t);return}let p=true,u=[],i=(t,s)=>{p&&l(d=>Ke(d[t],s)?d:{...d,[t]:s});};for(let t of e){if(!t.optionsFrom)continue;let s=r[t.optionsFrom];if(!s)continue;let d=()=>{let m=(a.current.get(t.key)??0)+1;a.current.set(t.key,m);try{let F=s(o.values);if(Array.isArray(F)){i(t.key,F);return}F.then(c=>{a.current.get(t.key)===m&&i(t.key,c);}).catch(()=>{});}catch{}};d();for(let m of new Set(t.optionsDependsOn??[]))u.push(o.subscribeField(m,d));}return ()=>{p=false;for(let t of u)t();}},[o,e,r]),n}var le=memo(function({engine:o,loading:r,components:n,optionsProviders:l,onChange:a,onCommit:p,onBlur:u,onFocus:i}){R(o),C(o);let t=o.visibleFields,s=se(t,o,l);return jsx("div",{className:"fh-form__fields",children:t.map(d=>jsx(ne,{engine:o,field:d,options:s[d.key]??d.options,disabled:r||o.stepValidating||o.submitting,components:n,onChange:a,onCommit:p,onBlur:u,onFocus:i},d.key))})});function ae({engine:e,ProgressComponent:o}){return R(e),!e.isMultiStep||!o?null:jsx(o,{current:e.progress.current,total:e.progress.total,stepTitle:e.currentStep?.title,stepDescription:e.currentStep?.description})}function de({engine:e,actionError:o}){C(e);let r=o?[...e.topLevelErrors,o]:e.topLevelErrors;return r.length===0?null:jsx("div",{className:"fh-form__top-errors",children:r.map((n,l)=>jsx("p",{className:"fh-form__top-error",children:n},l))})}function q(e,o,r){let n=useRef(r);n.current=r;let l=useRef(null),a=useRef(e.id);(l.current===null||a.current!==e.id)&&(l.current=new FormEngine(e,o,{validators:r?.validators,get onStepValidate(){return n.current?.onStepValidate},get onBeforeStepChange(){return n.current?.onBeforeStepChange},get onAfterStepChange(){return n.current?.onAfterStepChange},get onBeforeSubmit(){return n.current?.onBeforeSubmit},get onAfterSubmit(){return n.current?.onAfterSubmit}}),a.current=e.id);let p=l.current;return useEffect(()=>()=>p.cancelPendingActions(),[p]),p}function Qe(e,o,r){let n=q(e,o,r),l=useCallback(p=>n.subscribe(p),[n]),a=useCallback(()=>n.getSnapshot(),[n]);return useSyncExternalStore(l,a,a),n}function me(e,o){let{loading:r,onError:n,onFieldChange:l,onSubmit:a,onAnalyticsEvent:p}=o,[u,i]=useState(null),t=useCallback(async h=>{if(!r){i(null);try{await h();}catch(f){n?n(f):i({engine:e,message:f instanceof Error?f.message:"Form action failed"});}}},[e,r,n]),s=useCallback(()=>t(()=>e.nextStepAsync()),[t,e]),d=useCallback(()=>t(()=>e.prevStepAsync()),[t,e]),m=useCallback((h,f)=>{r||e.stepValidating||e.submitting||(e.setValue(h,f),l?.(h,f,e.values));},[e,r,l]),F=useCallback((h,f)=>{if(r||e.stepValidating||e.submitting)return;let b=e.currentStep,_=e.visibleFields.find(E=>E.key===h);_&&(m(h,f),_.autoAdvance&&e.currentStep?.id===b?.id&&!e.isLastStep&&t(()=>e.nextStepAsync("autoAdvance")));},[e,r,t,m]),c=useCallback(()=>t(async()=>{if(e.definition.submit.disabled?.every(f=>evaluateCondition(f,e.values))&&e.definition.submit.disabled.length>0)return false;let h=await e.submitAsync(async f=>{p?.({type:"form_submitted",fieldCount:Object.keys(f).length}),await a(f);});if(!h)for(let[f,b]of Object.entries(e.errors))p?.({type:"field_error",fieldKey:f,error:b});return h}),[e,t,a,p]),y=u?.engine===e?u.message:null;return {next:s,prev:d,update:m,commit:F,submit:c,actionError:y}}function U(e){let{definition:o,initialValues:r,loading:n=false,components:l,optionsProviders:a,ActionsComponent:p,ProgressComponent:u,onAnalyticsEvent:i}=e,t=useRef(null),s=useRef(false),d=useRef(null),m=useRef(false),F={...e,onAfterStepChange:async g=>{s.current=true,e.onStepChange?.(g.toStepId,g.direction),g.direction==="next"&&(i?.({type:"step_completed",stepId:g.fromStepId}),i?.({type:"step_viewed",stepId:g.toStepId,stepIndex:c.currentStepIndex})),await e.onAfterStepChange?.(g);}},c=q(o,r,F),y=C(c),h=useRef(c.currentStep?.id),f=me(c,e),b=useRef(null);useEffect(()=>{if(!e.errors)return;let g=b.current?.engine===c?b.current.errors:void 0;shouldApplyExternalErrors(c,g,e.errors)&&(b.current={engine:c,errors:e.errors},c.setErrors(e.errors));},[e.errors,c]),useEffect(()=>{if(h.current!==c.currentStep?.id&&(s.current=true),h.current=c.currentStep?.id,c.stepValidating||c.submitting){m.current=true;return}let g=m.current;if(m.current=false,!s.current){let Z=t.current?.ownerDocument;g&&Z?.activeElement===Z?.body&&d.current?.isConnected&&d.current.focus();return}s.current=false,(t.current?.querySelector(".fh-form__fields input:not(:disabled), .fh-form__fields select:not(:disabled), .fh-form__fields textarea:not(:disabled), .fh-form__fields button:not(:disabled)")??t.current)?.focus();},[c,y]);let _=useCallback(g=>{i?.({type:"field_focused",fieldKey:g});},[i]),E=useCallback(g=>{i?.({type:"field_blurred",fieldKey:g,hasValue:c.values[g]!==void 0&&c.values[g]!==""});},[c,i]),O=useCallback(()=>e.onCancel?.(),[e.onCancel]);return jsxs("form",{ref:t,onFocusCapture:g=>{d.current=g.target;},className:"fh-form",tabIndex:-1,"aria-busy":c.stepValidating||c.submitting||n,onSubmit:g=>{g.preventDefault(),c.isLastStep?f.submit():f.next();},children:[jsx(ae,{engine:c,ProgressComponent:u}),jsx(le,{engine:c,loading:n,components:l,optionsProviders:a,onChange:f.update,onCommit:f.commit,onBlur:E,onFocus:_},o.id),jsx(de,{engine:c,actionError:f.actionError}),jsx(oe,{engine:c,definition:o,loading:n,ActionsComponent:p,onSubmit:f.submit,onNext:f.next,onPrev:f.prev,onCancel:O})]})}function k({field:e,inputId:o}){return e.label?jsxs("label",{className:"fh-field__label",htmlFor:o,children:[e.label,e.validation?.required&&jsx("span",{className:"fh-field__required","aria-hidden":"true",children:" *"})]}):null}function v({error:e,helperText:o,errorId:r,helperId:n}){return e?jsx("p",{id:r,className:"fh-field__error",role:"alert",children:e}):o?jsx("p",{id:n,className:"fh-field__helper",children:o}):null}function he({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-list`,s=`${e.key}-helper`,d=`${e.key}-error`,m=r?d:e.helperText?s:void 0,F=e.options??[];return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsx("input",{id:i,type:"text",list:t,className:"fh-field__input fh-field__input--autocomplete",value:o??"",placeholder:e.placeholder,disabled:l||n,"aria-invalid":!!r,"aria-describedby":m,autoComplete:"off",onChange:c=>a(c.target.value),onBlur:p,onFocus:u}),jsx("datalist",{id:t,children:F.map(c=>jsx("option",{value:c.value,children:c.label},c.value))}),jsx(v,{error:r,helperText:e.helperText,errorId:d,helperId:s})]})}function ye({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0;return jsxs("div",{className:"fh-field fh-field--checkbox",children:[jsxs("div",{className:"fh-field__checkbox-wrapper",children:[jsx("input",{id:i,type:"checkbox",className:"fh-field__checkbox",checked:!!o,disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m=>a(m.target.checked),onBlur:p,onFocus:u}),e.label&&jsx("label",{className:"fh-field__label",htmlFor:i,children:e.label})]}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function be({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0;return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsx("input",{id:i,type:"date",className:"fh-field__input fh-field__input--date",value:String(o??""),disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m=>a(m.target.value),onBlur:p,onFocus:u}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function ve({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0;return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsx("input",{id:i,type:"datetime-local",className:"fh-field__input fh-field__input--datetime",value:String(o??""),disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m=>a(m.target.value),onBlur:p,onFocus:u}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function ge({field:e,error:o,loading:r,disabled:n,onChange:l,onBlur:a,onFocus:p}){let u=e.key,i=`${e.key}-helper`,t=`${e.key}-error`,s=o?t:e.helperText?i:void 0;return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:u}),jsx("input",{id:u,type:"file",className:"fh-field__input fh-field__input--file",accept:e.accept,disabled:n||r,"aria-invalid":!!o,"aria-describedby":s,onChange:d=>{let m=d.target.files;l(m&&m.length>0?m[0]:null);},onBlur:a,onFocus:p}),jsx(v,{error:o,helperText:e.helperText,errorId:t,helperId:i})]})}function Ce({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0,m=e.options??[],F=Array.isArray(o)?o:[];function c(y){let h=F.includes(y)?F.filter(f=>f!==y):[...F,y];a(h);}return jsxs("fieldset",{className:"fh-field fh-field--multiselect","aria-invalid":!!r||void 0,"aria-describedby":d,children:[e.label&&jsx("legend",{className:"fh-field__label",children:e.label}),jsx("div",{className:"fh-field__multiselect-group",children:m.map(y=>{let h=`${i}-${y.value}`;return jsxs("div",{className:"fh-field__multiselect-option",children:[jsx("input",{id:h,type:"checkbox",className:"fh-field__checkbox",checked:F.includes(y.value),disabled:l||n,onChange:()=>c(y.value),onBlur:p,onFocus:u}),jsx("label",{className:"fh-field__multiselect-label",htmlFor:h,children:y.label})]},y.value)})}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function Se({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onCommit:p,onBlur:u,onFocus:i}){let t=useRef(false),s=e.autoAdvance&&p,d=e.key,m=`${e.key}-helper`,F=`${e.key}-error`,c=r?F:e.helperText?m:void 0,y=e.options??[];return jsxs("fieldset",{className:"fh-field fh-field--radio","aria-invalid":!!r||void 0,"aria-describedby":c,children:[e.label&&jsx("legend",{className:"fh-field__label",children:e.label}),jsx("div",{className:"fh-field__radio-group",children:y.map(h=>{let f=`${d}-${h.value}`;return jsxs("div",{className:"fh-field__radio-option",children:[jsx("input",{id:f,type:"radio",className:"fh-field__radio",name:d,value:h.value,checked:String(o)===String(h.value),disabled:l||n,onChange:()=>{(!s||t.current)&&a(h.value);},onKeyDown:b=>{t.current=b.key.startsWith("Arrow"),s&&b.key===" "&&b.preventDefault(),s&&b.key==="Enter"&&(b.preventDefault(),b.repeat||s(h.value));},onKeyUp:b=>{t.current=false,s&&b.key===" "&&(b.preventDefault(),s(h.value));},onPointerDown:()=>{t.current=false;},onClick:b=>{!s||t.current||(b.detail>1?b.preventDefault():s(h.value));},onBlur:u,onFocus:i}),jsx("label",{className:"fh-field__radio-label",htmlFor:f,children:h.label})]},h.value)})}),jsx(v,{error:r,helperText:e.helperText,errorId:F,helperId:m})]})}function xe({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0,m=e.options??[];return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsxs("select",{id:i,className:"fh-field__input fh-field__input--select",value:o??"",disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:F=>a(F.target.value),onBlur:p,onFocus:u,children:[e.placeholder&&jsx("option",{value:"",disabled:true,children:e.placeholder}),m.map(F=>jsx("option",{value:F.value,children:F.label},F.value))]}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function Ee({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0;return jsxs("div",{className:"fh-field fh-field--switch",children:[jsxs("div",{className:"fh-field__switch-wrapper",children:[jsx("input",{id:i,type:"checkbox",role:"switch",className:"fh-field__switch",checked:!!o,disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m=>a(m.target.checked),onBlur:p,onFocus:u}),e.label&&jsx("label",{className:"fh-field__label",htmlFor:i,children:e.label})]}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}function I({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0,m=c=>{let y=c.target.value;a(e.type==="number"&&y!==""?Number(y):y);},F=e.type==="email"?"email":e.type==="phone"?"tel":e.type==="number"?"number":e.type==="password"?"password":"text";return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsx("input",{id:i,type:F,className:"fh-field__input",value:o!=null?String(o):"",placeholder:e.placeholder??e.mask,disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m,onBlur:p,onFocus:u}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}var ar=3;function Ne({field:e,value:o,error:r,loading:n,disabled:l,onChange:a,onBlur:p,onFocus:u}){let i=e.key,t=`${e.key}-helper`,s=`${e.key}-error`,d=r?s:e.helperText?t:void 0;return jsxs("div",{className:"fh-field",children:[jsx(k,{field:e,inputId:i}),jsx("textarea",{id:i,className:"fh-field__input fh-field__input--textarea",value:o??"",placeholder:e.placeholder,rows:e.rows??ar,disabled:l||n,"aria-invalid":!!r,"aria-describedby":d,onChange:m=>a(m.target.value),onBlur:p,onFocus:u}),jsx(v,{error:r,helperText:e.helperText,errorId:s,helperId:t})]})}var dr={text:I,email:I,phone:I,number:I,password:I,select:xe,autocomplete:he,multiselect:Ce,checkbox:ye,radio:Se,switch:Ee,file:ge,date:be,datetime:ve,textarea:Ne};function Te(e){let o={...dr};for(let[r,n]of Object.entries(e??{}))n&&(o[r]=n);return o}function mr({components:e,ActionsComponent:o,ProgressComponent:r,...n}){let l=useMemo(()=>Te(e),[e]);return jsx(U,{...n,components:l,ActionsComponent:o??D,ProgressComponent:r??V})}export{D as FormActions,mr as FormRenderer,V as FormStepProgress,U as HeadlessFormRenderer,Qe as useFormEngine};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FormActions.tsx","../src/FormStepProgress.tsx","../src/hooks/useEngineSnapshot.ts","../src/FormActionsController.tsx","../src/FormField.tsx","../src/FormFieldController.tsx","../src/hooks/useFieldOptions.ts","../src/FormFieldsController.tsx","../src/FormProgressController.tsx","../src/FormTopLevelErrors.tsx","../src/hooks/useFormEngine.ts","../src/hooks/useRendererActions.ts","../src/HeadlessFormRenderer.tsx","../src/fields/FieldLabel.tsx","../src/fields/FieldMessage.tsx","../src/fields/AutocompleteField.tsx","../src/fields/CheckboxField.tsx","../src/fields/DateField.tsx","../src/fields/DateTimeField.tsx","../src/fields/FileField.tsx","../src/fields/MultiselectField.tsx","../src/fields/RadioField.tsx","../src/fields/SelectField.tsx","../src/fields/SwitchField.tsx","../src/fields/TextField.tsx","../src/fields/TextareaField.tsx","../src/defaultFieldComponents.ts","../src/FormRenderer.tsx"],"names":["isActionDisabled","action","values","loading","c","evaluateCondition","FormActions","submitAction","backAction","cancelAction","isFirstStep","isLastStep","isMultiStep","showPrimary","onSubmit","onNext","onPrev","onCancel","primaryLabelProp","showBackProp","backLabelProp","onPrimaryProp","showBack","backLabel","primaryLabel","primaryDisabled","handlePrimary","jsxs","jsx","FormStepProgress","current","total","stepTitle","stepDescription","percent","useFormSnapshot","engine","subscribe","useCallback","listener","getSnapshot","useSyncExternalStore","useStructureSnapshot","FormActionsController","definition","ActionsComponent","FormField","field","value","error","disabled","components","onChange","onCommit","onBlur","onFocus","Component","FormFieldController","memo","options","handleChange","handleCommit","handleBlur","handleFocus","fieldWithOptions","areOptionsEqual","previous","next","option","index","useFieldOptions","fields","providers","resolved","setResolved","useState","requestVersions","useRef","useEffect","active","unsubscribers","commit","fieldKey","provider","resolve","requestVersion","result","dependency","unsubscribe","FormFieldsController","optionsProviders","resolvedOptions","FormProgressController","ProgressComponent","FormTopLevelErrors","useFormEngineStore","initialValues","optionsRef","engineRef","definitionIdRef","FormEngine","useFormEngine","useRendererActions","props","onError","onFieldChange","onAnalyticsEvent","run","prev","update","key","step","submit","condition","HeadlessFormRenderer","formRef","focusPending","focusReturn","wasBusy","engineOptions","context","version","previousStep","actions","restore","document","handleFieldFocus","handleFieldBlur","handleCancel","event","FieldLabel","inputId","FieldMessage","helperText","errorId","helperId","AutocompleteField","listId","describedBy","e","opt","CheckboxField","DateField","DateTimeField","FileField","files","MultiselectField","groupId","selected","handleToggle","optValue","v","optionId","RadioField","arrowSelection","SelectField","SwitchField","TextField","inputType","DEFAULT_ROWS","TextareaField","defaultFieldComponents","withDefaultFields","merged","type","component","FormRenderer","fieldComponents","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { evaluateCondition } from '@formhaus/core';\nimport type { FormAction } from '@formhaus/core';\nimport type { FormActionsProps } from './types';\n\nfunction isActionDisabled(\n action: FormAction | undefined,\n values: Record<string, unknown>,\n loading?: boolean,\n): boolean {\n if (loading) return true;\n if (!action?.disabled || action.disabled.length === 0) return false;\n return action.disabled.every((c) => evaluateCondition(c, values));\n}\n\nexport function FormActions({\n submitAction,\n backAction,\n cancelAction,\n isFirstStep,\n isLastStep,\n isMultiStep,\n loading,\n showPrimary = true,\n values = {},\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n primaryLabel: primaryLabelProp,\n showBack: showBackProp,\n backLabel: backLabelProp,\n onPrimary: onPrimaryProp,\n}: FormActionsProps) {\n const showBack = showBackProp ?? (isMultiStep && !isFirstStep && backAction !== false);\n const backLabel = backLabelProp ?? (typeof backAction === 'object' ? (backAction?.label ?? 'Back') : 'Back');\n const primaryLabel = primaryLabelProp ?? (isMultiStep && !isLastStep ? 'Continue' : (submitAction?.label ?? 'Submit'));\n\n const primaryDisabled = isActionDisabled(\n isMultiStep && !isLastStep ? undefined : submitAction,\n values,\n loading,\n );\n\n function handlePrimary() {\n if (onPrimaryProp) {\n onPrimaryProp();\n } else if (isMultiStep && !isLastStep) {\n onNext();\n } else {\n onSubmit();\n }\n }\n\n return (\n <div className=\"fh-form-actions\">\n <div className=\"fh-form-actions__secondary\">\n {showBack && (\n <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--text\"\n disabled={loading}\n onClick={onPrev}\n >\n {backLabel}\n </button>\n )}\n {cancelAction && (\n <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--text\"\n disabled={loading}\n onClick={onCancel}\n >\n {cancelAction.label}\n </button>\n )}\n </div>\n {showPrimary && <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--primary\"\n disabled={primaryDisabled}\n aria-busy={loading}\n onClick={handlePrimary}\n >\n {primaryLabel}\n </button>}\n </div>\n );\n}\n","import type { FormStepProgressProps } from './types';\n\nexport function FormStepProgress({\n current,\n total,\n stepTitle,\n stepDescription,\n}: FormStepProgressProps) {\n const percent = (current / total) * 100;\n\n return (\n <div className=\"fh-step-progress\">\n <div className=\"fh-step-progress__bar\">\n <div className=\"fh-step-progress__fill\" style={{ width: `${percent}%` }} />\n </div>\n <div className=\"fh-step-progress__info\">\n <span className=\"fh-step-progress__counter\">\n Step {current} of {total}\n </span>\n </div>\n {stepTitle && <h3 className=\"fh-step-progress__title\">{stepTitle}</h3>}\n {stepDescription && <p className=\"fh-step-progress__description\">{stepDescription}</p>}\n </div>\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useCallback, useSyncExternalStore } from 'react';\n\nexport function useFormSnapshot(engine: FormEngine): number {\n const subscribe = useCallback((listener: () => void) => engine.subscribe(listener), [engine]);\n const getSnapshot = useCallback(() => engine.getSnapshot(), [engine]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport function useStructureSnapshot(engine: FormEngine): number {\n const subscribe = useCallback(\n (listener: () => void) => engine.subscribeStructure(listener),\n [engine],\n );\n const getSnapshot = useCallback(() => engine.getStructureSnapshot(), [engine]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useCallback } from 'react';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormActionsControllerProps {\n engine: FormEngine;\n definition: FormRendererProps['definition'];\n loading: boolean;\n ActionsComponent: FormRendererProps['ActionsComponent'];\n onSubmit: () => void;\n onNext: () => Promise<void>;\n onPrev: () => void;\n onCancel: () => void;\n}\n\nexport function FormActionsController({\n engine,\n definition,\n loading,\n ActionsComponent,\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n}: FormActionsControllerProps) {\n useFormSnapshot(engine);\n const isLastStep = engine.isLastStep || !engine.isMultiStep;\n const primaryLabel = engine.isMultiStep && !isLastStep\n ? (typeof engine.currentStep?.next === 'object' ? engine.currentStep.next.label ?? 'Continue' : 'Continue')\n : (definition.submit?.label ?? 'Submit');\n const showBack = engine.isMultiStep && !engine.isFirstStep && engine.currentStep?.back !== false;\n const backLabel = typeof engine.currentStep?.back === 'object'\n ? (engine.currentStep.back.label ?? 'Back')\n : 'Back';\n const handlePrimary = useCallback(async () => {\n if (engine.isMultiStep && !isLastStep) await onNext();\n else onSubmit();\n }, [engine, isLastStep, onNext, onSubmit]);\n\n if (!ActionsComponent) return null;\n\n return (\n <ActionsComponent\n submitAction={definition.submit}\n backAction={engine.currentStep?.back}\n cancelAction={definition.cancel}\n isFirstStep={engine.isFirstStep}\n isLastStep={isLastStep}\n isMultiStep={engine.isMultiStep}\n loading={loading || engine.stepValidating || engine.submitting}\n values={engine.values}\n onSubmit={onSubmit}\n onNext={onNext}\n onPrev={onPrev}\n onCancel={onCancel}\n primaryLabel={primaryLabel}\n showPrimary={isLastStep || engine.currentStep?.next !== false}\n showBack={showBack}\n backLabel={backLabel}\n onPrimary={handlePrimary}\n />\n );\n}\n","import type { FormField as FormFieldType } from '@formhaus/core';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\ninterface FormFieldProps {\n field: FormFieldType;\n value: unknown;\n error?: string;\n loading?: boolean;\n disabled?: boolean;\n components?: FieldComponentMap;\n onChange: (value: unknown) => void;\n onCommit?: (value: unknown) => void;\n onBlur: () => void;\n onFocus?: () => void;\n}\n\nexport function FormField({\n field,\n value,\n error,\n loading,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldProps) {\n const Component = components?.[field.type];\n\n if (!Component) {\n return <div>Unsupported field type: {field.type}</div>;\n }\n\n return (\n <Component\n field={field}\n value={value}\n error={error}\n loading={loading}\n disabled={disabled}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n );\n}\n","import type { FieldOption, FormEngine, FormField as FormFieldType } from '@formhaus/core';\nimport { memo, useCallback, useSyncExternalStore } from 'react';\nimport { FormField } from './FormField';\nimport type { FieldComponentMap } from './types';\n\ninterface FormFieldControllerProps {\n engine: FormEngine;\n field: FormFieldType;\n options?: FieldOption[];\n disabled?: boolean;\n components?: FieldComponentMap;\n onChange: (key: string, value: unknown) => void;\n onCommit: (key: string, value: unknown) => void;\n onBlur: (key: string) => void;\n onFocus: (key: string) => void;\n}\n\nexport const FormFieldController = memo(function FormFieldController({\n engine,\n field,\n options,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldControllerProps) {\n const subscribe = useCallback(\n (listener: () => void) => engine.subscribeField(field.key, listener),\n [engine, field.key],\n );\n const getSnapshot = useCallback(\n () => engine.getFieldSnapshot(field.key),\n [engine, field.key],\n );\n\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const handleChange = useCallback(\n (value: unknown) => onChange(field.key, value),\n [field.key, onChange],\n );\n const handleCommit = useCallback((value: unknown) => onCommit(field.key, value), [field.key, onCommit]);\n const handleBlur = useCallback(() => onBlur(field.key), [field.key, onBlur]);\n const handleFocus = useCallback(() => onFocus(field.key), [field.key, onFocus]);\n const fieldWithOptions = options ? { ...field, options } : field;\n\n return (\n <FormField\n field={fieldWithOptions}\n value={engine.values[field.key]}\n error={engine.errors[field.key]}\n loading={engine.fieldLoading[field.key]}\n disabled={disabled}\n components={components}\n onChange={handleChange}\n onCommit={handleCommit}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n});\n","import type { FieldOption, FormEngine, FormField } from '@formhaus/core';\nimport { useEffect, useRef, useState } from 'react';\nimport type { OptionsProvider } from '../types';\n\nfunction areOptionsEqual(previous: FieldOption[] | undefined, next: FieldOption[]): boolean {\n return previous?.length === next.length && previous.every((option, index) => (\n option.value === next[index].value && option.label === next[index].label\n ));\n}\n\nexport function useFieldOptions(\n fields: FormField[],\n engine: FormEngine,\n providers?: Record<string, OptionsProvider>,\n): Record<string, FieldOption[]> {\n const [resolved, setResolved] = useState<Record<string, FieldOption[]>>({});\n const requestVersions = useRef<Map<string, number>>(new Map());\n\n useEffect(() => {\n if (!providers) {\n setResolved((previous) => (\n Object.keys(previous).length > 0 ? {} : previous\n ));\n return;\n }\n\n let active = true;\n const unsubscribers: (() => void)[] = [];\n\n const commit = (fieldKey: string, options: FieldOption[]) => {\n if (!active) return;\n setResolved((previous) => {\n if (areOptionsEqual(previous[fieldKey], options)) return previous;\n return { ...previous, [fieldKey]: options };\n });\n };\n\n for (const field of fields) {\n if (!field.optionsFrom) continue;\n\n const provider = providers[field.optionsFrom];\n if (!provider) continue;\n\n const resolve = () => {\n const requestVersion = (requestVersions.current.get(field.key) ?? 0) + 1;\n requestVersions.current.set(field.key, requestVersion);\n\n try {\n const result = provider(engine.values);\n if (Array.isArray(result)) {\n commit(field.key, result);\n return;\n }\n\n result\n .then((options) => {\n if (requestVersions.current.get(field.key) === requestVersion) {\n commit(field.key, options);\n }\n })\n .catch(() => {});\n } catch {\n // Retry when a dependency changes.\n }\n };\n\n resolve();\n for (const dependency of new Set(field.optionsDependsOn ?? [])) {\n unsubscribers.push(engine.subscribeField(dependency, resolve));\n }\n }\n\n return () => {\n active = false;\n for (const unsubscribe of unsubscribers) unsubscribe();\n };\n }, [engine, fields, providers]);\n\n return resolved;\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { memo } from 'react';\nimport { FormFieldController } from './FormFieldController';\nimport { useFormSnapshot, useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport { useFieldOptions } from './hooks/useFieldOptions';\nimport type { FieldComponentMap, OptionsProvider } from './types';\n\ninterface FormFieldsControllerProps {\n engine: FormEngine;\n loading: boolean;\n components?: FieldComponentMap;\n optionsProviders?: Record<string, OptionsProvider>;\n onChange: (key: string, value: unknown) => void;\n onCommit: (key: string, value: unknown) => void;\n onBlur: (key: string) => void;\n onFocus: (key: string) => void;\n}\n\nexport const FormFieldsController = memo(function FormFieldsController({\n engine,\n loading,\n components,\n optionsProviders,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldsControllerProps) {\n useStructureSnapshot(engine);\n useFormSnapshot(engine);\n const fields = engine.visibleFields;\n const resolvedOptions = useFieldOptions(fields, engine, optionsProviders);\n\n return (\n <div className=\"fh-form__fields\">\n {fields.map((field) => (\n <FormFieldController\n key={field.key}\n engine={engine}\n field={field}\n options={resolvedOptions[field.key] ?? field.options}\n disabled={loading || engine.stepValidating || engine.submitting}\n components={components}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n ))}\n </div>\n );\n});\n","import type { FormEngine } from '@formhaus/core';\nimport { useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormProgressControllerProps {\n engine: FormEngine;\n ProgressComponent: FormRendererProps['ProgressComponent'];\n}\n\nexport function FormProgressController({\n engine,\n ProgressComponent,\n}: FormProgressControllerProps) {\n useStructureSnapshot(engine);\n if (!engine.isMultiStep || !ProgressComponent) return null;\n\n return (\n <ProgressComponent\n current={engine.progress.current}\n total={engine.progress.total}\n stepTitle={engine.currentStep?.title}\n stepDescription={engine.currentStep?.description}\n />\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\n\nexport function FormTopLevelErrors({ engine }: { engine: FormEngine }) {\n useFormSnapshot(engine);\n if (engine.topLevelErrors.length === 0) return null;\n\n return (\n <div className=\"fh-form__top-errors\">\n {engine.topLevelErrors.map((error) => (\n <p key={error} className=\"fh-form__top-error\">\n {error}\n </p>\n ))}\n </div>\n );\n}\n","import { FormEngine, type FormEngineOptions, type FormDefinition } from '@formhaus/core';\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from 'react';\n\nexport function useFormEngineStore(\n definition: FormDefinition,\n initialValues?: Record<string, unknown>,\n options?: FormEngineOptions,\n): FormEngine {\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const engineRef = useRef<FormEngine | null>(null);\n const definitionIdRef = useRef<string>(definition.id);\n\n if (engineRef.current === null || definitionIdRef.current !== definition.id) {\n engineRef.current = new FormEngine(definition, initialValues, {\n validators: options?.validators,\n get onStepValidate() { return optionsRef.current?.onStepValidate; },\n get onBeforeStepChange() { return optionsRef.current?.onBeforeStepChange; },\n get onAfterStepChange() { return optionsRef.current?.onAfterStepChange; },\n get onBeforeSubmit() { return optionsRef.current?.onBeforeSubmit; },\n get onAfterSubmit() { return optionsRef.current?.onAfterSubmit; },\n });\n definitionIdRef.current = definition.id;\n }\n\n const engine = engineRef.current;\n useEffect(() => () => engine.cancelPendingActions(), [engine]);\n return engine;\n}\n\nexport function useFormEngine(\n definition: FormDefinition,\n initialValues?: Record<string, unknown>,\n options?: FormEngineOptions,\n): FormEngine {\n const engine = useFormEngineStore(definition, initialValues, options);\n\n const subscribe = useCallback((listener: () => void) => engine.subscribe(listener), [engine]);\n const getSnapshot = useCallback(() => engine.getSnapshot(), [engine]);\n\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return engine;\n}\n","import { evaluateCondition } from '@formhaus/core';\nimport type { FormEngine } from '@formhaus/core';\nimport { useCallback } from 'react';\nimport type { FormRendererProps } from '../types';\n\nexport function useRendererActions(engine: FormEngine, props: FormRendererProps) {\n const { loading, onError, onFieldChange, onSubmit, onAnalyticsEvent } = props;\n const run = useCallback(async (action: () => Promise<boolean>) => {\n if (loading) return;\n try { await action(); }\n catch (error) {\n if (onError) onError(error);\n else engine.setErrors({ _form: error instanceof Error ? error.message : 'Form action failed' });\n }\n }, [engine, loading, onError]);\n const next = useCallback(() => run(() => engine.nextStepAsync()), [run, engine]);\n const prev = useCallback(() => run(() => engine.prevStepAsync()), [run, engine]);\n const update = useCallback((key: string, value: unknown) => {\n if (loading || engine.stepValidating || engine.submitting) return;\n engine.setValue(key, value);\n onFieldChange?.(key, value, engine.values);\n }, [engine, loading, onFieldChange]);\n const commit = useCallback((key: string, value: unknown) => {\n if (loading || engine.stepValidating || engine.submitting) return;\n const step = engine.currentStep;\n const field = engine.visibleFields.find((field) => field.key === key);\n if (!field) return;\n update(key, value);\n if (field.autoAdvance && engine.currentStep?.id === step?.id && !engine.isLastStep) void run(() => engine.nextStepAsync('autoAdvance'));\n }, [engine, loading, run, update]);\n const submit = useCallback(() => run(async () => {\n if (engine.definition.submit.disabled?.every((condition) => evaluateCondition(condition, engine.values))\n && engine.definition.submit.disabled.length > 0) return false;\n const result = await engine.submitAsync(async (values) => {\n onAnalyticsEvent?.({ type: 'form_submitted', fieldCount: Object.keys(values).length });\n await onSubmit(values);\n });\n if (!result) {\n for (const [key, error] of Object.entries(engine.errors)) {\n if (key !== '_form') onAnalyticsEvent?.({ type: 'field_error', fieldKey: key, error });\n }\n }\n return result;\n }), [engine, run, onSubmit, onAnalyticsEvent]);\n return { next, prev, update, commit, submit };\n}\n","import type { FormEngineOptions } from '@formhaus/core';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { FormActionsController } from './FormActionsController';\nimport { FormFieldsController } from './FormFieldsController';\nimport { FormProgressController } from './FormProgressController';\nimport { FormTopLevelErrors } from './FormTopLevelErrors';\nimport { useFormEngineStore } from './hooks/useFormEngine';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport { useRendererActions } from './hooks/useRendererActions';\nimport type { FormRendererProps } from './types';\n\nexport function HeadlessFormRenderer(props: FormRendererProps) {\n const { definition, initialValues, loading = false, components, optionsProviders,\n ActionsComponent, ProgressComponent, onAnalyticsEvent } = props;\n const formRef = useRef<HTMLFormElement>(null);\n const focusPending = useRef(false);\n const focusReturn = useRef<HTMLElement | null>(null);\n const wasBusy = useRef(false);\n const engineOptions: FormEngineOptions = {\n ...props,\n onAfterStepChange: async (context) => {\n focusPending.current = true;\n props.onStepChange?.(context.toStepId, context.direction);\n if (context.direction === 'next') {\n onAnalyticsEvent?.({ type: 'step_completed', stepId: context.fromStepId });\n onAnalyticsEvent?.({ type: 'step_viewed', stepId: context.toStepId, stepIndex: engine.currentStepIndex });\n }\n await props.onAfterStepChange?.(context);\n },\n };\n const engine = useFormEngineStore(definition, initialValues, engineOptions);\n const version = useFormSnapshot(engine);\n const previousStep = useRef(engine.currentStep?.id);\n const actions = useRendererActions(engine, props);\n\n useEffect(() => {\n if (props.errors) engine.setErrors(props.errors);\n }, [props.errors, engine]);\n\n useEffect(() => {\n if (previousStep.current !== engine.currentStep?.id) focusPending.current = true;\n previousStep.current = engine.currentStep?.id;\n if (engine.stepValidating || engine.submitting) {\n wasBusy.current = true;\n return;\n }\n const restore = wasBusy.current;\n wasBusy.current = false;\n if (!focusPending.current) {\n const document = formRef.current?.ownerDocument;\n if (restore && document?.activeElement === document?.body && focusReturn.current?.isConnected) focusReturn.current.focus();\n return;\n }\n focusPending.current = false;\n const target = formRef.current?.querySelector<HTMLElement>(\n '.fh-form__fields input:not(:disabled), .fh-form__fields select:not(:disabled), .fh-form__fields textarea:not(:disabled), .fh-form__fields button:not(:disabled)',\n );\n (target ?? formRef.current)?.focus();\n }, [engine, version]);\n\n const handleFieldFocus = useCallback((key: string) => {\n onAnalyticsEvent?.({ type: 'field_focused', fieldKey: key });\n }, [onAnalyticsEvent]);\n const handleFieldBlur = useCallback((key: string) => {\n onAnalyticsEvent?.({ type: 'field_blurred', fieldKey: key,\n hasValue: engine.values[key] !== undefined && engine.values[key] !== '' });\n }, [engine, onAnalyticsEvent]);\n const handleCancel = useCallback(() => props.onCancel?.(), [props.onCancel]);\n\n return (\n <form ref={formRef} onFocusCapture={(event) => { focusReturn.current = event.target; }} className=\"fh-form\" tabIndex={-1} aria-busy={engine.stepValidating || engine.submitting || loading}\n onSubmit={(event) => { event.preventDefault(); void (engine.isLastStep ? actions.submit() : actions.next()); }}>\n <FormProgressController engine={engine} ProgressComponent={ProgressComponent} />\n <FormFieldsController key={definition.id} engine={engine} loading={loading} components={components}\n optionsProviders={optionsProviders} onChange={actions.update} onCommit={actions.commit}\n onBlur={handleFieldBlur} onFocus={handleFieldFocus} />\n <FormTopLevelErrors engine={engine} />\n <FormActionsController engine={engine} definition={definition} loading={loading}\n ActionsComponent={ActionsComponent} onSubmit={actions.submit} onNext={actions.next}\n onPrev={actions.prev} onCancel={handleCancel} />\n </form>\n );\n}\n","import type { FormField } from '@formhaus/core';\n\ninterface FieldLabelProps {\n field: FormField;\n inputId: string;\n}\n\nexport function FieldLabel({ field, inputId }: FieldLabelProps) {\n if (!field.label) return null;\n return (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n {field.validation?.required && (\n <span className=\"fh-field__required\" aria-hidden=\"true\"> *</span>\n )}\n </label>\n );\n}\n","interface FieldMessageProps {\n error?: string;\n helperText?: string;\n errorId: string;\n helperId: string;\n}\n\nexport function FieldMessage({ error, helperText, errorId, helperId }: FieldMessageProps) {\n if (error) {\n return <p id={errorId} className=\"fh-field__error\" role=\"alert\">{error}</p>;\n }\n if (helperText) {\n return <p id={helperId} className=\"fh-field__helper\">{helperText}</p>;\n }\n return null;\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function AutocompleteField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const listId = `${field.key}-list`;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"text\"\n list={listId}\n className=\"fh-field__input fh-field__input--autocomplete\"\n value={(value as string) ?? ''}\n placeholder={field.placeholder}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n autoComplete=\"off\"\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <datalist id={listId}>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </datalist>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function CheckboxField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field fh-field--checkbox\">\n <div className=\"fh-field__checkbox-wrapper\">\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={!!value}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {field.label && (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n </label>\n )}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function DateField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"date\"\n className=\"fh-field__input fh-field__input--date\"\n value={String(value ?? '')}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function DateTimeField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"datetime-local\"\n className=\"fh-field__input fh-field__input--datetime\"\n value={String(value ?? '')}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function FileField({\n field,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"file\"\n className=\"fh-field__input fh-field__input--file\"\n accept={field.accept}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => {\n const files = e.target.files;\n onChange(files && files.length > 0 ? files[0] : null);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function MultiselectField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const groupId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n const selected = Array.isArray(value) ? (value as (string | number)[]) : [];\n\n function handleToggle(optValue: string) {\n const next = selected.includes(optValue)\n ? selected.filter((v) => v !== optValue)\n : [...selected, optValue];\n onChange(next);\n }\n\n return (\n <fieldset\n className=\"fh-field fh-field--multiselect\"\n aria-invalid={!!error || undefined}\n aria-describedby={describedBy}\n >\n {field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n <div className=\"fh-field__multiselect-group\">\n {options.map((opt) => {\n const optionId = `${groupId}-${opt.value}`;\n return (\n <div key={opt.value} className=\"fh-field__multiselect-option\">\n <input\n id={optionId}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={selected.includes(opt.value)}\n disabled={disabled || loading}\n onChange={() => handleToggle(opt.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <label className=\"fh-field__multiselect-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </fieldset>\n );\n}\n","import { useRef } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function RadioField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const arrowSelection = useRef(false);\n const commit = field.autoAdvance && onCommit;\n const groupId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <fieldset\n className=\"fh-field fh-field--radio\"\n aria-invalid={!!error || undefined}\n aria-describedby={describedBy}\n >\n {field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n <div className=\"fh-field__radio-group\">\n {options.map((opt) => {\n const optionId = `${groupId}-${opt.value}`;\n return (\n <div key={opt.value} className=\"fh-field__radio-option\">\n <input\n id={optionId}\n type=\"radio\"\n className=\"fh-field__radio\"\n name={groupId}\n value={opt.value}\n checked={String(value) === String(opt.value)}\n disabled={disabled || loading}\n onChange={() => { if (!commit || arrowSelection.current) onChange(opt.value); }}\n onKeyDown={(event) => {\n arrowSelection.current = event.key.startsWith('Arrow');\n if (commit && event.key === ' ') event.preventDefault();\n if (commit && event.key === 'Enter') {\n event.preventDefault();\n if (!event.repeat) commit(opt.value);\n }\n }}\n onKeyUp={(event) => {\n arrowSelection.current = false;\n if (commit && event.key === ' ') { event.preventDefault(); commit(opt.value); }\n }}\n onPointerDown={() => { arrowSelection.current = false; }}\n onClick={() => { if (commit && !arrowSelection.current) commit(opt.value); }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <label className=\"fh-field__radio-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </fieldset>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function SelectField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <select\n id={inputId}\n className=\"fh-field__input fh-field__input--select\"\n value={(value as string) ?? ''}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {field.placeholder && (\n <option value=\"\" disabled>\n {field.placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function SwitchField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field fh-field--switch\">\n <div className=\"fh-field__switch-wrapper\">\n <input\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"fh-field__switch\"\n checked={!!value}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {field.label && (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n </label>\n )}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function TextField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n onChange(field.type === 'number' && v !== '' ? Number(v) : v);\n };\n\n const inputType =\n field.type === 'email'\n ? 'email'\n : field.type === 'phone'\n ? 'tel'\n : field.type === 'number'\n ? 'number'\n : field.type === 'password'\n ? 'password'\n : 'text';\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type={inputType}\n className=\"fh-field__input\"\n value={value != null ? String(value) : ''}\n placeholder={field.placeholder ?? field.mask}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nconst DEFAULT_ROWS = 3;\n\nexport function TextareaField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <textarea\n id={inputId}\n className=\"fh-field__input fh-field__input--textarea\"\n value={(value as string) ?? ''}\n placeholder={field.placeholder}\n rows={field.rows ?? DEFAULT_ROWS}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { DefaultFieldType } from '@formhaus/core';\nimport type { ComponentType } from 'react';\nimport { AutocompleteField } from './fields/AutocompleteField';\nimport { CheckboxField } from './fields/CheckboxField';\nimport { DateField } from './fields/DateField';\nimport { DateTimeField } from './fields/DateTimeField';\nimport { FileField } from './fields/FileField';\nimport { MultiselectField } from './fields/MultiselectField';\nimport { RadioField } from './fields/RadioField';\nimport { SelectField } from './fields/SelectField';\nimport { SwitchField } from './fields/SwitchField';\nimport { TextField } from './fields/TextField';\nimport { TextareaField } from './fields/TextareaField';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\nconst defaultFieldComponents: Record<DefaultFieldType, ComponentType<FieldComponentProps>> = {\n text: TextField,\n email: TextField,\n phone: TextField,\n number: TextField,\n password: TextField,\n select: SelectField,\n autocomplete: AutocompleteField,\n multiselect: MultiselectField,\n checkbox: CheckboxField,\n radio: RadioField,\n switch: SwitchField,\n file: FileField,\n date: DateField,\n datetime: DateTimeField,\n textarea: TextareaField,\n};\n\nexport function withDefaultFields(components?: FieldComponentMap): FieldComponentMap {\n const merged: FieldComponentMap = { ...defaultFieldComponents };\n for (const [type, component] of Object.entries(components ?? {})) {\n if (component) merged[type] = component;\n }\n return merged;\n}\n","import { useMemo } from 'react';\nimport { FormActions } from './FormActions';\nimport { FormStepProgress } from './FormStepProgress';\nimport { HeadlessFormRenderer } from './HeadlessFormRenderer';\nimport { withDefaultFields } from './defaultFieldComponents';\nimport type { FormRendererProps } from './types';\n\nexport function FormRenderer({\n components,\n ActionsComponent,\n ProgressComponent,\n ...props\n}: FormRendererProps) {\n const fieldComponents = useMemo(() => withDefaultFields(components), [components]);\n\n return (\n <HeadlessFormRenderer\n {...props}\n components={fieldComponents}\n ActionsComponent={ActionsComponent ?? FormActions}\n ProgressComponent={ProgressComponent ?? FormStepProgress}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FormActions.tsx","../src/FormStepProgress.tsx","../src/hooks/useEngineSnapshot.ts","../src/FormActionsController.tsx","../src/FormField.tsx","../src/FormFieldController.tsx","../src/hooks/useFieldOptions.ts","../src/FormFieldsController.tsx","../src/FormProgressController.tsx","../src/FormTopLevelErrors.tsx","../src/hooks/useFormEngine.ts","../src/hooks/useRendererActions.ts","../src/HeadlessFormRenderer.tsx","../src/fields/FieldLabel.tsx","../src/fields/FieldMessage.tsx","../src/fields/AutocompleteField.tsx","../src/fields/CheckboxField.tsx","../src/fields/DateField.tsx","../src/fields/DateTimeField.tsx","../src/fields/FileField.tsx","../src/fields/MultiselectField.tsx","../src/fields/RadioField.tsx","../src/fields/SelectField.tsx","../src/fields/SwitchField.tsx","../src/fields/TextField.tsx","../src/fields/TextareaField.tsx","../src/defaultFieldComponents.ts","../src/FormRenderer.tsx"],"names":["isActionDisabled","action","values","loading","c","evaluateCondition","FormActions","submitAction","backAction","cancelAction","isFirstStep","isLastStep","isMultiStep","showPrimary","onSubmit","onNext","onPrev","onCancel","primaryLabelProp","showBackProp","backLabelProp","onPrimaryProp","showBack","backLabel","primaryLabel","primaryDisabled","handlePrimary","jsxs","jsx","FormStepProgress","current","total","stepTitle","stepDescription","percent","useFormSnapshot","engine","subscribe","useCallback","listener","getSnapshot","useSyncExternalStore","useStructureSnapshot","FormActionsController","definition","ActionsComponent","FormField","field","value","error","disabled","components","onChange","onCommit","onBlur","onFocus","Component","FormFieldController","memo","options","handleChange","handleCommit","handleBlur","handleFocus","fieldWithOptions","areOptionsEqual","previous","next","option","index","useFieldOptions","fields","providers","resolved","setResolved","useState","requestVersions","useRef","useEffect","active","unsubscribers","commit","fieldKey","provider","resolve","requestVersion","result","dependency","unsubscribe","FormFieldsController","optionsProviders","resolvedOptions","FormProgressController","ProgressComponent","FormTopLevelErrors","actionError","errors","useFormEngineStore","initialValues","optionsRef","engineRef","definitionIdRef","FormEngine","useFormEngine","useRendererActions","props","onError","onFieldChange","onAnalyticsEvent","failure","setFailure","run","prev","update","key","step","submit","condition","HeadlessFormRenderer","formRef","focusPending","focusReturn","wasBusy","engineOptions","context","version","previousStep","actions","appliedErrors","shouldApplyExternalErrors","restore","document","handleFieldFocus","handleFieldBlur","handleCancel","event","FieldLabel","inputId","FieldMessage","helperText","errorId","helperId","AutocompleteField","listId","describedBy","e","opt","CheckboxField","DateField","DateTimeField","FileField","files","MultiselectField","groupId","selected","handleToggle","optValue","v","optionId","RadioField","arrowSelection","SelectField","SwitchField","TextField","inputType","DEFAULT_ROWS","TextareaField","defaultFieldComponents","withDefaultFields","merged","type","component","FormRenderer","fieldComponents","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { evaluateCondition } from '@formhaus/core';\nimport type { FormAction } from '@formhaus/core';\nimport type { FormActionsProps } from './types';\n\nfunction isActionDisabled(\n action: FormAction | undefined,\n values: Record<string, unknown>,\n loading?: boolean,\n): boolean {\n if (loading) return true;\n if (!action?.disabled || action.disabled.length === 0) return false;\n return action.disabled.every((c) => evaluateCondition(c, values));\n}\n\nexport function FormActions({\n submitAction,\n backAction,\n cancelAction,\n isFirstStep,\n isLastStep,\n isMultiStep,\n loading,\n showPrimary = true,\n values = {},\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n primaryLabel: primaryLabelProp,\n showBack: showBackProp,\n backLabel: backLabelProp,\n onPrimary: onPrimaryProp,\n}: FormActionsProps) {\n const showBack = showBackProp ?? (isMultiStep && !isFirstStep && backAction !== false);\n const backLabel = backLabelProp ?? (typeof backAction === 'object' ? (backAction?.label ?? 'Back') : 'Back');\n const primaryLabel = primaryLabelProp ?? (isMultiStep && !isLastStep ? 'Continue' : (submitAction?.label ?? 'Submit'));\n\n const primaryDisabled = isActionDisabled(\n isMultiStep && !isLastStep ? undefined : submitAction,\n values,\n loading,\n );\n\n function handlePrimary() {\n if (onPrimaryProp) {\n onPrimaryProp();\n } else if (isMultiStep && !isLastStep) {\n onNext();\n } else {\n onSubmit();\n }\n }\n\n return (\n <div className=\"fh-form-actions\">\n <div className=\"fh-form-actions__secondary\">\n {showBack && (\n <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--text\"\n disabled={loading}\n onClick={onPrev}\n >\n {backLabel}\n </button>\n )}\n {cancelAction && (\n <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--text\"\n disabled={loading}\n onClick={onCancel}\n >\n {cancelAction.label}\n </button>\n )}\n </div>\n {showPrimary && <button\n type=\"button\"\n className=\"fh-form-actions__button fh-form-actions__button--primary\"\n disabled={primaryDisabled}\n aria-busy={loading}\n onClick={handlePrimary}\n >\n {primaryLabel}\n </button>}\n </div>\n );\n}\n","import type { FormStepProgressProps } from './types';\n\nexport function FormStepProgress({\n current,\n total,\n stepTitle,\n stepDescription,\n}: FormStepProgressProps) {\n const percent = (current / total) * 100;\n\n return (\n <div className=\"fh-step-progress\">\n <div className=\"fh-step-progress__bar\">\n <div className=\"fh-step-progress__fill\" style={{ width: `${percent}%` }} />\n </div>\n <div className=\"fh-step-progress__info\">\n <span className=\"fh-step-progress__counter\">\n Step {current} of {total}\n </span>\n </div>\n {stepTitle && <h3 className=\"fh-step-progress__title\">{stepTitle}</h3>}\n {stepDescription && <p className=\"fh-step-progress__description\">{stepDescription}</p>}\n </div>\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useCallback, useSyncExternalStore } from 'react';\n\nexport function useFormSnapshot(engine: FormEngine): number {\n const subscribe = useCallback((listener: () => void) => engine.subscribe(listener), [engine]);\n const getSnapshot = useCallback(() => engine.getSnapshot(), [engine]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport function useStructureSnapshot(engine: FormEngine): number {\n const subscribe = useCallback(\n (listener: () => void) => engine.subscribeStructure(listener),\n [engine],\n );\n const getSnapshot = useCallback(() => engine.getStructureSnapshot(), [engine]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useCallback } from 'react';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormActionsControllerProps {\n engine: FormEngine;\n definition: FormRendererProps['definition'];\n loading: boolean;\n ActionsComponent: FormRendererProps['ActionsComponent'];\n onSubmit: () => void;\n onNext: () => Promise<void>;\n onPrev: () => void;\n onCancel: () => void;\n}\n\nexport function FormActionsController({\n engine,\n definition,\n loading,\n ActionsComponent,\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n}: FormActionsControllerProps) {\n useFormSnapshot(engine);\n const isLastStep = engine.isLastStep || !engine.isMultiStep;\n const primaryLabel = engine.isMultiStep && !isLastStep\n ? (typeof engine.currentStep?.next === 'object' ? engine.currentStep.next.label ?? 'Continue' : 'Continue')\n : (definition.submit?.label ?? 'Submit');\n const showBack = engine.isMultiStep && !engine.isFirstStep && engine.currentStep?.back !== false;\n const backLabel = typeof engine.currentStep?.back === 'object'\n ? (engine.currentStep.back.label ?? 'Back')\n : 'Back';\n const handlePrimary = useCallback(async () => {\n if (engine.isMultiStep && !isLastStep) await onNext();\n else onSubmit();\n }, [engine, isLastStep, onNext, onSubmit]);\n\n if (!ActionsComponent) return null;\n\n return (\n <ActionsComponent\n submitAction={definition.submit}\n backAction={engine.currentStep?.back}\n cancelAction={definition.cancel}\n isFirstStep={engine.isFirstStep}\n isLastStep={isLastStep}\n isMultiStep={engine.isMultiStep}\n loading={loading || engine.stepValidating || engine.submitting}\n values={engine.values}\n onSubmit={onSubmit}\n onNext={onNext}\n onPrev={onPrev}\n onCancel={onCancel}\n primaryLabel={primaryLabel}\n showPrimary={isLastStep || engine.currentStep?.next !== false}\n showBack={showBack}\n backLabel={backLabel}\n onPrimary={handlePrimary}\n />\n );\n}\n","import type { FormField as FormFieldType } from '@formhaus/core';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\ninterface FormFieldProps {\n field: FormFieldType;\n value: unknown;\n error?: string;\n loading?: boolean;\n disabled?: boolean;\n components?: FieldComponentMap;\n onChange: (value: unknown) => void;\n onCommit?: (value: unknown) => void;\n onBlur: () => void;\n onFocus?: () => void;\n}\n\nexport function FormField({\n field,\n value,\n error,\n loading,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldProps) {\n const Component = components?.[field.type];\n\n if (!Component) {\n return <div>Unsupported field type: {field.type}</div>;\n }\n\n return (\n <Component\n field={field}\n value={value}\n error={error}\n loading={loading}\n disabled={disabled}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n );\n}\n","import type { FieldOption, FormEngine, FormField as FormFieldType } from '@formhaus/core';\nimport { memo, useCallback, useSyncExternalStore } from 'react';\nimport { FormField } from './FormField';\nimport type { FieldComponentMap } from './types';\n\ninterface FormFieldControllerProps {\n engine: FormEngine;\n field: FormFieldType;\n options?: FieldOption[];\n disabled?: boolean;\n components?: FieldComponentMap;\n onChange: (key: string, value: unknown) => void;\n onCommit: (key: string, value: unknown) => void;\n onBlur: (key: string) => void;\n onFocus: (key: string) => void;\n}\n\nexport const FormFieldController = memo(function FormFieldController({\n engine,\n field,\n options,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldControllerProps) {\n const subscribe = useCallback(\n (listener: () => void) => engine.subscribeField(field.key, listener),\n [engine, field.key],\n );\n const getSnapshot = useCallback(\n () => engine.getFieldSnapshot(field.key),\n [engine, field.key],\n );\n\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const handleChange = useCallback(\n (value: unknown) => onChange(field.key, value),\n [field.key, onChange],\n );\n const handleCommit = useCallback((value: unknown) => onCommit(field.key, value), [field.key, onCommit]);\n const handleBlur = useCallback(() => onBlur(field.key), [field.key, onBlur]);\n const handleFocus = useCallback(() => onFocus(field.key), [field.key, onFocus]);\n const fieldWithOptions = options ? { ...field, options } : field;\n\n return (\n <FormField\n field={fieldWithOptions}\n value={engine.values[field.key]}\n error={engine.errors[field.key]}\n loading={engine.fieldLoading[field.key]}\n disabled={disabled}\n components={components}\n onChange={handleChange}\n onCommit={handleCommit}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n});\n","import type { FieldOption, FormEngine, FormField } from '@formhaus/core';\nimport { useEffect, useRef, useState } from 'react';\nimport type { OptionsProvider } from '../types';\n\nfunction areOptionsEqual(previous: FieldOption[] | undefined, next: FieldOption[]): boolean {\n return previous?.length === next.length && previous.every((option, index) => (\n option.value === next[index].value && option.label === next[index].label\n ));\n}\n\nexport function useFieldOptions(\n fields: FormField[],\n engine: FormEngine,\n providers?: Record<string, OptionsProvider>,\n): Record<string, FieldOption[]> {\n const [resolved, setResolved] = useState<Record<string, FieldOption[]>>({});\n const requestVersions = useRef<Map<string, number>>(new Map());\n\n useEffect(() => {\n if (!providers) {\n setResolved((previous) => (\n Object.keys(previous).length > 0 ? {} : previous\n ));\n return;\n }\n\n let active = true;\n const unsubscribers: (() => void)[] = [];\n\n const commit = (fieldKey: string, options: FieldOption[]) => {\n if (!active) return;\n setResolved((previous) => {\n if (areOptionsEqual(previous[fieldKey], options)) return previous;\n return { ...previous, [fieldKey]: options };\n });\n };\n\n for (const field of fields) {\n if (!field.optionsFrom) continue;\n\n const provider = providers[field.optionsFrom];\n if (!provider) continue;\n\n const resolve = () => {\n const requestVersion = (requestVersions.current.get(field.key) ?? 0) + 1;\n requestVersions.current.set(field.key, requestVersion);\n\n try {\n const result = provider(engine.values);\n if (Array.isArray(result)) {\n commit(field.key, result);\n return;\n }\n\n result\n .then((options) => {\n if (requestVersions.current.get(field.key) === requestVersion) {\n commit(field.key, options);\n }\n })\n .catch(() => {});\n } catch {\n // Retry when a dependency changes.\n }\n };\n\n resolve();\n for (const dependency of new Set(field.optionsDependsOn ?? [])) {\n unsubscribers.push(engine.subscribeField(dependency, resolve));\n }\n }\n\n return () => {\n active = false;\n for (const unsubscribe of unsubscribers) unsubscribe();\n };\n }, [engine, fields, providers]);\n\n return resolved;\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { memo } from 'react';\nimport { FormFieldController } from './FormFieldController';\nimport { useFormSnapshot, useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport { useFieldOptions } from './hooks/useFieldOptions';\nimport type { FieldComponentMap, OptionsProvider } from './types';\n\ninterface FormFieldsControllerProps {\n engine: FormEngine;\n loading: boolean;\n components?: FieldComponentMap;\n optionsProviders?: Record<string, OptionsProvider>;\n onChange: (key: string, value: unknown) => void;\n onCommit: (key: string, value: unknown) => void;\n onBlur: (key: string) => void;\n onFocus: (key: string) => void;\n}\n\nexport const FormFieldsController = memo(function FormFieldsController({\n engine,\n loading,\n components,\n optionsProviders,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FormFieldsControllerProps) {\n useStructureSnapshot(engine);\n useFormSnapshot(engine);\n const fields = engine.visibleFields;\n const resolvedOptions = useFieldOptions(fields, engine, optionsProviders);\n\n return (\n <div className=\"fh-form__fields\">\n {fields.map((field) => (\n <FormFieldController\n key={field.key}\n engine={engine}\n field={field}\n options={resolvedOptions[field.key] ?? field.options}\n disabled={loading || engine.stepValidating || engine.submitting}\n components={components}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n ))}\n </div>\n );\n});\n","import type { FormEngine } from '@formhaus/core';\nimport { useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormProgressControllerProps {\n engine: FormEngine;\n ProgressComponent: FormRendererProps['ProgressComponent'];\n}\n\nexport function FormProgressController({\n engine,\n ProgressComponent,\n}: FormProgressControllerProps) {\n useStructureSnapshot(engine);\n if (!engine.isMultiStep || !ProgressComponent) return null;\n\n return (\n <ProgressComponent\n current={engine.progress.current}\n total={engine.progress.total}\n stepTitle={engine.currentStep?.title}\n stepDescription={engine.currentStep?.description}\n />\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\n\nexport function FormTopLevelErrors({ engine, actionError }: { engine: FormEngine; actionError?: string | null }) {\n useFormSnapshot(engine);\n const errors = actionError ? [...engine.topLevelErrors, actionError] : engine.topLevelErrors;\n if (errors.length === 0) return null;\n\n return (\n <div className=\"fh-form__top-errors\">\n {errors.map((error, index) => (\n <p key={index} className=\"fh-form__top-error\">\n {error}\n </p>\n ))}\n </div>\n );\n}\n","import { FormEngine, type FormEngineOptions, type FormDefinition } from '@formhaus/core';\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from 'react';\n\nexport function useFormEngineStore(\n definition: FormDefinition,\n initialValues?: Record<string, unknown>,\n options?: FormEngineOptions,\n): FormEngine {\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const engineRef = useRef<FormEngine | null>(null);\n const definitionIdRef = useRef<string>(definition.id);\n\n if (engineRef.current === null || definitionIdRef.current !== definition.id) {\n engineRef.current = new FormEngine(definition, initialValues, {\n validators: options?.validators,\n get onStepValidate() { return optionsRef.current?.onStepValidate; },\n get onBeforeStepChange() { return optionsRef.current?.onBeforeStepChange; },\n get onAfterStepChange() { return optionsRef.current?.onAfterStepChange; },\n get onBeforeSubmit() { return optionsRef.current?.onBeforeSubmit; },\n get onAfterSubmit() { return optionsRef.current?.onAfterSubmit; },\n });\n definitionIdRef.current = definition.id;\n }\n\n const engine = engineRef.current;\n useEffect(() => () => engine.cancelPendingActions(), [engine]);\n return engine;\n}\n\nexport function useFormEngine(\n definition: FormDefinition,\n initialValues?: Record<string, unknown>,\n options?: FormEngineOptions,\n): FormEngine {\n const engine = useFormEngineStore(definition, initialValues, options);\n\n const subscribe = useCallback((listener: () => void) => engine.subscribe(listener), [engine]);\n const getSnapshot = useCallback(() => engine.getSnapshot(), [engine]);\n\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return engine;\n}\n","import { evaluateCondition } from '@formhaus/core';\nimport type { FormEngine } from '@formhaus/core';\nimport { useCallback, useState } from 'react';\nimport type { FormRendererProps } from '../types';\n\nexport function useRendererActions(engine: FormEngine, props: FormRendererProps) {\n const { loading, onError, onFieldChange, onSubmit, onAnalyticsEvent } = props;\n const [failure, setFailure] = useState<{ engine: FormEngine; message: string } | null>(null);\n const run = useCallback(async (action: () => Promise<boolean>) => {\n if (loading) return;\n setFailure(null);\n try { await action(); }\n catch (error) {\n if (onError) onError(error);\n else setFailure({ engine, message: error instanceof Error ? error.message : 'Form action failed' });\n }\n }, [engine, loading, onError]);\n const next = useCallback(() => run(() => engine.nextStepAsync()), [run, engine]);\n const prev = useCallback(() => run(() => engine.prevStepAsync()), [run, engine]);\n const update = useCallback((key: string, value: unknown) => {\n if (loading || engine.stepValidating || engine.submitting) return;\n engine.setValue(key, value);\n onFieldChange?.(key, value, engine.values);\n }, [engine, loading, onFieldChange]);\n const commit = useCallback((key: string, value: unknown) => {\n if (loading || engine.stepValidating || engine.submitting) return;\n const step = engine.currentStep;\n const field = engine.visibleFields.find((field) => field.key === key);\n if (!field) return;\n update(key, value);\n if (field.autoAdvance && engine.currentStep?.id === step?.id && !engine.isLastStep) void run(() => engine.nextStepAsync('autoAdvance'));\n }, [engine, loading, run, update]);\n const submit = useCallback(() => run(async () => {\n if (engine.definition.submit.disabled?.every((condition) => evaluateCondition(condition, engine.values))\n && engine.definition.submit.disabled.length > 0) return false;\n const result = await engine.submitAsync(async (values) => {\n onAnalyticsEvent?.({ type: 'form_submitted', fieldCount: Object.keys(values).length });\n await onSubmit(values);\n });\n if (!result) {\n for (const [key, error] of Object.entries(engine.errors)) {\n onAnalyticsEvent?.({ type: 'field_error', fieldKey: key, error });\n }\n }\n return result;\n }), [engine, run, onSubmit, onAnalyticsEvent]);\n const actionError = failure?.engine === engine ? failure.message : null;\n return { next, prev, update, commit, submit, actionError };\n}\n","import { shouldApplyExternalErrors, type FormEngineOptions } from '@formhaus/core';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { FormActionsController } from './FormActionsController';\nimport { FormFieldsController } from './FormFieldsController';\nimport { FormProgressController } from './FormProgressController';\nimport { FormTopLevelErrors } from './FormTopLevelErrors';\nimport { useFormEngineStore } from './hooks/useFormEngine';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport { useRendererActions } from './hooks/useRendererActions';\nimport type { FormRendererProps } from './types';\n\nexport function HeadlessFormRenderer(props: FormRendererProps) {\n const { definition, initialValues, loading = false, components, optionsProviders,\n ActionsComponent, ProgressComponent, onAnalyticsEvent } = props;\n const formRef = useRef<HTMLFormElement>(null);\n const focusPending = useRef(false);\n const focusReturn = useRef<HTMLElement | null>(null);\n const wasBusy = useRef(false);\n const engineOptions: FormEngineOptions = {\n ...props,\n onAfterStepChange: async (context) => {\n focusPending.current = true;\n props.onStepChange?.(context.toStepId, context.direction);\n if (context.direction === 'next') {\n onAnalyticsEvent?.({ type: 'step_completed', stepId: context.fromStepId });\n onAnalyticsEvent?.({ type: 'step_viewed', stepId: context.toStepId, stepIndex: engine.currentStepIndex });\n }\n await props.onAfterStepChange?.(context);\n },\n };\n const engine = useFormEngineStore(definition, initialValues, engineOptions);\n const version = useFormSnapshot(engine);\n const previousStep = useRef(engine.currentStep?.id);\n const actions = useRendererActions(engine, props);\n\n const appliedErrors = useRef<{ engine: typeof engine; errors: Record<string, string> } | null>(null);\n useEffect(() => {\n if (!props.errors) return;\n const previous = appliedErrors.current?.engine === engine ? appliedErrors.current.errors : undefined;\n if (!shouldApplyExternalErrors(engine, previous, props.errors)) return;\n appliedErrors.current = { engine, errors: props.errors };\n engine.setErrors(props.errors);\n }, [props.errors, engine]);\n\n useEffect(() => {\n if (previousStep.current !== engine.currentStep?.id) focusPending.current = true;\n previousStep.current = engine.currentStep?.id;\n if (engine.stepValidating || engine.submitting) {\n wasBusy.current = true;\n return;\n }\n const restore = wasBusy.current;\n wasBusy.current = false;\n if (!focusPending.current) {\n const document = formRef.current?.ownerDocument;\n if (restore && document?.activeElement === document?.body && focusReturn.current?.isConnected) focusReturn.current.focus();\n return;\n }\n focusPending.current = false;\n const target = formRef.current?.querySelector<HTMLElement>(\n '.fh-form__fields input:not(:disabled), .fh-form__fields select:not(:disabled), .fh-form__fields textarea:not(:disabled), .fh-form__fields button:not(:disabled)',\n );\n (target ?? formRef.current)?.focus();\n }, [engine, version]);\n\n const handleFieldFocus = useCallback((key: string) => {\n onAnalyticsEvent?.({ type: 'field_focused', fieldKey: key });\n }, [onAnalyticsEvent]);\n const handleFieldBlur = useCallback((key: string) => {\n onAnalyticsEvent?.({ type: 'field_blurred', fieldKey: key,\n hasValue: engine.values[key] !== undefined && engine.values[key] !== '' });\n }, [engine, onAnalyticsEvent]);\n const handleCancel = useCallback(() => props.onCancel?.(), [props.onCancel]);\n\n return (\n <form ref={formRef} onFocusCapture={(event) => { focusReturn.current = event.target; }} className=\"fh-form\" tabIndex={-1} aria-busy={engine.stepValidating || engine.submitting || loading}\n onSubmit={(event) => { event.preventDefault(); void (engine.isLastStep ? actions.submit() : actions.next()); }}>\n <FormProgressController engine={engine} ProgressComponent={ProgressComponent} />\n <FormFieldsController key={definition.id} engine={engine} loading={loading} components={components}\n optionsProviders={optionsProviders} onChange={actions.update} onCommit={actions.commit}\n onBlur={handleFieldBlur} onFocus={handleFieldFocus} />\n <FormTopLevelErrors engine={engine} actionError={actions.actionError} />\n <FormActionsController engine={engine} definition={definition} loading={loading}\n ActionsComponent={ActionsComponent} onSubmit={actions.submit} onNext={actions.next}\n onPrev={actions.prev} onCancel={handleCancel} />\n </form>\n );\n}\n","import type { FormField } from '@formhaus/core';\n\ninterface FieldLabelProps {\n field: FormField;\n inputId: string;\n}\n\nexport function FieldLabel({ field, inputId }: FieldLabelProps) {\n if (!field.label) return null;\n return (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n {field.validation?.required && (\n <span className=\"fh-field__required\" aria-hidden=\"true\"> *</span>\n )}\n </label>\n );\n}\n","interface FieldMessageProps {\n error?: string;\n helperText?: string;\n errorId: string;\n helperId: string;\n}\n\nexport function FieldMessage({ error, helperText, errorId, helperId }: FieldMessageProps) {\n if (error) {\n return <p id={errorId} className=\"fh-field__error\" role=\"alert\">{error}</p>;\n }\n if (helperText) {\n return <p id={helperId} className=\"fh-field__helper\">{helperText}</p>;\n }\n return null;\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function AutocompleteField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const listId = `${field.key}-list`;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"text\"\n list={listId}\n className=\"fh-field__input fh-field__input--autocomplete\"\n value={(value as string) ?? ''}\n placeholder={field.placeholder}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n autoComplete=\"off\"\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <datalist id={listId}>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </datalist>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function CheckboxField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field fh-field--checkbox\">\n <div className=\"fh-field__checkbox-wrapper\">\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={!!value}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {field.label && (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n </label>\n )}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function DateField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"date\"\n className=\"fh-field__input fh-field__input--date\"\n value={String(value ?? '')}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function DateTimeField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"datetime-local\"\n className=\"fh-field__input fh-field__input--datetime\"\n value={String(value ?? '')}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function FileField({\n field,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type=\"file\"\n className=\"fh-field__input fh-field__input--file\"\n accept={field.accept}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => {\n const files = e.target.files;\n onChange(files && files.length > 0 ? files[0] : null);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function MultiselectField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const groupId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n const selected = Array.isArray(value) ? (value as (string | number)[]) : [];\n\n function handleToggle(optValue: string) {\n const next = selected.includes(optValue)\n ? selected.filter((v) => v !== optValue)\n : [...selected, optValue];\n onChange(next);\n }\n\n return (\n <fieldset\n className=\"fh-field fh-field--multiselect\"\n aria-invalid={!!error || undefined}\n aria-describedby={describedBy}\n >\n {field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n <div className=\"fh-field__multiselect-group\">\n {options.map((opt) => {\n const optionId = `${groupId}-${opt.value}`;\n return (\n <div key={opt.value} className=\"fh-field__multiselect-option\">\n <input\n id={optionId}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={selected.includes(opt.value)}\n disabled={disabled || loading}\n onChange={() => handleToggle(opt.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <label className=\"fh-field__multiselect-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </fieldset>\n );\n}\n","import { useRef } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function RadioField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const arrowSelection = useRef(false);\n const commit = field.autoAdvance && onCommit;\n const groupId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <fieldset\n className=\"fh-field fh-field--radio\"\n aria-invalid={!!error || undefined}\n aria-describedby={describedBy}\n >\n {field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n <div className=\"fh-field__radio-group\">\n {options.map((opt) => {\n const optionId = `${groupId}-${opt.value}`;\n return (\n <div key={opt.value} className=\"fh-field__radio-option\">\n <input\n id={optionId}\n type=\"radio\"\n className=\"fh-field__radio\"\n name={groupId}\n value={opt.value}\n checked={String(value) === String(opt.value)}\n disabled={disabled || loading}\n onChange={() => { if (!commit || arrowSelection.current) onChange(opt.value); }}\n onKeyDown={(event) => {\n arrowSelection.current = event.key.startsWith('Arrow');\n if (commit && event.key === ' ') event.preventDefault();\n if (commit && event.key === 'Enter') {\n event.preventDefault();\n if (!event.repeat) commit(opt.value);\n }\n }}\n onKeyUp={(event) => {\n arrowSelection.current = false;\n if (commit && event.key === ' ') { event.preventDefault(); commit(opt.value); }\n }}\n onPointerDown={() => { arrowSelection.current = false; }}\n onClick={(event) => {\n if (!commit || arrowSelection.current) return;\n if (event.detail > 1) event.preventDefault();\n else commit(opt.value);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <label className=\"fh-field__radio-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </fieldset>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function SelectField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n const options = field.options ?? [];\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <select\n id={inputId}\n className=\"fh-field__input fh-field__input--select\"\n value={(value as string) ?? ''}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {field.placeholder && (\n <option value=\"\" disabled>\n {field.placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldMessage } from './FieldMessage';\n\nexport function SwitchField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field fh-field--switch\">\n <div className=\"fh-field__switch-wrapper\">\n <input\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"fh-field__switch\"\n checked={!!value}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {field.label && (\n <label className=\"fh-field__label\" htmlFor={inputId}>\n {field.label}\n </label>\n )}\n </div>\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nexport function TextField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n onChange(field.type === 'number' && v !== '' ? Number(v) : v);\n };\n\n const inputType =\n field.type === 'email'\n ? 'email'\n : field.type === 'phone'\n ? 'tel'\n : field.type === 'number'\n ? 'number'\n : field.type === 'password'\n ? 'password'\n : 'text';\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <input\n id={inputId}\n type={inputType}\n className=\"fh-field__input\"\n value={value != null ? String(value) : ''}\n placeholder={field.placeholder ?? field.mask}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldLabel } from './FieldLabel';\nimport { FieldMessage } from './FieldMessage';\n\nconst DEFAULT_ROWS = 3;\n\nexport function TextareaField({\n field,\n value,\n error,\n loading,\n disabled,\n onChange,\n onBlur,\n onFocus,\n}: FieldComponentProps) {\n const inputId = field.key;\n const helperId = `${field.key}-helper`;\n const errorId = `${field.key}-error`;\n const describedBy = error ? errorId : field.helperText ? helperId : undefined;\n\n return (\n <div className=\"fh-field\">\n <FieldLabel field={field} inputId={inputId} />\n <textarea\n id={inputId}\n className=\"fh-field__input fh-field__input--textarea\"\n value={(value as string) ?? ''}\n placeholder={field.placeholder}\n rows={field.rows ?? DEFAULT_ROWS}\n disabled={disabled || loading}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <FieldMessage error={error} helperText={field.helperText} errorId={errorId} helperId={helperId} />\n </div>\n );\n}\n","import type { DefaultFieldType } from '@formhaus/core';\nimport type { ComponentType } from 'react';\nimport { AutocompleteField } from './fields/AutocompleteField';\nimport { CheckboxField } from './fields/CheckboxField';\nimport { DateField } from './fields/DateField';\nimport { DateTimeField } from './fields/DateTimeField';\nimport { FileField } from './fields/FileField';\nimport { MultiselectField } from './fields/MultiselectField';\nimport { RadioField } from './fields/RadioField';\nimport { SelectField } from './fields/SelectField';\nimport { SwitchField } from './fields/SwitchField';\nimport { TextField } from './fields/TextField';\nimport { TextareaField } from './fields/TextareaField';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\nconst defaultFieldComponents: Record<DefaultFieldType, ComponentType<FieldComponentProps>> = {\n text: TextField,\n email: TextField,\n phone: TextField,\n number: TextField,\n password: TextField,\n select: SelectField,\n autocomplete: AutocompleteField,\n multiselect: MultiselectField,\n checkbox: CheckboxField,\n radio: RadioField,\n switch: SwitchField,\n file: FileField,\n date: DateField,\n datetime: DateTimeField,\n textarea: TextareaField,\n};\n\nexport function withDefaultFields(components?: FieldComponentMap): FieldComponentMap {\n const merged: FieldComponentMap = { ...defaultFieldComponents };\n for (const [type, component] of Object.entries(components ?? {})) {\n if (component) merged[type] = component;\n }\n return merged;\n}\n","import { useMemo } from 'react';\nimport { FormActions } from './FormActions';\nimport { FormStepProgress } from './FormStepProgress';\nimport { HeadlessFormRenderer } from './HeadlessFormRenderer';\nimport { withDefaultFields } from './defaultFieldComponents';\nimport type { FormRendererProps } from './types';\n\nexport function FormRenderer({\n components,\n ActionsComponent,\n ProgressComponent,\n ...props\n}: FormRendererProps) {\n const fieldComponents = useMemo(() => withDefaultFields(components), [components]);\n\n return (\n <HeadlessFormRenderer\n {...props}\n components={fieldComponents}\n ActionsComponent={ActionsComponent ?? FormActions}\n ProgressComponent={ProgressComponent ?? FormStepProgress}\n />\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formhaus/react",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "React components for Formhaus forms. Define a form once in JSON, render with native HTML or your own components.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dist"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@formhaus/core": "0.7.
|
|
20
|
+
"@formhaus/core": "0.7.2"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"react": ">=18.0.0"
|