@formhaus/react 0.13.1 → 0.13.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 +3 -3
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use client';import {memo,useCallback,useSyncExternalStore,useState,useRef,useEffect,useId,useMemo}from'react';import {isActionDisabled,FormEngine}from'@formhaus/core';import {jsx,jsxs}from'react/jsx-runtime';import {fieldDomId,shouldApplyExternalErrors,canMoveFocus,restoreFocus,focusField,autoAdvance,labelFor}from'@formhaus/core/internal';function J(e,r){return `fh-form-actions__button fh-form-actions__button--${e&&e.variant||r}`}function Q({submitAction:e,nextAction:r,backAction:t,cancelAction:o,skipAction:a,isFirstStep:l,isLastStep:n,isMultiStep:s,loading:p,showPrimary:i=true,values:d={},onSubmit:m,onNext:u,onPrev:v,onCancel:C,onSkip:R,primaryLabel:_,showBack:P,backLabel:x,showSkip:c,skipLabel:L,onPrimary:b}){let f=P??(s&&!l&&t!==false),S=x??(t||void 0)?.label??"Back",E=c??(s&&!!a),D=L??a?.label??"Skip",U=_??(s&&!n?"Continue":e?.label??"Submit"),z=!!p||isActionDisabled(s&&!n?r:e,d),G=b??(s&&!n?u:m);return jsxs("div",{className:"fh-form-actions",children:[jsxs("div",{className:"fh-form-actions__secondary",children:[f&&jsx("button",{type:"button",className:J(t,"secondary"),disabled:p,onClick:v,children:S}),o&&jsx("button",{type:"button",className:J(o,"text"),disabled:p,onClick:C,children:o.label}),E&&jsx("button",{type:"button",className:J(a,"text"),disabled:p,onClick:R,children:D})]}),i&&jsx("button",{type:"submit",className:"fh-form-actions__button fh-form-actions__button--primary",disabled:z,"aria-busy":p,onClick:h=>{h.preventDefault(),G();},children:U})]})}function X({current:e,total:r,stepTitle:t,stepDescription:o,headingLevel:a=2,steps:l,counterLabel:n}){let s=`h${a}`,p=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:`${p}%`}})}),jsx("div",{className:"fh-step-progress__info",children:jsx("span",{className:"fh-step-progress__counter",children:n??`Step ${e} of ${r}`})}),l&&jsx("ol",{className:"fh-step-progress__steps",children:l.map((i,d)=>{let m=i.title||`Step ${d+1}`;return jsxs("li",{className:`fh-step-progress__step${i.errorCount?" fh-step-progress__step--invalid":""}`,"aria-current":d+1===e?"step":void 0,children:[d+1===e?jsx("strong",{children:m}):m,i.errorCount>0&&` \xB7 ${i.errorCount} ${i.errorCount===1?"error":"errors"}`]},i.id)})}),t&&jsx(s,{className:"fh-step-progress__title",children:t}),o&&jsx("p",{className:"fh-step-progress__description",children:o})]})}function k(e){let r=useCallback(o=>e.subscribe(o),[e]),t=useCallback(()=>e.getSnapshot(),[e]);return useSyncExternalStore(r,t,t)}function ge(e){let r=useCallback(o=>e.subscribeStructure(o),[e]),t=useCallback(()=>e.getStructureSnapshot(),[e]);return useSyncExternalStore(r,t,t)}function Ce({engine:e,definition:r,loading:t,ActionsComponent:o,labels:a,onSubmit:l,onNext:n,onPrev:s,onSkip:p,onCancel:i}){k(e);let d=e.currentStep,m=e.isLastStep||!e.isMultiStep,u=e.isMultiStep&&!m?(d?.next||void 0)?.label??labelFor("continue",{},a,r.labels):r.submit?.label??"Submit",v=e.isMultiStep&&!e.isFirstStep&&d?.back!==false,C=(d?.back||void 0)?.label??labelFor("back",{},a,r.labels),R=useCallback(async()=>{e.isMultiStep&&!m?await n():l();},[e,m,n,l]);return o?jsx(o,{submitAction:r.submit,nextAction:d?.next,backAction:d?.back,cancelAction:r.cancel,skipAction:d?.skip,isFirstStep:e.isFirstStep,isLastStep:m,isMultiStep:e.isMultiStep,loading:t||e.stepValidating||e.submitting,values:e.getSubmitValues(),onSubmit:l,onNext:n,onPrev:s,onCancel:i,onSkip:p,primaryLabel:u,showPrimary:m||d?.next!==false,showBack:v,backLabel:C,showSkip:!!d?.skip&&d.next!==false,onPrimary:R}):null}function ke({engine:e,formId:r,onSelect:t,labels:o}){k(e);let l=(e.isMultiStep?e.visibleSteps.flatMap(n=>n.fields):e.visibleFields).filter(n=>e.errors[n.key]!==void 0);return l.length===0?null:jsxs("div",{className:"fh-error-summary",role:"alert",children:[jsx("strong",{className:"fh-error-summary__title",children:labelFor("errorSummary",{},o,e.definition.labels)}),jsx("ul",{className:"fh-error-summary__list",children:l.map(n=>jsx("li",{children:jsxs("a",{className:"fh-error-summary__link",href:`#${fieldDomId(r,n.key)}`,onClick:s=>{s.preventDefault(),t(n.key);},children:[n.label,": ",e.errors[n.key]]})},n.key))})]})}var Ye=()=>{};function H({id:e,field:r,value:t,error:o,loading:a,disabled:l,components:n,onChange:s,onCommit:p,onBlur:i,onFocus:d}){let m=n?.[r.type];return m?jsx(m,{id:e,field:r,value:t,error:o,loading:a,disabled:l,onChange:s,onCommit:p,onBlur:i??Ye,onFocus:d}):jsxs("div",{children:["Unsupported field type: ",r.type]})}var Pe=memo(function({engine:r,formId:t,field:o,options:a,disabled:l,components:n,onChange:s,onCommit:p,onBlur:i,onFocus:d}){let m=useCallback(x=>r.subscribeField(o.key,x),[r,o.key]),u=useCallback(()=>r.getFieldSnapshot(o.key),[r,o.key]);useSyncExternalStore(m,u,u);let v=useCallback(x=>s(o.key,x),[o.key,s]),C=useCallback(x=>p(o.key,x),[o.key,p]),R=useCallback(()=>i(o.key),[o.key,i]),_=useCallback(()=>d(o.key),[o.key,d]),P=a?{...o,options:a}:o;return jsx(H,{id:fieldDomId(t,o.key),field:P,value:r.values[o.key],error:r.errors[o.key],loading:r.fieldLoading[o.key],disabled:l,components:n,onChange:v,onCommit:C,onBlur:R,onFocus:_})});function sr(e,r){return e?.length===r.length&&e.every((t,o)=>t.value===r[o].value&&t.label===r[o].label)}function _e(e,r,t){let[o,a]=useState({}),l=useRef(new Map);return useEffect(()=>{if(!t){a(i=>Object.keys(i).length>0?{}:i);return}let n=true,s=[],p=(i,d)=>{n&&a(m=>sr(m[i],d)?m:{...m,[i]:d});};for(let i of e){if(!i.optionsFrom)continue;let d=t[i.optionsFrom];if(!d)continue;let m=()=>{let u=(l.current.get(i.key)??0)+1;l.current.set(i.key,u);try{let v=d(r.values);if(Array.isArray(v)){p(i.key,v);return}v.then(C=>{l.current.get(i.key)===u&&p(i.key,C);}).catch(()=>{});}catch{}};m();for(let u of new Set(i.optionsDependsOn??[]))s.push(r.subscribeField(u,m));}return ()=>{n=false;for(let i of s)i();}},[r,e,t]),o}var Ee=memo(function({engine:r,formId:t,loading:o,components:a,optionsProviders:l,onChange:n,onCommit:s,onBlur:p,onFocus:i}){ge(r),k(r);let d=r.visibleFields,m=_e(d,r,l);return jsx("div",{className:"fh-form__fields",children:d.map(u=>jsx(Pe,{engine:r,formId:t,field:u,options:m[u.key]??u.options,disabled:o||r.stepValidating||r.submitting,components:a,onChange:n,onCommit:s,onBlur:p,onFocus:i},u.key))})});function Re({engine:e,ProgressComponent:r,headingLevel:t,marks:o,labels:a}){if(k(e),!e.isMultiStep||!r)return null;let l=o?e.stepErrors:{},{current:n,total:s}=e.progress;return jsx(r,{current:n,total:s,counterLabel:labelFor("stepOf",{current:n,total:s},a,e.definition.labels),stepTitle:e.currentStep?.title,stepDescription:e.currentStep?.description,headingLevel:t,steps:o?e.visibleSteps.map(({id:p,title:i})=>({id:p,title:i,errorCount:l[p]?.length??0})):void 0})}function we({engine:e,actionError:r}){k(e);let t=r?[...e.topLevelErrors,r]:e.topLevelErrors;return t.length===0?null:jsx("div",{className:"fh-form__top-errors",role:"alert",children:t.map((o,a)=>jsx("p",{className:"fh-form__top-error",children:o},a))})}function j(e,r,t){let o=useRef(t);o.current=t;let a=useRef(null),l=useRef(e);(a.current===null||l.current!==e)&&(a.current=new FormEngine(e,r,{validators:t?.validators,messages:t?.messages,get onStepValidate(){return o.current?.onStepValidate},get onBeforeStepChange(){return o.current?.onBeforeStepChange},get onAfterStepChange(){return o.current?.onAfterStepChange},get onBeforeSubmit(){return o.current?.onBeforeSubmit},get onAfterSubmit(){return o.current?.onAfterSubmit},onWarning:t?.onWarning}),l.current=e);let n=a.current;return useEffect(()=>()=>n.cancelPendingActions(),[n]),n}function cr(e,r,t){let o=j(e,r,t);return k(o),o}function Le(e,r){let{loading:t,onError:o,onFieldChange:a,onSubmit:l,onAnalyticsEvent:n}=r,[s,p]=useState(null),[i,d]=useState(0),m=useCallback(async b=>{if(t)return;p(null);let f=e.errors;try{!await b()&&e.errors!==f&&Object.keys(e.errors).length>0&&d(S=>S+1);}catch(S){o?o(S):p({engine:e,message:S instanceof Error?S.message:"Form action failed"});}},[e,t,o]),u=useCallback(()=>m(async()=>!isActionDisabled(e.isLastStep?void 0:e.currentStep?.next,e.getSubmitValues())&&e.next()),[m,e]),v=useCallback(()=>m(()=>e.back()),[m,e]),C=useCallback((b,f)=>{t||e.stepValidating||e.submitting||(e.setValue(b,f),a?.(b,f,e.values));},[e,t,a]),R=useCallback((b,f)=>{if(t||e.stepValidating||e.submitting)return;let S=e.currentStep,E=e.visibleFields.find(D=>D.key===b);E&&(C(b,f),E.autoAdvance&&e.currentStep?.id===S?.id&&!e.isLastStep&&m(()=>autoAdvance(e)));},[e,t,m,C]),_=useCallback(async(b,f)=>(n?.({type:"form_submitted",fieldCount:Object.keys(b).length}),l(b,f)),[l,n]),P=useCallback(async b=>{let f=await b;if(!f)for(let[S,E]of Object.entries(e.errors))n?.({type:"field_error",fieldKey:S,error:E});return f},[e,n]),x=useCallback(()=>m(async()=>!isActionDisabled(e.definition.submit,e.getSubmitValues())&&P(e.submit(_))),[e,m,_,P]),c=useCallback(()=>m(()=>P(e.skip((b,f)=>(n?.({type:"step_skipped",stepId:e.currentStep.id}),_(b,f))))),[m,e,_,P,n]),L=s?.engine===e?s.message:null;return {next:u,prev:v,skip:c,update:C,commit:R,submit:x,actionError:L,invalidAttempts:i}}var Cr=0,De=new WeakMap;function Sr(e){let r=De.get(e);return r===void 0&&De.set(e,r=Cr++),r}function ee(e){let{definition:r,initialValues:t,loading:o=false,components:a,optionsProviders:l,actionsComponent:n,progressComponent:s,headingLevel:p=2,onAnalyticsEvent:i}=e,d=useId(),m=useRef(null),u=useRef(false),v=useRef(null),C=useRef(null),[R,_]=useState(0),P=useRef(false),x={...e,onAfterStepChange:async h=>{u.current=true,h.reason!=="back"&&(i?.({type:h.reason==="skip"?"step_skipped":"step_completed",stepId:h.fromStepId}),i?.({type:"step_viewed",stepId:h.toStepId,stepIndex:c.currentStepIndex})),await e.onAfterStepChange?.(h);}},c=j(r,t,x),L=k(c),b=useRef(c.currentStep?.id),f=Le(c,e),S=useRef(0),E=useRef(null);useEffect(()=>{if(!e.errors)return;let h=E.current?.engine===c?E.current.errors:void 0;shouldApplyExternalErrors(c,h,e.errors)&&(E.current={engine:c,errors:e.errors},c.setErrors(e.errors),!(Object.keys(e.errors).length===0||!canMoveFocus(m.current))&&(u.current=true,_(M=>M+1)));},[e.errors,c]),useEffect(()=>{if(L!==c.getSnapshot())return;if((b.current!==c.currentStep?.id||S.current!==f.invalidAttempts)&&(u.current=true),b.current=c.currentStep?.id,S.current=f.invalidAttempts,c.stepValidating||c.submitting){P.current=true;return}let h=P.current;if(P.current=false,!u.current){h&&restoreFocus(m.current,C.current);return}u.current=false;let M=v.current;v.current=null,focusField(m.current,d,M);},[c,L,f.invalidAttempts,R]);let D=useCallback(h=>{i?.({type:"field_focused",fieldKey:h});},[i]),U=useCallback(h=>{i?.({type:"field_blurred",fieldKey:h,hasValue:c.values[h]!==void 0&&c.values[h]!==""});},[c,i]),z=useCallback(()=>e.onCancel?.(),[e.onCancel]),G=useCallback(h=>{v.current=h,u.current=true,_(M=>M+1),c.goToStepWithField(h);},[c]);return jsxs("form",{ref:m,lang:r.lang,onFocusCapture:h=>{C.current=h.target;},className:"fh-form",tabIndex:-1,"aria-busy":c.stepValidating||c.submitting||o,onSubmit:h=>{h.preventDefault(),c.isLastStep?f.submit():f.next();},children:[jsx(Re,{engine:c,ProgressComponent:s,headingLevel:p,marks:e.stepErrorMarks,labels:e.labels}),e.errorSummary&&jsx(ke,{engine:c,formId:d,onSelect:G,labels:e.labels}),jsx(Ee,{engine:c,formId:d,loading:o,components:a,optionsProviders:l,onChange:f.update,onCommit:f.commit,onBlur:U,onFocus:D},Sr(c)),jsx(we,{engine:c,actionError:f.actionError}),jsx(Ce,{engine:c,definition:r,loading:o,labels:e.labels,ActionsComponent:n,onSubmit:f.submit,onNext:f.next,onPrev:f.prev,onSkip:f.skip,onCancel:z})]})}function Me({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 F(e){return e.id??fieldDomId(void 0,e.field.key)}function re(e,r,t){return [e.helperText&&`${r}-helper`,t&&`${r}-error`].filter(Boolean).join(" ")||void 0}function $({disabled:e,loading:r,onBlur:t,onFocus:o}){return {disabled:e||r,onBlur:t,onFocus:o}}function g(e){let r=F(e);return {id:r,name:e.field.key,...$(e),"aria-invalid":!!e.error,"aria-required":!!e.field.validation?.required||void 0,"aria-describedby":re(e.field,r,e.error)}}function y({id:e,field:r,error:t,variant:o,children:a}){let l=o==="radio"||o==="multiselect",n=o&&!l,s=l?"fieldset":"div",p=`fh-field__${o}-${l?"group":"wrapper"}`,i=r.helperText&&jsx("p",{id:`${e}-helper`,className:"fh-field__helper",children:r.helperText});return jsxs(s,{className:o?`fh-field fh-field--${o}`:"fh-field","aria-invalid":l&&!!t||void 0,"aria-describedby":l?re(r,e,t):void 0,children:[l&&r.label&&jsx("legend",{className:"fh-field__label",children:r.label}),!o&&jsx(Me,{field:r,inputId:e}),!n&&i,o?jsxs("div",{className:l&&r.layout==="inline"?`${p} ${p}--inline`:p,children:[a,n&&r.label&&jsx("label",{className:"fh-field__label",htmlFor:e,children:r.label})]}):a,n&&i,t&&jsx("p",{id:`${e}-error`,className:"fh-field__error",role:"alert",children:t})]})}function te(e){let{field:r,value:t,error:o,onChange:a}=e,l=`${F(e)}-list`,n=r.options??[];return jsxs(y,{id:F(e),field:r,error:o,children:[jsx("input",{...g(e),type:"text",list:l,className:"fh-field__input fh-field__input--autocomplete",value:t??"",placeholder:r.placeholder,autoComplete:"off",onChange:s=>a(s.target.value)}),jsx("datalist",{id:l,children:n.map(s=>jsx("option",{value:s.value,children:s.label},s.value))})]})}function ne(e){return jsx(y,{id:F(e),field:e.field,error:e.error,variant:"checkbox",children:jsx("input",{...g(e),type:"checkbox",className:"fh-field__checkbox",checked:!!e.value,onChange:r=>e.onChange(r.target.checked)})})}function ie(e){return jsx(y,{id:F(e),field:e.field,error:e.error,children:jsx("input",{...g(e),type:"date",className:"fh-field__input fh-field__input--date",value:String(e.value??""),onChange:r=>e.onChange(r.target.value)})})}function le(e){return jsx(y,{id:F(e),field:e.field,error:e.error,children:jsx("input",{...g(e),type:"datetime-local",className:"fh-field__input fh-field__input--datetime",value:String(e.value??""),onChange:r=>e.onChange(r.target.value)})})}function se(e){let{field:r,error:t,onChange:o}=e;return jsx(y,{id:F(e),field:r,error:t,children:jsx("input",{...g(e),type:"file",className:"fh-field__input fh-field__input--file",accept:r.accept,onChange:a=>{let l=a.target.files;o(l&&l.length>0?l[0]:null);}})})}function me(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.options??[],n=Array.isArray(t)?t:[];function s(p){let i=n.includes(p)?n.filter(d=>d!==p):[...n,p];a(i);}return jsx(y,{id:F(e),field:r,error:o,variant:"multiselect",children:l.map((p,i)=>{let d=`${F(e)}-${i}`;return jsxs("div",{className:"fh-field__multiselect-option",children:[jsx("input",{...$(e),id:d,name:r.key,type:"checkbox",className:"fh-field__checkbox",checked:n.includes(p.value),onChange:()=>s(p.value)}),jsx("label",{className:"fh-field__multiselect-label",htmlFor:d,children:p.label})]},p.value)})})}function de(e){let{field:r,value:t,error:o,onChange:a,onCommit:l}=e,n=useRef(false),s=r.autoAdvance&&l,p=r.options??[];return jsx(y,{id:F(e),field:r,error:o,variant:"radio",children:p.map((i,d)=>{let m=`${F(e)}-${d}`;return jsxs("div",{className:"fh-field__radio-option",children:[jsx("input",{...$(e),id:m,type:"radio",className:"fh-field__radio",name:r.key,value:i.value,checked:String(t)===String(i.value),onChange:()=>{(!s||n.current)&&a(i.value);},onKeyDown:u=>{n.current=u.key.startsWith("Arrow"),s&&u.key===" "&&u.preventDefault(),s&&u.key==="Enter"&&(u.preventDefault(),u.repeat||s(i.value));},onKeyUp:u=>{n.current=false,s&&u.key===" "&&(u.preventDefault(),s(i.value));},onPointerDown:()=>{n.current=false;},onClick:u=>{!s||n.current||(u.detail>1?u.preventDefault():s(i.value));}}),jsx("label",{className:"fh-field__radio-label",htmlFor:m,children:i.label})]},i.value)})})}function ce(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.options??[],n=t??"";return jsx(y,{id:F(e),field:r,error:o,children:jsxs("select",{...g(e),className:"fh-field__input fh-field__input--select",value:n,onChange:s=>a(s.target.value),children:[(r.placeholder||n==="")&&jsx("option",{value:"",disabled:true,hidden:!r.placeholder,children:r.placeholder}),l.map(s=>jsx("option",{value:s.value,children:s.label},s.value))]})})}function fe(e){return jsx(y,{id:F(e),field:e.field,error:e.error,variant:"switch",children:jsx("input",{...g(e),type:"checkbox",role:"switch",className:"fh-field__switch",checked:!!e.value,onChange:r=>e.onChange(r.target.checked)})})}function I(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.type==="number",[n,s]=useState(""),p=m=>{let u=m.target.value;s(u),a(l&&u!==""?Number(u):u);},i=l&&n&&Object.is(Number(n),t)?n:String(t??""),d=r.type==="email"?"email":r.type==="phone"?"tel":l?"number":r.type==="password"?"password":"text";return jsx(y,{id:F(e),field:r,error:o,children:jsx("input",{...g(e),type:d,className:"fh-field__input",value:i,placeholder:r.placeholder??r.mask,inputMode:r.inputMode,onChange:p})})}var Lr=3;function Fe(e){let{field:r,value:t,error:o,onChange:a}=e;return jsx(y,{id:F(e),field:r,error:o,children:jsx("textarea",{...g(e),className:"fh-field__input fh-field__input--textarea",value:t??"",placeholder:r.placeholder,rows:r.rows??Lr,onChange:l=>a(l.target.value)})})}var Ue={text:I,email:I,phone:I,number:I,password:I,select:ce,autocomplete:te,multiselect:me,checkbox:ne,radio:de,switch:fe,file:se,date:ie,datetime:le,textarea:Fe};function W(e){let r={...Ue};for(let[t,o]of Object.entries(e??{}))o&&(r[t]=o);return r}function Dr({components:e,actionsComponent:r,progressComponent:t,...o}){let a=useMemo(()=>W(e),[e]);return jsx(ee,{...o,components:a,actionsComponent:r??Q,progressComponent:t??X})}function Vr({components:e,id:r,...t}){let o=useId(),a=useMemo(()=>W(e),[e]);return jsx(H,{...t,id:r??fieldDomId(o,t.field.key),components:a})}export{te as AutocompleteField,ne as CheckboxField,ie as DateField,le as DateTimeField,se as FileField,Q as FormActions,Dr as FormRenderer,X as FormStepProgress,Vr as FormhausField,ee as HeadlessFormRenderer,me as MultiselectField,de as RadioField,ce as SelectField,fe as SwitchField,I as TextField,Fe as TextareaField,Ue as defaultFieldComponents,cr as useFormEngine};//# sourceMappingURL=index.js.map
|
|
1
|
+
'use client';import {memo,useCallback,useSyncExternalStore,useState,useRef,useEffect,useId,useMemo}from'react';import {isActionDisabled,FormEngine}from'@formhaus/core';import {jsx,jsxs}from'react/jsx-runtime';import {fieldDomId,shouldApplyExternalErrors,canMoveFocus,restoreFocus,focusField,autoAdvance,labelFor}from'@formhaus/core/internal';function J(e,r){return `fh-form-actions__button fh-form-actions__button--${e&&e.variant||r}`}function Q({submitAction:e,nextAction:r,backAction:t,cancelAction:o,skipAction:a,isFirstStep:l,isLastStep:n,isMultiStep:s,loading:d,showPrimary:i=true,values:u={},onSubmit:m,onNext:p,onPrev:v,onCancel:C,onSkip:R,primaryLabel:_,showBack:P,backLabel:x,showSkip:c,skipLabel:L,onPrimary:b}){let f=P??(s&&!l&&t!==false),S=x??(t||void 0)?.label??"Back",E=c??(s&&!!a),D=L??a?.label??"Skip",U=_??(s&&!n?"Continue":e?.label??"Submit"),z=!!d||isActionDisabled(s&&!n?r:e,u),G=b??(s&&!n?p:m);return jsxs("div",{className:"fh-form-actions",children:[jsxs("div",{className:"fh-form-actions__secondary",children:[f&&jsx("button",{type:"button",className:J(t,"secondary"),disabled:d,onClick:v,children:S}),o&&jsx("button",{type:"button",className:J(o,"text"),disabled:d,onClick:C,children:o.label}),E&&jsx("button",{type:"button",className:J(a,"text"),disabled:d,onClick:R,children:D})]}),i&&jsx("button",{type:"submit",className:"fh-form-actions__button fh-form-actions__button--primary",disabled:z,"aria-busy":d,onClick:h=>{h.preventDefault(),G();},children:U})]})}function X({current:e,total:r,stepTitle:t,stepDescription:o,headingLevel:a=2,steps:l,counterLabel:n}){let s=`h${a}`,d=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:`${d}%`}})}),jsx("div",{className:"fh-step-progress__info",children:jsx("span",{className:"fh-step-progress__counter",children:n??`Step ${e} of ${r}`})}),l&&jsx("ol",{className:"fh-step-progress__steps",children:l.map((i,u)=>{let m=i.title||`Step ${u+1}`;return jsxs("li",{className:`fh-step-progress__step${i.errorCount?" fh-step-progress__step--invalid":""}`,"aria-current":u+1===e?"step":void 0,children:[u+1===e?jsx("strong",{children:m}):m,i.errorCount>0&&` \xB7 ${i.errorCount} ${i.errorCount===1?"error":"errors"}`]},i.id)})}),t&&jsx(s,{className:"fh-step-progress__title",children:t}),o&&jsx("p",{className:"fh-step-progress__description",children:o})]})}function k(e){let r=useCallback(o=>e.subscribe(o),[e]),t=useCallback(()=>e.getSnapshot(),[e]);return useSyncExternalStore(r,t,t)}function ge(e){let r=useCallback(o=>e.subscribeStructure(o),[e]),t=useCallback(()=>e.getStructureSnapshot(),[e]);return useSyncExternalStore(r,t,t)}function Ce({engine:e,definition:r,loading:t,ActionsComponent:o,labels:a,onSubmit:l,onNext:n,onPrev:s,onSkip:d,onCancel:i}){k(e);let u=e.currentStep,m=e.isLastStep||!e.isMultiStep,p=e.isMultiStep&&!m?(u?.next||void 0)?.label??labelFor("continue",{},a,r.labels):r.submit?.label??"Submit",v=e.isMultiStep&&!e.isFirstStep&&u?.back!==false,C=(u?.back||void 0)?.label??labelFor("back",{},a,r.labels),R=useCallback(async()=>{e.isMultiStep&&!m?await n():l();},[e,m,n,l]);return o?jsx(o,{submitAction:r.submit,nextAction:u?.next,backAction:u?.back,cancelAction:r.cancel,skipAction:u?.skip,isFirstStep:e.isFirstStep,isLastStep:m,isMultiStep:e.isMultiStep,loading:t||e.stepValidating||e.submitting,values:e.getSubmitValues(),onSubmit:l,onNext:n,onPrev:s,onCancel:i,onSkip:d,primaryLabel:p,showPrimary:m||u?.next!==false,showBack:v,backLabel:C,showSkip:!!u?.skip&&u.next!==false,onPrimary:R}):null}function ke({engine:e,formId:r,onSelect:t,labels:o}){k(e);let l=(e.isMultiStep?e.visibleSteps.flatMap(n=>n.fields):e.visibleFields).filter(n=>e.errors[n.key]!==void 0);return l.length===0?null:jsxs("div",{className:"fh-error-summary",role:"alert",children:[jsx("strong",{className:"fh-error-summary__title",children:labelFor("errorSummary",{},o,e.definition.labels)}),jsx("ul",{className:"fh-error-summary__list",children:l.map(n=>jsx("li",{children:jsxs("a",{className:"fh-error-summary__link",href:`#${fieldDomId(r,n.key,e.definition)}`,onClick:s=>{s.preventDefault(),t(n.key);},children:[n.label,": ",e.errors[n.key]]})},n.key))})]})}var Ye=()=>{};function H({id:e,field:r,value:t,error:o,loading:a,disabled:l,components:n,onChange:s,onCommit:d,onBlur:i,onFocus:u}){let m=n?.[r.type];return m?jsx(m,{id:e,field:r,value:t,error:o,loading:a,disabled:l,onChange:s,onCommit:d,onBlur:i??Ye,onFocus:u}):jsxs("div",{children:["Unsupported field type: ",r.type]})}var Pe=memo(function({engine:r,formId:t,field:o,options:a,disabled:l,components:n,onChange:s,onCommit:d,onBlur:i,onFocus:u}){let m=useCallback(x=>r.subscribeField(o.key,x),[r,o.key]),p=useCallback(()=>r.getFieldSnapshot(o.key),[r,o.key]);useSyncExternalStore(m,p,p);let v=useCallback(x=>s(o.key,x),[o.key,s]),C=useCallback(x=>d(o.key,x),[o.key,d]),R=useCallback(()=>i(o.key),[o.key,i]),_=useCallback(()=>u(o.key),[o.key,u]),P=a?{...o,options:a}:o;return jsx(H,{id:fieldDomId(t,o.key,r.definition),field:P,value:r.values[o.key],error:r.errors[o.key],loading:r.fieldLoading[o.key],disabled:l,components:n,onChange:v,onCommit:C,onBlur:R,onFocus:_})});function sr(e,r){return e?.length===r.length&&e.every((t,o)=>t.value===r[o].value&&t.label===r[o].label)}function _e(e,r,t){let[o,a]=useState({}),l=useRef(new Map);return useEffect(()=>{if(!t){a(i=>Object.keys(i).length>0?{}:i);return}let n=true,s=[],d=(i,u)=>{n&&a(m=>sr(m[i],u)?m:{...m,[i]:u});};for(let i of e){if(!i.optionsFrom)continue;let u=t[i.optionsFrom];if(!u)continue;let m=()=>{let p=(l.current.get(i.key)??0)+1;l.current.set(i.key,p);try{let v=u(r.values);if(Array.isArray(v)){d(i.key,v);return}v.then(C=>{l.current.get(i.key)===p&&d(i.key,C);}).catch(()=>{});}catch{}};m();for(let p of new Set(i.optionsDependsOn??[]))s.push(r.subscribeField(p,m));}return ()=>{n=false;for(let i of s)i();}},[r,e,t]),o}var Ee=memo(function({engine:r,formId:t,loading:o,components:a,optionsProviders:l,onChange:n,onCommit:s,onBlur:d,onFocus:i}){ge(r),k(r);let u=r.visibleFields,m=_e(u,r,l);return jsx("div",{className:"fh-form__fields",children:u.map(p=>jsx(Pe,{engine:r,formId:t,field:p,options:p.optionsFrom&&l?.[p.optionsFrom]&&m[p.key]||p.options,disabled:o||r.stepValidating||r.submitting,components:a,onChange:n,onCommit:s,onBlur:d,onFocus:i},p.key))})});function Re({engine:e,ProgressComponent:r,headingLevel:t,marks:o,labels:a}){if(k(e),!e.isMultiStep||!r)return null;let l=o?e.stepErrors:{},{current:n,total:s}=e.progress;return jsx(r,{current:n,total:s,counterLabel:labelFor("stepOf",{current:n,total:s},a,e.definition.labels),stepTitle:e.currentStep?.title,stepDescription:e.currentStep?.description,headingLevel:t,steps:o?e.visibleSteps.map(({id:d,title:i})=>({id:d,title:i,errorCount:l[d]?.length??0})):void 0})}function we({engine:e,actionError:r}){k(e);let t=r?[...e.topLevelErrors,r]:e.topLevelErrors;return t.length===0?null:jsx("div",{className:"fh-form__top-errors",role:"alert",children:t.map((o,a)=>jsx("p",{className:"fh-form__top-error",children:o},a))})}function j(e,r,t){let o=useRef(t);o.current=t;let a=useRef(null),l=useRef(e);(a.current===null||l.current!==e)&&(a.current=new FormEngine(e,r,{validators:t?.validators,messages:t?.messages,get onStepValidate(){return o.current?.onStepValidate},get onBeforeStepChange(){return o.current?.onBeforeStepChange},get onAfterStepChange(){return o.current?.onAfterStepChange},get onBeforeSubmit(){return o.current?.onBeforeSubmit},get onAfterSubmit(){return o.current?.onAfterSubmit},onWarning:t?.onWarning}),l.current=e);let n=a.current;return useEffect(()=>()=>n.cancelPendingActions(),[n]),n}function cr(e,r,t){let o=j(e,r,t);return k(o),o}function Le(e,r){let{loading:t,onError:o,onFieldChange:a,onSubmit:l,onAnalyticsEvent:n}=r,[s,d]=useState(null),[i,u]=useState(0),m=useCallback(async b=>{if(t)return;d(null);let f=e.errors;try{!await b()&&e.errors!==f&&Object.keys(e.errors).length>0&&u(S=>S+1);}catch(S){o?o(S):d({engine:e,message:S instanceof Error?S.message:"Form action failed"});}},[e,t,o]),p=useCallback(()=>m(async()=>!isActionDisabled(e.isLastStep?void 0:e.currentStep?.next,e.getSubmitValues())&&e.next()),[m,e]),v=useCallback(()=>m(()=>e.back()),[m,e]),C=useCallback((b,f)=>{t||e.stepValidating||e.submitting||(e.setValue(b,f),a?.(b,f,e.values));},[e,t,a]),R=useCallback((b,f)=>{if(t||e.stepValidating||e.submitting)return;let S=e.currentStep,E=e.visibleFields.find(D=>D.key===b);E&&(C(b,f),E.autoAdvance&&e.currentStep?.id===S?.id&&!e.isLastStep&&m(()=>autoAdvance(e)));},[e,t,m,C]),_=useCallback(async(b,f)=>(n?.({type:"form_submitted",fieldCount:Object.keys(b).length}),l(b,f)),[l,n]),P=useCallback(async b=>{let f=await b;if(!f)for(let[S,E]of Object.entries(e.errors))n?.({type:"field_error",fieldKey:S,error:E});return f},[e,n]),x=useCallback(()=>m(async()=>!isActionDisabled(e.definition.submit,e.getSubmitValues())&&P(e.submit(_))),[e,m,_,P]),c=useCallback(()=>m(()=>P(e.skip((b,f)=>(n?.({type:"step_skipped",stepId:e.currentStep.id}),_(b,f))))),[m,e,_,P,n]),L=s?.engine===e?s.message:null;return {next:p,prev:v,skip:c,update:C,commit:R,submit:x,actionError:L,invalidAttempts:i}}var Cr=0,De=new WeakMap;function Sr(e){let r=De.get(e);return r===void 0&&De.set(e,r=Cr++),r}function ee(e){let{definition:r,initialValues:t,loading:o=false,components:a,optionsProviders:l,actionsComponent:n,progressComponent:s,headingLevel:d=2,onAnalyticsEvent:i}=e,u=useId(),m=useRef(null),p=useRef(false),v=useRef(null),C=useRef(null),[R,_]=useState(0),P=useRef(false),x={...e,onAfterStepChange:async h=>{p.current=true,h.reason!=="back"&&(i?.({type:h.reason==="skip"?"step_skipped":"step_completed",stepId:h.fromStepId}),i?.({type:"step_viewed",stepId:h.toStepId,stepIndex:c.currentStepIndex})),await e.onAfterStepChange?.(h);}},c=j(r,t,x),L=k(c),b=useRef(c.currentStep?.id),f=Le(c,e),S=useRef(0),E=useRef(null);useEffect(()=>{if(!e.errors)return;let h=E.current?.engine===c?E.current.errors:void 0;shouldApplyExternalErrors(c,h,e.errors)&&(E.current={engine:c,errors:e.errors},c.setErrors(e.errors),!(Object.keys(e.errors).length===0||!canMoveFocus(m.current))&&(p.current=true,_(M=>M+1)));},[e.errors,c]),useEffect(()=>{if(L!==c.getSnapshot())return;if((b.current!==c.currentStep?.id||S.current!==f.invalidAttempts)&&(p.current=true),b.current=c.currentStep?.id,S.current=f.invalidAttempts,c.stepValidating||c.submitting){P.current=true;return}let h=P.current;if(P.current=false,!p.current){h&&restoreFocus(m.current,C.current);return}p.current=false;let M=v.current;v.current=null,focusField(m.current,u,M,c.definition);},[c,L,f.invalidAttempts,R]);let D=useCallback(h=>{i?.({type:"field_focused",fieldKey:h});},[i]),U=useCallback(h=>{i?.({type:"field_blurred",fieldKey:h,hasValue:c.values[h]!==void 0&&c.values[h]!==""});},[c,i]),z=useCallback(()=>e.onCancel?.(),[e.onCancel]),G=useCallback(h=>{v.current=h,p.current=true,_(M=>M+1),c.goToStepWithField(h);},[c]);return jsxs("form",{ref:m,lang:r.lang,onFocusCapture:h=>{C.current=h.target;},className:"fh-form",tabIndex:-1,"aria-busy":c.stepValidating||c.submitting||o,onSubmit:h=>{h.preventDefault(),c.isLastStep?f.submit():f.next();},children:[jsx(Re,{engine:c,ProgressComponent:s,headingLevel:d,marks:e.stepErrorMarks,labels:e.labels}),e.errorSummary&&jsx(ke,{engine:c,formId:u,onSelect:G,labels:e.labels}),jsx(Ee,{engine:c,formId:u,loading:o,components:a,optionsProviders:l,onChange:f.update,onCommit:f.commit,onBlur:U,onFocus:D},Sr(c)),jsx(we,{engine:c,actionError:f.actionError}),jsx(Ce,{engine:c,definition:r,loading:o,labels:e.labels,ActionsComponent:n,onSubmit:f.submit,onNext:f.next,onPrev:f.prev,onSkip:f.skip,onCancel:z})]})}function Me({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 F(e){return e.id??fieldDomId(void 0,e.field.key)}function re(e,r,t){return [e.helperText&&`${r}-helper`,t&&`${r}-error`].filter(Boolean).join(" ")||void 0}function $({disabled:e,loading:r,onBlur:t,onFocus:o}){return {disabled:e||r,onBlur:t,onFocus:o}}function g(e){let r=F(e);return {id:r,name:e.field.key,...$(e),"aria-invalid":!!e.error,"aria-required":!!e.field.validation?.required||void 0,"aria-describedby":re(e.field,r,e.error)}}function y({id:e,field:r,error:t,variant:o,children:a}){let l=o==="radio"||o==="multiselect",n=o&&!l,s=l?"fieldset":"div",d=`fh-field__${o}-${l?"group":"wrapper"}`,i=r.helperText&&jsx("p",{id:`${e}-helper`,className:"fh-field__helper",children:r.helperText});return jsxs(s,{className:o?`fh-field fh-field--${o}`:"fh-field","aria-invalid":l&&!!t||void 0,"aria-describedby":l?re(r,e,t):void 0,children:[l&&r.label&&jsx("legend",{className:"fh-field__label",children:r.label}),!o&&jsx(Me,{field:r,inputId:e}),!n&&i,o?jsxs("div",{className:l&&r.layout==="inline"?`${d} ${d}--inline`:d,children:[a,n&&r.label&&jsx("label",{className:"fh-field__label",htmlFor:e,children:r.label})]}):a,n&&i,t&&jsx("p",{id:`${e}-error`,className:"fh-field__error",role:"alert",children:t})]})}function te(e){let{field:r,value:t,error:o,onChange:a}=e,l=`${F(e)}-list`,n=r.options??[];return jsxs(y,{id:F(e),field:r,error:o,children:[jsx("input",{...g(e),type:"text",list:l,className:"fh-field__input fh-field__input--autocomplete",value:t??"",placeholder:r.placeholder,autoComplete:"off",onChange:s=>a(s.target.value)}),jsx("datalist",{id:l,children:n.map(s=>jsx("option",{value:s.value,children:s.label},s.value))})]})}function ne(e){return jsx(y,{id:F(e),field:e.field,error:e.error,variant:"checkbox",children:jsx("input",{...g(e),type:"checkbox",className:"fh-field__checkbox",checked:!!e.value,onChange:r=>e.onChange(r.target.checked)})})}function ie(e){return jsx(y,{id:F(e),field:e.field,error:e.error,children:jsx("input",{...g(e),type:"date",className:"fh-field__input fh-field__input--date",value:String(e.value??""),onChange:r=>e.onChange(r.target.value)})})}function le(e){return jsx(y,{id:F(e),field:e.field,error:e.error,children:jsx("input",{...g(e),type:"datetime-local",className:"fh-field__input fh-field__input--datetime",value:String(e.value??""),onChange:r=>e.onChange(r.target.value)})})}function se(e){let{field:r,error:t,onChange:o}=e;return jsx(y,{id:F(e),field:r,error:t,children:jsx("input",{...g(e),type:"file",className:"fh-field__input fh-field__input--file",accept:r.accept,onChange:a=>{let l=a.target.files;o(l&&l.length>0?l[0]:null);}})})}function me(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.options??[],n=Array.isArray(t)?t:[];function s(d){let i=n.includes(d)?n.filter(u=>u!==d):[...n,d];a(i);}return jsx(y,{id:F(e),field:r,error:o,variant:"multiselect",children:l.map((d,i)=>{let u=`${F(e)}-${i}`;return jsxs("div",{className:"fh-field__multiselect-option",children:[jsx("input",{...$(e),id:u,name:r.key,type:"checkbox",className:"fh-field__checkbox",checked:n.includes(d.value),onChange:()=>s(d.value)}),jsx("label",{className:"fh-field__multiselect-label",htmlFor:u,children:d.label})]},d.value)})})}function de(e){let{field:r,value:t,error:o,onChange:a,onCommit:l}=e,n=useRef(false),s=r.autoAdvance&&l,d=r.options??[];return jsx(y,{id:F(e),field:r,error:o,variant:"radio",children:d.map((i,u)=>{let m=`${F(e)}-${u}`;return jsxs("div",{className:"fh-field__radio-option",children:[jsx("input",{...$(e),id:m,type:"radio",className:"fh-field__radio",name:r.key,value:i.value,checked:String(t)===String(i.value),onChange:()=>{(!s||n.current)&&a(i.value);},onKeyDown:p=>{n.current=p.key.startsWith("Arrow"),s&&p.key===" "&&p.preventDefault(),s&&p.key==="Enter"&&(p.preventDefault(),p.repeat||s(i.value));},onKeyUp:p=>{n.current=false,s&&p.key===" "&&(p.preventDefault(),s(i.value));},onPointerDown:()=>{n.current=false;},onClick:p=>{!s||n.current||(p.detail>1?p.preventDefault():s(i.value));}}),jsx("label",{className:"fh-field__radio-label",htmlFor:m,children:i.label})]},i.value)})})}function ce(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.options??[],n=t??"";return jsx(y,{id:F(e),field:r,error:o,children:jsxs("select",{...g(e),className:"fh-field__input fh-field__input--select",value:n,onChange:s=>a(s.target.value),children:[(r.placeholder||n==="")&&jsx("option",{value:"",disabled:true,hidden:!r.placeholder,children:r.placeholder}),l.map(s=>jsx("option",{value:s.value,children:s.label},s.value))]})})}function fe(e){return jsx(y,{id:F(e),field:e.field,error:e.error,variant:"switch",children:jsx("input",{...g(e),type:"checkbox",role:"switch",className:"fh-field__switch",checked:!!e.value,onChange:r=>e.onChange(r.target.checked)})})}function I(e){let{field:r,value:t,error:o,onChange:a}=e,l=r.type==="number",[n,s]=useState(""),d=m=>{let p=m.target.value;s(p),a(l&&p!==""?Number(p):p);},i=l&&n&&Object.is(Number(n),t)?n:String(t??""),u=r.type==="email"?"email":r.type==="phone"?"tel":l?"number":r.type==="password"?"password":"text";return jsx(y,{id:F(e),field:r,error:o,children:jsx("input",{...g(e),type:u,className:"fh-field__input",value:i,placeholder:r.placeholder??r.mask,inputMode:r.inputMode,onChange:d})})}var Lr=3;function Fe(e){let{field:r,value:t,error:o,onChange:a}=e;return jsx(y,{id:F(e),field:r,error:o,children:jsx("textarea",{...g(e),className:"fh-field__input fh-field__input--textarea",value:t??"",placeholder:r.placeholder,rows:r.rows??Lr,onChange:l=>a(l.target.value)})})}var Ue={text:I,email:I,phone:I,number:I,password:I,select:ce,autocomplete:te,multiselect:me,checkbox:ne,radio:de,switch:fe,file:se,date:ie,datetime:le,textarea:Fe};function W(e){let r={...Ue};for(let[t,o]of Object.entries(e??{}))o&&(r[t]=o);return r}function Dr({components:e,actionsComponent:r,progressComponent:t,...o}){let a=useMemo(()=>W(e),[e]);return jsx(ee,{...o,components:a,actionsComponent:r??Q,progressComponent:t??X})}function Vr({components:e,id:r,...t}){let o=useId(),a=useMemo(()=>W(e),[e]);return jsx(H,{...t,id:r??fieldDomId(o,t.field.key),components:a})}export{te as AutocompleteField,ne as CheckboxField,ie as DateField,le as DateTimeField,se as FileField,Q as FormActions,Dr as FormRenderer,X as FormStepProgress,Vr as FormhausField,ee as HeadlessFormRenderer,me as MultiselectField,de as RadioField,ce as SelectField,fe as SwitchField,I as TextField,Fe as TextareaField,Ue as defaultFieldComponents,cr 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/FormErrorSummary.tsx","../src/FieldResolver.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/fieldProps.ts","../src/fields/FieldShell.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","../src/FormhausField.tsx"],"names":["buttonClass","action","variant","FormActions","submitAction","nextAction","backAction","cancelAction","skipAction","isFirstStep","isLastStep","isMultiStep","loading","showPrimary","values","onSubmit","onNext","onPrev","onCancel","onSkip","primaryLabelProp","showBackProp","backLabelProp","showSkipProp","skipLabelProp","onPrimaryProp","showBack","backLabel","showSkip","skipLabel","primaryLabel","primaryDisabled","isActionDisabled","handlePrimary","jsxs","jsx","event","FormStepProgress","current","total","stepTitle","stepDescription","headingLevel","steps","counterLabel","Heading","percent","step","index","label","useFormSnapshot","engine","subscribe","useCallback","listener","getSnapshot","useSyncExternalStore","useStructureSnapshot","FormActionsController","definition","ActionsComponent","labels","labelFor","FormErrorSummary","formId","onSelect","invalid","field","fieldDomId","noop","FieldResolver","id","value","error","disabled","components","onChange","onCommit","onBlur","onFocus","Component","FormFieldController","memo","options","handleChange","handleCommit","handleBlur","handleFocus","fieldWithOptions","areOptionsEqual","previous","next","option","useFieldOptions","fields","providers","resolved","setResolved","useState","requestVersions","useRef","useEffect","active","unsubscribers","commit","fieldKey","provider","resolve","requestVersion","result","dependency","unsubscribe","FormFieldsController","optionsProviders","resolvedOptions","FormProgressController","ProgressComponent","marks","errors","title","FormTopLevelErrors","actionError","useFormEngineStore","initialValues","optionsRef","engineRef","definitionRef","FormEngine","useFormEngine","useRendererActions","props","onError","onFieldChange","onAnalyticsEvent","failure","setFailure","invalidAttempts","setInvalidAttempts","run","count","prev","update","key","autoAdvance","send","skippedSteps","report","submit","skip","nextKey","engineKeys","engineKey","HeadlessFormRenderer","actionsComponent","progressComponent","useId","formRef","focusPending","focusKey","focusReturn","focusRequest","setFocusRequest","wasBusy","engineOptions","context","version","previousStep","actions","handledInvalid","appliedErrors","shouldApplyExternalErrors","canMoveFocus","request","restore","restoreFocus","focusField","handleFieldFocus","handleFieldBlur","handleCancel","showField","FieldLabel","inputId","fieldId","describedBy","optionProps","inputProps","FieldShell","children","group","inline","Root","container","helper","AutocompleteField","listId","e","opt","CheckboxField","DateField","DateTimeField","FileField","files","MultiselectField","selected","handleToggle","optValue","v","optionId","RadioField","arrowSelection","SelectField","SwitchField","TextField","isNumber","draft","setDraft","text","inputType","DEFAULT_ROWS","TextareaField","defaultFieldComponents","withDefaultFields","merged","type","component","FormRenderer","fieldComponents","useMemo","FormhausField","fallback"],"mappings":"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","file":"index.js","sourcesContent":["import { isActionDisabled, type FormAction } from '@formhaus/core';\nimport type { FormActionsProps } from './types';\n\nfunction buttonClass(action: FormAction | false | undefined, variant: NonNullable<FormAction['variant']>): string {\n return `fh-form-actions__button fh-form-actions__button--${(action && action.variant) || variant}`;\n}\n\nexport function FormActions({\n submitAction,\n nextAction,\n backAction,\n cancelAction,\n skipAction,\n isFirstStep,\n isLastStep,\n isMultiStep,\n loading,\n showPrimary = true,\n values = {},\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n onSkip,\n primaryLabel: primaryLabelProp,\n showBack: showBackProp,\n backLabel: backLabelProp,\n showSkip: showSkipProp,\n skipLabel: skipLabelProp,\n onPrimary: onPrimaryProp,\n}: FormActionsProps) {\n const showBack = showBackProp ?? (isMultiStep && !isFirstStep && backAction !== false);\n const backLabel = backLabelProp ?? (backAction || undefined)?.label ?? 'Back';\n const showSkip = showSkipProp ?? (isMultiStep && !!skipAction);\n const skipLabel = skipLabelProp ?? skipAction?.label ?? 'Skip';\n const primaryLabel = primaryLabelProp ?? (isMultiStep && !isLastStep ? 'Continue' : (submitAction?.label ?? 'Submit'));\n\n const primaryDisabled = !!loading || isActionDisabled(isMultiStep && !isLastStep ? nextAction : submitAction, values);\n\n const handlePrimary = onPrimaryProp ?? (isMultiStep && !isLastStep ? onNext : onSubmit);\n\n return (\n <div className=\"fh-form-actions\">\n <div className=\"fh-form-actions__secondary\">\n {showBack && (\n <button type=\"button\" className={buttonClass(backAction, 'secondary')} disabled={loading} onClick={onPrev}>\n {backLabel}\n </button>\n )}\n {cancelAction && (\n <button type=\"button\" className={buttonClass(cancelAction, 'text')} disabled={loading} onClick={onCancel}>\n {cancelAction.label}\n </button>\n )}\n {showSkip && (\n <button type=\"button\" className={buttonClass(skipAction, 'text')} disabled={loading} onClick={onSkip}>\n {skipLabel}\n </button>\n )}\n </div>\n {showPrimary && <button\n type=\"submit\"\n className=\"fh-form-actions__button fh-form-actions__button--primary\"\n disabled={primaryDisabled}\n aria-busy={loading}\n onClick={(event) => {\n event.preventDefault();\n handlePrimary();\n }}\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 headingLevel = 2,\n steps,\n counterLabel,\n}: FormStepProgressProps) {\n const Heading = `h${headingLevel}` as const;\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 {counterLabel ?? `Step ${current} of ${total}`}\n </span>\n </div>\n {steps && (\n <ol className=\"fh-step-progress__steps\">\n {steps.map((step, index) => {\n const label = step.title || `Step ${index + 1}`;\n return (\n <li key={step.id} className={`fh-step-progress__step${step.errorCount ? ' fh-step-progress__step--invalid' : ''}`}\n aria-current={index + 1 === current ? 'step' : undefined}>\n {index + 1 === current ? <strong>{label}</strong> : label}\n {step.errorCount > 0 && ` · ${step.errorCount} ${step.errorCount === 1 ? 'error' : 'errors'}`}\n </li>\n );\n })}\n </ol>\n )}\n {stepTitle && <Heading className=\"fh-step-progress__title\">{stepTitle}</Heading>}\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 { labelFor } from '@formhaus/core/internal';\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 labels?: FormRendererProps['labels'];\n onSubmit: () => void;\n onNext: () => Promise<void>;\n onPrev: () => void;\n onSkip: () => void;\n onCancel: () => void;\n}\n\nexport function FormActionsController({\n engine,\n definition,\n loading,\n ActionsComponent,\n labels,\n onSubmit,\n onNext,\n onPrev,\n onSkip,\n onCancel,\n}: FormActionsControllerProps) {\n useFormSnapshot(engine);\n const step = engine.currentStep;\n const isLastStep = engine.isLastStep || !engine.isMultiStep;\n const primaryLabel = engine.isMultiStep && !isLastStep\n ? ((step?.next || undefined)?.label ?? labelFor('continue', {}, labels, definition.labels))\n : (definition.submit?.label ?? 'Submit');\n const showBack = engine.isMultiStep && !engine.isFirstStep && step?.back !== false;\n const backLabel = (step?.back || undefined)?.label ?? labelFor('back', {}, labels, definition.labels);\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 nextAction={step?.next}\n backAction={step?.back}\n cancelAction={definition.cancel}\n skipAction={step?.skip}\n isFirstStep={engine.isFirstStep}\n isLastStep={isLastStep}\n isMultiStep={engine.isMultiStep}\n loading={loading || engine.stepValidating || engine.submitting}\n values={engine.getSubmitValues()}\n onSubmit={onSubmit}\n onNext={onNext}\n onPrev={onPrev}\n onCancel={onCancel}\n onSkip={onSkip}\n primaryLabel={primaryLabel}\n showPrimary={isLastStep || step?.next !== false}\n showBack={showBack}\n backLabel={backLabel}\n showSkip={!!step?.skip && step.next !== false}\n onPrimary={handlePrimary}\n />\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { fieldDomId, labelFor } from '@formhaus/core/internal';\nimport type { FormRendererProps } from './types';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\n\ninterface FormErrorSummaryProps {\n engine: FormEngine;\n formId: string;\n onSelect: (key: string) => void;\n labels?: FormRendererProps['labels'];\n}\n\nexport function FormErrorSummary({ engine, formId, onSelect, labels }: FormErrorSummaryProps) {\n useFormSnapshot(engine);\n const fields = engine.isMultiStep ? engine.visibleSteps.flatMap((step) => step.fields) : engine.visibleFields;\n const invalid = fields.filter((field) => engine.errors[field.key] !== undefined);\n if (invalid.length === 0) return null;\n\n return (\n <div className=\"fh-error-summary\" role=\"alert\">\n <strong className=\"fh-error-summary__title\">{labelFor('errorSummary', {}, labels, engine.definition.labels)}</strong>\n <ul className=\"fh-error-summary__list\">\n {invalid.map((field) => (\n <li key={field.key}>\n <a className=\"fh-error-summary__link\" href={`#${fieldDomId(formId, field.key)}`}\n onClick={(event) => { event.preventDefault(); onSelect(field.key); }}>\n {field.label}: {engine.errors[field.key]}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","import type { FormField as FormFieldType } from '@formhaus/core';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\nconst noop = () => {};\n\nexport interface FieldResolverProps {\n id?: string;\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 FieldResolver({\n id,\n field,\n value,\n error,\n loading,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FieldResolverProps) {\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 id={id}\n field={field}\n value={value}\n error={error}\n loading={loading}\n disabled={disabled}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur ?? noop}\n onFocus={onFocus}\n />\n );\n}\n","import { fieldDomId } from '@formhaus/core/internal';\nimport type { FieldOption, FormEngine, FormField as FormFieldType } from '@formhaus/core';\nimport { memo, useCallback, useSyncExternalStore } from 'react';\nimport { FieldResolver } from './FieldResolver';\nimport type { FieldComponentMap } from './types';\n\nexport interface ControllerProps {\n engine: FormEngine;\n formId: string;\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\ninterface FormFieldControllerProps extends ControllerProps {\n field: FormFieldType;\n options?: FieldOption[];\n disabled?: boolean;\n}\n\nexport const FormFieldController = memo(function FormFieldController({\n engine,\n formId,\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 <FieldResolver\n id={fieldDomId(formId, field.key)}\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 };\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 { memo } from 'react';\nimport { type ControllerProps, FormFieldController } from './FormFieldController';\nimport { useFormSnapshot, useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport { useFieldOptions } from './hooks/useFieldOptions';\nimport type { OptionsProvider } from './types';\n\ninterface FormFieldsControllerProps extends ControllerProps {\n loading: boolean;\n optionsProviders?: Record<string, OptionsProvider>;\n}\n\nexport const FormFieldsController = memo(function FormFieldsController({\n engine,\n formId,\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 formId={formId}\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 { labelFor } from '@formhaus/core/internal';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormProgressControllerProps {\n engine: FormEngine;\n ProgressComponent: FormRendererProps['progressComponent'];\n headingLevel: FormRendererProps['headingLevel'];\n marks?: boolean;\n labels?: FormRendererProps['labels'];\n}\n\nexport function FormProgressController({\n engine,\n ProgressComponent,\n headingLevel,\n marks,\n labels,\n}: FormProgressControllerProps) {\n useFormSnapshot(engine);\n if (!engine.isMultiStep || !ProgressComponent) return null;\n const errors = marks ? engine.stepErrors : {};\n const { current, total } = engine.progress;\n\n return (\n <ProgressComponent\n current={current}\n total={total}\n counterLabel={labelFor('stepOf', { current, total }, labels, engine.definition.labels)}\n stepTitle={engine.currentStep?.title}\n stepDescription={engine.currentStep?.description}\n headingLevel={headingLevel}\n steps={marks ? engine.visibleSteps.map(({ id, title }) => ({ id, title, errorCount: errors[id]?.length ?? 0 })) : undefined}\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\" role=\"alert\">\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 { useEffect, useRef } from 'react';\nimport { useFormSnapshot } from './useEngineSnapshot';\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 definitionRef = useRef(definition);\n\n if (engineRef.current === null || definitionRef.current !== definition) {\n engineRef.current = new FormEngine(definition, initialValues, {\n validators: options?.validators,\n messages: options?.messages,\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 onWarning: options?.onWarning,\n });\n definitionRef.current = definition;\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 useFormSnapshot(engine);\n return engine;\n}\n","import { isActionDisabled, type FormEngine } from '@formhaus/core';\nimport { autoAdvance } from '@formhaus/core/internal';\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 [invalidAttempts, setInvalidAttempts] = useState(0);\n const run = useCallback(async (action: () => Promise<boolean>) => {\n if (loading) return;\n setFailure(null);\n const errors = engine.errors;\n try { if (!(await action()) && engine.errors !== errors && Object.keys(engine.errors).length > 0) setInvalidAttempts((count) => count + 1); }\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(async () => (\n !isActionDisabled(engine.isLastStep ? undefined : engine.currentStep?.next, engine.getSubmitValues()) && engine.next()\n )), [run, engine]);\n const prev = useCallback(() => run(() => engine.back()), [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(() => autoAdvance(engine));\n }, [engine, loading, run, update]);\n const send = useCallback(async (values: Record<string, unknown>, skippedSteps: string[]) => {\n onAnalyticsEvent?.({ type: 'form_submitted', fieldCount: Object.keys(values).length });\n return onSubmit(values, skippedSteps);\n }, [onSubmit, onAnalyticsEvent]);\n const report = useCallback(async (action: Promise<boolean>) => {\n const result = await action;\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, onAnalyticsEvent]);\n const submit = useCallback(() => run(async () => (\n !isActionDisabled(engine.definition.submit, engine.getSubmitValues()) && report(engine.submit(send))\n )), [engine, run, send, report]);\n const skip = useCallback(() => run(() => report(engine.skip((values, skippedSteps) => {\n onAnalyticsEvent?.({ type: 'step_skipped', stepId: engine.currentStep!.id });\n return send(values, skippedSteps);\n }))), [run, engine, send, report, onAnalyticsEvent]);\n const actionError = failure?.engine === engine ? failure.message : null;\n return { next, prev, skip, update, commit, submit, actionError, invalidAttempts };\n}\n","import type { FormEngineOptions } from '@formhaus/core';\nimport { canMoveFocus, focusField, restoreFocus, shouldApplyExternalErrors } from '@formhaus/core/internal';\nimport { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { FormActionsController } from './FormActionsController';\nimport { FormErrorSummary } from './FormErrorSummary';\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\nlet nextKey = 0;\nconst engineKeys = new WeakMap<object, number>();\n\nfunction engineKey(engine: object): number {\n let key = engineKeys.get(engine);\n if (key === undefined) engineKeys.set(engine, key = nextKey++);\n return key;\n}\n\nexport function HeadlessFormRenderer(props: FormRendererProps) {\n const { definition, initialValues, loading = false, components, optionsProviders,\n actionsComponent, progressComponent, headingLevel = 2, onAnalyticsEvent } = props;\n const formId = useId();\n const formRef = useRef<HTMLFormElement>(null);\n const focusPending = useRef(false);\n const focusKey = useRef<string | null>(null);\n const focusReturn = useRef<HTMLElement | null>(null);\n const [focusRequest, setFocusRequest] = useState(0);\n const wasBusy = useRef(false);\n const engineOptions: FormEngineOptions = {\n ...props,\n onAfterStepChange: async (context) => {\n focusPending.current = true;\n if (context.reason !== 'back') {\n onAnalyticsEvent?.({ type: context.reason === 'skip' ? 'step_skipped' : '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 const handledInvalid = useRef(0);\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 if (Object.keys(props.errors).length === 0 || !canMoveFocus(formRef.current)) return;\n focusPending.current = true;\n setFocusRequest((request) => request + 1);\n }, [props.errors, engine]);\n\n useEffect(() => {\n if (version !== engine.getSnapshot()) return;\n if (previousStep.current !== engine.currentStep?.id || handledInvalid.current !== actions.invalidAttempts) focusPending.current = true;\n previousStep.current = engine.currentStep?.id;\n handledInvalid.current = actions.invalidAttempts;\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 if (restore) restoreFocus(formRef.current, focusReturn.current);\n return;\n }\n focusPending.current = false;\n const key = focusKey.current;\n focusKey.current = null;\n focusField(formRef.current, formId, key);\n }, [engine, version, actions.invalidAttempts, focusRequest]);\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 const showField = useCallback((key: string) => {\n focusKey.current = key;\n focusPending.current = true;\n setFocusRequest((request) => request + 1);\n engine.goToStepWithField(key);\n }, [engine]);\n\n return (\n <form ref={formRef} lang={definition.lang} 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} headingLevel={headingLevel} marks={props.stepErrorMarks} labels={props.labels} />\n {props.errorSummary && <FormErrorSummary engine={engine} formId={formId} onSelect={showField} labels={props.labels} />}\n <FormFieldsController key={engineKey(engine)} engine={engine} formId={formId} 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} labels={props.labels}\n ActionsComponent={actionsComponent} onSubmit={actions.submit} onNext={actions.next}\n onPrev={actions.prev} onSkip={actions.skip} 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","import { fieldDomId } from '@formhaus/core/internal';\nimport type { FormField } from '@formhaus/core';\nimport type { FieldComponentProps } from '../types';\n\nexport function fieldId(props: Pick<FieldComponentProps, 'id' | 'field'>): string {\n return props.id ?? fieldDomId(undefined, props.field.key);\n}\n\nexport function describedBy(field: FormField, id: string, error?: string) {\n return [field.helperText && `${id}-helper`, error && `${id}-error`].filter(Boolean).join(' ') || undefined;\n}\n\nexport function optionProps({ disabled, loading, onBlur, onFocus }: FieldComponentProps) {\n return { disabled: disabled || loading, onBlur, onFocus };\n}\n\nexport function inputProps(props: FieldComponentProps) {\n const id = fieldId(props);\n return {\n id,\n name: props.field.key,\n ...optionProps(props),\n 'aria-invalid': !!props.error,\n 'aria-required': !!props.field.validation?.required || undefined,\n 'aria-describedby': describedBy(props.field, id, props.error),\n };\n}\n","import type { FormField } from '@formhaus/core';\nimport type { ReactNode } from 'react';\nimport { FieldLabel } from './FieldLabel';\nimport { describedBy } from './fieldProps';\n\ninterface FieldShellProps {\n id: string;\n field: FormField;\n error?: string;\n variant?: 'checkbox' | 'switch' | 'radio' | 'multiselect';\n children: ReactNode;\n}\n\nexport function FieldShell({ id, field, error, variant, children }: FieldShellProps) {\n const group = variant === 'radio' || variant === 'multiselect';\n const inline = variant && !group;\n const Root = group ? 'fieldset' : 'div';\n const container = `fh-field__${variant}-${group ? 'group' : 'wrapper'}`;\n const helper = field.helperText && <p id={`${id}-helper`} className=\"fh-field__helper\">{field.helperText}</p>;\n\n return (\n <Root\n className={variant ? `fh-field fh-field--${variant}` : 'fh-field'}\n aria-invalid={group ? !!error || undefined : undefined}\n aria-describedby={group ? describedBy(field, id, error) : undefined}\n >\n {group && field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n {!variant && <FieldLabel field={field} inputId={id} />}\n {!inline && helper}\n {variant ? (\n <div className={group && field.layout === 'inline' ? `${container} ${container}--inline` : container}>\n {children}\n {inline && field.label && (\n <label className=\"fh-field__label\" htmlFor={id}>\n {field.label}\n </label>\n )}\n </div>\n ) : children}\n {inline && helper}\n {error && <p id={`${id}-error`} className=\"fh-field__error\" role=\"alert\">{error}</p>}\n </Root>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function AutocompleteField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const listId = `${fieldId(props)}-list`;\n const options = field.options ?? [];\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\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 autoComplete=\"off\"\n onChange={(e) => onChange(e.target.value)}\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 </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function CheckboxField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error} variant=\"checkbox\">\n <input\n {...inputProps(props)}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={!!props.value}\n onChange={(e) => props.onChange(e.target.checked)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function DateField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error}>\n <input\n {...inputProps(props)}\n type=\"date\"\n className=\"fh-field__input fh-field__input--date\"\n value={String(props.value ?? '')}\n onChange={(e) => props.onChange(e.target.value)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function DateTimeField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error}>\n <input\n {...inputProps(props)}\n type=\"datetime-local\"\n className=\"fh-field__input fh-field__input--datetime\"\n value={String(props.value ?? '')}\n onChange={(e) => props.onChange(e.target.value)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function FileField(props: FieldComponentProps) {\n const { field, error, onChange } = props;\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\n type=\"file\"\n className=\"fh-field__input fh-field__input--file\"\n accept={field.accept}\n onChange={(e) => {\n const files = e.target.files;\n onChange(files && files.length > 0 ? files[0] : null);\n }}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, optionProps } from './fieldProps';\n\nexport function MultiselectField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\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 <FieldShell id={fieldId(props)} field={field} error={error} variant=\"multiselect\">\n {options.map((opt, index) => {\n const optionId = `${fieldId(props)}-${index}`;\n return (\n <div key={opt.value} className=\"fh-field__multiselect-option\">\n <input\n {...optionProps(props)}\n id={optionId}\n name={field.key}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={selected.includes(opt.value)}\n onChange={() => handleToggle(opt.value)}\n />\n <label className=\"fh-field__multiselect-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </FieldShell>\n );\n}\n","import { useRef } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, optionProps } from './fieldProps';\n\nexport function RadioField(props: FieldComponentProps) {\n const { field, value, error, onChange, onCommit } = props;\n const arrowSelection = useRef(false);\n const commit = field.autoAdvance && onCommit;\n const options = field.options ?? [];\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error} variant=\"radio\">\n {options.map((opt, index) => {\n const optionId = `${fieldId(props)}-${index}`;\n return (\n <div key={opt.value} className=\"fh-field__radio-option\">\n <input\n {...optionProps(props)}\n id={optionId}\n type=\"radio\"\n className=\"fh-field__radio\"\n name={field.key}\n value={opt.value}\n checked={String(value) === String(opt.value)}\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 />\n <label className=\"fh-field__radio-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function SelectField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const options = field.options ?? [];\n const current = (value as string) ?? '';\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <select\n {...inputProps(props)}\n className=\"fh-field__input fh-field__input--select\"\n value={current}\n onChange={(e) => onChange(e.target.value)}\n >\n {(field.placeholder || current === '') && (\n <option value=\"\" disabled hidden={!field.placeholder}>\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 </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function SwitchField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error} variant=\"switch\">\n <input\n {...inputProps(props)}\n type=\"checkbox\"\n role=\"switch\"\n className=\"fh-field__switch\"\n checked={!!props.value}\n onChange={(e) => props.onChange(e.target.checked)}\n />\n </FieldShell>\n );\n}\n","import { useState } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function TextField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const isNumber = field.type === 'number';\n const [draft, setDraft] = useState('');\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n setDraft(v);\n onChange(isNumber && v !== '' ? Number(v) : v);\n };\n\n const text = isNumber && draft && Object.is(Number(draft), value) ? draft : String(value ?? '');\n\n const inputType =\n field.type === 'email'\n ? 'email'\n : field.type === 'phone'\n ? 'tel'\n : isNumber\n ? 'number'\n : field.type === 'password'\n ? 'password'\n : 'text';\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\n type={inputType}\n className=\"fh-field__input\"\n value={text}\n placeholder={field.placeholder ?? field.mask}\n inputMode={field.inputMode}\n onChange={handleChange}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nconst DEFAULT_ROWS = 3;\n\nexport function TextareaField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <textarea\n {...inputProps(props)}\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 onChange={(e) => onChange(e.target.value)}\n />\n </FieldShell>\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\nexport const 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","import { fieldDomId } from '@formhaus/core/internal';\nimport { useId, useMemo } from 'react';\nimport { withDefaultFields } from './defaultFieldComponents';\nimport { FieldResolver, type FieldResolverProps } from './FieldResolver';\n\nexport function FormhausField({ components, id, ...props }: FieldResolverProps) {\n const fallback = useId();\n const fieldComponents = useMemo(() => withDefaultFields(components), [components]);\n return <FieldResolver {...props} id={id ?? fieldDomId(fallback, props.field.key)} components={fieldComponents} />;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FormActions.tsx","../src/FormStepProgress.tsx","../src/hooks/useEngineSnapshot.ts","../src/FormActionsController.tsx","../src/FormErrorSummary.tsx","../src/FieldResolver.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/fieldProps.ts","../src/fields/FieldShell.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","../src/FormhausField.tsx"],"names":["buttonClass","action","variant","FormActions","submitAction","nextAction","backAction","cancelAction","skipAction","isFirstStep","isLastStep","isMultiStep","loading","showPrimary","values","onSubmit","onNext","onPrev","onCancel","onSkip","primaryLabelProp","showBackProp","backLabelProp","showSkipProp","skipLabelProp","onPrimaryProp","showBack","backLabel","showSkip","skipLabel","primaryLabel","primaryDisabled","isActionDisabled","handlePrimary","jsxs","jsx","event","FormStepProgress","current","total","stepTitle","stepDescription","headingLevel","steps","counterLabel","Heading","percent","step","index","label","useFormSnapshot","engine","subscribe","useCallback","listener","getSnapshot","useSyncExternalStore","useStructureSnapshot","FormActionsController","definition","ActionsComponent","labels","labelFor","FormErrorSummary","formId","onSelect","invalid","field","fieldDomId","noop","FieldResolver","id","value","error","disabled","components","onChange","onCommit","onBlur","onFocus","Component","FormFieldController","memo","options","handleChange","handleCommit","handleBlur","handleFocus","fieldWithOptions","areOptionsEqual","previous","next","option","useFieldOptions","fields","providers","resolved","setResolved","useState","requestVersions","useRef","useEffect","active","unsubscribers","commit","fieldKey","provider","resolve","requestVersion","result","dependency","unsubscribe","FormFieldsController","optionsProviders","resolvedOptions","FormProgressController","ProgressComponent","marks","errors","title","FormTopLevelErrors","actionError","useFormEngineStore","initialValues","optionsRef","engineRef","definitionRef","FormEngine","useFormEngine","useRendererActions","props","onError","onFieldChange","onAnalyticsEvent","failure","setFailure","invalidAttempts","setInvalidAttempts","run","count","prev","update","key","autoAdvance","send","skippedSteps","report","submit","skip","nextKey","engineKeys","engineKey","HeadlessFormRenderer","actionsComponent","progressComponent","useId","formRef","focusPending","focusKey","focusReturn","focusRequest","setFocusRequest","wasBusy","engineOptions","context","version","previousStep","actions","handledInvalid","appliedErrors","shouldApplyExternalErrors","canMoveFocus","request","restore","restoreFocus","focusField","handleFieldFocus","handleFieldBlur","handleCancel","showField","FieldLabel","inputId","fieldId","describedBy","optionProps","inputProps","FieldShell","children","group","inline","Root","container","helper","AutocompleteField","listId","e","opt","CheckboxField","DateField","DateTimeField","FileField","files","MultiselectField","selected","handleToggle","optValue","v","optionId","RadioField","arrowSelection","SelectField","SwitchField","TextField","isNumber","draft","setDraft","text","inputType","DEFAULT_ROWS","TextareaField","defaultFieldComponents","withDefaultFields","merged","type","component","FormRenderer","fieldComponents","useMemo","FormhausField","fallback"],"mappings":"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","file":"index.js","sourcesContent":["import { isActionDisabled, type FormAction } from '@formhaus/core';\nimport type { FormActionsProps } from './types';\n\nfunction buttonClass(action: FormAction | false | undefined, variant: NonNullable<FormAction['variant']>): string {\n return `fh-form-actions__button fh-form-actions__button--${(action && action.variant) || variant}`;\n}\n\nexport function FormActions({\n submitAction,\n nextAction,\n backAction,\n cancelAction,\n skipAction,\n isFirstStep,\n isLastStep,\n isMultiStep,\n loading,\n showPrimary = true,\n values = {},\n onSubmit,\n onNext,\n onPrev,\n onCancel,\n onSkip,\n primaryLabel: primaryLabelProp,\n showBack: showBackProp,\n backLabel: backLabelProp,\n showSkip: showSkipProp,\n skipLabel: skipLabelProp,\n onPrimary: onPrimaryProp,\n}: FormActionsProps) {\n const showBack = showBackProp ?? (isMultiStep && !isFirstStep && backAction !== false);\n const backLabel = backLabelProp ?? (backAction || undefined)?.label ?? 'Back';\n const showSkip = showSkipProp ?? (isMultiStep && !!skipAction);\n const skipLabel = skipLabelProp ?? skipAction?.label ?? 'Skip';\n const primaryLabel = primaryLabelProp ?? (isMultiStep && !isLastStep ? 'Continue' : (submitAction?.label ?? 'Submit'));\n\n const primaryDisabled = !!loading || isActionDisabled(isMultiStep && !isLastStep ? nextAction : submitAction, values);\n\n const handlePrimary = onPrimaryProp ?? (isMultiStep && !isLastStep ? onNext : onSubmit);\n\n return (\n <div className=\"fh-form-actions\">\n <div className=\"fh-form-actions__secondary\">\n {showBack && (\n <button type=\"button\" className={buttonClass(backAction, 'secondary')} disabled={loading} onClick={onPrev}>\n {backLabel}\n </button>\n )}\n {cancelAction && (\n <button type=\"button\" className={buttonClass(cancelAction, 'text')} disabled={loading} onClick={onCancel}>\n {cancelAction.label}\n </button>\n )}\n {showSkip && (\n <button type=\"button\" className={buttonClass(skipAction, 'text')} disabled={loading} onClick={onSkip}>\n {skipLabel}\n </button>\n )}\n </div>\n {showPrimary && <button\n type=\"submit\"\n className=\"fh-form-actions__button fh-form-actions__button--primary\"\n disabled={primaryDisabled}\n aria-busy={loading}\n onClick={(event) => {\n event.preventDefault();\n handlePrimary();\n }}\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 headingLevel = 2,\n steps,\n counterLabel,\n}: FormStepProgressProps) {\n const Heading = `h${headingLevel}` as const;\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 {counterLabel ?? `Step ${current} of ${total}`}\n </span>\n </div>\n {steps && (\n <ol className=\"fh-step-progress__steps\">\n {steps.map((step, index) => {\n const label = step.title || `Step ${index + 1}`;\n return (\n <li key={step.id} className={`fh-step-progress__step${step.errorCount ? ' fh-step-progress__step--invalid' : ''}`}\n aria-current={index + 1 === current ? 'step' : undefined}>\n {index + 1 === current ? <strong>{label}</strong> : label}\n {step.errorCount > 0 && ` · ${step.errorCount} ${step.errorCount === 1 ? 'error' : 'errors'}`}\n </li>\n );\n })}\n </ol>\n )}\n {stepTitle && <Heading className=\"fh-step-progress__title\">{stepTitle}</Heading>}\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 { labelFor } from '@formhaus/core/internal';\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 labels?: FormRendererProps['labels'];\n onSubmit: () => void;\n onNext: () => Promise<void>;\n onPrev: () => void;\n onSkip: () => void;\n onCancel: () => void;\n}\n\nexport function FormActionsController({\n engine,\n definition,\n loading,\n ActionsComponent,\n labels,\n onSubmit,\n onNext,\n onPrev,\n onSkip,\n onCancel,\n}: FormActionsControllerProps) {\n useFormSnapshot(engine);\n const step = engine.currentStep;\n const isLastStep = engine.isLastStep || !engine.isMultiStep;\n const primaryLabel = engine.isMultiStep && !isLastStep\n ? ((step?.next || undefined)?.label ?? labelFor('continue', {}, labels, definition.labels))\n : (definition.submit?.label ?? 'Submit');\n const showBack = engine.isMultiStep && !engine.isFirstStep && step?.back !== false;\n const backLabel = (step?.back || undefined)?.label ?? labelFor('back', {}, labels, definition.labels);\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 nextAction={step?.next}\n backAction={step?.back}\n cancelAction={definition.cancel}\n skipAction={step?.skip}\n isFirstStep={engine.isFirstStep}\n isLastStep={isLastStep}\n isMultiStep={engine.isMultiStep}\n loading={loading || engine.stepValidating || engine.submitting}\n values={engine.getSubmitValues()}\n onSubmit={onSubmit}\n onNext={onNext}\n onPrev={onPrev}\n onCancel={onCancel}\n onSkip={onSkip}\n primaryLabel={primaryLabel}\n showPrimary={isLastStep || step?.next !== false}\n showBack={showBack}\n backLabel={backLabel}\n showSkip={!!step?.skip && step.next !== false}\n onPrimary={handlePrimary}\n />\n );\n}\n","import type { FormEngine } from '@formhaus/core';\nimport { fieldDomId, labelFor } from '@formhaus/core/internal';\nimport type { FormRendererProps } from './types';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\n\ninterface FormErrorSummaryProps {\n engine: FormEngine;\n formId: string;\n onSelect: (key: string) => void;\n labels?: FormRendererProps['labels'];\n}\n\nexport function FormErrorSummary({ engine, formId, onSelect, labels }: FormErrorSummaryProps) {\n useFormSnapshot(engine);\n const fields = engine.isMultiStep ? engine.visibleSteps.flatMap((step) => step.fields) : engine.visibleFields;\n const invalid = fields.filter((field) => engine.errors[field.key] !== undefined);\n if (invalid.length === 0) return null;\n\n return (\n <div className=\"fh-error-summary\" role=\"alert\">\n <strong className=\"fh-error-summary__title\">{labelFor('errorSummary', {}, labels, engine.definition.labels)}</strong>\n <ul className=\"fh-error-summary__list\">\n {invalid.map((field) => (\n <li key={field.key}>\n <a className=\"fh-error-summary__link\" href={`#${fieldDomId(formId, field.key, engine.definition)}`}\n onClick={(event) => { event.preventDefault(); onSelect(field.key); }}>\n {field.label}: {engine.errors[field.key]}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","import type { FormField as FormFieldType } from '@formhaus/core';\nimport type { FieldComponentMap, FieldComponentProps } from './types';\n\nconst noop = () => {};\n\nexport interface FieldResolverProps {\n id?: string;\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 FieldResolver({\n id,\n field,\n value,\n error,\n loading,\n disabled,\n components,\n onChange,\n onCommit,\n onBlur,\n onFocus,\n}: FieldResolverProps) {\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 id={id}\n field={field}\n value={value}\n error={error}\n loading={loading}\n disabled={disabled}\n onChange={onChange}\n onCommit={onCommit}\n onBlur={onBlur ?? noop}\n onFocus={onFocus}\n />\n );\n}\n","import { fieldDomId } from '@formhaus/core/internal';\nimport type { FieldOption, FormEngine, FormField as FormFieldType } from '@formhaus/core';\nimport { memo, useCallback, useSyncExternalStore } from 'react';\nimport { FieldResolver } from './FieldResolver';\nimport type { FieldComponentMap } from './types';\n\nexport interface ControllerProps {\n engine: FormEngine;\n formId: string;\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\ninterface FormFieldControllerProps extends ControllerProps {\n field: FormFieldType;\n options?: FieldOption[];\n disabled?: boolean;\n}\n\nexport const FormFieldController = memo(function FormFieldController({\n engine,\n formId,\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 <FieldResolver\n id={fieldDomId(formId, field.key, engine.definition)}\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 };\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 { memo } from 'react';\nimport { type ControllerProps, FormFieldController } from './FormFieldController';\nimport { useFormSnapshot, useStructureSnapshot } from './hooks/useEngineSnapshot';\nimport { useFieldOptions } from './hooks/useFieldOptions';\nimport type { OptionsProvider } from './types';\n\ninterface FormFieldsControllerProps extends ControllerProps {\n loading: boolean;\n optionsProviders?: Record<string, OptionsProvider>;\n}\n\nexport const FormFieldsController = memo(function FormFieldsController({\n engine,\n formId,\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 formId={formId}\n field={field}\n options={(field.optionsFrom && optionsProviders?.[field.optionsFrom] && 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 { labelFor } from '@formhaus/core/internal';\nimport { useFormSnapshot } from './hooks/useEngineSnapshot';\nimport type { FormRendererProps } from './types';\n\ninterface FormProgressControllerProps {\n engine: FormEngine;\n ProgressComponent: FormRendererProps['progressComponent'];\n headingLevel: FormRendererProps['headingLevel'];\n marks?: boolean;\n labels?: FormRendererProps['labels'];\n}\n\nexport function FormProgressController({\n engine,\n ProgressComponent,\n headingLevel,\n marks,\n labels,\n}: FormProgressControllerProps) {\n useFormSnapshot(engine);\n if (!engine.isMultiStep || !ProgressComponent) return null;\n const errors = marks ? engine.stepErrors : {};\n const { current, total } = engine.progress;\n\n return (\n <ProgressComponent\n current={current}\n total={total}\n counterLabel={labelFor('stepOf', { current, total }, labels, engine.definition.labels)}\n stepTitle={engine.currentStep?.title}\n stepDescription={engine.currentStep?.description}\n headingLevel={headingLevel}\n steps={marks ? engine.visibleSteps.map(({ id, title }) => ({ id, title, errorCount: errors[id]?.length ?? 0 })) : undefined}\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\" role=\"alert\">\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 { useEffect, useRef } from 'react';\nimport { useFormSnapshot } from './useEngineSnapshot';\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 definitionRef = useRef(definition);\n\n if (engineRef.current === null || definitionRef.current !== definition) {\n engineRef.current = new FormEngine(definition, initialValues, {\n validators: options?.validators,\n messages: options?.messages,\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 onWarning: options?.onWarning,\n });\n definitionRef.current = definition;\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 useFormSnapshot(engine);\n return engine;\n}\n","import { isActionDisabled, type FormEngine } from '@formhaus/core';\nimport { autoAdvance } from '@formhaus/core/internal';\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 [invalidAttempts, setInvalidAttempts] = useState(0);\n const run = useCallback(async (action: () => Promise<boolean>) => {\n if (loading) return;\n setFailure(null);\n const errors = engine.errors;\n try { if (!(await action()) && engine.errors !== errors && Object.keys(engine.errors).length > 0) setInvalidAttempts((count) => count + 1); }\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(async () => (\n !isActionDisabled(engine.isLastStep ? undefined : engine.currentStep?.next, engine.getSubmitValues()) && engine.next()\n )), [run, engine]);\n const prev = useCallback(() => run(() => engine.back()), [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(() => autoAdvance(engine));\n }, [engine, loading, run, update]);\n const send = useCallback(async (values: Record<string, unknown>, skippedSteps: string[]) => {\n onAnalyticsEvent?.({ type: 'form_submitted', fieldCount: Object.keys(values).length });\n return onSubmit(values, skippedSteps);\n }, [onSubmit, onAnalyticsEvent]);\n const report = useCallback(async (action: Promise<boolean>) => {\n const result = await action;\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, onAnalyticsEvent]);\n const submit = useCallback(() => run(async () => (\n !isActionDisabled(engine.definition.submit, engine.getSubmitValues()) && report(engine.submit(send))\n )), [engine, run, send, report]);\n const skip = useCallback(() => run(() => report(engine.skip((values, skippedSteps) => {\n onAnalyticsEvent?.({ type: 'step_skipped', stepId: engine.currentStep!.id });\n return send(values, skippedSteps);\n }))), [run, engine, send, report, onAnalyticsEvent]);\n const actionError = failure?.engine === engine ? failure.message : null;\n return { next, prev, skip, update, commit, submit, actionError, invalidAttempts };\n}\n","import type { FormEngineOptions } from '@formhaus/core';\nimport { canMoveFocus, focusField, restoreFocus, shouldApplyExternalErrors } from '@formhaus/core/internal';\nimport { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { FormActionsController } from './FormActionsController';\nimport { FormErrorSummary } from './FormErrorSummary';\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\nlet nextKey = 0;\nconst engineKeys = new WeakMap<object, number>();\n\nfunction engineKey(engine: object): number {\n let key = engineKeys.get(engine);\n if (key === undefined) engineKeys.set(engine, key = nextKey++);\n return key;\n}\n\nexport function HeadlessFormRenderer(props: FormRendererProps) {\n const { definition, initialValues, loading = false, components, optionsProviders,\n actionsComponent, progressComponent, headingLevel = 2, onAnalyticsEvent } = props;\n const formId = useId();\n const formRef = useRef<HTMLFormElement>(null);\n const focusPending = useRef(false);\n const focusKey = useRef<string | null>(null);\n const focusReturn = useRef<HTMLElement | null>(null);\n const [focusRequest, setFocusRequest] = useState(0);\n const wasBusy = useRef(false);\n const engineOptions: FormEngineOptions = {\n ...props,\n onAfterStepChange: async (context) => {\n focusPending.current = true;\n if (context.reason !== 'back') {\n onAnalyticsEvent?.({ type: context.reason === 'skip' ? 'step_skipped' : '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 const handledInvalid = useRef(0);\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 if (Object.keys(props.errors).length === 0 || !canMoveFocus(formRef.current)) return;\n focusPending.current = true;\n setFocusRequest((request) => request + 1);\n }, [props.errors, engine]);\n\n useEffect(() => {\n if (version !== engine.getSnapshot()) return;\n if (previousStep.current !== engine.currentStep?.id || handledInvalid.current !== actions.invalidAttempts) focusPending.current = true;\n previousStep.current = engine.currentStep?.id;\n handledInvalid.current = actions.invalidAttempts;\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 if (restore) restoreFocus(formRef.current, focusReturn.current);\n return;\n }\n focusPending.current = false;\n const key = focusKey.current;\n focusKey.current = null;\n focusField(formRef.current, formId, key, engine.definition);\n }, [engine, version, actions.invalidAttempts, focusRequest]);\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 const showField = useCallback((key: string) => {\n focusKey.current = key;\n focusPending.current = true;\n setFocusRequest((request) => request + 1);\n engine.goToStepWithField(key);\n }, [engine]);\n\n return (\n <form ref={formRef} lang={definition.lang} 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} headingLevel={headingLevel} marks={props.stepErrorMarks} labels={props.labels} />\n {props.errorSummary && <FormErrorSummary engine={engine} formId={formId} onSelect={showField} labels={props.labels} />}\n <FormFieldsController key={engineKey(engine)} engine={engine} formId={formId} 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} labels={props.labels}\n ActionsComponent={actionsComponent} onSubmit={actions.submit} onNext={actions.next}\n onPrev={actions.prev} onSkip={actions.skip} 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","import { fieldDomId } from '@formhaus/core/internal';\nimport type { FormField } from '@formhaus/core';\nimport type { FieldComponentProps } from '../types';\n\nexport function fieldId(props: Pick<FieldComponentProps, 'id' | 'field'>): string {\n return props.id ?? fieldDomId(undefined, props.field.key);\n}\n\nexport function describedBy(field: FormField, id: string, error?: string) {\n return [field.helperText && `${id}-helper`, error && `${id}-error`].filter(Boolean).join(' ') || undefined;\n}\n\nexport function optionProps({ disabled, loading, onBlur, onFocus }: FieldComponentProps) {\n return { disabled: disabled || loading, onBlur, onFocus };\n}\n\nexport function inputProps(props: FieldComponentProps) {\n const id = fieldId(props);\n return {\n id,\n name: props.field.key,\n ...optionProps(props),\n 'aria-invalid': !!props.error,\n 'aria-required': !!props.field.validation?.required || undefined,\n 'aria-describedby': describedBy(props.field, id, props.error),\n };\n}\n","import type { FormField } from '@formhaus/core';\nimport type { ReactNode } from 'react';\nimport { FieldLabel } from './FieldLabel';\nimport { describedBy } from './fieldProps';\n\ninterface FieldShellProps {\n id: string;\n field: FormField;\n error?: string;\n variant?: 'checkbox' | 'switch' | 'radio' | 'multiselect';\n children: ReactNode;\n}\n\nexport function FieldShell({ id, field, error, variant, children }: FieldShellProps) {\n const group = variant === 'radio' || variant === 'multiselect';\n const inline = variant && !group;\n const Root = group ? 'fieldset' : 'div';\n const container = `fh-field__${variant}-${group ? 'group' : 'wrapper'}`;\n const helper = field.helperText && <p id={`${id}-helper`} className=\"fh-field__helper\">{field.helperText}</p>;\n\n return (\n <Root\n className={variant ? `fh-field fh-field--${variant}` : 'fh-field'}\n aria-invalid={group ? !!error || undefined : undefined}\n aria-describedby={group ? describedBy(field, id, error) : undefined}\n >\n {group && field.label && <legend className=\"fh-field__label\">{field.label}</legend>}\n {!variant && <FieldLabel field={field} inputId={id} />}\n {!inline && helper}\n {variant ? (\n <div className={group && field.layout === 'inline' ? `${container} ${container}--inline` : container}>\n {children}\n {inline && field.label && (\n <label className=\"fh-field__label\" htmlFor={id}>\n {field.label}\n </label>\n )}\n </div>\n ) : children}\n {inline && helper}\n {error && <p id={`${id}-error`} className=\"fh-field__error\" role=\"alert\">{error}</p>}\n </Root>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function AutocompleteField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const listId = `${fieldId(props)}-list`;\n const options = field.options ?? [];\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\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 autoComplete=\"off\"\n onChange={(e) => onChange(e.target.value)}\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 </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function CheckboxField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error} variant=\"checkbox\">\n <input\n {...inputProps(props)}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={!!props.value}\n onChange={(e) => props.onChange(e.target.checked)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function DateField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error}>\n <input\n {...inputProps(props)}\n type=\"date\"\n className=\"fh-field__input fh-field__input--date\"\n value={String(props.value ?? '')}\n onChange={(e) => props.onChange(e.target.value)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function DateTimeField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error}>\n <input\n {...inputProps(props)}\n type=\"datetime-local\"\n className=\"fh-field__input fh-field__input--datetime\"\n value={String(props.value ?? '')}\n onChange={(e) => props.onChange(e.target.value)}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function FileField(props: FieldComponentProps) {\n const { field, error, onChange } = props;\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\n type=\"file\"\n className=\"fh-field__input fh-field__input--file\"\n accept={field.accept}\n onChange={(e) => {\n const files = e.target.files;\n onChange(files && files.length > 0 ? files[0] : null);\n }}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, optionProps } from './fieldProps';\n\nexport function MultiselectField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\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 <FieldShell id={fieldId(props)} field={field} error={error} variant=\"multiselect\">\n {options.map((opt, index) => {\n const optionId = `${fieldId(props)}-${index}`;\n return (\n <div key={opt.value} className=\"fh-field__multiselect-option\">\n <input\n {...optionProps(props)}\n id={optionId}\n name={field.key}\n type=\"checkbox\"\n className=\"fh-field__checkbox\"\n checked={selected.includes(opt.value)}\n onChange={() => handleToggle(opt.value)}\n />\n <label className=\"fh-field__multiselect-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </FieldShell>\n );\n}\n","import { useRef } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, optionProps } from './fieldProps';\n\nexport function RadioField(props: FieldComponentProps) {\n const { field, value, error, onChange, onCommit } = props;\n const arrowSelection = useRef(false);\n const commit = field.autoAdvance && onCommit;\n const options = field.options ?? [];\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error} variant=\"radio\">\n {options.map((opt, index) => {\n const optionId = `${fieldId(props)}-${index}`;\n return (\n <div key={opt.value} className=\"fh-field__radio-option\">\n <input\n {...optionProps(props)}\n id={optionId}\n type=\"radio\"\n className=\"fh-field__radio\"\n name={field.key}\n value={opt.value}\n checked={String(value) === String(opt.value)}\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 />\n <label className=\"fh-field__radio-label\" htmlFor={optionId}>\n {opt.label}\n </label>\n </div>\n );\n })}\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function SelectField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const options = field.options ?? [];\n const current = (value as string) ?? '';\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <select\n {...inputProps(props)}\n className=\"fh-field__input fh-field__input--select\"\n value={current}\n onChange={(e) => onChange(e.target.value)}\n >\n {(field.placeholder || current === '') && (\n <option value=\"\" disabled hidden={!field.placeholder}>\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 </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function SwitchField(props: FieldComponentProps) {\n return (\n <FieldShell id={fieldId(props)} field={props.field} error={props.error} variant=\"switch\">\n <input\n {...inputProps(props)}\n type=\"checkbox\"\n role=\"switch\"\n className=\"fh-field__switch\"\n checked={!!props.value}\n onChange={(e) => props.onChange(e.target.checked)}\n />\n </FieldShell>\n );\n}\n","import { useState } from 'react';\nimport type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nexport function TextField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n const isNumber = field.type === 'number';\n const [draft, setDraft] = useState('');\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n setDraft(v);\n onChange(isNumber && v !== '' ? Number(v) : v);\n };\n\n const text = isNumber && draft && Object.is(Number(draft), value) ? draft : String(value ?? '');\n\n const inputType =\n field.type === 'email'\n ? 'email'\n : field.type === 'phone'\n ? 'tel'\n : isNumber\n ? 'number'\n : field.type === 'password'\n ? 'password'\n : 'text';\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <input\n {...inputProps(props)}\n type={inputType}\n className=\"fh-field__input\"\n value={text}\n placeholder={field.placeholder ?? field.mask}\n inputMode={field.inputMode}\n onChange={handleChange}\n />\n </FieldShell>\n );\n}\n","import type { FieldComponentProps } from '../types';\nimport { FieldShell } from './FieldShell';\nimport { fieldId, inputProps } from './fieldProps';\n\nconst DEFAULT_ROWS = 3;\n\nexport function TextareaField(props: FieldComponentProps) {\n const { field, value, error, onChange } = props;\n\n return (\n <FieldShell id={fieldId(props)} field={field} error={error}>\n <textarea\n {...inputProps(props)}\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 onChange={(e) => onChange(e.target.value)}\n />\n </FieldShell>\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\nexport const 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","import { fieldDomId } from '@formhaus/core/internal';\nimport { useId, useMemo } from 'react';\nimport { withDefaultFields } from './defaultFieldComponents';\nimport { FieldResolver, type FieldResolverProps } from './FieldResolver';\n\nexport function FormhausField({ components, id, ...props }: FieldResolverProps) {\n const fallback = useId();\n const fieldComponents = useMemo(() => withDefaultFields(components), [components]);\n return <FieldResolver {...props} id={id ?? fieldDomId(fallback, props.field.key)} components={fieldComponents} />;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formhaus/react",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.2",
|
|
4
4
|
"description": "Render multi-step, conditional and branching forms in React from a JSON form definition. Native inputs or your own components.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dist"
|
|
26
26
|
],
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@formhaus/core": "^0.13.
|
|
28
|
+
"@formhaus/core": "^0.13.2",
|
|
29
29
|
"react": "^18.0.0 || ^19.0.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"tsup": "^8.5.1",
|
|
40
40
|
"typescript": "^5.7.3",
|
|
41
41
|
"vitest": "^4.1.3",
|
|
42
|
-
"@formhaus/core": "0.13.
|
|
42
|
+
"@formhaus/core": "0.13.2"
|
|
43
43
|
},
|
|
44
44
|
"license": "MIT",
|
|
45
45
|
"homepage": "https://formhaus.dev",
|