@rilaykit/workflow 5.2.0 → 5.2.1

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 CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var core=require('@rilaykit/core'),forms=require('@rilaykit/forms'),O=require('@noble/ed25519'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var O__namespace=/*#__PURE__*/_interopNamespace(O);var X=1751361139160,Y="8fdb6a454550326d331c3b3d1d1f8c707a371bdb6c7ea72a0a1e4ea6f1822620",p=class p{static async setLicenseKey(e){p.licenseKey=e||"",p.licenseKey?p.licenseResult=await p.validateLicense():p.licenseResult={valid:false,error:"MISSING"},p.isInitialized=true;}static async validateLicense(){if(!p.licenseKey)return {valid:false,error:"MISSING"};try{if(!p.licenseKey.startsWith("ril_"))return {valid:!1,error:"FORMAT_INVALID"};let e=p.licenseKey.slice(4),r=p.base64ToString(e).split(".");if(r.length!==3)return {valid:!1,error:"FORMAT_INVALID"};let[s,f,n]=r,l=`${s}.${f}`,u=new TextEncoder().encode(l),w=n.match(/.{2}/g);if(!w)return {valid:!1,error:"INVALID"};let m=new Uint8Array(w.map(E=>Number.parseInt(E,16))),g=p.hexToBytes(Y);if(!await O__namespace.verify(m,u,g))return {valid:!1,error:"SIGNATURE_INVALID"};let x=p.base64ToString(f.replace(/-/g,"+").replace(/_/g,"/")),o=JSON.parse(x),d=Math.floor(Date.now()/1e3);return o.e<d?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:X>o.e*1e3?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:o.p===void 0||!o.c||!o.i||!o.e||!o.t?{valid:!1,error:"INVALID"}:{valid:!0,data:p.decompressPayload(o)}}catch{return {valid:false,error:"INVALID"}}}static decompressPayload(e){return {plan:{0:"ARCHITECT",1:"FOUNDRY"}[e.p]||"ARCHITECT",company:e.c,customerId:e.i.toString(),expiry:e.e*1e3,iat:e.t*1e3}}static hexToBytes(e){let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=Number.parseInt(e.substring(r,r+2),16);return t}static base64ToString(e){if(typeof atob<"u")return atob(e);if(typeof Buffer<"u")return Buffer.from(e,"base64").toString();let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="",s=0,f=e.replace(/[^A-Za-z0-9+/]/g,"");for(;s<f.length;){let n=t.indexOf(f.charAt(s++)),l=t.indexOf(f.charAt(s++)),u=t.indexOf(f.charAt(s++)),w=t.indexOf(f.charAt(s++)),m=n<<18|l<<12|u<<6|w;r+=String.fromCharCode(m>>16&255),u!==64&&(r+=String.fromCharCode(m>>8&255)),w!==64&&(r+=String.fromCharCode(m&255));}return r}static getLicenseResult(){return p.isInitialized?p.licenseResult?p.licenseResult:{valid:false,error:"MISSING"}:{valid:false,error:"MISSING"}}static shouldDisplayWatermark(){return typeof window>"u"?false:!p.getLicenseResult().valid}static getWatermarkMessage(){let e=p.getLicenseResult();return {MISSING:"Rilay Workflow - For Trial Use Only",EXPIRED:"Rilay Workflow - License Expired",INVALID:"Rilay Workflow - Invalid License",FORMAT_INVALID:"Rilay Workflow - Invalid License Format",SIGNATURE_INVALID:"Rilay Workflow - Invalid License Signature"}[e.error||"MISSING"]||""}static logLicenseStatus(){let e=p.getLicenseResult();if(e.valid)return;let r={MISSING:"\u{1F527} Rilay Workflow - Trial Mode. Purchase a license at https://rilay.io/pricing",EXPIRED:"\u26A0\uFE0F Rilay Workflow - License Expired. Please renew your license.",INVALID:"\u274C Rilay Workflow - Invalid License. Please check your license key.",FORMAT_INVALID:"\u274C Rilay Workflow - Invalid License Format. Please check your license key.",SIGNATURE_INVALID:"\u274C Rilay Workflow - Invalid License Signature. Please check your license key."}[e.error||"MISSING"];console.warn(`%c${r}`,"color: #f59e0b; font-weight: bold;");}static async getLicenseInfo(){let e=p.getLicenseResult();return !e.valid||!e.data?{}:{plan:e.data.plan,company:e.data.company,expiryDate:new Date(e.data.expiry).toLocaleDateString()}}};p.licenseKey="",p.licenseResult=null,p.isInitialized=false;var h=p;var I=class i{constructor(e,t,r,s){this.steps=[];this.plugins=[];this.idGenerator=new core.IdGenerator;this.config=e,this.workflowId=t,this.workflowName=r,this.workflowDescription=s,h.logLicenseStatus();}static create(e,t,r,s){return new i(e,t,r,s)}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,onAfterValidation:e.onAfterValidation}}addStep(e){let t=core.normalizeToArray(e);for(let r of t){let s=this.createStepFromDefinition(r);this.steps.push(s);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(t){throw new Error(`Failed to install plugin "${e.name}": ${t instanceof Error?t.message:String(t)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let t=e.dependencies.filter(r=>!this.plugins.some(s=>s.name===r));if(t.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${t.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(t=>t.name!==e),this}updateStep(e,t){let r=this.steps.findIndex(s=>s.id===e);if(r===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[r]={...this.steps[r],...t},this}removeStep(e){return this.steps=this.steps.filter(t=>t.id!==e),this}getStep(e){return this.steps.find(t=>t.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,t){let r=new i(this.config,e||`${this.workflowId}-clone`,t||this.workflowName);return r.steps=core.deepClone(this.steps),r.analytics=this.analytics?core.deepClone(this.analytics):void 0,r.plugins=[...this.plugins],r}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let t=this.steps.map(r=>r.id);try{core.ensureUnique(t,"step");}catch(r){e.push(r instanceof Error?r.message:String(r));}for(let r of this.plugins)if(r.dependencies){let s=r.dependencies.filter(f=>!this.plugins.some(n=>n.name===f));s.length>0&&e.push(`Plugin "${r.name}" requires missing dependencies: ${s.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((r,s)=>r+s.formConfig.allFields.length,0),t=this.steps.map(r=>r.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:t.length>0?Math.max(...t):0,minFieldsInStep:t.length>0?Math.min(...t):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,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,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.plugins=e.plugins||[],this}};function re(i,e,t,r){return I.create(i,e,t,r)}core.ril.prototype.flow=function(i,e,t){return I.create(this,i,e,t)};function ae(i,e){switch(e.type){case "SET_CURRENT_STEP":return {...i,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":{let t=e.stepId;return {...i,stepData:e.data,allData:{...i.allData,[t]:e.data}}}case "SET_ALL_DATA":return {...i,allData:e.data};case "SET_FIELD_VALUE":{let t=e.stepId,r={...i.stepData,[e.fieldId]:e.value};return {...i,stepData:r,allData:{...i.allData,[t]:r}}}case "SET_SUBMITTING":return {...i,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...i,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...i,visitedSteps:new Set([...i.visitedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false};default:return i}}var $=react.createContext(null);function N({children:i,workflowConfig:e,defaultValues:t={},onStepChange:r,onWorkflowComplete:s,className:f}){let[n,l]=react.useReducer(ae,{currentStepIndex:0,allData:t,stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false}),u=react.useRef(Date.now()),w=react.useRef(new Map),m=react.useRef(false),g=react.useRef(null),T=react.useRef(r),x=react.useRef(s);T.current=r,x.current=s;let o=react.useMemo(()=>e,[e]),d=react.useMemo(()=>({workflowId:o.id,currentStepIndex:n.currentStepIndex,totalSteps:o.steps.length,allData:n.allData,stepData:n.stepData,isFirstStep:n.currentStepIndex===0,isLastStep:n.currentStepIndex===o.steps.length-1,visitedSteps:n.visitedSteps}),[o.id,n.currentStepIndex,o.steps.length,n.allData,n.stepData,n.visitedSteps]);react.useEffect(()=>{o.analytics?.onWorkflowStart&&!m.current&&(m.current=true,o.analytics.onWorkflowStart(o.id,d));},[o.id,o.analytics,d]),react.useEffect(()=>{let a=o.steps[n.currentStepIndex];if(a&&g.current!==a.id){if(g.current&&o.analytics?.onStepComplete){let c=w.current.get(g.current);c&&o.analytics.onStepComplete(g.current,Date.now()-c,n.stepData,d);}g.current=a.id,w.current.set(a.id,Date.now()),o.analytics?.onStepStart&&o.analytics.onStepStart(a.id,Date.now(),d);}},[n.currentStepIndex,o.steps,o.analytics,d]);let S=react.useMemo(()=>o.steps[n.currentStepIndex],[o.steps,n.currentStepIndex]),E=react.useMemo(()=>S?.formConfig,[S]),D=react.useCallback(async a=>{if(a<0||a>=o.steps.length)return false;l({type:"SET_TRANSITIONING",isTransitioning:true});try{return T.current&&T.current(n.currentStepIndex,a,d),l({type:"SET_CURRENT_STEP",stepIndex:a}),l({type:"MARK_STEP_VISITED",stepIndex:a,stepId:o.steps[a].id}),!0}catch(c){return console.error("Step transition failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}finally{l({type:"SET_TRANSITIONING",isTransitioning:false});}},[o.steps,n.currentStepIndex,d,o.analytics]),L=react.useCallback(()=>({setStepData:(a,c)=>{l({type:"SET_STEP_DATA",data:c,stepId:a});},setStepFields:(a,c)=>{let C={...n.allData[a]||{},...c};l({type:"SET_STEP_DATA",data:C,stepId:a});},getStepData:a=>n.allData[a]||{},setNextStepField:(a,c)=>{let v=n.currentStepIndex+1;if(v<o.steps.length){let C=o.steps[v].id,J={...n.allData[C]||{},[a]:c};l({type:"SET_STEP_DATA",data:J,stepId:C});}},setNextStepFields:a=>{let c=n.currentStepIndex+1;if(c<o.steps.length){let v=o.steps[c].id,_={...n.allData[v]||{},...a};l({type:"SET_STEP_DATA",data:_,stepId:v});}},getAllData:()=>({...n.allData}),getSteps:()=>[...o.steps]}),[n.allData,n.currentStepIndex,o.steps]),A=react.useCallback((a,c)=>{l({type:"SET_FIELD_VALUE",fieldId:a,value:c,stepId:S?.id||""});},[S?.id]),F=react.useCallback(a=>{l({type:"SET_STEP_DATA",data:a,stepId:S?.id||""});},[S?.id]),W=react.useCallback(async()=>{if(S?.onAfterValidation)try{let c=L();await S.onAfterValidation(n.stepData,c,d);}catch(c){return console.error("onAfterValidation failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}let a=n.currentStepIndex+1;return D(a)},[S,L,n.stepData,d,o.analytics,D,n.currentStepIndex]),B=react.useCallback(async()=>D(n.currentStepIndex-1),[n.currentStepIndex,D]),b=react.useCallback(async()=>{l({type:"SET_SUBMITTING",isSubmitting:true});try{if(x.current&&await x.current(n.allData),o.analytics?.onWorkflowComplete){let a=Date.now()-u.current;o.analytics.onWorkflowComplete(o.id,a,n.allData);}}catch(a){throw console.error("Workflow submission failed:",a),o.analytics?.onError&&o.analytics.onError(a,d),a}finally{l({type:"SET_SUBMITTING",isSubmitting:false});}},[n.allData,x,o.analytics,d]),V=react.useCallback(async()=>S?.allowSkip?(o.analytics?.onStepSkip&&o.analytics.onStepSkip(S.id,"user_skip",d),d.isLastStep?(await b(),true):W()):false,[S,o.analytics,d,W,b]),M=react.useCallback(()=>{l({type:"RESET_WORKFLOW"});},[]),z=react.useMemo(()=>({workflowState:n,workflowConfig:o,currentStep:S,context:d,formConfig:E,goToStep:D,goNext:W,goPrevious:B,skipStep:V,setValue:A,setStepData:F,submitWorkflow:b,resetWorkflow:M}),[n,o,S,d,E,D,W,B,V,A,F,b,M]),q=react.useCallback(async()=>{await W();},[W]);return jsxRuntime.jsx($.Provider,{value:z,children:jsxRuntime.jsx(forms.FormProvider,{formConfig:S?.formConfig,defaultValues:n?.allData[S?.id]||{},onFieldChange:A,"data-workflow-id":o.id,className:f,onSubmit:q,children:i})})}function y(){let i=react.useContext($);if(!i)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return i}function ce({children:i,workflowConfig:e,...t}){let[r,s]=react.useState(false),f=h.shouldDisplayWatermark(),n=h.getWatermarkMessage(),l=react.useMemo(()=>e instanceof I?e.build():e,[e]);return react.useEffect(()=>{s(true);},[]),jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsx(N,{...t,workflowConfig:l,children:i}),r&&f&&jsxRuntime.jsx("div",{style:{position:"absolute",top:"10px",right:"10px",background:"rgba(0, 0, 0, 0.8)",color:"white",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",fontFamily:"monospace",zIndex:1e3,pointerEvents:"none",opacity:.7},children:n})]})}function Se(){let{currentStep:i}=y();if(!i)return null;let{formConfig:e,renderer:t}=i;return e?t?t(i):jsxRuntime.jsx(forms.FormBody,{}):null}function ye({className:i,...e}){let{context:t,workflowState:r,workflowConfig:s,currentStep:f}=y(),{submit:n,formState:l}=forms.useFormContext(),u=!r.isTransitioning&&!r.isSubmitting,w=async g=>{g?.preventDefault(),u&&await n(g);},m={isLastStep:t.isLastStep,canGoNext:u,isSubmitting:l.isSubmitting||r.isSubmitting,onSubmit:w,className:i,currentStep:f,stepData:l.values||{},allData:t.allData,context:t};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:s.renderConfig?.nextButtonRenderer,props:m,...e})}function xe({className:i,...e}){let{context:t,goPrevious:r,workflowState:s,workflowConfig:f,currentStep:n}=y(),{formState:l}=forms.useFormContext(),u=t.currentStepIndex>0&&!s.isTransitioning&&!s.isSubmitting,m={canGoPrevious:u,onPrevious:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:n,stepData:l.values||{},allData:t.allData,context:t};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:f.renderConfig?.previousButtonRenderer,props:m,...e})}function Re({className:i,...e}){let{currentStep:t,skipStep:r,workflowState:s,workflowConfig:f,context:n}=y(),{formState:l}=forms.useFormContext(),u=!!t?.allowSkip&&!s.isTransitioning&&!s.isSubmitting,m={canSkip:u,onSkip:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:t,stepData:l.values||{},allData:n.allData,context:n};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:f.renderConfig?.skipButtonRenderer,props:m,...e})}function Te({onStepClick:i,className:e,...t}){let{workflowConfig:r,workflowState:s,goToStep:f}=y(),n=u=>{i?i(u):f(u);},l={steps:r.steps,currentStepIndex:s.currentStepIndex,visitedSteps:s.visitedSteps,onStepClick:n,className:e};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowStepper",renderer:r.renderConfig?.stepperRenderer,props:l,...t})}
1
+ 'use strict';var core=require('@rilaykit/core'),forms=require('@rilaykit/forms'),O=require('@noble/ed25519'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var O__namespace=/*#__PURE__*/_interopNamespace(O);var X=1751361139160,Y="8fdb6a454550326d331c3b3d1d1f8c707a371bdb6c7ea72a0a1e4ea6f1822620",p=class p{static async setLicenseKey(e){p.licenseKey=e||"",p.licenseKey?p.licenseResult=await p.validateLicense():p.licenseResult={valid:false,error:"MISSING"},p.isInitialized=true;}static async validateLicense(){if(!p.licenseKey)return {valid:false,error:"MISSING"};try{if(!p.licenseKey.startsWith("ril_"))return {valid:!1,error:"FORMAT_INVALID"};let e=p.licenseKey.slice(4),r=p.base64ToString(e).split(".");if(r.length!==3)return {valid:!1,error:"FORMAT_INVALID"};let[s,f,n]=r,l=`${s}.${f}`,u=new TextEncoder().encode(l),w=n.match(/.{2}/g);if(!w)return {valid:!1,error:"INVALID"};let m=new Uint8Array(w.map(b=>Number.parseInt(b,16))),g=p.hexToBytes(Y);if(!await O__namespace.verify(m,u,g))return {valid:!1,error:"SIGNATURE_INVALID"};let x=p.base64ToString(f.replace(/-/g,"+").replace(/_/g,"/")),o=JSON.parse(x),d=Math.floor(Date.now()/1e3);return o.e<d?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:X>o.e*1e3?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:o.p===void 0||!o.c||!o.i||!o.e||!o.t?{valid:!1,error:"INVALID"}:{valid:!0,data:p.decompressPayload(o)}}catch{return {valid:false,error:"INVALID"}}}static decompressPayload(e){return {plan:{0:"ARCHITECT",1:"FOUNDRY"}[e.p]||"ARCHITECT",company:e.c,customerId:e.i.toString(),expiry:e.e*1e3,iat:e.t*1e3}}static hexToBytes(e){let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=Number.parseInt(e.substring(r,r+2),16);return t}static base64ToString(e){if(typeof atob<"u")return atob(e);if(typeof Buffer<"u")return Buffer.from(e,"base64").toString();let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="",s=0,f=e.replace(/[^A-Za-z0-9+/]/g,"");for(;s<f.length;){let n=t.indexOf(f.charAt(s++)),l=t.indexOf(f.charAt(s++)),u=t.indexOf(f.charAt(s++)),w=t.indexOf(f.charAt(s++)),m=n<<18|l<<12|u<<6|w;r+=String.fromCharCode(m>>16&255),u!==64&&(r+=String.fromCharCode(m>>8&255)),w!==64&&(r+=String.fromCharCode(m&255));}return r}static getLicenseResult(){return p.isInitialized?p.licenseResult?p.licenseResult:{valid:false,error:"MISSING"}:{valid:false,error:"MISSING"}}static shouldDisplayWatermark(){return typeof window>"u"?false:!p.getLicenseResult().valid}static getWatermarkMessage(){let e=p.getLicenseResult();return {MISSING:"Rilay Workflow - For Trial Use Only",EXPIRED:"Rilay Workflow - License Expired",INVALID:"Rilay Workflow - Invalid License",FORMAT_INVALID:"Rilay Workflow - Invalid License Format",SIGNATURE_INVALID:"Rilay Workflow - Invalid License Signature"}[e.error||"MISSING"]||""}static logLicenseStatus(){let e=p.getLicenseResult();if(e.valid)return;let r={MISSING:"\u{1F527} Rilay Workflow - Trial Mode. Purchase a license at https://rilay.io/pricing",EXPIRED:"\u26A0\uFE0F Rilay Workflow - License Expired. Please renew your license.",INVALID:"\u274C Rilay Workflow - Invalid License. Please check your license key.",FORMAT_INVALID:"\u274C Rilay Workflow - Invalid License Format. Please check your license key.",SIGNATURE_INVALID:"\u274C Rilay Workflow - Invalid License Signature. Please check your license key."}[e.error||"MISSING"];console.warn(`%c${r}`,"color: #f59e0b; font-weight: bold;");}static async getLicenseInfo(){let e=p.getLicenseResult();return !e.valid||!e.data?{}:{plan:e.data.plan,company:e.data.company,expiryDate:new Date(e.data.expiry).toLocaleDateString()}}};p.licenseKey="",p.licenseResult=null,p.isInitialized=false;var h=p;var I=class i{constructor(e,t,r,s){this.steps=[];this.plugins=[];this.idGenerator=new core.IdGenerator;this.config=e,this.workflowId=t,this.workflowName=r,this.workflowDescription=s,h.logLicenseStatus();}static create(e,t,r,s){return new i(e,t,r,s)}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,onAfterValidation:e.onAfterValidation}}addStep(e){let t=core.normalizeToArray(e);for(let r of t){let s=this.createStepFromDefinition(r);this.steps.push(s);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(t){throw new Error(`Failed to install plugin "${e.name}": ${t instanceof Error?t.message:String(t)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let t=e.dependencies.filter(r=>!this.plugins.some(s=>s.name===r));if(t.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${t.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(t=>t.name!==e),this}updateStep(e,t){let r=this.steps.findIndex(s=>s.id===e);if(r===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[r]={...this.steps[r],...t},this}removeStep(e){return this.steps=this.steps.filter(t=>t.id!==e),this}getStep(e){return this.steps.find(t=>t.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,t){let r=new i(this.config,e||`${this.workflowId}-clone`,t||this.workflowName);return r.steps=core.deepClone(this.steps),r.analytics=this.analytics?core.deepClone(this.analytics):void 0,r.plugins=[...this.plugins],r}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let t=this.steps.map(r=>r.id);try{core.ensureUnique(t,"step");}catch(r){e.push(r instanceof Error?r.message:String(r));}for(let r of this.plugins)if(r.dependencies){let s=r.dependencies.filter(f=>!this.plugins.some(n=>n.name===f));s.length>0&&e.push(`Plugin "${r.name}" requires missing dependencies: ${s.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((r,s)=>r+s.formConfig.allFields.length,0),t=this.steps.map(r=>r.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:t.length>0?Math.max(...t):0,minFieldsInStep:t.length>0?Math.min(...t):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,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,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.plugins=e.plugins||[],this}};function re(i,e,t,r){return I.create(i,e,t,r)}core.ril.prototype.flow=function(i,e,t){return I.create(this,i,e,t)};function ae(i,e){switch(e.type){case "SET_CURRENT_STEP":return {...i,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":{let t=e.stepId;return {...i,stepData:e.data,allData:{...i.allData,[t]:e.data}}}case "SET_ALL_DATA":return {...i,allData:e.data};case "SET_FIELD_VALUE":{let t=e.stepId,r={...i.stepData,[e.fieldId]:e.value};return {...i,stepData:r,allData:{...i.allData,[t]:r}}}case "SET_SUBMITTING":return {...i,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...i,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...i,visitedSteps:new Set([...i.visitedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false};default:return i}}var $=react.createContext(null);function N({children:i,workflowConfig:e,defaultValues:t={},onStepChange:r,onWorkflowComplete:s,className:f}){let[n,l]=react.useReducer(ae,{currentStepIndex:0,allData:t,stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false}),u=react.useRef(Date.now()),w=react.useRef(new Map),m=react.useRef(false),g=react.useRef(null),E=react.useRef(r),x=react.useRef(s);E.current=r,x.current=s;let o=react.useMemo(()=>e,[e]),d=react.useMemo(()=>({workflowId:o.id,currentStepIndex:n.currentStepIndex,totalSteps:o.steps.length,allData:n.allData,stepData:n.stepData,isFirstStep:n.currentStepIndex===0,isLastStep:n.currentStepIndex===o.steps.length-1,visitedSteps:n.visitedSteps}),[o.id,n.currentStepIndex,o.steps.length,n.allData,n.stepData,n.visitedSteps]);react.useEffect(()=>{o.analytics?.onWorkflowStart&&!m.current&&(m.current=true,o.analytics.onWorkflowStart(o.id,d));},[o.id,o.analytics,d]),react.useEffect(()=>{let a=o.steps[n.currentStepIndex];if(a&&g.current!==a.id){if(g.current&&o.analytics?.onStepComplete){let c=w.current.get(g.current);c&&o.analytics.onStepComplete(g.current,Date.now()-c,n.stepData,d);}g.current=a.id,w.current.set(a.id,Date.now()),o.analytics?.onStepStart&&o.analytics.onStepStart(a.id,Date.now(),d);}},[n.currentStepIndex,o.steps,o.analytics,d]);let S=react.useMemo(()=>o.steps[n.currentStepIndex],[o.steps,n.currentStepIndex]),b=react.useMemo(()=>S?.formConfig,[S]),D=react.useCallback(async a=>{if(a<0||a>=o.steps.length)return false;l({type:"SET_TRANSITIONING",isTransitioning:true});try{return E.current&&E.current(n.currentStepIndex,a,d),l({type:"SET_CURRENT_STEP",stepIndex:a}),l({type:"MARK_STEP_VISITED",stepIndex:a,stepId:o.steps[a].id}),!0}catch(c){return console.error("Step transition failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}finally{l({type:"SET_TRANSITIONING",isTransitioning:false});}},[o.steps,n.currentStepIndex,d,o.analytics]),L=react.useCallback(()=>({setStepData:(a,c)=>{l({type:"SET_STEP_DATA",data:c,stepId:a});},setStepFields:(a,c)=>{let P={...n.allData[a]||{},...c};l({type:"SET_STEP_DATA",data:P,stepId:a});},getStepData:a=>n.allData[a]||{},setNextStepField:(a,c)=>{let R=n.currentStepIndex+1;if(R<o.steps.length){let P=o.steps[R].id,J={...n.allData[P]||{},[a]:c};l({type:"SET_STEP_DATA",data:J,stepId:P});}},setNextStepFields:a=>{let c=n.currentStepIndex+1;if(c<o.steps.length){let R=o.steps[c].id,_={...n.allData[R]||{},...a};l({type:"SET_STEP_DATA",data:_,stepId:R});}},getAllData:()=>({...n.allData}),getSteps:()=>[...o.steps]}),[n.allData,n.currentStepIndex,o.steps]),A=react.useCallback((a,c)=>{l({type:"SET_FIELD_VALUE",fieldId:a,value:c,stepId:S?.id||""});},[S?.id]),F=react.useCallback(a=>{l({type:"SET_STEP_DATA",data:a,stepId:S?.id||""});},[S?.id]),W=react.useCallback(async()=>{l({type:"SET_SUBMITTING",isSubmitting:true});try{if(x.current&&await x.current(n.allData),o.analytics?.onWorkflowComplete){let a=Date.now()-u.current;o.analytics.onWorkflowComplete(o.id,a,n.allData);}}catch(a){throw console.error("Workflow submission failed:",a),o.analytics?.onError&&o.analytics.onError(a,d),a}finally{l({type:"SET_SUBMITTING",isSubmitting:false});}},[n.allData,x,o.analytics,d]),v=react.useCallback(async()=>{if(S?.onAfterValidation)try{let c=L();await S.onAfterValidation(n.stepData,c,d);}catch(c){return console.error("onAfterValidation failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}let a=n.currentStepIndex+1;return a>=o.steps.length?(await W(),true):D(a)},[S,L,n.stepData,d,o.analytics,o.steps.length,D,n.currentStepIndex,W]),B=react.useCallback(async()=>D(n.currentStepIndex-1),[n.currentStepIndex,D]),V=react.useCallback(async()=>S?.allowSkip?(o.analytics?.onStepSkip&&o.analytics.onStepSkip(S.id,"user_skip",d),d.isLastStep?(await W(),true):v()):false,[S,o.analytics,d,v,W]),M=react.useCallback(()=>{l({type:"RESET_WORKFLOW"});},[]),z=react.useMemo(()=>({workflowState:n,workflowConfig:o,currentStep:S,context:d,formConfig:b,goToStep:D,goNext:v,goPrevious:B,skipStep:V,setValue:A,setStepData:F,submitWorkflow:W,resetWorkflow:M}),[n,o,S,d,b,D,v,B,V,A,F,W,M]),q=react.useCallback(async()=>{await v();},[v]);return jsxRuntime.jsx($.Provider,{value:z,children:jsxRuntime.jsx(forms.FormProvider,{formConfig:S?.formConfig,defaultValues:n?.allData[S?.id]||{},onFieldChange:A,"data-workflow-id":o.id,className:f,onSubmit:q,children:i})})}function y(){let i=react.useContext($);if(!i)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return i}function ce({children:i,workflowConfig:e,...t}){let[r,s]=react.useState(false),f=h.shouldDisplayWatermark(),n=h.getWatermarkMessage(),l=react.useMemo(()=>e instanceof I?e.build():e,[e]);return react.useEffect(()=>{s(true);},[]),jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsx(N,{...t,workflowConfig:l,children:i}),r&&f&&jsxRuntime.jsx("div",{style:{position:"absolute",top:"10px",right:"10px",background:"rgba(0, 0, 0, 0.8)",color:"white",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",fontFamily:"monospace",zIndex:1e3,pointerEvents:"none",opacity:.7},children:n})]})}function Se(){let{currentStep:i}=y();if(!i)return null;let{formConfig:e,renderer:t}=i;return e?t?t(i):jsxRuntime.jsx(forms.FormBody,{}):null}function ye({className:i,...e}){let{context:t,workflowState:r,workflowConfig:s,currentStep:f}=y(),{submit:n,formState:l}=forms.useFormContext(),u=!r.isTransitioning&&!r.isSubmitting,w=async g=>{g?.preventDefault(),u&&await n(g);},m={isLastStep:t.isLastStep,canGoNext:u,isSubmitting:l.isSubmitting||r.isSubmitting,onSubmit:w,className:i,currentStep:f,stepData:l.values||{},allData:t.allData,context:t};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:s.renderConfig?.nextButtonRenderer,props:m,...e})}function xe({className:i,...e}){let{context:t,goPrevious:r,workflowState:s,workflowConfig:f,currentStep:n}=y(),{formState:l}=forms.useFormContext(),u=t.currentStepIndex>0&&!s.isTransitioning&&!s.isSubmitting,m={canGoPrevious:u,onPrevious:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:n,stepData:l.values||{},allData:t.allData,context:t};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:f.renderConfig?.previousButtonRenderer,props:m,...e})}function Re({className:i,...e}){let{currentStep:t,skipStep:r,workflowState:s,workflowConfig:f,context:n}=y(),{formState:l}=forms.useFormContext(),u=!!t?.allowSkip&&!s.isTransitioning&&!s.isSubmitting,m={canSkip:u,onSkip:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:t,stepData:l.values||{},allData:n.allData,context:n};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:f.renderConfig?.skipButtonRenderer,props:m,...e})}function Te({onStepClick:i,className:e,...t}){let{workflowConfig:r,workflowState:s,goToStep:f}=y(),n=u=>{i?i(u):f(u);},l={steps:r.steps,currentStepIndex:s.currentStepIndex,visitedSteps:s.visitedSteps,onStepClick:n,className:e};return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"WorkflowStepper",renderer:r.renderConfig?.stepperRenderer,props:l,...t})}
2
2
  Object.defineProperty(exports,"form",{enumerable:true,get:function(){return forms.form}});exports.RilayLicenseManager=h;exports.Workflow=ce;exports.WorkflowBody=Se;exports.WorkflowNextButton=ye;exports.WorkflowPreviousButton=xe;exports.WorkflowProvider=N;exports.WorkflowSkipButton=Re;exports.WorkflowStepper=Te;exports.createFlow=re;exports.flow=I;exports.useWorkflowContext=y;Object.keys(core).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return core[k]}})});
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {ril,IdGenerator,normalizeToArray,deepClone,ensureUnique,ComponentRendererWrapper}from'@rilaykit/core';export*from'@rilaykit/core';import {form,FormProvider,FormBody,useFormContext}from'@rilaykit/forms';export{form}from'@rilaykit/forms';import*as O from'@noble/ed25519';import {createContext,useReducer,useRef,useMemo,useEffect,useCallback,useContext,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var X=1751361139160,Y="8fdb6a454550326d331c3b3d1d1f8c707a371bdb6c7ea72a0a1e4ea6f1822620",p=class p{static async setLicenseKey(e){p.licenseKey=e||"",p.licenseKey?p.licenseResult=await p.validateLicense():p.licenseResult={valid:false,error:"MISSING"},p.isInitialized=true;}static async validateLicense(){if(!p.licenseKey)return {valid:false,error:"MISSING"};try{if(!p.licenseKey.startsWith("ril_"))return {valid:!1,error:"FORMAT_INVALID"};let e=p.licenseKey.slice(4),r=p.base64ToString(e).split(".");if(r.length!==3)return {valid:!1,error:"FORMAT_INVALID"};let[s,f,n]=r,l=`${s}.${f}`,u=new TextEncoder().encode(l),w=n.match(/.{2}/g);if(!w)return {valid:!1,error:"INVALID"};let m=new Uint8Array(w.map(E=>Number.parseInt(E,16))),g=p.hexToBytes(Y);if(!await O.verify(m,u,g))return {valid:!1,error:"SIGNATURE_INVALID"};let x=p.base64ToString(f.replace(/-/g,"+").replace(/_/g,"/")),o=JSON.parse(x),d=Math.floor(Date.now()/1e3);return o.e<d?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:X>o.e*1e3?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:o.p===void 0||!o.c||!o.i||!o.e||!o.t?{valid:!1,error:"INVALID"}:{valid:!0,data:p.decompressPayload(o)}}catch{return {valid:false,error:"INVALID"}}}static decompressPayload(e){return {plan:{0:"ARCHITECT",1:"FOUNDRY"}[e.p]||"ARCHITECT",company:e.c,customerId:e.i.toString(),expiry:e.e*1e3,iat:e.t*1e3}}static hexToBytes(e){let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=Number.parseInt(e.substring(r,r+2),16);return t}static base64ToString(e){if(typeof atob<"u")return atob(e);if(typeof Buffer<"u")return Buffer.from(e,"base64").toString();let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="",s=0,f=e.replace(/[^A-Za-z0-9+/]/g,"");for(;s<f.length;){let n=t.indexOf(f.charAt(s++)),l=t.indexOf(f.charAt(s++)),u=t.indexOf(f.charAt(s++)),w=t.indexOf(f.charAt(s++)),m=n<<18|l<<12|u<<6|w;r+=String.fromCharCode(m>>16&255),u!==64&&(r+=String.fromCharCode(m>>8&255)),w!==64&&(r+=String.fromCharCode(m&255));}return r}static getLicenseResult(){return p.isInitialized?p.licenseResult?p.licenseResult:{valid:false,error:"MISSING"}:{valid:false,error:"MISSING"}}static shouldDisplayWatermark(){return typeof window>"u"?false:!p.getLicenseResult().valid}static getWatermarkMessage(){let e=p.getLicenseResult();return {MISSING:"Rilay Workflow - For Trial Use Only",EXPIRED:"Rilay Workflow - License Expired",INVALID:"Rilay Workflow - Invalid License",FORMAT_INVALID:"Rilay Workflow - Invalid License Format",SIGNATURE_INVALID:"Rilay Workflow - Invalid License Signature"}[e.error||"MISSING"]||""}static logLicenseStatus(){let e=p.getLicenseResult();if(e.valid)return;let r={MISSING:"\u{1F527} Rilay Workflow - Trial Mode. Purchase a license at https://rilay.io/pricing",EXPIRED:"\u26A0\uFE0F Rilay Workflow - License Expired. Please renew your license.",INVALID:"\u274C Rilay Workflow - Invalid License. Please check your license key.",FORMAT_INVALID:"\u274C Rilay Workflow - Invalid License Format. Please check your license key.",SIGNATURE_INVALID:"\u274C Rilay Workflow - Invalid License Signature. Please check your license key."}[e.error||"MISSING"];console.warn(`%c${r}`,"color: #f59e0b; font-weight: bold;");}static async getLicenseInfo(){let e=p.getLicenseResult();return !e.valid||!e.data?{}:{plan:e.data.plan,company:e.data.company,expiryDate:new Date(e.data.expiry).toLocaleDateString()}}};p.licenseKey="",p.licenseResult=null,p.isInitialized=false;var h=p;var I=class i{constructor(e,t,r,s){this.steps=[];this.plugins=[];this.idGenerator=new IdGenerator;this.config=e,this.workflowId=t,this.workflowName=r,this.workflowDescription=s,h.logLicenseStatus();}static create(e,t,r,s){return new i(e,t,r,s)}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,onAfterValidation:e.onAfterValidation}}addStep(e){let t=normalizeToArray(e);for(let r of t){let s=this.createStepFromDefinition(r);this.steps.push(s);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(t){throw new Error(`Failed to install plugin "${e.name}": ${t instanceof Error?t.message:String(t)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let t=e.dependencies.filter(r=>!this.plugins.some(s=>s.name===r));if(t.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${t.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(t=>t.name!==e),this}updateStep(e,t){let r=this.steps.findIndex(s=>s.id===e);if(r===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[r]={...this.steps[r],...t},this}removeStep(e){return this.steps=this.steps.filter(t=>t.id!==e),this}getStep(e){return this.steps.find(t=>t.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,t){let r=new i(this.config,e||`${this.workflowId}-clone`,t||this.workflowName);return r.steps=deepClone(this.steps),r.analytics=this.analytics?deepClone(this.analytics):void 0,r.plugins=[...this.plugins],r}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let t=this.steps.map(r=>r.id);try{ensureUnique(t,"step");}catch(r){e.push(r instanceof Error?r.message:String(r));}for(let r of this.plugins)if(r.dependencies){let s=r.dependencies.filter(f=>!this.plugins.some(n=>n.name===f));s.length>0&&e.push(`Plugin "${r.name}" requires missing dependencies: ${s.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((r,s)=>r+s.formConfig.allFields.length,0),t=this.steps.map(r=>r.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:t.length>0?Math.max(...t):0,minFieldsInStep:t.length>0?Math.min(...t):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,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,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.plugins=e.plugins||[],this}};function re(i,e,t,r){return I.create(i,e,t,r)}ril.prototype.flow=function(i,e,t){return I.create(this,i,e,t)};function ae(i,e){switch(e.type){case "SET_CURRENT_STEP":return {...i,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":{let t=e.stepId;return {...i,stepData:e.data,allData:{...i.allData,[t]:e.data}}}case "SET_ALL_DATA":return {...i,allData:e.data};case "SET_FIELD_VALUE":{let t=e.stepId,r={...i.stepData,[e.fieldId]:e.value};return {...i,stepData:r,allData:{...i.allData,[t]:r}}}case "SET_SUBMITTING":return {...i,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...i,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...i,visitedSteps:new Set([...i.visitedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false};default:return i}}var $=createContext(null);function N({children:i,workflowConfig:e,defaultValues:t={},onStepChange:r,onWorkflowComplete:s,className:f}){let[n,l]=useReducer(ae,{currentStepIndex:0,allData:t,stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false}),u=useRef(Date.now()),w=useRef(new Map),m=useRef(false),g=useRef(null),T=useRef(r),x=useRef(s);T.current=r,x.current=s;let o=useMemo(()=>e,[e]),d=useMemo(()=>({workflowId:o.id,currentStepIndex:n.currentStepIndex,totalSteps:o.steps.length,allData:n.allData,stepData:n.stepData,isFirstStep:n.currentStepIndex===0,isLastStep:n.currentStepIndex===o.steps.length-1,visitedSteps:n.visitedSteps}),[o.id,n.currentStepIndex,o.steps.length,n.allData,n.stepData,n.visitedSteps]);useEffect(()=>{o.analytics?.onWorkflowStart&&!m.current&&(m.current=true,o.analytics.onWorkflowStart(o.id,d));},[o.id,o.analytics,d]),useEffect(()=>{let a=o.steps[n.currentStepIndex];if(a&&g.current!==a.id){if(g.current&&o.analytics?.onStepComplete){let c=w.current.get(g.current);c&&o.analytics.onStepComplete(g.current,Date.now()-c,n.stepData,d);}g.current=a.id,w.current.set(a.id,Date.now()),o.analytics?.onStepStart&&o.analytics.onStepStart(a.id,Date.now(),d);}},[n.currentStepIndex,o.steps,o.analytics,d]);let S=useMemo(()=>o.steps[n.currentStepIndex],[o.steps,n.currentStepIndex]),E=useMemo(()=>S?.formConfig,[S]),D=useCallback(async a=>{if(a<0||a>=o.steps.length)return false;l({type:"SET_TRANSITIONING",isTransitioning:true});try{return T.current&&T.current(n.currentStepIndex,a,d),l({type:"SET_CURRENT_STEP",stepIndex:a}),l({type:"MARK_STEP_VISITED",stepIndex:a,stepId:o.steps[a].id}),!0}catch(c){return console.error("Step transition failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}finally{l({type:"SET_TRANSITIONING",isTransitioning:false});}},[o.steps,n.currentStepIndex,d,o.analytics]),L=useCallback(()=>({setStepData:(a,c)=>{l({type:"SET_STEP_DATA",data:c,stepId:a});},setStepFields:(a,c)=>{let C={...n.allData[a]||{},...c};l({type:"SET_STEP_DATA",data:C,stepId:a});},getStepData:a=>n.allData[a]||{},setNextStepField:(a,c)=>{let v=n.currentStepIndex+1;if(v<o.steps.length){let C=o.steps[v].id,J={...n.allData[C]||{},[a]:c};l({type:"SET_STEP_DATA",data:J,stepId:C});}},setNextStepFields:a=>{let c=n.currentStepIndex+1;if(c<o.steps.length){let v=o.steps[c].id,_={...n.allData[v]||{},...a};l({type:"SET_STEP_DATA",data:_,stepId:v});}},getAllData:()=>({...n.allData}),getSteps:()=>[...o.steps]}),[n.allData,n.currentStepIndex,o.steps]),A=useCallback((a,c)=>{l({type:"SET_FIELD_VALUE",fieldId:a,value:c,stepId:S?.id||""});},[S?.id]),F=useCallback(a=>{l({type:"SET_STEP_DATA",data:a,stepId:S?.id||""});},[S?.id]),W=useCallback(async()=>{if(S?.onAfterValidation)try{let c=L();await S.onAfterValidation(n.stepData,c,d);}catch(c){return console.error("onAfterValidation failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}let a=n.currentStepIndex+1;return D(a)},[S,L,n.stepData,d,o.analytics,D,n.currentStepIndex]),B=useCallback(async()=>D(n.currentStepIndex-1),[n.currentStepIndex,D]),b=useCallback(async()=>{l({type:"SET_SUBMITTING",isSubmitting:true});try{if(x.current&&await x.current(n.allData),o.analytics?.onWorkflowComplete){let a=Date.now()-u.current;o.analytics.onWorkflowComplete(o.id,a,n.allData);}}catch(a){throw console.error("Workflow submission failed:",a),o.analytics?.onError&&o.analytics.onError(a,d),a}finally{l({type:"SET_SUBMITTING",isSubmitting:false});}},[n.allData,x,o.analytics,d]),V=useCallback(async()=>S?.allowSkip?(o.analytics?.onStepSkip&&o.analytics.onStepSkip(S.id,"user_skip",d),d.isLastStep?(await b(),true):W()):false,[S,o.analytics,d,W,b]),M=useCallback(()=>{l({type:"RESET_WORKFLOW"});},[]),z=useMemo(()=>({workflowState:n,workflowConfig:o,currentStep:S,context:d,formConfig:E,goToStep:D,goNext:W,goPrevious:B,skipStep:V,setValue:A,setStepData:F,submitWorkflow:b,resetWorkflow:M}),[n,o,S,d,E,D,W,B,V,A,F,b,M]),q=useCallback(async()=>{await W();},[W]);return jsx($.Provider,{value:z,children:jsx(FormProvider,{formConfig:S?.formConfig,defaultValues:n?.allData[S?.id]||{},onFieldChange:A,"data-workflow-id":o.id,className:f,onSubmit:q,children:i})})}function y(){let i=useContext($);if(!i)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return i}function ce({children:i,workflowConfig:e,...t}){let[r,s]=useState(false),f=h.shouldDisplayWatermark(),n=h.getWatermarkMessage(),l=useMemo(()=>e instanceof I?e.build():e,[e]);return useEffect(()=>{s(true);},[]),jsxs("div",{style:{position:"relative"},children:[jsx(N,{...t,workflowConfig:l,children:i}),r&&f&&jsx("div",{style:{position:"absolute",top:"10px",right:"10px",background:"rgba(0, 0, 0, 0.8)",color:"white",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",fontFamily:"monospace",zIndex:1e3,pointerEvents:"none",opacity:.7},children:n})]})}function Se(){let{currentStep:i}=y();if(!i)return null;let{formConfig:e,renderer:t}=i;return e?t?t(i):jsx(FormBody,{}):null}function ye({className:i,...e}){let{context:t,workflowState:r,workflowConfig:s,currentStep:f}=y(),{submit:n,formState:l}=useFormContext(),u=!r.isTransitioning&&!r.isSubmitting,w=async g=>{g?.preventDefault(),u&&await n(g);},m={isLastStep:t.isLastStep,canGoNext:u,isSubmitting:l.isSubmitting||r.isSubmitting,onSubmit:w,className:i,currentStep:f,stepData:l.values||{},allData:t.allData,context:t};return jsx(ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:s.renderConfig?.nextButtonRenderer,props:m,...e})}function xe({className:i,...e}){let{context:t,goPrevious:r,workflowState:s,workflowConfig:f,currentStep:n}=y(),{formState:l}=useFormContext(),u=t.currentStepIndex>0&&!s.isTransitioning&&!s.isSubmitting,m={canGoPrevious:u,onPrevious:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:n,stepData:l.values||{},allData:t.allData,context:t};return jsx(ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:f.renderConfig?.previousButtonRenderer,props:m,...e})}function Re({className:i,...e}){let{currentStep:t,skipStep:r,workflowState:s,workflowConfig:f,context:n}=y(),{formState:l}=useFormContext(),u=!!t?.allowSkip&&!s.isTransitioning&&!s.isSubmitting,m={canSkip:u,onSkip:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:t,stepData:l.values||{},allData:n.allData,context:n};return jsx(ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:f.renderConfig?.skipButtonRenderer,props:m,...e})}function Te({onStepClick:i,className:e,...t}){let{workflowConfig:r,workflowState:s,goToStep:f}=y(),n=u=>{i?i(u):f(u);},l={steps:r.steps,currentStepIndex:s.currentStepIndex,visitedSteps:s.visitedSteps,onStepClick:n,className:e};return jsx(ComponentRendererWrapper,{name:"WorkflowStepper",renderer:r.renderConfig?.stepperRenderer,props:l,...t})}
1
+ import {ril,IdGenerator,normalizeToArray,deepClone,ensureUnique,ComponentRendererWrapper}from'@rilaykit/core';export*from'@rilaykit/core';import {form,FormProvider,FormBody,useFormContext}from'@rilaykit/forms';export{form}from'@rilaykit/forms';import*as O from'@noble/ed25519';import {createContext,useReducer,useRef,useMemo,useEffect,useCallback,useContext,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var X=1751361139160,Y="8fdb6a454550326d331c3b3d1d1f8c707a371bdb6c7ea72a0a1e4ea6f1822620",p=class p{static async setLicenseKey(e){p.licenseKey=e||"",p.licenseKey?p.licenseResult=await p.validateLicense():p.licenseResult={valid:false,error:"MISSING"},p.isInitialized=true;}static async validateLicense(){if(!p.licenseKey)return {valid:false,error:"MISSING"};try{if(!p.licenseKey.startsWith("ril_"))return {valid:!1,error:"FORMAT_INVALID"};let e=p.licenseKey.slice(4),r=p.base64ToString(e).split(".");if(r.length!==3)return {valid:!1,error:"FORMAT_INVALID"};let[s,f,n]=r,l=`${s}.${f}`,u=new TextEncoder().encode(l),w=n.match(/.{2}/g);if(!w)return {valid:!1,error:"INVALID"};let m=new Uint8Array(w.map(b=>Number.parseInt(b,16))),g=p.hexToBytes(Y);if(!await O.verify(m,u,g))return {valid:!1,error:"SIGNATURE_INVALID"};let x=p.base64ToString(f.replace(/-/g,"+").replace(/_/g,"/")),o=JSON.parse(x),d=Math.floor(Date.now()/1e3);return o.e<d?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:X>o.e*1e3?{valid:!1,error:"EXPIRED",data:p.decompressPayload(o)}:o.p===void 0||!o.c||!o.i||!o.e||!o.t?{valid:!1,error:"INVALID"}:{valid:!0,data:p.decompressPayload(o)}}catch{return {valid:false,error:"INVALID"}}}static decompressPayload(e){return {plan:{0:"ARCHITECT",1:"FOUNDRY"}[e.p]||"ARCHITECT",company:e.c,customerId:e.i.toString(),expiry:e.e*1e3,iat:e.t*1e3}}static hexToBytes(e){let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=Number.parseInt(e.substring(r,r+2),16);return t}static base64ToString(e){if(typeof atob<"u")return atob(e);if(typeof Buffer<"u")return Buffer.from(e,"base64").toString();let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="",s=0,f=e.replace(/[^A-Za-z0-9+/]/g,"");for(;s<f.length;){let n=t.indexOf(f.charAt(s++)),l=t.indexOf(f.charAt(s++)),u=t.indexOf(f.charAt(s++)),w=t.indexOf(f.charAt(s++)),m=n<<18|l<<12|u<<6|w;r+=String.fromCharCode(m>>16&255),u!==64&&(r+=String.fromCharCode(m>>8&255)),w!==64&&(r+=String.fromCharCode(m&255));}return r}static getLicenseResult(){return p.isInitialized?p.licenseResult?p.licenseResult:{valid:false,error:"MISSING"}:{valid:false,error:"MISSING"}}static shouldDisplayWatermark(){return typeof window>"u"?false:!p.getLicenseResult().valid}static getWatermarkMessage(){let e=p.getLicenseResult();return {MISSING:"Rilay Workflow - For Trial Use Only",EXPIRED:"Rilay Workflow - License Expired",INVALID:"Rilay Workflow - Invalid License",FORMAT_INVALID:"Rilay Workflow - Invalid License Format",SIGNATURE_INVALID:"Rilay Workflow - Invalid License Signature"}[e.error||"MISSING"]||""}static logLicenseStatus(){let e=p.getLicenseResult();if(e.valid)return;let r={MISSING:"\u{1F527} Rilay Workflow - Trial Mode. Purchase a license at https://rilay.io/pricing",EXPIRED:"\u26A0\uFE0F Rilay Workflow - License Expired. Please renew your license.",INVALID:"\u274C Rilay Workflow - Invalid License. Please check your license key.",FORMAT_INVALID:"\u274C Rilay Workflow - Invalid License Format. Please check your license key.",SIGNATURE_INVALID:"\u274C Rilay Workflow - Invalid License Signature. Please check your license key."}[e.error||"MISSING"];console.warn(`%c${r}`,"color: #f59e0b; font-weight: bold;");}static async getLicenseInfo(){let e=p.getLicenseResult();return !e.valid||!e.data?{}:{plan:e.data.plan,company:e.data.company,expiryDate:new Date(e.data.expiry).toLocaleDateString()}}};p.licenseKey="",p.licenseResult=null,p.isInitialized=false;var h=p;var I=class i{constructor(e,t,r,s){this.steps=[];this.plugins=[];this.idGenerator=new IdGenerator;this.config=e,this.workflowId=t,this.workflowName=r,this.workflowDescription=s,h.logLicenseStatus();}static create(e,t,r,s){return new i(e,t,r,s)}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,onAfterValidation:e.onAfterValidation}}addStep(e){let t=normalizeToArray(e);for(let r of t){let s=this.createStepFromDefinition(r);this.steps.push(s);}return this}configure(e){return e.analytics&&(this.analytics=e.analytics),this}use(e){this.validatePluginDependencies(e),this.plugins.push(e);try{e.install(this);}catch(t){throw new Error(`Failed to install plugin "${e.name}": ${t instanceof Error?t.message:String(t)}`)}return this}validatePluginDependencies(e){if(!e.dependencies)return;let t=e.dependencies.filter(r=>!this.plugins.some(s=>s.name===r));if(t.length>0)throw new Error(`Plugin "${e.name}" requires missing dependencies: ${t.join(", ")}`)}removePlugin(e){return this.plugins=this.plugins.filter(t=>t.name!==e),this}updateStep(e,t){let r=this.steps.findIndex(s=>s.id===e);if(r===-1)throw new Error(`Step with ID "${e}" not found`);return this.steps[r]={...this.steps[r],...t},this}removeStep(e){return this.steps=this.steps.filter(t=>t.id!==e),this}getStep(e){return this.steps.find(t=>t.id===e)}getSteps(){return [...this.steps]}clearSteps(){return this.steps=[],this.idGenerator.reset(),this}clone(e,t){let r=new i(this.config,e||`${this.workflowId}-clone`,t||this.workflowName);return r.steps=deepClone(this.steps),r.analytics=this.analytics?deepClone(this.analytics):void 0,r.plugins=[...this.plugins],r}validate(){let e=[];this.steps.length===0&&e.push("Workflow must have at least one step");let t=this.steps.map(r=>r.id);try{ensureUnique(t,"step");}catch(r){e.push(r instanceof Error?r.message:String(r));}for(let r of this.plugins)if(r.dependencies){let s=r.dependencies.filter(f=>!this.plugins.some(n=>n.name===f));s.length>0&&e.push(`Plugin "${r.name}" requires missing dependencies: ${s.join(", ")}`);}return e}getStats(){let e=this.steps.reduce((r,s)=>r+s.formConfig.allFields.length,0),t=this.steps.map(r=>r.formConfig.allFields.length);return {totalSteps:this.steps.length,totalFields:e,averageFieldsPerStep:this.steps.length>0?e/this.steps.length:0,maxFieldsInStep:t.length>0?Math.max(...t):0,minFieldsInStep:t.length>0?Math.min(...t):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,plugins:this.plugins,renderConfig:this.config.getWorkflowRenderConfig()}}toJSON(){return {id:this.workflowId,name:this.workflowName,description:this.workflowDescription,steps:this.steps,analytics:this.analytics,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.plugins=e.plugins||[],this}};function re(i,e,t,r){return I.create(i,e,t,r)}ril.prototype.flow=function(i,e,t){return I.create(this,i,e,t)};function ae(i,e){switch(e.type){case "SET_CURRENT_STEP":return {...i,currentStepIndex:e.stepIndex};case "SET_STEP_DATA":{let t=e.stepId;return {...i,stepData:e.data,allData:{...i.allData,[t]:e.data}}}case "SET_ALL_DATA":return {...i,allData:e.data};case "SET_FIELD_VALUE":{let t=e.stepId,r={...i.stepData,[e.fieldId]:e.value};return {...i,stepData:r,allData:{...i.allData,[t]:r}}}case "SET_SUBMITTING":return {...i,isSubmitting:e.isSubmitting};case "SET_TRANSITIONING":return {...i,isTransitioning:e.isTransitioning};case "MARK_STEP_VISITED":return {...i,visitedSteps:new Set([...i.visitedSteps,e.stepId])};case "RESET_WORKFLOW":return {currentStepIndex:0,allData:{},stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false};default:return i}}var $=createContext(null);function N({children:i,workflowConfig:e,defaultValues:t={},onStepChange:r,onWorkflowComplete:s,className:f}){let[n,l]=useReducer(ae,{currentStepIndex:0,allData:t,stepData:{},visitedSteps:new Set,isSubmitting:false,isTransitioning:false}),u=useRef(Date.now()),w=useRef(new Map),m=useRef(false),g=useRef(null),E=useRef(r),x=useRef(s);E.current=r,x.current=s;let o=useMemo(()=>e,[e]),d=useMemo(()=>({workflowId:o.id,currentStepIndex:n.currentStepIndex,totalSteps:o.steps.length,allData:n.allData,stepData:n.stepData,isFirstStep:n.currentStepIndex===0,isLastStep:n.currentStepIndex===o.steps.length-1,visitedSteps:n.visitedSteps}),[o.id,n.currentStepIndex,o.steps.length,n.allData,n.stepData,n.visitedSteps]);useEffect(()=>{o.analytics?.onWorkflowStart&&!m.current&&(m.current=true,o.analytics.onWorkflowStart(o.id,d));},[o.id,o.analytics,d]),useEffect(()=>{let a=o.steps[n.currentStepIndex];if(a&&g.current!==a.id){if(g.current&&o.analytics?.onStepComplete){let c=w.current.get(g.current);c&&o.analytics.onStepComplete(g.current,Date.now()-c,n.stepData,d);}g.current=a.id,w.current.set(a.id,Date.now()),o.analytics?.onStepStart&&o.analytics.onStepStart(a.id,Date.now(),d);}},[n.currentStepIndex,o.steps,o.analytics,d]);let S=useMemo(()=>o.steps[n.currentStepIndex],[o.steps,n.currentStepIndex]),b=useMemo(()=>S?.formConfig,[S]),D=useCallback(async a=>{if(a<0||a>=o.steps.length)return false;l({type:"SET_TRANSITIONING",isTransitioning:true});try{return E.current&&E.current(n.currentStepIndex,a,d),l({type:"SET_CURRENT_STEP",stepIndex:a}),l({type:"MARK_STEP_VISITED",stepIndex:a,stepId:o.steps[a].id}),!0}catch(c){return console.error("Step transition failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}finally{l({type:"SET_TRANSITIONING",isTransitioning:false});}},[o.steps,n.currentStepIndex,d,o.analytics]),L=useCallback(()=>({setStepData:(a,c)=>{l({type:"SET_STEP_DATA",data:c,stepId:a});},setStepFields:(a,c)=>{let P={...n.allData[a]||{},...c};l({type:"SET_STEP_DATA",data:P,stepId:a});},getStepData:a=>n.allData[a]||{},setNextStepField:(a,c)=>{let R=n.currentStepIndex+1;if(R<o.steps.length){let P=o.steps[R].id,J={...n.allData[P]||{},[a]:c};l({type:"SET_STEP_DATA",data:J,stepId:P});}},setNextStepFields:a=>{let c=n.currentStepIndex+1;if(c<o.steps.length){let R=o.steps[c].id,_={...n.allData[R]||{},...a};l({type:"SET_STEP_DATA",data:_,stepId:R});}},getAllData:()=>({...n.allData}),getSteps:()=>[...o.steps]}),[n.allData,n.currentStepIndex,o.steps]),A=useCallback((a,c)=>{l({type:"SET_FIELD_VALUE",fieldId:a,value:c,stepId:S?.id||""});},[S?.id]),F=useCallback(a=>{l({type:"SET_STEP_DATA",data:a,stepId:S?.id||""});},[S?.id]),W=useCallback(async()=>{l({type:"SET_SUBMITTING",isSubmitting:true});try{if(x.current&&await x.current(n.allData),o.analytics?.onWorkflowComplete){let a=Date.now()-u.current;o.analytics.onWorkflowComplete(o.id,a,n.allData);}}catch(a){throw console.error("Workflow submission failed:",a),o.analytics?.onError&&o.analytics.onError(a,d),a}finally{l({type:"SET_SUBMITTING",isSubmitting:false});}},[n.allData,x,o.analytics,d]),v=useCallback(async()=>{if(S?.onAfterValidation)try{let c=L();await S.onAfterValidation(n.stepData,c,d);}catch(c){return console.error("onAfterValidation failed:",c),o.analytics?.onError&&o.analytics.onError(c,d),false}let a=n.currentStepIndex+1;return a>=o.steps.length?(await W(),true):D(a)},[S,L,n.stepData,d,o.analytics,o.steps.length,D,n.currentStepIndex,W]),B=useCallback(async()=>D(n.currentStepIndex-1),[n.currentStepIndex,D]),V=useCallback(async()=>S?.allowSkip?(o.analytics?.onStepSkip&&o.analytics.onStepSkip(S.id,"user_skip",d),d.isLastStep?(await W(),true):v()):false,[S,o.analytics,d,v,W]),M=useCallback(()=>{l({type:"RESET_WORKFLOW"});},[]),z=useMemo(()=>({workflowState:n,workflowConfig:o,currentStep:S,context:d,formConfig:b,goToStep:D,goNext:v,goPrevious:B,skipStep:V,setValue:A,setStepData:F,submitWorkflow:W,resetWorkflow:M}),[n,o,S,d,b,D,v,B,V,A,F,W,M]),q=useCallback(async()=>{await v();},[v]);return jsx($.Provider,{value:z,children:jsx(FormProvider,{formConfig:S?.formConfig,defaultValues:n?.allData[S?.id]||{},onFieldChange:A,"data-workflow-id":o.id,className:f,onSubmit:q,children:i})})}function y(){let i=useContext($);if(!i)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return i}function ce({children:i,workflowConfig:e,...t}){let[r,s]=useState(false),f=h.shouldDisplayWatermark(),n=h.getWatermarkMessage(),l=useMemo(()=>e instanceof I?e.build():e,[e]);return useEffect(()=>{s(true);},[]),jsxs("div",{style:{position:"relative"},children:[jsx(N,{...t,workflowConfig:l,children:i}),r&&f&&jsx("div",{style:{position:"absolute",top:"10px",right:"10px",background:"rgba(0, 0, 0, 0.8)",color:"white",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",fontFamily:"monospace",zIndex:1e3,pointerEvents:"none",opacity:.7},children:n})]})}function Se(){let{currentStep:i}=y();if(!i)return null;let{formConfig:e,renderer:t}=i;return e?t?t(i):jsx(FormBody,{}):null}function ye({className:i,...e}){let{context:t,workflowState:r,workflowConfig:s,currentStep:f}=y(),{submit:n,formState:l}=useFormContext(),u=!r.isTransitioning&&!r.isSubmitting,w=async g=>{g?.preventDefault(),u&&await n(g);},m={isLastStep:t.isLastStep,canGoNext:u,isSubmitting:l.isSubmitting||r.isSubmitting,onSubmit:w,className:i,currentStep:f,stepData:l.values||{},allData:t.allData,context:t};return jsx(ComponentRendererWrapper,{name:"WorkflowNextButton",renderer:s.renderConfig?.nextButtonRenderer,props:m,...e})}function xe({className:i,...e}){let{context:t,goPrevious:r,workflowState:s,workflowConfig:f,currentStep:n}=y(),{formState:l}=useFormContext(),u=t.currentStepIndex>0&&!s.isTransitioning&&!s.isSubmitting,m={canGoPrevious:u,onPrevious:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:n,stepData:l.values||{},allData:t.allData,context:t};return jsx(ComponentRendererWrapper,{name:"WorkflowPreviousButton",renderer:f.renderConfig?.previousButtonRenderer,props:m,...e})}function Re({className:i,...e}){let{currentStep:t,skipStep:r,workflowState:s,workflowConfig:f,context:n}=y(),{formState:l}=useFormContext(),u=!!t?.allowSkip&&!s.isTransitioning&&!s.isSubmitting,m={canSkip:u,onSkip:async g=>{g?.preventDefault(),u&&await r();},className:i,currentStep:t,stepData:l.values||{},allData:n.allData,context:n};return jsx(ComponentRendererWrapper,{name:"WorkflowSkipButton",renderer:f.renderConfig?.skipButtonRenderer,props:m,...e})}function Te({onStepClick:i,className:e,...t}){let{workflowConfig:r,workflowState:s,goToStep:f}=y(),n=u=>{i?i(u):f(u);},l={steps:r.steps,currentStepIndex:s.currentStepIndex,visitedSteps:s.visitedSteps,onStepClick:n,className:e};return jsx(ComponentRendererWrapper,{name:"WorkflowStepper",renderer:r.renderConfig?.stepperRenderer,props:l,...t})}
2
2
  export{h as RilayLicenseManager,ce as Workflow,Se as WorkflowBody,ye as WorkflowNextButton,xe as WorkflowPreviousButton,N as WorkflowProvider,Re as WorkflowSkipButton,Te as WorkflowStepper,re as createFlow,I as flow,y as useWorkflowContext};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rilaykit/workflow",
3
- "version": "5.2.0",
3
+ "version": "5.2.1",
4
4
  "description": "Commercial workflow and multi-step form utilities for RilayKit - License required for all use",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -26,8 +26,8 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@noble/ed25519": "^1.7.1",
29
- "@rilaykit/core": "5.2.0",
30
- "@rilaykit/forms": "5.2.0"
29
+ "@rilaykit/core": "5.2.1",
30
+ "@rilaykit/forms": "5.2.1"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": ">=18.0.0",