@rilaykit/workflow 0.1.0
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/LICENSE +72 -0
- package/dist/index.d.mts +1339 -0
- package/dist/index.d.ts +1339 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/package.json +63 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var core=require('@rilaykit/core'),forms=require('@rilaykit/forms'),Dt=require('react'),zustand=require('zustand'),middleware=require('zustand/middleware'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Dt__default=/*#__PURE__*/_interopDefault(Dt);var J=class t{constructor(e,r,n,i){this.steps=[];this.plugins=[];this.idGenerator=new core.IdGenerator;this.config=e,this.workflowId=r,this.workflowName=n,this.workflowDescription=i;}static create(e,r,n,i){return new t(e,r,n,i)}createStepFromDefinition(e){return {id:e.id||this.idGenerator.next("step"),title:e.title,description:e.description,formConfig:e.formConfig instanceof forms.form?e.formConfig.build():e.formConfig,allowSkip:e.allowSkip||false,renderer:e.renderer,conditions:e.conditions,metadata:e.metadata,onAfterValidation:e.onAfterValidation}}addStep(e){let r=core.normalizeToArray(e);for(let n of r){let i=this.createStepFromDefinition(n);this.steps.push(i);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),e.persistence&&(this.persistenceConfig=e.persistence),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(r){throw new Error(`Failed to install plugin "${e.name}": ${r instanceof Error?r.message:String(r)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let r=e.dependencies.filter(n=>!this.plugins.some(i=>i.name===n));if(r.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${r.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(r=>r.name!==e),this}updateStep(e,r){let n=this.steps.findIndex(i=>i.id===e);if(n===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[n]={...this.steps[n],...r},this}addStepConditions(e,r){let n=this.steps.findIndex(s=>s.id===e);if(n===-1)throw new Error(`Step with ID "${e}" not found`);let i={...this.steps[n].conditions,...r};return this.steps[n]={...this.steps[n],conditions:i},this}removeStep(e){return this.steps=this.steps.filter(r=>r.id!==e),this}getStep(e){return this.steps.find(r=>r.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,r){let n=new t(this.config,e||`${this.workflowId}-clone`,r||this.workflowName);return n.steps=core.deepClone(this.steps),n.analytics=this.analytics?core.deepClone(this.analytics):void 0,n.persistenceConfig=this.persistenceConfig?core.deepClone(this.persistenceConfig):void 0,n.plugins=[...this.plugins],n}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let r=this.steps.map(n=>n.id);try{core.ensureUnique(r,"step");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of this.plugins)if(n.dependencies){let i=n.dependencies.filter(s=>!this.plugins.some(p=>p.name===s));i.length>0&&e.push(`Plugin "${n.name}" requires missing dependencies: ${i.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((n,i)=>n+i.formConfig.allFields.length,0),r=this.steps.map(n=>n.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:r.length>0?Math.max(...r):0,minFieldsInStep:r.length>0?Math.min(...r):0,hasAnalytics:!!this.analytics}}build(){let e=this.validate();if(e.length>0)throw new Error(`Workflow validation failed: ${e.join(", ")}`);return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,persistence:this.persistenceConfig,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,persistence:this.persistenceConfig,plugins:this.plugins.map(e=>({name:e.name,version:e.version}))}}fromJSON(e){return this.workflowId=e.workflowId,this.workflowName=e.workflowName,this.workflowDescription=e.workflowDescription,this.steps=e.steps,this.analytics=e.analytics,this.persistenceConfig=e.persistence,this.plugins=e.plugins||[],this}};function le(t,e={},r={}){return Dt.useMemo(()=>{if(!t)return {visible:r.visible??true,disabled:r.disabled??false,required:r.required??false,readonly:r.readonly??false};let n=i=>{try{let s;return i&&typeof i=="object"&&"build"in i?s=i.build():s=i,core.evaluateCondition(s,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:t.visible?n(t.visible):true,disabled:t.disabled?n(t.disabled):false,required:t.required?n(t.required):false,readonly:t.readonly?n(t.readonly):false}},[t,e,r])}function Fe(t,e={}){return Dt.useMemo(()=>{let r={};for(let[n,i]of Object.entries(t))if(r[n]={visible:true,disabled:false,required:false,readonly:false},i){let s=p=>{try{return p&&typeof p=="object"&&"build"in p?core.evaluateCondition(p.build(),e):core.evaluateCondition(p,e)}catch(o){return console.warn(`Error evaluating condition for field ${n}:`,o),false}};r[n]={visible:i.visible?s(i.visible):true,disabled:i.disabled?s(i.disabled):false,required:i.required?s(i.required):false,readonly:i.readonly?s(i.readonly):false};}return r},[t,e])}function Be(t,e={}){return Dt.useMemo(()=>{let r={};for(let[n,i]of Object.entries(t)){let s=Number.parseInt(n,10);if(r[s]={visible:true,disabled:false,required:false,readonly:false},i){let p=o=>{try{return o&&typeof o=="object"&&"build"in o?core.evaluateCondition(o.build(),e):core.evaluateCondition(o,e)}catch(f){return console.warn(`Error evaluating condition for step ${s}:`,f),false}};r[s]={visible:i.visible?p(i.visible):true,disabled:i.disabled?p(i.disabled):false,required:i.required?p(i.required):false,readonly:i.readonly?p(i.readonly):false};}}return r},[t,e])}var E=class extends Error{constructor(r,n,i){super(`[WorkflowPersistence] ${r} (Code: ${n})`);this.code=n;this.cause=i;this.name="WorkflowPersistenceError";}};function pe(t,e,r){return {workflowId:t,currentStepIndex:e.currentStepIndex,allData:{...e.allData},stepData:{...e.stepData},visitedSteps:Array.from(e.visitedSteps),passedSteps:Array.from(e.passedSteps),lastSaved:Date.now(),metadata:r}}function Me(t){return {currentStepIndex:t.currentStepIndex,allData:{...t.allData},stepData:{...t.stepData},visitedSteps:new Set(t.visitedSteps),passedSteps:new Set(t.passedSteps||[]),isSubmitting:false,isTransitioning:false}}function it(t){if(!t||typeof t!="object")return false;let e=["workflowId","currentStepIndex","allData","stepData","visitedSteps","lastSaved"];for(let r of e)if(!(r in t))return false;return !(typeof t.workflowId!="string"||typeof t.currentStepIndex!="number"||typeof t.allData!="object"||typeof t.stepData!="object"||!Array.isArray(t.visitedSteps)||typeof t.lastSaved!="number")}function de(t,e){return e?`${e}:${t}`:t}function ue(t,e){let r=null;return (...n)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...n);},e);}}function st(t,e,r="persist"){let n=Me(e);switch(r){case "persist":return {...n,isSubmitting:t.isSubmitting,isTransitioning:t.isTransitioning};case "current":return {...t,visitedSteps:new Set([...t.visitedSteps,...n.visitedSteps]),passedSteps:new Set([...t.passedSteps,...n.passedSteps||[]])};case "merge":return {currentStepIndex:t.currentStepIndex,allData:{...n.allData,...t.allData},stepData:{...n.stepData,...t.stepData},visitedSteps:new Set([...n.visitedSteps,...t.visitedSteps]),passedSteps:new Set([...n.passedSteps||[],...t.passedSteps]),isSubmitting:t.isSubmitting,isTransitioning:t.isTransitioning};default:return n}}function $({workflowId:t,workflowState:e,adapter:r,options:n={},userId:i}){let[s,p]=Dt.useState(false),[o,f]=Dt.useState(null),[d,b]=Dt.useState(false),c=Dt.useRef(r),l=Dt.useRef(n),a=Dt.useRef({hasPendingChanges:false});Dt.useEffect(()=>{c.current=r,l.current=n;},[r,n]);let y=de(l.current.storageKey||t,i),k=Dt.useCallback(()=>{f(null);},[]),P=Dt.useCallback((u,D)=>{let I=u instanceof E?u:new E(`${D} failed: ${u.message}`,"OPERATION_FAILED",u);f(I),console.error("[WorkflowPersistence]",I);},[]),w=Dt.useCallback(async u=>{k(),p(true);try{let D=pe(t,u,l.current.metadata);await c.current.save(y,D),a.current.lastSavedState={...u},a.current.hasPendingChanges=!1;}catch(D){throw P(D,"Save"),D}finally{p(false);}},[t,y,k,P]),x=Dt.useRef(ue(async u=>{try{await w(u);}catch(D){console.debug("[WorkflowPersistence] Auto-save failed:",D);}},n.debounceMs||500)),h=Dt.useCallback((u,D)=>D?u.currentStepIndex!==D.currentStepIndex||JSON.stringify(u.allData)!==JSON.stringify(D.allData)||JSON.stringify(u.stepData)!==JSON.stringify(D.stepData)||u.visitedSteps.size!==D.visitedSteps.size||!Array.from(u.visitedSteps).every(I=>D.visitedSteps.has(I)):true,[]),m=Dt.useCallback(async()=>{k(),b(true);try{let u=await c.current.load(y);return u&&(a.current.lastSavedState={currentStepIndex:u.currentStepIndex,allData:u.allData,stepData:u.stepData,visitedSteps:new Set(u.visitedSteps),passedSteps:new Set(u.passedSteps||[]),isSubmitting:!1,isTransitioning:!1,isInitializing:!1},a.current.hasPendingChanges=!1),u}catch(u){return P(u,"Load"),null}finally{setTimeout(()=>b(false),100);}},[y,k,P]),W=Dt.useCallback(async()=>{k();try{await c.current.remove(y),a.current.lastSavedState=void 0,a.current.hasPendingChanges=!1;}catch(u){throw P(u,"Clear"),u}},[y,k,P]),L=Dt.useCallback(async()=>{try{return await c.current.exists(y)}catch(u){return P(u,"Exists check"),false}},[y,P]);Dt.useEffect(()=>{l.current.autoPersist&&(s||d||e.isInitializing||e.isSubmitting||e.isTransitioning||h(e,a.current.lastSavedState)&&(a.current.hasPendingChanges=true,x.current(e)));},[e,s,d,h]);let S=Dt.useCallback(async()=>{await w(e);},[w,e]);return {isPersisting:s,persistenceError:o,persistNow:S,loadPersistedData:m,clearPersistedData:W,hasPersistedData:L}}function ot(){let{workflowConfig:t,currentStep:e}=V(),r=Dt.useMemo(()=>e?.metadata,[e?.metadata]),n=Dt.useMemo(()=>d=>t.steps.find(c=>c.id===d)?.metadata,[t.steps]),i=Dt.useMemo(()=>d=>t.steps[d]?.metadata,[t.steps]),s=Dt.useMemo(()=>d=>r?d in r:false,[r]),p=Dt.useMemo(()=>(d,b)=>r&&d in r?r[d]:b,[r]),o=Dt.useMemo(()=>()=>t.steps.map((d,b)=>({id:d.id,title:d.title,index:b,metadata:d.metadata})),[t.steps]),f=Dt.useMemo(()=>d=>t.steps.map((b,c)=>({step:b,index:c})).filter(({step:b,index:c})=>d(b.metadata,b.id,c)).map(({step:b})=>b.id),[t.steps]);return {current:r,getByStepId:n,getByStepIndex:i,hasCurrentKey:s,getCurrentValue:p,getAllStepsMetadata:o,findStepsByMetadata:f}}function fe({workflowConfig:t,workflowState:e,workflowContext:r}){let n=Dt.useRef(Date.now()),i=Dt.useRef(new Map),s=Dt.useRef(false),p=Dt.useRef(null),o=core.getGlobalMonitor();Dt.useEffect(()=>{t.analytics?.onWorkflowStart&&!s.current&&(s.current=true,t.analytics.onWorkflowStart(t.id,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"start",totalSteps:t.steps.length},{timestamp:Date.now(),duration:0,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:0,navigationDuration:0,conditionEvaluationDuration:0},"low"));},[t.id,t.analytics,r,o,t.steps.length]),Dt.useEffect(()=>{let l=t.steps[e.currentStepIndex];if(l&&p.current!==l.id){if(p.current&&t.analytics?.onStepComplete){let a=i.current.get(p.current);if(a){let y=Date.now()-a;t.analytics.onStepComplete(p.current,y,e.stepData,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_complete",stepId:p.current,duration:y},{timestamp:Date.now(),duration:y,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:y,conditionEvaluationDuration:0},"low");}}p.current=l.id,i.current.set(l.id,Date.now()),t.analytics?.onStepStart&&t.analytics.onStepStart(l.id,Date.now(),r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_start",stepId:l.id,stepIndex:e.currentStepIndex},{timestamp:Date.now(),duration:0,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:0,conditionEvaluationDuration:0},"low");}},[e.currentStepIndex,t.steps,t.analytics,r,e.stepData,o,t.id]);let f=Dt.useCallback((l,a)=>{t.analytics?.onStepSkip&&t.analytics.onStepSkip(l,a,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_skip",stepId:l,reason:a},void 0,"medium");},[t.analytics,r,o,t.id]),d=Dt.useCallback(l=>{t.analytics?.onError&&t.analytics.onError(l,r),o&&o.trackError(l,`workflow_${t.id}`,{workflowId:t.id,currentStepIndex:e.currentStepIndex,currentStepId:t.steps[e.currentStepIndex]?.id,workflowContext:r});},[t.analytics,r,o,t.id,e.currentStepIndex,t.steps]),b=Dt.useCallback((l,a,y)=>{if(!o)return;let k={timestamp:Date.now(),duration:y,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:a,navigationDuration:y,conditionEvaluationDuration:0};o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"navigation",fromStep:l,toStep:a,direction:a>l?"forward":"backward"},k,y>1e3?"medium":"low");},[o,t.id,t.steps.length]),c=Dt.useCallback((l,a)=>{if(!o)return;let y={timestamp:Date.now(),duration:l,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:0,conditionEvaluationDuration:l};o.track("condition_evaluation",`workflow_${t.id}`,{workflowId:t.id,conditionsCount:a,currentStepIndex:e.currentStepIndex},y,l>100?"medium":"low");},[o,t.id,t.steps.length,e.currentStepIndex]);return {analyticsStartTime:n,trackStepSkip:f,trackError:d,trackNavigation:b,trackConditionEvaluation:c}}function te(t,e=""){let r={};for(let n in t)if(n in t){let i=t[n],s=e?`${e}.${n}`:n;i!==null&&typeof i=="object"&&!Array.isArray(i)&&!(i instanceof Date)?Object.assign(r,te(i,s)):r[s]=i;}return r}function Se(t,e){let r=te(t),n=te(e);return {...{...t,...e},...r,...n}}function Ue(t,e){return {visible:t.visible,skippable:e===true||t.required}}function me({workflowConfig:t,workflowState:e,currentStep:r}){let n=Dt.useMemo(()=>Se(e.allData,e.stepData),[e.allData,e.stepData]),i=Dt.useMemo(()=>{if(r?.conditions)return {visible:r.conditions.visible,required:r.conditions.skippable}},[r?.conditions]),s=le(i,n,{visible:true,disabled:false,required:false,readonly:false}),p=Dt.useMemo(()=>Ue(s,r?.allowSkip),[s,r?.allowSkip]),o=Dt.useMemo(()=>{let x={};return t.steps.forEach((h,m)=>{h.conditions&&(x[m]={visible:h.conditions.visible,required:h.conditions.skippable});}),x},[t.steps]),f=Be(o,n),d=Dt.useMemo(()=>{let x={};return t.steps.forEach((h,m)=>{let W=f[m];W?x[m]=Ue(W,h.allowSkip):x[m]={visible:true,skippable:h.allowSkip===true};}),x},[t.steps,f]),b=Dt.useMemo(()=>{if(!r?.formConfig?.allFields)return {};let x={};for(let h of r.formConfig.allFields)h.conditions&&(x[h.id]=h.conditions);return x},[r?.formConfig?.allFields]),c=Fe(b,n),l=Dt.useCallback(x=>x<0||x>=t.steps.length?false:d[x]?.visible??true,[d,t.steps.length]),a=Dt.useCallback(x=>x<0||x>=t.steps.length?false:d[x]?.skippable??false,[d,t.steps.length]),y=Dt.useCallback(x=>c[x]?.visible??true,[c]),k=Dt.useCallback(x=>c[x]?.disabled??false,[c]),P=Dt.useCallback(x=>c[x]?.required??false,[c]),w=Dt.useCallback(x=>c[x]?.readonly??false,[c]);return {stepConditions:p,fieldConditions:c,allStepConditions:d,isStepVisible:l,isStepSkippable:a,isFieldVisible:y,isFieldDisabled:k,isFieldRequired:P,isFieldReadonly:w}}function ge({workflowConfig:t,workflowState:e,workflowContext:r,conditionsHelpers:n,setCurrentStep:i,setTransitioning:s,markStepVisited:p,markStepPassed:o,setStepData:f,onStepChange:d}){let b=Dt.useRef(d);b.current=d;let c=t.steps[e.currentStepIndex],l=Dt.useCallback(()=>({setStepData:(S,u)=>{f(u,S);},setStepFields:(S,u)=>{let I={...e.allData[S]||{},...u};f(I,S);},getStepData:S=>e.allData[S]||{},setNextStepField:(S,u)=>{let D=e.currentStepIndex+1;if(D<t.steps.length){let I=t.steps[D].id,A={...e.allData[I]||{},[S]:u};f(A,I);}},setNextStepFields:S=>{let u=e.currentStepIndex+1;if(u<t.steps.length){let D=t.steps[u].id,O={...e.allData[D]||{},...S};f(O,D);}},getAllData:()=>({...e.allData}),getSteps:()=>[...t.steps]}),[e.allData,e.currentStepIndex,t.steps,f]),a=Dt.useCallback(async S=>{if(S<0||S>=t.steps.length||!n.isStepVisible(S))return false;s(true);try{return b.current&&b.current(e.currentStepIndex,S,r),i(S),p(S,t.steps[S].id),!0}catch(u){return console.error("Step transition failed:",u),t.analytics?.onError&&t.analytics.onError(u,r),false}finally{s(false);}},[t.steps,t.analytics,n,e.currentStepIndex,r,s,i,p]),y=Dt.useCallback(S=>{for(let u=S+1;u<t.steps.length;u++)if(n.isStepVisible(u))return u;return null},[t.steps.length,n]),k=Dt.useCallback(S=>{for(let u=S-1;u>=0;u--)if(n.isStepVisible(u))return u;return null},[n]),P=Dt.useCallback(async()=>{if(c?.onAfterValidation)try{let u=l();await c.onAfterValidation(e.stepData,u,r);}catch(u){return console.error("onAfterValidation failed:",u),t.analytics?.onError&&t.analytics.onError(u,r),false}o(c.id);let S=y(e.currentStepIndex);return S===null?false:a(S)},[c,l,e.stepData,r,t.analytics,e.currentStepIndex,y,a,o]),w=Dt.useCallback(async()=>{let S=k(e.currentStepIndex);return S===null?false:a(S)},[e.currentStepIndex,k,a]),x=Dt.useCallback(async()=>!c?.allowSkip&&!n.isStepSkippable(e.currentStepIndex)?false:(t.analytics?.onStepSkip&&t.analytics.onStepSkip(c.id,"user_skip",r),P()),[c,n,e.currentStepIndex,t.analytics,r,P]),h=Dt.useCallback(S=>S<0||S>=t.steps.length?false:n.isStepVisible(S),[t.steps.length,n]),m=Dt.useCallback(()=>{let S=y(e.currentStepIndex);return S!==null&&h(S)},[e.currentStepIndex,y,h]),W=Dt.useCallback(()=>{let S=k(e.currentStepIndex);return S!==null&&h(S)},[e.currentStepIndex,k,h]),L=Dt.useCallback(()=>c?.allowSkip===true&&n.isStepSkippable(e.currentStepIndex),[c?.allowSkip,n,e.currentStepIndex]);return {goToStep:a,goNext:P,goPrevious:w,skipStep:x,canGoToStep:h,canGoNext:m,canGoPrevious:W,canSkipCurrentStep:L}}function dt(t,e){switch(e.type){case "SET_CURRENT_STEP":return {...t,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":return {...t,stepData:e.data,allData:{...t.allData,[e.stepId]:e.data}};case "SET_ALL_DATA":return {...t,allData:e.data};case "SET_FIELD_VALUE":{let r={...t.stepData,[e.fieldId]:e.value};return {...t,stepData:r,allData:{...t.allData,[e.stepId]:r}}}case "SET_SUBMITTING":return {...t,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...t,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...t,visitedSteps:new Set([...t.visitedSteps,e.stepId])};case "MARK_STEP_PASSED":return {...t,passedSteps:new Set([...t.passedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,passedSteps:new Set,isSubmitting:false,isTransitioning:false,isInitializing:false};case "LOAD_PERSISTED_STATE":return {...t,...e.state};case "SET_INITIALIZATION_COMPLETE":return {...t,isInitializing:false};default:return t}}function ut({defaultValues:t={},defaultStepIndex:e,workflowSteps:r,persistence:n}){let i=Dt.useMemo(()=>{let m=new Set;if(e&&e>0&&r)for(let W=0;W<e;W++)r[W]&&m.add(r[W].id);return m},[e,r]),s=Dt.useMemo(()=>{let m=new Set;if(e&&e>0&&r)for(let W=0;W<e;W++)r[W]&&m.add(r[W].id);return m},[e,r]),p={currentStepIndex:e??0,allData:t,stepData:{},visitedSteps:i,passedSteps:s,isSubmitting:false,isTransitioning:false,isInitializing:true},[o,f]=Dt.useReducer(dt,p),d=n?.adapter?$({workflowId:n.workflowId,workflowState:o,adapter:n.adapter,options:n.options,userId:n.userId}):null,b=Dt.useCallback(m=>{f({type:"SET_CURRENT_STEP",stepIndex:m});},[]),c=Dt.useCallback((m,W)=>{f({type:"SET_STEP_DATA",data:m,stepId:W});},[]),l=Dt.useCallback((m,W,L)=>{f({type:"SET_FIELD_VALUE",fieldId:m,value:W,stepId:L});},[]),a=Dt.useCallback(m=>{f({type:"SET_SUBMITTING",isSubmitting:m});},[]),y=Dt.useCallback(m=>{f({type:"SET_TRANSITIONING",isTransitioning:m});},[]),k=Dt.useCallback((m,W)=>{f({type:"MARK_STEP_VISITED",stepIndex:m,stepId:W});},[]),P=Dt.useCallback(m=>{f({type:"MARK_STEP_PASSED",stepId:m});},[]),w=Dt.useCallback(()=>{f({type:"RESET_WORKFLOW"});},[]),x=Dt.useCallback(()=>{f({type:"SET_INITIALIZATION_COMPLETE"});},[]),h=Dt.useCallback(async()=>{if(!d)return x(),false;try{let m=await d.loadPersistedData();if(m){let W={currentStepIndex:m.currentStepIndex,allData:m.allData,stepData:m.stepData,visitedSteps:new Set(m.visitedSteps),passedSteps:new Set(m.passedSteps||[])};return f({type:"LOAD_PERSISTED_STATE",state:W}),x(),!0}}catch(m){console.error("Failed to load persisted state:",m);}return x(),false},[d,x]);return {workflowState:o,setCurrentStep:b,setStepData:c,setFieldValue:l,setSubmitting:a,setTransitioning:y,markStepVisited:k,markStepPassed:P,resetWorkflow:w,loadPersistedState:h,persistence:d?{isPersisting:d.isPersisting,persistenceError:d.persistenceError,persistNow:d.persistNow,clearPersistedData:d.clearPersistedData,hasPersistedData:d.hasPersistedData}:null}}function be({workflowConfig:t,workflowState:e,workflowContext:r,setSubmitting:n,onWorkflowComplete:i,analyticsStartTime:s}){let p=Dt.useRef(i);p.current=i;let o=Dt.useCallback(async()=>{n(true);try{if(p.current&&await p.current(e.allData),t.analytics?.onWorkflowComplete){let d=Date.now()-s.current;t.analytics.onWorkflowComplete(t.id,d,e.allData);}}catch(d){throw console.error("Workflow submission failed:",d),t.analytics?.onError&&t.analytics.onError(d,r),d}finally{n(false);}},[e.allData,t.analytics,t.id,r,s,n]),f=Dt.useCallback(()=>e.isSubmitting?false:e.currentStepIndex===t.steps.length-1,[e.isSubmitting,e.currentStepIndex,t.steps.length]);return {submitWorkflow:o,isSubmitting:e.isSubmitting,canSubmit:f()}}function $e(t={}){let{defaultValues:e={},defaultStepIndex:r=0,initialVisitedSteps:n=new Set,initialPassedSteps:i=new Set}=t;return zustand.createStore()(middleware.subscribeWithSelector((s,p)=>({currentStepIndex:r,isTransitioning:false,isInitializing:true,allData:{...e},stepData:{},visitedSteps:new Set(n),passedSteps:new Set(i),isSubmitting:false,_defaultValues:{...e},_defaultStepIndex:r,_setCurrentStep:o=>{s({currentStepIndex:o});},_setStepData:(o,f)=>{s(d=>({stepData:o,allData:{...d.allData,[f]:o}}));},_setAllData:o=>{s({allData:o});},_setFieldValue:(o,f,d)=>{s(b=>{let c={...b.stepData,[o]:f};return {stepData:c,allData:{...b.allData,[d]:c}}});},_setSubmitting:o=>{s({isSubmitting:o});},_setTransitioning:o=>{s({isTransitioning:o});},_setInitializing:o=>{s({isInitializing:o});},_markStepVisited:o=>{s(f=>({visitedSteps:new Set([...f.visitedSteps,o])}));},_markStepPassed:o=>{s(f=>({passedSteps:new Set([...f.passedSteps,o])}));},_reset:()=>{let o=p();s({currentStepIndex:o._defaultStepIndex,allData:{...o._defaultValues},stepData:{},visitedSteps:new Set,passedSteps:new Set,isSubmitting:false,isTransitioning:false,isInitializing:false});},_loadPersistedState:o=>{s(f=>({...f,...o,isInitializing:false}));}})))}var ye=Dt.createContext(null);function _(){let t=Dt.useContext(ye);if(!t)throw new Error("useWorkflowStore must be used within a WorkflowProvider");return t}function $r(){let t=_();return zustand.useStore(t,e=>e.currentStepIndex)}function Kr(){let t=_();return zustand.useStore(t,e=>e.isTransitioning)}function qr(){let t=_();return zustand.useStore(t,e=>e.isInitializing)}function Jr(){let t=_();return zustand.useStore(t,e=>e.isSubmitting)}function jr(){let t=_();return zustand.useStore(t,e=>e.allData)}function Zr(){let t=_();return zustand.useStore(t,e=>e.stepData)}function Qr(t){let e=_();return zustand.useStore(e,r=>r.allData[t])}function Hr(){let t=_();return zustand.useStore(t,e=>e.visitedSteps)}function Xr(){let t=_();return zustand.useStore(t,e=>e.passedSteps)}function Yr(t){let e=_();return zustand.useStore(e,r=>r.visitedSteps.has(t))}function en(t){let e=_();return zustand.useStore(e,r=>r.passedSteps.has(t))}function tn(){let t=_(),e=zustand.useStore(t,i=>i.currentStepIndex),r=zustand.useStore(t,i=>i.isTransitioning),n=zustand.useStore(t,i=>i.isSubmitting);return {currentStepIndex:e,isTransitioning:r,isSubmitting:n}}function rn(){let t=_(),e=zustand.useStore(t,i=>i.isSubmitting),r=zustand.useStore(t,i=>i.isTransitioning),n=zustand.useStore(t,i=>i.isInitializing);return {isSubmitting:e,isTransitioning:r,isInitializing:n}}function nn(){let t=_();return {setCurrentStep:e=>t.getState()._setCurrentStep(e),setStepData:(e,r)=>t.getState()._setStepData(e,r),setAllData:e=>t.getState()._setAllData(e),setFieldValue:(e,r,n)=>t.getState()._setFieldValue(e,r,n),setSubmitting:e=>t.getState()._setSubmitting(e),setTransitioning:e=>t.getState()._setTransitioning(e),setInitializing:e=>t.getState()._setInitializing(e),markStepVisited:e=>t.getState()._markStepVisited(e),markStepPassed:e=>t.getState()._markStepPassed(e),reset:()=>t.getState()._reset(),loadPersistedState:e=>t.getState()._loadPersistedState(e)}}function sn(){return _()}var Ke=Dt.createContext(null);function xt(t,e){let r=new Set,n=new Set;if(t>0)for(let i=0;i<t;i++)e[i]&&(r.add(e[i].id),n.add(e[i].id));return {visitedSteps:r,passedSteps:n}}function ke({children:t,workflowConfig:e,defaultValues:r={},defaultStep:n,onStepChange:i,onWorkflowComplete:s,className:p}){let o=Dt.useRef(i),f=Dt.useRef(s);o.current=i,f.current=s;let d=Dt.useMemo(()=>{if(!n)return 0;let v=e.steps.findIndex(g=>g.id===n);return v===-1?(console.warn(`Default step with ID "${n}" not found. Starting at step 0.`),0):v},[n,e.steps]),b=Dt.useMemo(()=>xt(d,e.steps),[d,e.steps]),c=Dt.useRef(null);c.current||(c.current=$e({defaultValues:r,defaultStepIndex:d,initialVisitedSteps:b.visitedSteps,initialPassedSteps:b.passedSteps}));let l=c.current,[a,y]=Dt.useState(()=>{let v=l.getState();return {currentStepIndex:v.currentStepIndex,allData:v.allData,stepData:v.stepData,visitedSteps:v.visitedSteps,passedSteps:v.passedSteps,isSubmitting:v.isSubmitting,isTransitioning:v.isTransitioning,isInitializing:v.isInitializing}});Dt.useEffect(()=>l.subscribe(g=>{y({currentStepIndex:g.currentStepIndex,allData:g.allData,stepData:g.stepData,visitedSteps:g.visitedSteps,passedSteps:g.passedSteps,isSubmitting:g.isSubmitting,isTransitioning:g.isTransitioning,isInitializing:g.isInitializing});}),[l]);let k=Dt.useCallback(v=>l.getState()._setCurrentStep(v),[l]),P=Dt.useCallback((v,g)=>l.getState()._setStepData(v,g),[l]),w=Dt.useCallback((v,g,T)=>l.getState()._setFieldValue(v,g,T),[l]),x=Dt.useCallback(v=>l.getState()._setSubmitting(v),[l]),h=Dt.useCallback(v=>l.getState()._setTransitioning(v),[l]),m=Dt.useCallback((v,g)=>l.getState()._markStepVisited(g),[l]),W=Dt.useCallback(v=>l.getState()._markStepPassed(v),[l]),L=Dt.useCallback(()=>l.getState()._reset(),[l]),S=e.persistence?.adapter?$({workflowId:e.id,workflowState:a,adapter:e.persistence.adapter,options:e.persistence.options,userId:e.persistence.userId}):null;Dt.useEffect(()=>{(async()=>{if(S)try{let g=await S.loadPersistedData();if(g){l.getState()._loadPersistedState({currentStepIndex:g.currentStepIndex,allData:g.allData,stepData:g.stepData,visitedSteps:new Set(g.visitedSteps),passedSteps:new Set(g.passedSteps||[])});return}}catch(g){console.error("Failed to load persisted state:",g);}l.getState()._setInitializing(false);})();},[l,S]);let u=Dt.useMemo(()=>({isPersisting:S?.isPersisting??false,persistenceError:S?.persistenceError??null,persistNow:S?.persistNow}),[S?.isPersisting,S?.persistenceError,S?.persistNow]),D=Dt.useMemo(()=>({workflowId:e.id,currentStepIndex:a.currentStepIndex,totalSteps:e.steps.length,allData:a.allData,stepData:a.stepData,visitedSteps:a.visitedSteps}),[e.id,e.steps.length,a.currentStepIndex,a.allData,a.stepData,a.visitedSteps]),I=Dt.useMemo(()=>e.steps[a.currentStepIndex],[e.steps,a.currentStepIndex]),O=Dt.useMemo(()=>I?.formConfig,[I?.formConfig]),A=me({workflowConfig:e,workflowState:a,currentStep:I}),z=Dt.useMemo(()=>{let v=-1;for(let R=0;R<e.steps.length;R++)if(A.isStepVisible(R)){v=R;break}let g=-1;for(let R=e.steps.length-1;R>=0;R--)if(A.isStepVisible(R)){g=R;break}let T=new Set;for(let R=0;R<e.steps.length;R++){let H=e.steps[R];A.isStepVisible(R)&&a.visitedSteps.has(H.id)&&T.add(H.id);}return {...D,isFirstStep:a.currentStepIndex===v,isLastStep:a.currentStepIndex===g,visibleVisitedSteps:T,passedSteps:a.passedSteps}},[D,a.currentStepIndex,a.visitedSteps,a.passedSteps,A,e.steps]),{analyticsStartTime:Ze}=fe({workflowConfig:e,workflowState:a,workflowContext:z}),{goToStep:he,goNext:Z,goPrevious:Ie,skipStep:We,canGoToStep:De,canGoNext:we,canGoPrevious:Re,canSkipCurrentStep:Ee}=ge({workflowConfig:e,workflowState:a,workflowContext:z,conditionsHelpers:A,setCurrentStep:k,setTransitioning:h,markStepVisited:m,markStepPassed:W,setStepData:P,onStepChange:o.current}),ie=Dt.useRef(false);Dt.useEffect(()=>{if(ie.current)return;if(!A.isStepVisible(a.currentStepIndex)){for(let g=0;g<e.steps.length;g++)if(A.isStepVisible(g)){k(g),m(g,e.steps[g].id);break}}ie.current=true;},[a.currentStepIndex,e.steps,k,m,A]),Dt.useEffect(()=>{if(!ie.current)return;if(!A.isStepVisible(a.currentStepIndex)){let g=null;for(let T=a.currentStepIndex+1;T<e.steps.length;T++)if(A.isStepVisible(T)){g=T;break}if(g===null){for(let T=a.currentStepIndex-1;T>=0;T--)if(A.isStepVisible(T)){g=T;break}}g!==null&&(k(g),m(g,e.steps[g].id));}},[A,a.currentStepIndex,e.steps,k,m]);let{submitWorkflow:Q,isSubmitting:Te,canSubmit:Ce}=be({workflowConfig:e,workflowState:a,workflowContext:z,setSubmitting:x,onWorkflowComplete:f.current,analyticsStartTime:Ze}),se=Dt.useCallback((v,g)=>{w(v,g,I?.id||"");},[w,I?.id]),Ae=Dt.useCallback(v=>{P(v,I?.id||"");},[P,I?.id]),Qe=Dt.useCallback(async v=>{I?.id&&v&&P(v,I.id),z.isLastStep?await Q():await Z();},[z.isLastStep,Q,Z,I?.id,P]),_e=Dt.useMemo(()=>({goToStep:he,goNext:Z,goPrevious:Ie,skipStep:We,canGoToStep:De,canGoNext:we,canGoPrevious:Re,canSkipCurrentStep:Ee}),[he,Z,Ie,We,De,we,Re,Ee]),Ve=Dt.useMemo(()=>({setValue:se,setStepData:Ae,resetWorkflow:L}),[se,Ae,L]),Ne=Dt.useMemo(()=>({submitWorkflow:Q,isSubmitting:Te,canSubmit:Ce}),[Q,Te,Ce]),He=Dt.useMemo(()=>({workflowState:a,workflowConfig:e,currentStep:I,context:z,formConfig:O,conditionsHelpers:A,currentStepMetadata:I?.metadata,..._e,...Ve,...Ne,persistNow:u.persistNow,isPersisting:u.isPersisting,persistenceError:u.persistenceError}),[a,e,I,z,O,A,_e,Ve,Ne,u]),Xe=Dt.useMemo(()=>{if(!I?.id)return {};let v=a?.allData[I.id]||{};if(!O?.allFields)return v;let g=new Set(O.allFields.map(R=>R.id)),T={};for(let[R,H]of Object.entries(v))g.has(R)&&(T[R]=H);return T},[a?.allData,I?.id,O?.allFields]),Ye=Dt.useMemo(()=>a.isInitializing.toString(),[a.isInitializing]);return jsxRuntime.jsx(ye.Provider,{value:l,children:jsxRuntime.jsx(Ke.Provider,{value:He,children:jsxRuntime.jsx(forms.FormProvider,{formConfig:O,defaultValues:Xe,onFieldChange:se,"data-workflow-id":e.id,className:p,onSubmit:Qe,children:t},Ye)})})}function V(){let t=Dt.useContext(Ke);if(!t)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return t}function ht({children:t,workflowConfig:e,...r}){let n=Dt.useMemo(()=>e instanceof J?e.build():e,[e]);return jsxRuntime.jsx(ke,{...r,workflowConfig:n,children:t})}var wt=Dt__default.default.memo(function({stepId:e,children:r}){let{currentStep:n}=V();if(!n||e&&n.id!==e)return null;let{formConfig:i,renderer:s}=n;return i?s?s(n):r??jsxRuntime.jsx(forms.FormBody,{}):null});var Nt=Dt__default.default.memo(function({className:e,isSubmitting:r,...n}){let{context:i,workflowState:s,workflowConfig:p,currentStep:o}=V(),{submit:f}=forms.useFormConfigContext(),d=forms.useFormSubmitting(),b=forms.useFormValues(),c=Dt.useMemo(()=>{let y=d||s.isSubmitting,k=r??y,P=!s.isTransitioning&&!k;return {finalIsSubmitting:k,canGoNext:P}},[d,s.isSubmitting,s.isTransitioning,r]),l=Dt.useCallback(async y=>{y?.preventDefault(),c.canGoNext&&await f(y);},[c.canGoNext,f]),a=Dt.useMemo(()=>({isLastStep:i.isLastStep,canGoNext:c.canGoNext,isSubmitting:c.finalIsSubmitting,onSubmit:l,className:e,currentStep:o,stepData:b,allData:i.allData,context:i}),[i.isLastStep,c.canGoNext,c.finalIsSubmitting,l,e,o,b,i.allData,i]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:p.renderConfig?.nextButtonRenderer,props:a,...n})});var zt=Dt__default.default.memo(function({className:e,isSubmitting:r,...n}){let{context:i,goPrevious:s,workflowState:p,workflowConfig:o,currentStep:f,canGoPrevious:d}=V(),b=forms.useFormSubmitting(),c=forms.useFormValues(),l=Dt.useMemo(()=>{let k=b||p.isSubmitting,P=r??k,w=d()&&!p.isTransitioning&&!P;return {finalIsSubmitting:P,canGoPrevious:w}},[b,p.isSubmitting,p.isTransitioning,d,r]),a=Dt.useCallback(async k=>{k?.preventDefault(),l.canGoPrevious&&await s();},[l.canGoPrevious,s]),y=Dt.useMemo(()=>({canGoPrevious:l.canGoPrevious,isSubmitting:l.finalIsSubmitting,onPrevious:a,className:e,currentStep:f,stepData:c,allData:i.allData,context:i}),[l.canGoPrevious,l.finalIsSubmitting,a,e,f,c,i.allData,i]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:o.renderConfig?.previousButtonRenderer,props:y,...n})});var Zt=Dt__default.default.memo(function({className:e,isSubmitting:r,...n}){let{currentStep:i,skipStep:s,workflowState:p,workflowConfig:o,context:f,conditionsHelpers:d}=V(),b=forms.useFormSubmitting(),c=forms.useFormValues(),l=Dt.useMemo(()=>{let k=b||p.isSubmitting,P=r??k,w=(!!i?.allowSkip||d.isStepSkippable(p.currentStepIndex))&&!p.isTransitioning&&!P;return {finalIsSubmitting:P,canSkip:w}},[b,p.isSubmitting,p.isTransitioning,p.currentStepIndex,i?.allowSkip,d.isStepSkippable,r]),a=Dt.useCallback(async k=>{k?.preventDefault(),l.canSkip&&await s();},[l.canSkip,s]),y=Dt.useMemo(()=>({canSkip:l.canSkip,isSubmitting:l.finalIsSubmitting,onSkip:a,className:e,currentStep:i,stepData:c,allData:f.allData,context:f}),[l.canSkip,l.finalIsSubmitting,a,e,i,c,f.allData,f]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:o.renderConfig?.skipButtonRenderer,props:y,...n})});var er=Dt__default.default.memo(function({onStepClick:e,className:r,...n}){let{workflowConfig:i,workflowState:s,context:p,goToStep:o,conditionsHelpers:f}=V(),{visibleSteps:d,visibleToOriginalIndexMap:b,originalToVisibleIndexMap:c}=Dt.useMemo(()=>{let k=[],P=new Map,w=new Map;return i.steps.forEach((x,h)=>{if(f.isStepVisible(h)){let m=k.length;k.push(x),P.set(m,h),w.set(h,m);}}),{visibleSteps:k,visibleToOriginalIndexMap:P,originalToVisibleIndexMap:w}},[i.steps,f]),l=Dt.useCallback(k=>{let P=b.get(k);P!==void 0&&(e?e(P):o(P));},[b,e,o]),a=Dt.useMemo(()=>c.get(s.currentStepIndex)??-1,[c,s.currentStepIndex]),y=Dt.useMemo(()=>({steps:d,currentStepIndex:a,visitedSteps:p.visibleVisitedSteps,onStepClick:l,className:r}),[d,a,p.visibleVisitedSteps,l,r]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowStepper",renderer:i.renderConfig?.stepperRenderer,props:y,...n})});var Pe=class{constructor(e={}){this.version="1.0.0";this.keyPrefix=e.keyPrefix??"rilay_workflow_",this.compress=e.compress??false,this.maxAge=e.maxAge,this._isAvailable=this.isLocalStorageAvailable();}async save(e,r){if(this._isAvailable)try{let n=this.getStorageKey(e),i={data:{...r,lastSaved:Date.now()},version:this.version,expiresAt:this.maxAge?Date.now()+this.maxAge:void 0},s=JSON.stringify(i),p=this.compress?this.compressData(s):s;localStorage.setItem(n,p);}catch(n){if(n instanceof Error)if(n.name==="QuotaExceededError"||n.message.includes("quota")){await this.clearExpiredData();try{let i=this.getStorageKey(e),s={data:{...r,lastSaved:Date.now()},version:this.version,expiresAt:this.maxAge?Date.now()+this.maxAge:void 0},p=JSON.stringify(s),o=this.compress?this.compressData(p):p;localStorage.setItem(i,o);}catch(i){throw new E("localStorage quota exceeded and cleanup failed","QUOTA_EXCEEDED",i)}}else throw new E(`Failed to save to localStorage: ${n.message}`,"SAVE_FAILED",n);else throw new E("Unknown error occurred while saving","SAVE_FAILED")}}async load(e){if(!this._isAvailable)return null;try{let r=this.getStorageKey(e),n=localStorage.getItem(r);if(!n)return null;let i=this.compress?this.decompressData(n):n,s=JSON.parse(i);return s.expiresAt&&Date.now()>s.expiresAt?(await this.remove(e),null):{...s.data,visitedSteps:Array.isArray(s.data.visitedSteps)?s.data.visitedSteps:[]}}catch(r){throw r instanceof Error?new E(`Failed to load from localStorage: ${r.message}`,"LOAD_FAILED",r):new E("Unknown error occurred while loading","LOAD_FAILED")}}async remove(e){if(this._isAvailable)try{let r=this.getStorageKey(e);localStorage.removeItem(r);}catch(r){throw r instanceof Error?new E(`Failed to remove from localStorage: ${r.message}`,"REMOVE_FAILED",r):new E("Unknown error occurred while removing","REMOVE_FAILED")}}async exists(e){if(!this._isAvailable)return false;try{let r=this.getStorageKey(e),n=localStorage.getItem(r);if(!n)return !1;let i=this.compress?this.decompressData(n):n,s=JSON.parse(i);return s.expiresAt&&Date.now()>s.expiresAt?(await this.remove(e),!1):!0}catch{return false}}async listKeys(){if(!this._isAvailable)return [];try{let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);if(n?.startsWith(this.keyPrefix)){let i=n.substring(this.keyPrefix.length);await this.exists(i)&&e.push(i);}}return e}catch(e){throw e instanceof Error?new E(`Failed to list keys: ${e.message}`,"LIST_FAILED",e):new E("Unknown error occurred while listing keys","LIST_FAILED")}}async clear(){try{let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n?.startsWith(this.keyPrefix)&&e.push(n);}for(let r of e)localStorage.removeItem(r);}catch(e){throw e instanceof Error?new E(`Failed to clear localStorage: ${e.message}`,"CLEAR_FAILED",e):new E("Unknown error occurred while clearing","CLEAR_FAILED")}}getStorageKey(e){return `${this.keyPrefix}${e}`}isLocalStorageAvailable(){try{let e="__rilay_test__";return localStorage.setItem(e,"test"),localStorage.removeItem(e),!0}catch{return false}}compressData(e){return btoa(e)}decompressData(e){try{return atob(e)}catch{return e}}async clearExpiredData(){if(!this._isAvailable)return;let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);if(n?.startsWith(this.keyPrefix))try{let i=localStorage.getItem(n);if(i){let s=this.compress?this.decompressData(i):i,p=JSON.parse(s);p.expiresAt&&Date.now()>p.expiresAt&&e.push(n);}}catch{e.push(n);}}for(let r of e)localStorage.removeItem(r);}};exports.LocalStorageAdapter=Pe;exports.Workflow=ht;exports.WorkflowBody=wt;exports.WorkflowNextButton=Nt;exports.WorkflowPersistenceError=E;exports.WorkflowPreviousButton=zt;exports.WorkflowProvider=ke;exports.WorkflowSkipButton=Zt;exports.WorkflowStepper=er;exports.WorkflowStoreContext=ye;exports.combineWorkflowDataForConditions=Se;exports.createWorkflowStore=$e;exports.debounce=ue;exports.flattenObject=te;exports.flow=J;exports.generateStorageKey=de;exports.mergePersistedState=st;exports.persistedToWorkflowState=Me;exports.useConditionEvaluation=le;exports.useCurrentStepIndex=$r;exports.useIsStepPassed=en;exports.useIsStepVisited=Yr;exports.usePassedSteps=Xr;exports.usePersistence=$;exports.useStepDataById=Qr;exports.useStepMetadata=ot;exports.useVisitedSteps=Hr;exports.useWorkflowActions=nn;exports.useWorkflowAllData=jr;exports.useWorkflowAnalytics=fe;exports.useWorkflowConditions=me;exports.useWorkflowContext=V;exports.useWorkflowInitializing=qr;exports.useWorkflowNavigation=ge;exports.useWorkflowNavigationState=tn;exports.useWorkflowState=ut;exports.useWorkflowStepData=Zr;exports.useWorkflowStore=_;exports.useWorkflowStoreApi=sn;exports.useWorkflowSubmission=be;exports.useWorkflowSubmitState=rn;exports.useWorkflowSubmitting=Jr;exports.useWorkflowTransitioning=Kr;exports.validatePersistedData=it;exports.workflowStateToPersisted=pe;
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {ComponentRendererWrapper,IdGenerator,normalizeToArray,deepClone,ensureUnique,getGlobalMonitor,evaluateCondition}from'@rilaykit/core';import {FormBody,useFormConfigContext,useFormSubmitting,useFormValues,form,FormProvider}from'@rilaykit/forms';import Dt,{createContext,useMemo,useCallback,useContext,useState,useRef,useEffect,useReducer}from'react';import {createStore,useStore}from'zustand';import {subscribeWithSelector}from'zustand/middleware';import {jsx}from'react/jsx-runtime';var J=class t{constructor(e,r,n,i){this.steps=[];this.plugins=[];this.idGenerator=new IdGenerator;this.config=e,this.workflowId=r,this.workflowName=n,this.workflowDescription=i;}static create(e,r,n,i){return new t(e,r,n,i)}createStepFromDefinition(e){return {id:e.id||this.idGenerator.next("step"),title:e.title,description:e.description,formConfig:e.formConfig instanceof form?e.formConfig.build():e.formConfig,allowSkip:e.allowSkip||false,renderer:e.renderer,conditions:e.conditions,metadata:e.metadata,onAfterValidation:e.onAfterValidation}}addStep(e){let r=normalizeToArray(e);for(let n of r){let i=this.createStepFromDefinition(n);this.steps.push(i);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),e.persistence&&(this.persistenceConfig=e.persistence),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(r){throw new Error(`Failed to install plugin "${e.name}": ${r instanceof Error?r.message:String(r)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let r=e.dependencies.filter(n=>!this.plugins.some(i=>i.name===n));if(r.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${r.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(r=>r.name!==e),this}updateStep(e,r){let n=this.steps.findIndex(i=>i.id===e);if(n===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[n]={...this.steps[n],...r},this}addStepConditions(e,r){let n=this.steps.findIndex(s=>s.id===e);if(n===-1)throw new Error(`Step with ID "${e}" not found`);let i={...this.steps[n].conditions,...r};return this.steps[n]={...this.steps[n],conditions:i},this}removeStep(e){return this.steps=this.steps.filter(r=>r.id!==e),this}getStep(e){return this.steps.find(r=>r.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,r){let n=new t(this.config,e||`${this.workflowId}-clone`,r||this.workflowName);return n.steps=deepClone(this.steps),n.analytics=this.analytics?deepClone(this.analytics):void 0,n.persistenceConfig=this.persistenceConfig?deepClone(this.persistenceConfig):void 0,n.plugins=[...this.plugins],n}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let r=this.steps.map(n=>n.id);try{ensureUnique(r,"step");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of this.plugins)if(n.dependencies){let i=n.dependencies.filter(s=>!this.plugins.some(p=>p.name===s));i.length>0&&e.push(`Plugin "${n.name}" requires missing dependencies: ${i.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((n,i)=>n+i.formConfig.allFields.length,0),r=this.steps.map(n=>n.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:r.length>0?Math.max(...r):0,minFieldsInStep:r.length>0?Math.min(...r):0,hasAnalytics:!!this.analytics}}build(){let e=this.validate();if(e.length>0)throw new Error(`Workflow validation failed: ${e.join(", ")}`);return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,persistence:this.persistenceConfig,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,persistence:this.persistenceConfig,plugins:this.plugins.map(e=>({name:e.name,version:e.version}))}}fromJSON(e){return this.workflowId=e.workflowId,this.workflowName=e.workflowName,this.workflowDescription=e.workflowDescription,this.steps=e.steps,this.analytics=e.analytics,this.persistenceConfig=e.persistence,this.plugins=e.plugins||[],this}};function le(t,e={},r={}){return useMemo(()=>{if(!t)return {visible:r.visible??true,disabled:r.disabled??false,required:r.required??false,readonly:r.readonly??false};let n=i=>{try{let s;return i&&typeof i=="object"&&"build"in i?s=i.build():s=i,evaluateCondition(s,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:t.visible?n(t.visible):true,disabled:t.disabled?n(t.disabled):false,required:t.required?n(t.required):false,readonly:t.readonly?n(t.readonly):false}},[t,e,r])}function Fe(t,e={}){return useMemo(()=>{let r={};for(let[n,i]of Object.entries(t))if(r[n]={visible:true,disabled:false,required:false,readonly:false},i){let s=p=>{try{return p&&typeof p=="object"&&"build"in p?evaluateCondition(p.build(),e):evaluateCondition(p,e)}catch(o){return console.warn(`Error evaluating condition for field ${n}:`,o),false}};r[n]={visible:i.visible?s(i.visible):true,disabled:i.disabled?s(i.disabled):false,required:i.required?s(i.required):false,readonly:i.readonly?s(i.readonly):false};}return r},[t,e])}function Be(t,e={}){return useMemo(()=>{let r={};for(let[n,i]of Object.entries(t)){let s=Number.parseInt(n,10);if(r[s]={visible:true,disabled:false,required:false,readonly:false},i){let p=o=>{try{return o&&typeof o=="object"&&"build"in o?evaluateCondition(o.build(),e):evaluateCondition(o,e)}catch(f){return console.warn(`Error evaluating condition for step ${s}:`,f),false}};r[s]={visible:i.visible?p(i.visible):true,disabled:i.disabled?p(i.disabled):false,required:i.required?p(i.required):false,readonly:i.readonly?p(i.readonly):false};}}return r},[t,e])}var E=class extends Error{constructor(r,n,i){super(`[WorkflowPersistence] ${r} (Code: ${n})`);this.code=n;this.cause=i;this.name="WorkflowPersistenceError";}};function pe(t,e,r){return {workflowId:t,currentStepIndex:e.currentStepIndex,allData:{...e.allData},stepData:{...e.stepData},visitedSteps:Array.from(e.visitedSteps),passedSteps:Array.from(e.passedSteps),lastSaved:Date.now(),metadata:r}}function Me(t){return {currentStepIndex:t.currentStepIndex,allData:{...t.allData},stepData:{...t.stepData},visitedSteps:new Set(t.visitedSteps),passedSteps:new Set(t.passedSteps||[]),isSubmitting:false,isTransitioning:false}}function it(t){if(!t||typeof t!="object")return false;let e=["workflowId","currentStepIndex","allData","stepData","visitedSteps","lastSaved"];for(let r of e)if(!(r in t))return false;return !(typeof t.workflowId!="string"||typeof t.currentStepIndex!="number"||typeof t.allData!="object"||typeof t.stepData!="object"||!Array.isArray(t.visitedSteps)||typeof t.lastSaved!="number")}function de(t,e){return e?`${e}:${t}`:t}function ue(t,e){let r=null;return (...n)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...n);},e);}}function st(t,e,r="persist"){let n=Me(e);switch(r){case "persist":return {...n,isSubmitting:t.isSubmitting,isTransitioning:t.isTransitioning};case "current":return {...t,visitedSteps:new Set([...t.visitedSteps,...n.visitedSteps]),passedSteps:new Set([...t.passedSteps,...n.passedSteps||[]])};case "merge":return {currentStepIndex:t.currentStepIndex,allData:{...n.allData,...t.allData},stepData:{...n.stepData,...t.stepData},visitedSteps:new Set([...n.visitedSteps,...t.visitedSteps]),passedSteps:new Set([...n.passedSteps||[],...t.passedSteps]),isSubmitting:t.isSubmitting,isTransitioning:t.isTransitioning};default:return n}}function $({workflowId:t,workflowState:e,adapter:r,options:n={},userId:i}){let[s,p]=useState(false),[o,f]=useState(null),[d,b]=useState(false),c=useRef(r),l=useRef(n),a=useRef({hasPendingChanges:false});useEffect(()=>{c.current=r,l.current=n;},[r,n]);let y=de(l.current.storageKey||t,i),k=useCallback(()=>{f(null);},[]),P=useCallback((u,D)=>{let I=u instanceof E?u:new E(`${D} failed: ${u.message}`,"OPERATION_FAILED",u);f(I),console.error("[WorkflowPersistence]",I);},[]),w=useCallback(async u=>{k(),p(true);try{let D=pe(t,u,l.current.metadata);await c.current.save(y,D),a.current.lastSavedState={...u},a.current.hasPendingChanges=!1;}catch(D){throw P(D,"Save"),D}finally{p(false);}},[t,y,k,P]),x=useRef(ue(async u=>{try{await w(u);}catch(D){console.debug("[WorkflowPersistence] Auto-save failed:",D);}},n.debounceMs||500)),h=useCallback((u,D)=>D?u.currentStepIndex!==D.currentStepIndex||JSON.stringify(u.allData)!==JSON.stringify(D.allData)||JSON.stringify(u.stepData)!==JSON.stringify(D.stepData)||u.visitedSteps.size!==D.visitedSteps.size||!Array.from(u.visitedSteps).every(I=>D.visitedSteps.has(I)):true,[]),m=useCallback(async()=>{k(),b(true);try{let u=await c.current.load(y);return u&&(a.current.lastSavedState={currentStepIndex:u.currentStepIndex,allData:u.allData,stepData:u.stepData,visitedSteps:new Set(u.visitedSteps),passedSteps:new Set(u.passedSteps||[]),isSubmitting:!1,isTransitioning:!1,isInitializing:!1},a.current.hasPendingChanges=!1),u}catch(u){return P(u,"Load"),null}finally{setTimeout(()=>b(false),100);}},[y,k,P]),W=useCallback(async()=>{k();try{await c.current.remove(y),a.current.lastSavedState=void 0,a.current.hasPendingChanges=!1;}catch(u){throw P(u,"Clear"),u}},[y,k,P]),L=useCallback(async()=>{try{return await c.current.exists(y)}catch(u){return P(u,"Exists check"),false}},[y,P]);useEffect(()=>{l.current.autoPersist&&(s||d||e.isInitializing||e.isSubmitting||e.isTransitioning||h(e,a.current.lastSavedState)&&(a.current.hasPendingChanges=true,x.current(e)));},[e,s,d,h]);let S=useCallback(async()=>{await w(e);},[w,e]);return {isPersisting:s,persistenceError:o,persistNow:S,loadPersistedData:m,clearPersistedData:W,hasPersistedData:L}}function ot(){let{workflowConfig:t,currentStep:e}=V(),r=useMemo(()=>e?.metadata,[e?.metadata]),n=useMemo(()=>d=>t.steps.find(c=>c.id===d)?.metadata,[t.steps]),i=useMemo(()=>d=>t.steps[d]?.metadata,[t.steps]),s=useMemo(()=>d=>r?d in r:false,[r]),p=useMemo(()=>(d,b)=>r&&d in r?r[d]:b,[r]),o=useMemo(()=>()=>t.steps.map((d,b)=>({id:d.id,title:d.title,index:b,metadata:d.metadata})),[t.steps]),f=useMemo(()=>d=>t.steps.map((b,c)=>({step:b,index:c})).filter(({step:b,index:c})=>d(b.metadata,b.id,c)).map(({step:b})=>b.id),[t.steps]);return {current:r,getByStepId:n,getByStepIndex:i,hasCurrentKey:s,getCurrentValue:p,getAllStepsMetadata:o,findStepsByMetadata:f}}function fe({workflowConfig:t,workflowState:e,workflowContext:r}){let n=useRef(Date.now()),i=useRef(new Map),s=useRef(false),p=useRef(null),o=getGlobalMonitor();useEffect(()=>{t.analytics?.onWorkflowStart&&!s.current&&(s.current=true,t.analytics.onWorkflowStart(t.id,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"start",totalSteps:t.steps.length},{timestamp:Date.now(),duration:0,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:0,navigationDuration:0,conditionEvaluationDuration:0},"low"));},[t.id,t.analytics,r,o,t.steps.length]),useEffect(()=>{let l=t.steps[e.currentStepIndex];if(l&&p.current!==l.id){if(p.current&&t.analytics?.onStepComplete){let a=i.current.get(p.current);if(a){let y=Date.now()-a;t.analytics.onStepComplete(p.current,y,e.stepData,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_complete",stepId:p.current,duration:y},{timestamp:Date.now(),duration:y,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:y,conditionEvaluationDuration:0},"low");}}p.current=l.id,i.current.set(l.id,Date.now()),t.analytics?.onStepStart&&t.analytics.onStepStart(l.id,Date.now(),r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_start",stepId:l.id,stepIndex:e.currentStepIndex},{timestamp:Date.now(),duration:0,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:0,conditionEvaluationDuration:0},"low");}},[e.currentStepIndex,t.steps,t.analytics,r,e.stepData,o,t.id]);let f=useCallback((l,a)=>{t.analytics?.onStepSkip&&t.analytics.onStepSkip(l,a,r),o&&o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"step_skip",stepId:l,reason:a},void 0,"medium");},[t.analytics,r,o,t.id]),d=useCallback(l=>{t.analytics?.onError&&t.analytics.onError(l,r),o&&o.trackError(l,`workflow_${t.id}`,{workflowId:t.id,currentStepIndex:e.currentStepIndex,currentStepId:t.steps[e.currentStepIndex]?.id,workflowContext:r});},[t.analytics,r,o,t.id,e.currentStepIndex,t.steps]),b=useCallback((l,a,y)=>{if(!o)return;let k={timestamp:Date.now(),duration:y,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:a,navigationDuration:y,conditionEvaluationDuration:0};o.track("workflow_navigation",`workflow_${t.id}`,{workflowId:t.id,action:"navigation",fromStep:l,toStep:a,direction:a>l?"forward":"backward"},k,y>1e3?"medium":"low");},[o,t.id,t.steps.length]),c=useCallback((l,a)=>{if(!o)return;let y={timestamp:Date.now(),duration:l,workflowId:t.id,stepCount:t.steps.length,currentStepIndex:e.currentStepIndex,navigationDuration:0,conditionEvaluationDuration:l};o.track("condition_evaluation",`workflow_${t.id}`,{workflowId:t.id,conditionsCount:a,currentStepIndex:e.currentStepIndex},y,l>100?"medium":"low");},[o,t.id,t.steps.length,e.currentStepIndex]);return {analyticsStartTime:n,trackStepSkip:f,trackError:d,trackNavigation:b,trackConditionEvaluation:c}}function te(t,e=""){let r={};for(let n in t)if(n in t){let i=t[n],s=e?`${e}.${n}`:n;i!==null&&typeof i=="object"&&!Array.isArray(i)&&!(i instanceof Date)?Object.assign(r,te(i,s)):r[s]=i;}return r}function Se(t,e){let r=te(t),n=te(e);return {...{...t,...e},...r,...n}}function Ue(t,e){return {visible:t.visible,skippable:e===true||t.required}}function me({workflowConfig:t,workflowState:e,currentStep:r}){let n=useMemo(()=>Se(e.allData,e.stepData),[e.allData,e.stepData]),i=useMemo(()=>{if(r?.conditions)return {visible:r.conditions.visible,required:r.conditions.skippable}},[r?.conditions]),s=le(i,n,{visible:true,disabled:false,required:false,readonly:false}),p=useMemo(()=>Ue(s,r?.allowSkip),[s,r?.allowSkip]),o=useMemo(()=>{let x={};return t.steps.forEach((h,m)=>{h.conditions&&(x[m]={visible:h.conditions.visible,required:h.conditions.skippable});}),x},[t.steps]),f=Be(o,n),d=useMemo(()=>{let x={};return t.steps.forEach((h,m)=>{let W=f[m];W?x[m]=Ue(W,h.allowSkip):x[m]={visible:true,skippable:h.allowSkip===true};}),x},[t.steps,f]),b=useMemo(()=>{if(!r?.formConfig?.allFields)return {};let x={};for(let h of r.formConfig.allFields)h.conditions&&(x[h.id]=h.conditions);return x},[r?.formConfig?.allFields]),c=Fe(b,n),l=useCallback(x=>x<0||x>=t.steps.length?false:d[x]?.visible??true,[d,t.steps.length]),a=useCallback(x=>x<0||x>=t.steps.length?false:d[x]?.skippable??false,[d,t.steps.length]),y=useCallback(x=>c[x]?.visible??true,[c]),k=useCallback(x=>c[x]?.disabled??false,[c]),P=useCallback(x=>c[x]?.required??false,[c]),w=useCallback(x=>c[x]?.readonly??false,[c]);return {stepConditions:p,fieldConditions:c,allStepConditions:d,isStepVisible:l,isStepSkippable:a,isFieldVisible:y,isFieldDisabled:k,isFieldRequired:P,isFieldReadonly:w}}function ge({workflowConfig:t,workflowState:e,workflowContext:r,conditionsHelpers:n,setCurrentStep:i,setTransitioning:s,markStepVisited:p,markStepPassed:o,setStepData:f,onStepChange:d}){let b=useRef(d);b.current=d;let c=t.steps[e.currentStepIndex],l=useCallback(()=>({setStepData:(S,u)=>{f(u,S);},setStepFields:(S,u)=>{let I={...e.allData[S]||{},...u};f(I,S);},getStepData:S=>e.allData[S]||{},setNextStepField:(S,u)=>{let D=e.currentStepIndex+1;if(D<t.steps.length){let I=t.steps[D].id,A={...e.allData[I]||{},[S]:u};f(A,I);}},setNextStepFields:S=>{let u=e.currentStepIndex+1;if(u<t.steps.length){let D=t.steps[u].id,O={...e.allData[D]||{},...S};f(O,D);}},getAllData:()=>({...e.allData}),getSteps:()=>[...t.steps]}),[e.allData,e.currentStepIndex,t.steps,f]),a=useCallback(async S=>{if(S<0||S>=t.steps.length||!n.isStepVisible(S))return false;s(true);try{return b.current&&b.current(e.currentStepIndex,S,r),i(S),p(S,t.steps[S].id),!0}catch(u){return console.error("Step transition failed:",u),t.analytics?.onError&&t.analytics.onError(u,r),false}finally{s(false);}},[t.steps,t.analytics,n,e.currentStepIndex,r,s,i,p]),y=useCallback(S=>{for(let u=S+1;u<t.steps.length;u++)if(n.isStepVisible(u))return u;return null},[t.steps.length,n]),k=useCallback(S=>{for(let u=S-1;u>=0;u--)if(n.isStepVisible(u))return u;return null},[n]),P=useCallback(async()=>{if(c?.onAfterValidation)try{let u=l();await c.onAfterValidation(e.stepData,u,r);}catch(u){return console.error("onAfterValidation failed:",u),t.analytics?.onError&&t.analytics.onError(u,r),false}o(c.id);let S=y(e.currentStepIndex);return S===null?false:a(S)},[c,l,e.stepData,r,t.analytics,e.currentStepIndex,y,a,o]),w=useCallback(async()=>{let S=k(e.currentStepIndex);return S===null?false:a(S)},[e.currentStepIndex,k,a]),x=useCallback(async()=>!c?.allowSkip&&!n.isStepSkippable(e.currentStepIndex)?false:(t.analytics?.onStepSkip&&t.analytics.onStepSkip(c.id,"user_skip",r),P()),[c,n,e.currentStepIndex,t.analytics,r,P]),h=useCallback(S=>S<0||S>=t.steps.length?false:n.isStepVisible(S),[t.steps.length,n]),m=useCallback(()=>{let S=y(e.currentStepIndex);return S!==null&&h(S)},[e.currentStepIndex,y,h]),W=useCallback(()=>{let S=k(e.currentStepIndex);return S!==null&&h(S)},[e.currentStepIndex,k,h]),L=useCallback(()=>c?.allowSkip===true&&n.isStepSkippable(e.currentStepIndex),[c?.allowSkip,n,e.currentStepIndex]);return {goToStep:a,goNext:P,goPrevious:w,skipStep:x,canGoToStep:h,canGoNext:m,canGoPrevious:W,canSkipCurrentStep:L}}function dt(t,e){switch(e.type){case "SET_CURRENT_STEP":return {...t,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":return {...t,stepData:e.data,allData:{...t.allData,[e.stepId]:e.data}};case "SET_ALL_DATA":return {...t,allData:e.data};case "SET_FIELD_VALUE":{let r={...t.stepData,[e.fieldId]:e.value};return {...t,stepData:r,allData:{...t.allData,[e.stepId]:r}}}case "SET_SUBMITTING":return {...t,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...t,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...t,visitedSteps:new Set([...t.visitedSteps,e.stepId])};case "MARK_STEP_PASSED":return {...t,passedSteps:new Set([...t.passedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,passedSteps:new Set,isSubmitting:false,isTransitioning:false,isInitializing:false};case "LOAD_PERSISTED_STATE":return {...t,...e.state};case "SET_INITIALIZATION_COMPLETE":return {...t,isInitializing:false};default:return t}}function ut({defaultValues:t={},defaultStepIndex:e,workflowSteps:r,persistence:n}){let i=useMemo(()=>{let m=new Set;if(e&&e>0&&r)for(let W=0;W<e;W++)r[W]&&m.add(r[W].id);return m},[e,r]),s=useMemo(()=>{let m=new Set;if(e&&e>0&&r)for(let W=0;W<e;W++)r[W]&&m.add(r[W].id);return m},[e,r]),p={currentStepIndex:e??0,allData:t,stepData:{},visitedSteps:i,passedSteps:s,isSubmitting:false,isTransitioning:false,isInitializing:true},[o,f]=useReducer(dt,p),d=n?.adapter?$({workflowId:n.workflowId,workflowState:o,adapter:n.adapter,options:n.options,userId:n.userId}):null,b=useCallback(m=>{f({type:"SET_CURRENT_STEP",stepIndex:m});},[]),c=useCallback((m,W)=>{f({type:"SET_STEP_DATA",data:m,stepId:W});},[]),l=useCallback((m,W,L)=>{f({type:"SET_FIELD_VALUE",fieldId:m,value:W,stepId:L});},[]),a=useCallback(m=>{f({type:"SET_SUBMITTING",isSubmitting:m});},[]),y=useCallback(m=>{f({type:"SET_TRANSITIONING",isTransitioning:m});},[]),k=useCallback((m,W)=>{f({type:"MARK_STEP_VISITED",stepIndex:m,stepId:W});},[]),P=useCallback(m=>{f({type:"MARK_STEP_PASSED",stepId:m});},[]),w=useCallback(()=>{f({type:"RESET_WORKFLOW"});},[]),x=useCallback(()=>{f({type:"SET_INITIALIZATION_COMPLETE"});},[]),h=useCallback(async()=>{if(!d)return x(),false;try{let m=await d.loadPersistedData();if(m){let W={currentStepIndex:m.currentStepIndex,allData:m.allData,stepData:m.stepData,visitedSteps:new Set(m.visitedSteps),passedSteps:new Set(m.passedSteps||[])};return f({type:"LOAD_PERSISTED_STATE",state:W}),x(),!0}}catch(m){console.error("Failed to load persisted state:",m);}return x(),false},[d,x]);return {workflowState:o,setCurrentStep:b,setStepData:c,setFieldValue:l,setSubmitting:a,setTransitioning:y,markStepVisited:k,markStepPassed:P,resetWorkflow:w,loadPersistedState:h,persistence:d?{isPersisting:d.isPersisting,persistenceError:d.persistenceError,persistNow:d.persistNow,clearPersistedData:d.clearPersistedData,hasPersistedData:d.hasPersistedData}:null}}function be({workflowConfig:t,workflowState:e,workflowContext:r,setSubmitting:n,onWorkflowComplete:i,analyticsStartTime:s}){let p=useRef(i);p.current=i;let o=useCallback(async()=>{n(true);try{if(p.current&&await p.current(e.allData),t.analytics?.onWorkflowComplete){let d=Date.now()-s.current;t.analytics.onWorkflowComplete(t.id,d,e.allData);}}catch(d){throw console.error("Workflow submission failed:",d),t.analytics?.onError&&t.analytics.onError(d,r),d}finally{n(false);}},[e.allData,t.analytics,t.id,r,s,n]),f=useCallback(()=>e.isSubmitting?false:e.currentStepIndex===t.steps.length-1,[e.isSubmitting,e.currentStepIndex,t.steps.length]);return {submitWorkflow:o,isSubmitting:e.isSubmitting,canSubmit:f()}}function $e(t={}){let{defaultValues:e={},defaultStepIndex:r=0,initialVisitedSteps:n=new Set,initialPassedSteps:i=new Set}=t;return createStore()(subscribeWithSelector((s,p)=>({currentStepIndex:r,isTransitioning:false,isInitializing:true,allData:{...e},stepData:{},visitedSteps:new Set(n),passedSteps:new Set(i),isSubmitting:false,_defaultValues:{...e},_defaultStepIndex:r,_setCurrentStep:o=>{s({currentStepIndex:o});},_setStepData:(o,f)=>{s(d=>({stepData:o,allData:{...d.allData,[f]:o}}));},_setAllData:o=>{s({allData:o});},_setFieldValue:(o,f,d)=>{s(b=>{let c={...b.stepData,[o]:f};return {stepData:c,allData:{...b.allData,[d]:c}}});},_setSubmitting:o=>{s({isSubmitting:o});},_setTransitioning:o=>{s({isTransitioning:o});},_setInitializing:o=>{s({isInitializing:o});},_markStepVisited:o=>{s(f=>({visitedSteps:new Set([...f.visitedSteps,o])}));},_markStepPassed:o=>{s(f=>({passedSteps:new Set([...f.passedSteps,o])}));},_reset:()=>{let o=p();s({currentStepIndex:o._defaultStepIndex,allData:{...o._defaultValues},stepData:{},visitedSteps:new Set,passedSteps:new Set,isSubmitting:false,isTransitioning:false,isInitializing:false});},_loadPersistedState:o=>{s(f=>({...f,...o,isInitializing:false}));}})))}var ye=createContext(null);function _(){let t=useContext(ye);if(!t)throw new Error("useWorkflowStore must be used within a WorkflowProvider");return t}function $r(){let t=_();return useStore(t,e=>e.currentStepIndex)}function Kr(){let t=_();return useStore(t,e=>e.isTransitioning)}function qr(){let t=_();return useStore(t,e=>e.isInitializing)}function Jr(){let t=_();return useStore(t,e=>e.isSubmitting)}function jr(){let t=_();return useStore(t,e=>e.allData)}function Zr(){let t=_();return useStore(t,e=>e.stepData)}function Qr(t){let e=_();return useStore(e,r=>r.allData[t])}function Hr(){let t=_();return useStore(t,e=>e.visitedSteps)}function Xr(){let t=_();return useStore(t,e=>e.passedSteps)}function Yr(t){let e=_();return useStore(e,r=>r.visitedSteps.has(t))}function en(t){let e=_();return useStore(e,r=>r.passedSteps.has(t))}function tn(){let t=_(),e=useStore(t,i=>i.currentStepIndex),r=useStore(t,i=>i.isTransitioning),n=useStore(t,i=>i.isSubmitting);return {currentStepIndex:e,isTransitioning:r,isSubmitting:n}}function rn(){let t=_(),e=useStore(t,i=>i.isSubmitting),r=useStore(t,i=>i.isTransitioning),n=useStore(t,i=>i.isInitializing);return {isSubmitting:e,isTransitioning:r,isInitializing:n}}function nn(){let t=_();return {setCurrentStep:e=>t.getState()._setCurrentStep(e),setStepData:(e,r)=>t.getState()._setStepData(e,r),setAllData:e=>t.getState()._setAllData(e),setFieldValue:(e,r,n)=>t.getState()._setFieldValue(e,r,n),setSubmitting:e=>t.getState()._setSubmitting(e),setTransitioning:e=>t.getState()._setTransitioning(e),setInitializing:e=>t.getState()._setInitializing(e),markStepVisited:e=>t.getState()._markStepVisited(e),markStepPassed:e=>t.getState()._markStepPassed(e),reset:()=>t.getState()._reset(),loadPersistedState:e=>t.getState()._loadPersistedState(e)}}function sn(){return _()}var Ke=createContext(null);function xt(t,e){let r=new Set,n=new Set;if(t>0)for(let i=0;i<t;i++)e[i]&&(r.add(e[i].id),n.add(e[i].id));return {visitedSteps:r,passedSteps:n}}function ke({children:t,workflowConfig:e,defaultValues:r={},defaultStep:n,onStepChange:i,onWorkflowComplete:s,className:p}){let o=useRef(i),f=useRef(s);o.current=i,f.current=s;let d=useMemo(()=>{if(!n)return 0;let v=e.steps.findIndex(g=>g.id===n);return v===-1?(console.warn(`Default step with ID "${n}" not found. Starting at step 0.`),0):v},[n,e.steps]),b=useMemo(()=>xt(d,e.steps),[d,e.steps]),c=useRef(null);c.current||(c.current=$e({defaultValues:r,defaultStepIndex:d,initialVisitedSteps:b.visitedSteps,initialPassedSteps:b.passedSteps}));let l=c.current,[a,y]=useState(()=>{let v=l.getState();return {currentStepIndex:v.currentStepIndex,allData:v.allData,stepData:v.stepData,visitedSteps:v.visitedSteps,passedSteps:v.passedSteps,isSubmitting:v.isSubmitting,isTransitioning:v.isTransitioning,isInitializing:v.isInitializing}});useEffect(()=>l.subscribe(g=>{y({currentStepIndex:g.currentStepIndex,allData:g.allData,stepData:g.stepData,visitedSteps:g.visitedSteps,passedSteps:g.passedSteps,isSubmitting:g.isSubmitting,isTransitioning:g.isTransitioning,isInitializing:g.isInitializing});}),[l]);let k=useCallback(v=>l.getState()._setCurrentStep(v),[l]),P=useCallback((v,g)=>l.getState()._setStepData(v,g),[l]),w=useCallback((v,g,T)=>l.getState()._setFieldValue(v,g,T),[l]),x=useCallback(v=>l.getState()._setSubmitting(v),[l]),h=useCallback(v=>l.getState()._setTransitioning(v),[l]),m=useCallback((v,g)=>l.getState()._markStepVisited(g),[l]),W=useCallback(v=>l.getState()._markStepPassed(v),[l]),L=useCallback(()=>l.getState()._reset(),[l]),S=e.persistence?.adapter?$({workflowId:e.id,workflowState:a,adapter:e.persistence.adapter,options:e.persistence.options,userId:e.persistence.userId}):null;useEffect(()=>{(async()=>{if(S)try{let g=await S.loadPersistedData();if(g){l.getState()._loadPersistedState({currentStepIndex:g.currentStepIndex,allData:g.allData,stepData:g.stepData,visitedSteps:new Set(g.visitedSteps),passedSteps:new Set(g.passedSteps||[])});return}}catch(g){console.error("Failed to load persisted state:",g);}l.getState()._setInitializing(false);})();},[l,S]);let u=useMemo(()=>({isPersisting:S?.isPersisting??false,persistenceError:S?.persistenceError??null,persistNow:S?.persistNow}),[S?.isPersisting,S?.persistenceError,S?.persistNow]),D=useMemo(()=>({workflowId:e.id,currentStepIndex:a.currentStepIndex,totalSteps:e.steps.length,allData:a.allData,stepData:a.stepData,visitedSteps:a.visitedSteps}),[e.id,e.steps.length,a.currentStepIndex,a.allData,a.stepData,a.visitedSteps]),I=useMemo(()=>e.steps[a.currentStepIndex],[e.steps,a.currentStepIndex]),O=useMemo(()=>I?.formConfig,[I?.formConfig]),A=me({workflowConfig:e,workflowState:a,currentStep:I}),z=useMemo(()=>{let v=-1;for(let R=0;R<e.steps.length;R++)if(A.isStepVisible(R)){v=R;break}let g=-1;for(let R=e.steps.length-1;R>=0;R--)if(A.isStepVisible(R)){g=R;break}let T=new Set;for(let R=0;R<e.steps.length;R++){let H=e.steps[R];A.isStepVisible(R)&&a.visitedSteps.has(H.id)&&T.add(H.id);}return {...D,isFirstStep:a.currentStepIndex===v,isLastStep:a.currentStepIndex===g,visibleVisitedSteps:T,passedSteps:a.passedSteps}},[D,a.currentStepIndex,a.visitedSteps,a.passedSteps,A,e.steps]),{analyticsStartTime:Ze}=fe({workflowConfig:e,workflowState:a,workflowContext:z}),{goToStep:he,goNext:Z,goPrevious:Ie,skipStep:We,canGoToStep:De,canGoNext:we,canGoPrevious:Re,canSkipCurrentStep:Ee}=ge({workflowConfig:e,workflowState:a,workflowContext:z,conditionsHelpers:A,setCurrentStep:k,setTransitioning:h,markStepVisited:m,markStepPassed:W,setStepData:P,onStepChange:o.current}),ie=useRef(false);useEffect(()=>{if(ie.current)return;if(!A.isStepVisible(a.currentStepIndex)){for(let g=0;g<e.steps.length;g++)if(A.isStepVisible(g)){k(g),m(g,e.steps[g].id);break}}ie.current=true;},[a.currentStepIndex,e.steps,k,m,A]),useEffect(()=>{if(!ie.current)return;if(!A.isStepVisible(a.currentStepIndex)){let g=null;for(let T=a.currentStepIndex+1;T<e.steps.length;T++)if(A.isStepVisible(T)){g=T;break}if(g===null){for(let T=a.currentStepIndex-1;T>=0;T--)if(A.isStepVisible(T)){g=T;break}}g!==null&&(k(g),m(g,e.steps[g].id));}},[A,a.currentStepIndex,e.steps,k,m]);let{submitWorkflow:Q,isSubmitting:Te,canSubmit:Ce}=be({workflowConfig:e,workflowState:a,workflowContext:z,setSubmitting:x,onWorkflowComplete:f.current,analyticsStartTime:Ze}),se=useCallback((v,g)=>{w(v,g,I?.id||"");},[w,I?.id]),Ae=useCallback(v=>{P(v,I?.id||"");},[P,I?.id]),Qe=useCallback(async v=>{I?.id&&v&&P(v,I.id),z.isLastStep?await Q():await Z();},[z.isLastStep,Q,Z,I?.id,P]),_e=useMemo(()=>({goToStep:he,goNext:Z,goPrevious:Ie,skipStep:We,canGoToStep:De,canGoNext:we,canGoPrevious:Re,canSkipCurrentStep:Ee}),[he,Z,Ie,We,De,we,Re,Ee]),Ve=useMemo(()=>({setValue:se,setStepData:Ae,resetWorkflow:L}),[se,Ae,L]),Ne=useMemo(()=>({submitWorkflow:Q,isSubmitting:Te,canSubmit:Ce}),[Q,Te,Ce]),He=useMemo(()=>({workflowState:a,workflowConfig:e,currentStep:I,context:z,formConfig:O,conditionsHelpers:A,currentStepMetadata:I?.metadata,..._e,...Ve,...Ne,persistNow:u.persistNow,isPersisting:u.isPersisting,persistenceError:u.persistenceError}),[a,e,I,z,O,A,_e,Ve,Ne,u]),Xe=useMemo(()=>{if(!I?.id)return {};let v=a?.allData[I.id]||{};if(!O?.allFields)return v;let g=new Set(O.allFields.map(R=>R.id)),T={};for(let[R,H]of Object.entries(v))g.has(R)&&(T[R]=H);return T},[a?.allData,I?.id,O?.allFields]),Ye=useMemo(()=>a.isInitializing.toString(),[a.isInitializing]);return jsx(ye.Provider,{value:l,children:jsx(Ke.Provider,{value:He,children:jsx(FormProvider,{formConfig:O,defaultValues:Xe,onFieldChange:se,"data-workflow-id":e.id,className:p,onSubmit:Qe,children:t},Ye)})})}function V(){let t=useContext(Ke);if(!t)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return t}function ht({children:t,workflowConfig:e,...r}){let n=useMemo(()=>e instanceof J?e.build():e,[e]);return jsx(ke,{...r,workflowConfig:n,children:t})}var wt=Dt.memo(function({stepId:e,children:r}){let{currentStep:n}=V();if(!n||e&&n.id!==e)return null;let{formConfig:i,renderer:s}=n;return i?s?s(n):r??jsx(FormBody,{}):null});var Nt=Dt.memo(function({className:e,isSubmitting:r,...n}){let{context:i,workflowState:s,workflowConfig:p,currentStep:o}=V(),{submit:f}=useFormConfigContext(),d=useFormSubmitting(),b=useFormValues(),c=useMemo(()=>{let y=d||s.isSubmitting,k=r??y,P=!s.isTransitioning&&!k;return {finalIsSubmitting:k,canGoNext:P}},[d,s.isSubmitting,s.isTransitioning,r]),l=useCallback(async y=>{y?.preventDefault(),c.canGoNext&&await f(y);},[c.canGoNext,f]),a=useMemo(()=>({isLastStep:i.isLastStep,canGoNext:c.canGoNext,isSubmitting:c.finalIsSubmitting,onSubmit:l,className:e,currentStep:o,stepData:b,allData:i.allData,context:i}),[i.isLastStep,c.canGoNext,c.finalIsSubmitting,l,e,o,b,i.allData,i]);return jsx(ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:p.renderConfig?.nextButtonRenderer,props:a,...n})});var zt=Dt.memo(function({className:e,isSubmitting:r,...n}){let{context:i,goPrevious:s,workflowState:p,workflowConfig:o,currentStep:f,canGoPrevious:d}=V(),b=useFormSubmitting(),c=useFormValues(),l=useMemo(()=>{let k=b||p.isSubmitting,P=r??k,w=d()&&!p.isTransitioning&&!P;return {finalIsSubmitting:P,canGoPrevious:w}},[b,p.isSubmitting,p.isTransitioning,d,r]),a=useCallback(async k=>{k?.preventDefault(),l.canGoPrevious&&await s();},[l.canGoPrevious,s]),y=useMemo(()=>({canGoPrevious:l.canGoPrevious,isSubmitting:l.finalIsSubmitting,onPrevious:a,className:e,currentStep:f,stepData:c,allData:i.allData,context:i}),[l.canGoPrevious,l.finalIsSubmitting,a,e,f,c,i.allData,i]);return jsx(ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:o.renderConfig?.previousButtonRenderer,props:y,...n})});var Zt=Dt.memo(function({className:e,isSubmitting:r,...n}){let{currentStep:i,skipStep:s,workflowState:p,workflowConfig:o,context:f,conditionsHelpers:d}=V(),b=useFormSubmitting(),c=useFormValues(),l=useMemo(()=>{let k=b||p.isSubmitting,P=r??k,w=(!!i?.allowSkip||d.isStepSkippable(p.currentStepIndex))&&!p.isTransitioning&&!P;return {finalIsSubmitting:P,canSkip:w}},[b,p.isSubmitting,p.isTransitioning,p.currentStepIndex,i?.allowSkip,d.isStepSkippable,r]),a=useCallback(async k=>{k?.preventDefault(),l.canSkip&&await s();},[l.canSkip,s]),y=useMemo(()=>({canSkip:l.canSkip,isSubmitting:l.finalIsSubmitting,onSkip:a,className:e,currentStep:i,stepData:c,allData:f.allData,context:f}),[l.canSkip,l.finalIsSubmitting,a,e,i,c,f.allData,f]);return jsx(ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:o.renderConfig?.skipButtonRenderer,props:y,...n})});var er=Dt.memo(function({onStepClick:e,className:r,...n}){let{workflowConfig:i,workflowState:s,context:p,goToStep:o,conditionsHelpers:f}=V(),{visibleSteps:d,visibleToOriginalIndexMap:b,originalToVisibleIndexMap:c}=useMemo(()=>{let k=[],P=new Map,w=new Map;return i.steps.forEach((x,h)=>{if(f.isStepVisible(h)){let m=k.length;k.push(x),P.set(m,h),w.set(h,m);}}),{visibleSteps:k,visibleToOriginalIndexMap:P,originalToVisibleIndexMap:w}},[i.steps,f]),l=useCallback(k=>{let P=b.get(k);P!==void 0&&(e?e(P):o(P));},[b,e,o]),a=useMemo(()=>c.get(s.currentStepIndex)??-1,[c,s.currentStepIndex]),y=useMemo(()=>({steps:d,currentStepIndex:a,visitedSteps:p.visibleVisitedSteps,onStepClick:l,className:r}),[d,a,p.visibleVisitedSteps,l,r]);return jsx(ComponentRendererWrapper,{name:"WorkflowStepper",renderer:i.renderConfig?.stepperRenderer,props:y,...n})});var Pe=class{constructor(e={}){this.version="1.0.0";this.keyPrefix=e.keyPrefix??"rilay_workflow_",this.compress=e.compress??false,this.maxAge=e.maxAge,this._isAvailable=this.isLocalStorageAvailable();}async save(e,r){if(this._isAvailable)try{let n=this.getStorageKey(e),i={data:{...r,lastSaved:Date.now()},version:this.version,expiresAt:this.maxAge?Date.now()+this.maxAge:void 0},s=JSON.stringify(i),p=this.compress?this.compressData(s):s;localStorage.setItem(n,p);}catch(n){if(n instanceof Error)if(n.name==="QuotaExceededError"||n.message.includes("quota")){await this.clearExpiredData();try{let i=this.getStorageKey(e),s={data:{...r,lastSaved:Date.now()},version:this.version,expiresAt:this.maxAge?Date.now()+this.maxAge:void 0},p=JSON.stringify(s),o=this.compress?this.compressData(p):p;localStorage.setItem(i,o);}catch(i){throw new E("localStorage quota exceeded and cleanup failed","QUOTA_EXCEEDED",i)}}else throw new E(`Failed to save to localStorage: ${n.message}`,"SAVE_FAILED",n);else throw new E("Unknown error occurred while saving","SAVE_FAILED")}}async load(e){if(!this._isAvailable)return null;try{let r=this.getStorageKey(e),n=localStorage.getItem(r);if(!n)return null;let i=this.compress?this.decompressData(n):n,s=JSON.parse(i);return s.expiresAt&&Date.now()>s.expiresAt?(await this.remove(e),null):{...s.data,visitedSteps:Array.isArray(s.data.visitedSteps)?s.data.visitedSteps:[]}}catch(r){throw r instanceof Error?new E(`Failed to load from localStorage: ${r.message}`,"LOAD_FAILED",r):new E("Unknown error occurred while loading","LOAD_FAILED")}}async remove(e){if(this._isAvailable)try{let r=this.getStorageKey(e);localStorage.removeItem(r);}catch(r){throw r instanceof Error?new E(`Failed to remove from localStorage: ${r.message}`,"REMOVE_FAILED",r):new E("Unknown error occurred while removing","REMOVE_FAILED")}}async exists(e){if(!this._isAvailable)return false;try{let r=this.getStorageKey(e),n=localStorage.getItem(r);if(!n)return !1;let i=this.compress?this.decompressData(n):n,s=JSON.parse(i);return s.expiresAt&&Date.now()>s.expiresAt?(await this.remove(e),!1):!0}catch{return false}}async listKeys(){if(!this._isAvailable)return [];try{let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);if(n?.startsWith(this.keyPrefix)){let i=n.substring(this.keyPrefix.length);await this.exists(i)&&e.push(i);}}return e}catch(e){throw e instanceof Error?new E(`Failed to list keys: ${e.message}`,"LIST_FAILED",e):new E("Unknown error occurred while listing keys","LIST_FAILED")}}async clear(){try{let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n?.startsWith(this.keyPrefix)&&e.push(n);}for(let r of e)localStorage.removeItem(r);}catch(e){throw e instanceof Error?new E(`Failed to clear localStorage: ${e.message}`,"CLEAR_FAILED",e):new E("Unknown error occurred while clearing","CLEAR_FAILED")}}getStorageKey(e){return `${this.keyPrefix}${e}`}isLocalStorageAvailable(){try{let e="__rilay_test__";return localStorage.setItem(e,"test"),localStorage.removeItem(e),!0}catch{return false}}compressData(e){return btoa(e)}decompressData(e){try{return atob(e)}catch{return e}}async clearExpiredData(){if(!this._isAvailable)return;let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);if(n?.startsWith(this.keyPrefix))try{let i=localStorage.getItem(n);if(i){let s=this.compress?this.decompressData(i):i,p=JSON.parse(s);p.expiresAt&&Date.now()>p.expiresAt&&e.push(n);}}catch{e.push(n);}}for(let r of e)localStorage.removeItem(r);}};export{Pe as LocalStorageAdapter,ht as Workflow,wt as WorkflowBody,Nt as WorkflowNextButton,E as WorkflowPersistenceError,zt as WorkflowPreviousButton,ke as WorkflowProvider,Zt as WorkflowSkipButton,er as WorkflowStepper,ye as WorkflowStoreContext,Se as combineWorkflowDataForConditions,$e as createWorkflowStore,ue as debounce,te as flattenObject,J as flow,de as generateStorageKey,st as mergePersistedState,Me as persistedToWorkflowState,le as useConditionEvaluation,$r as useCurrentStepIndex,en as useIsStepPassed,Yr as useIsStepVisited,Xr as usePassedSteps,$ as usePersistence,Qr as useStepDataById,ot as useStepMetadata,Hr as useVisitedSteps,nn as useWorkflowActions,jr as useWorkflowAllData,fe as useWorkflowAnalytics,me as useWorkflowConditions,V as useWorkflowContext,qr as useWorkflowInitializing,ge as useWorkflowNavigation,tn as useWorkflowNavigationState,ut as useWorkflowState,Zr as useWorkflowStepData,_ as useWorkflowStore,sn as useWorkflowStoreApi,be as useWorkflowSubmission,rn as useWorkflowSubmitState,Jr as useWorkflowSubmitting,Kr as useWorkflowTransitioning,it as validatePersistedData,pe as workflowStateToPersisted};
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rilaykit/workflow",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Workflow and multi-step form utilities for RilayKit",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"react",
|
|
21
|
+
"workflow",
|
|
22
|
+
"multi-step",
|
|
23
|
+
"forms",
|
|
24
|
+
"typescript"
|
|
25
|
+
],
|
|
26
|
+
"author": "AND YOU CREATE <contact@andyoucreate.com>",
|
|
27
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
28
|
+
"homepage": "https://rilay.io",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/andyoucreate/rilay.git"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/andyoucreate/rilay/issues"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"zustand": "^5.0.9",
|
|
38
|
+
"@rilaykit/core": "0.1.0",
|
|
39
|
+
"@rilaykit/forms": "0.1.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"react": ">=18.0.0",
|
|
43
|
+
"react-dom": ">=18.0.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/react": "^18.3.23",
|
|
47
|
+
"@types/react-dom": "^18.3.0",
|
|
48
|
+
"react": "^18.3.1",
|
|
49
|
+
"react-dom": "^18.3.1",
|
|
50
|
+
"typescript": "^5.8.3"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsup",
|
|
54
|
+
"dev": "tsup --watch",
|
|
55
|
+
"test": "vitest",
|
|
56
|
+
"test:run": "vitest run",
|
|
57
|
+
"test:ui": "vitest --ui",
|
|
58
|
+
"lint": "biome check .",
|
|
59
|
+
"lint:fix": "biome check --write .",
|
|
60
|
+
"type-check": "tsc --noEmit",
|
|
61
|
+
"clean": "rm -rf dist"
|
|
62
|
+
}
|
|
63
|
+
}
|