@rxova/journey-react 0.6.4 → 0.7.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/README.md CHANGED
@@ -5,9 +5,14 @@ Typed React bindings for Rxova Journey.
5
5
  ## Install
6
6
 
7
7
  ```bash
8
+ pnpm add @rxova/journey-react
9
+ yarn add @rxova/journey-react
8
10
  npm i @rxova/journey-react
11
+ bun add @rxova/journey-react
9
12
  ```
10
13
 
14
+ Works in Bun-based SPAs as long as your app runtime supports React 18+.
15
+
11
16
  ## API Style
12
17
 
13
18
  `@rxova/journey-react` is bindings-first:
@@ -16,6 +21,8 @@ npm i @rxova/journey-react
16
21
  - `Provider`
17
22
  - `StepRenderer`
18
23
  - `useJourneyApi`
24
+ - `useJourneyEvent`
25
+ - `useJourneySelector`
19
26
  - `useJourneySnapshot`
20
27
  - `useJourneyMachine`
21
28
 
@@ -102,6 +109,8 @@ bindings = createJourneyBindings(journey);
102
109
  ## Hooks
103
110
 
104
111
  - `useJourneySnapshot()` subscribes to the machine and rerenders on changes.
112
+ - `useJourneyEvent(listener)` subscribes to typed lifecycle events.
113
+ - `useJourneySelector(selector, equalityFn?)` subscribes to a selected slice and rerenders only when that selected value changes.
105
114
  - `useJourneyApi()` returns typed commands.
106
115
  - `useJourneyMachine()` returns the underlying core machine instance.
107
116
 
@@ -125,17 +134,34 @@ Imperative jump is available through `send`:
125
134
  await api.send({ type: "goToStepById", stepId: "review" });
126
135
  ```
127
136
 
137
+ `send()` and convenience helpers resolve with `result.error` on guard/effect failure instead of rejecting, so `void api.goToNextStep()` will not create an unhandled rejection if transition logic fails.
138
+
139
+ `updateContext()` is immediate, but it follows core async timing rules: it does not retroactively change a transition already in `evaluating-when` or `running-effect`, and a running effect can later commit over that update. If the change must affect the current transition, apply it before `send(...)` or await the transition first.
140
+
128
141
  ## Provider Behavior
129
142
 
130
143
  - `<Provider />` creates an internal core machine from the bound journey.
131
144
  - `<Provider journey={...} />` lets you pass a different journey definition at runtime.
132
- - Internal machine is preserved across `journey` prop changes by default.
145
+ - Internal machine is preserved across `journey` and `persistence` prop changes by default.
133
146
  - Set `resetOnJourneyChange` to rebuild internal machine when `journey` identity changes.
147
+ - Set `resetOnPersistenceChange` to rebuild internal machine when `persistence` identity changes.
134
148
  - `<Provider machine={externalMachine} />` uses your machine directly.
135
149
  - `persistence` applies only when Provider owns the internal machine.
150
+ - Internal Provider-owned machines default to completing on `goToNextStep()` when the current step declares no next transition.
151
+ - Set `completeOnNoNextStep={false}` to opt out.
152
+ - `onStart(event)` wraps `machine.subscribeStart(...)`.
153
+ - `onComplete(event)` wraps `machine.subscribeComplete(...)`.
154
+ - `onTerminate(event)` wraps `machine.subscribeTerminate(...)`.
155
+ - All three callback props work with internal and external machines.
156
+ - `onStart` replays startup on mount, matching core `journey.start` behavior.
157
+ - `onComplete` and `onTerminate` fire only for emitted terminal lifecycle events.
136
158
 
137
159
  ```tsx
138
- <bindings.Provider journey={dynamicJourney} resetOnJourneyChange>
160
+ <bindings.Provider
161
+ journey={dynamicJourney}
162
+ resetOnJourneyChange
163
+ onStart={() => console.log("started!")}
164
+ >
139
165
  <bindings.StepRenderer />
140
166
  </bindings.Provider>
141
167
  ```
@@ -4,5 +4,5 @@ type ProviderFactoryProps<TContext, TStepId extends string, TCustomEvent extends
4
4
  JourneyContext: React.Context<JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta> | null>;
5
5
  boundJourney: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
6
6
  };
7
- export declare const createProvider: <TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown>({ JourneyContext, boundJourney }: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => ({ journey, machine, persistence, resetOnJourneyChange, children }: JourneyBindingsProviderProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const createProvider: <TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown>({ JourneyContext, boundJourney }: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => ({ journey, machine, persistence, completeOnNoNextStep, resetOnJourneyChange, resetOnPersistenceChange, onStart, onComplete, onTerminate, children }: JourneyBindingsProviderProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => import("react/jsx-runtime").JSX.Element;
8
8
  export {};
@@ -1,17 +1,16 @@
1
- import type { JourneyPayloadFor, JourneySendEvent } from "@rxova/journey-core";
1
+ import type { JourneyPayloadFor, JourneySendEvent, JourneySendResult } from "@rxova/journey-core";
2
2
  import type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from "../types";
3
3
  type UseJourneyStore<TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown> = (hookName?: string) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
4
4
  export declare const createUseJourneyApi: <TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown>(useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => () => {
5
- send: (event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>) => Promise<void>;
6
- goToNextStep: () => Promise<void>;
7
- terminateJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "terminateJourney">) => Promise<void>;
8
- completeJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "completeJourney">) => Promise<void>;
9
- goToPreviousStep: (steps?: number) => Promise<void>;
10
- goToLastVisitedStep: () => Promise<void>;
5
+ send: (event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
6
+ goToNextStep: () => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
7
+ terminateJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "terminateJourney">) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
8
+ completeJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "completeJourney">) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
9
+ goToPreviousStep: (steps?: number) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
10
+ goToLastVisitedStep: () => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
11
11
  clearStepError: (stepId?: TStepId) => void;
12
12
  updateContext: (updater: (context: TContext) => TContext) => void;
13
13
  updateStepMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => void;
14
- updateComponentMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => void;
15
14
  resetJourney: () => void;
16
15
  };
17
16
  export {};
@@ -0,0 +1,5 @@
1
+ import type { JourneyObservationEvent } from "@rxova/journey-core";
2
+ import type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from "../types";
3
+ type UseJourneyStore<TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown> = (hookName?: string) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
4
+ export declare const createUseJourneyEvent: <TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown>(useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => (listener: (event: JourneyObservationEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>) => void) => void;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { JourneyEqualityFn, JourneySelector } from "@rxova/journey-core";
2
+ import type { JourneyReactEventPayloadMap, JourneyStoreValue } from "../types";
3
+ type UseJourneyStore<TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown> = (hookName?: string) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
4
+ export declare const createUseJourneySelector: <TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown>(useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => <TSelected>(selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>, equalityFn?: JourneyEqualityFn<TSelected>) => TSelected;
5
+ export {};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var A=Object.create;var E=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var Y=(t,e)=>{for(var n in e)E(t,n,{get:e[n],enumerable:!0})},P=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of D(e))!j.call(t,o)&&o!==n&&E(t,o,{get:()=>e[o],enumerable:!(s=B(e,o))||s.enumerable});return t};var m=(t,e,n)=>(n=t!=null?A(F(t)):{},P(e||!t||!t.__esModule?E(n,"default",{value:t,enumerable:!0}):n,t)),_=t=>P(E({},"__esModule",{value:!0}),t);var O={};Y(O,{JOURNEY_ASYNC_PHASE:()=>a.JOURNEY_ASYNC_PHASE,JOURNEY_EVENT:()=>a.JOURNEY_EVENT,JOURNEY_STATUS:()=>a.JOURNEY_STATUS,JOURNEY_WILDCARD:()=>a.JOURNEY_WILDCARD,createJourneyBindings:()=>V,createTransitions:()=>a.createTransitions,tx:()=>a.tx});module.exports=_(O);var C=m(require("react"),1);var i=m(require("react"),1),R=require("@rxova/journey-core"),f=require("react/jsx-runtime"),g=({JourneyContext:t,boundJourney:e})=>({journey:s,machine:o,persistence:u,resetOnJourneyChange:d=!1,children:v})=>{let y=s??e,T=i.default.useRef(null),c=i.default.useRef(y),l=i.default.useRef(u),r=d&&c.current!==y,J=l.current!==u;if(!o&&(!T.current||r||J)){let N=u?{persistence:u}:void 0;T.current=(0,R.createJourneyMachine)(y,N),c.current=y,l.current=u}let M=o??T.current,x=o?y:c.current,b=i.default.useMemo(()=>({machine:M,journey:x}),[M,x]);return(0,f.jsx)(t.Provider,{value:b,children:v})};var S=require("react/jsx-runtime"),I=({useJourneySnapshot:t,useJourneyStore:e})=>({fallback:s=null})=>{let o=t(),{journey:u}=e("StepRenderer"),d=u.steps[o.currentStepId]?.component;return d?(0,S.jsx)(d,{}):(0,S.jsx)(S.Fragment,{children:s})};var p=m(require("react"),1),h=t=>()=>{let e=t("useJourneyApi").machine,n=p.default.useCallback(async r=>{await e.send(r)},[e]),s=p.default.useCallback(async()=>{await e.goToNextStep()},[e]),o=p.default.useCallback(async r=>{await e.terminateJourney(r)},[e]),u=p.default.useCallback(async r=>{await e.completeJourney(r)},[e]),d=p.default.useCallback(async r=>{await e.goToPreviousStep(r)},[e]),v=p.default.useCallback(async()=>{await e.goToLastVisitedStep()},[e]),y=p.default.useCallback(r=>{e.updateContext(r)},[e]),T=p.default.useCallback((r,J)=>{e.updateStepMetadata(r,J)},[e]),c=p.default.useCallback(r=>{e.clearStepError(r)},[e]),l=p.default.useCallback(()=>{e.resetMachine()},[e]);return{send:n,goToNextStep:s,terminateJourney:o,completeJourney:u,goToPreviousStep:d,goToLastVisitedStep:v,clearStepError:c,updateContext:y,updateStepMetadata:T,updateComponentMetadata:T,resetJourney:l}};var k=t=>()=>t("useJourneyMachine").machine;var w=m(require("react"),1),U=t=>()=>{let{machine:e}=t("useJourneySnapshot");return w.default.useSyncExternalStore(e.subscribe,e.getSnapshot,e.getSnapshot)};var V=t=>{let e=C.default.createContext(null),n=(y="hook")=>{let T=C.default.useContext(e);if(!T)throw new Error(`${y} must be used within bindings.Provider.`);return T},s=U(n),o=k(n),u=h(n),d=g({JourneyContext:e,boundJourney:t}),v=I({useJourneySnapshot:s,useJourneyStore:n});return{Provider:d,StepRenderer:v,useJourneyApi:u,useJourneyMachine:o,useJourneySnapshot:s}};var a=require("@rxova/journey-core");0&&(module.exports={JOURNEY_ASYNC_PHASE,JOURNEY_EVENT,JOURNEY_STATUS,JOURNEY_WILDCARD,createJourneyBindings,createTransitions,tx});
1
+ "use strict";"use client";var ne=Object.create;var P=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ae=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var se=(o,e)=>{for(var t in e)P(o,t,{get:e[t],enumerable:!0})},_=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of re(e))!ue.call(o,n)&&n!==t&&P(o,n,{get:()=>e[n],enumerable:!(r=oe(e,n))||r.enumerable});return o};var E=(o,e,t)=>(t=o!=null?ne(ae(o)):{},_(e||!o||!o.__esModule?P(t,"default",{value:o,enumerable:!0}):t,o)),de=o=>_(P({},"__esModule",{value:!0}),o);var Te={};se(Te,{JOURNEY_ASYNC_PHASE:()=>p.JOURNEY_ASYNC_PHASE,JOURNEY_EVENT:()=>p.JOURNEY_EVENT,JOURNEY_STATUS:()=>p.JOURNEY_STATUS,JOURNEY_WILDCARD:()=>p.JOURNEY_WILDCARD,createJourneyBindings:()=>Z,createTransitions:()=>p.createTransitions,tx:()=>p.tx});module.exports=de(Te);var F=E(require("react"),1);var d=E(require("react"),1),w=require("@rxova/journey-core"),H=require("react/jsx-runtime"),pe=typeof window>"u"?d.default.useEffect:d.default.useLayoutEffect,O=({JourneyContext:o,boundJourney:e})=>({journey:r,machine:n,persistence:a,completeOnNoNextStep:u,resetOnJourneyChange:J=!1,resetOnPersistenceChange:T=!1,onStart:s,onComplete:y,onTerminate:i,children:N})=>{let v=r??e,S=d.default.useRef(null),x=d.default.useRef(v),I=d.default.useRef(a),g=d.default.useRef(u),j=d.default.useRef(s),A=d.default.useRef(y),q=d.default.useRef(i),[,ee]=d.default.useReducer(c=>c+1,0),h=s!==void 0,b=y!==void 0,k=i!==void 0;if(j.current=s,A.current=y,q.current=i,!n&&!S.current){let c=a!==void 0||u!==void 0?{...a!==void 0?{persistence:a}:{},...u!==void 0?{completeOnNoNextStep:u}:{}}:void 0;S.current=(0,w.createJourneyMachine)(v,c),x.current=v,I.current=a,g.current=u}let B=!n&&J&&x.current!==v,D=!n&&T&&I.current!==a,L=!n&&g.current!==u;pe(()=>{if(n||!B&&!D&&!L)return;let c=S.current,U=a!==void 0||u!==void 0?{...a!==void 0?{persistence:a}:{},...u!==void 0?{completeOnNoNextStep:u}:{}}:void 0,f=(0,w.createJourneyMachine)(v,U);S.current=f,x.current=v,I.current=a,g.current=u,c&&c!==f&&c.dispose(),ee()},[u,v,n,a,B,D,L]);let l=n??S.current,Y=n?v:x.current,te=d.default.useMemo(()=>({machine:l,journey:Y}),[l,Y]);return d.default.useEffect(()=>{if(!h&&!b&&!k)return;let c=h?l.subscribeStart(m=>{j.current?.(m)}):void 0,U=b?l.subscribeComplete(m=>{A.current?.(m)}):void 0,f=k?l.subscribeTerminate(m=>{q.current?.(m)}):void 0;return()=>{c?.(),U?.(),f?.()}},[h,b,k,l]),d.default.useEffect(()=>()=>{n||!S.current||(S.current.dispose(),S.current=null)},[n]),(0,H.jsx)(o.Provider,{value:te,children:N})};var M=require("react/jsx-runtime"),W=({useJourneySnapshot:o,useJourneyStore:e})=>({fallback:r=null})=>{let n=o(),{journey:a}=e("StepRenderer"),u=a.steps[n.currentStepId]?.component;return u?(0,M.jsx)(u,{},n.currentStepId):(0,M.jsx)(M.Fragment,{children:r})};var $=E(require("react"),1),z=o=>()=>{let{machine:e}=o("useJourneyApi");return $.default.useMemo(()=>({send:async t=>e.send(t),goToNextStep:async()=>e.goToNextStep(),terminateJourney:async t=>e.terminateJourney(t),completeJourney:async t=>e.completeJourney(t),goToPreviousStep:async t=>e.goToPreviousStep(t),goToLastVisitedStep:async()=>e.goToLastVisitedStep(),clearStepError:t=>{e.clearStepError(t)},updateContext:t=>{e.updateContext(t)},updateStepMetadata:(t,r)=>{e.updateStepMetadata(t,r)},resetJourney:()=>{e.resetMachine()}}),[e])};var V=E(require("react"),1),G=o=>e=>{let{machine:t}=o("useJourneyEvent"),r=V.default.useRef(e);r.current=e,V.default.useEffect(()=>t.subscribeEvent(n=>{r.current(n)}),[t])};var K=o=>()=>o("useJourneyMachine").machine;var C=E(require("react"),1),Q=o=>(e,t)=>{let{machine:r}=o("useJourneySelector"),n=t??Object.is,a=C.default.useRef(null),u=C.default.useCallback(()=>{let T=r.getSnapshot(),s=a.current;if(s&&s.selector===e&&s.isEqual===n&&Object.is(s.snapshot,T))return s.selected;let y=e(T);return s&&s.selector===e&&s.isEqual===n&&s.isEqual(s.selected,y)?(a.current={snapshot:T,selected:s.selected,selector:e,isEqual:n},s.selected):(a.current={snapshot:T,selected:y,selector:e,isEqual:n},y)},[r,e,n]),J=C.default.useCallback(T=>r.subscribeSelector(e,()=>{T()},n),[r,e,n]);return C.default.useSyncExternalStore(J,u,u)};var R=E(require("react"),1),X=o=>()=>{let{machine:e}=o("useJourneySnapshot"),t=R.default.useCallback(()=>e.getSnapshot(),[e]),r=R.default.useCallback(n=>e.subscribe(n),[e]);return R.default.useSyncExternalStore(r,t,t)};var Z=o=>{let e=F.default.createContext(null),t=(y="hook")=>{let i=F.default.useContext(e);if(!i)throw new Error(`${y} must be used within bindings.Provider.`);return i},r=X(t),n=Q(t),a=K(t),u=G(t),J=z(t),T=O({JourneyContext:e,boundJourney:o}),s=W({useJourneySnapshot:r,useJourneyStore:t});return{Provider:T,StepRenderer:s,useJourneyApi:J,useJourneyEvent:u,useJourneyMachine:a,useJourneySelector:n,useJourneySnapshot:r}};var p=require("@rxova/journey-core");0&&(module.exports={JOURNEY_ASYNC_PHASE,JOURNEY_EVENT,JOURNEY_STATUS,JOURNEY_WILDCARD,createJourneyBindings,createTransitions,tx});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/bindings/index.tsx", "../src/bindings/Provider.tsx", "../src/bindings/StepRenderer.tsx", "../src/bindings/useJourneyApi.ts", "../src/bindings/useJourneyMachine.ts", "../src/bindings/useJourneySnapshot.ts"],
4
- "sourcesContent": ["// Mark this entry point as a Next.js App Router client module so it can be used in client components.\n\"use client\";\n\nexport { createJourneyBindings } from \"./bindings\";\nexport {\n createTransitions,\n tx,\n JOURNEY_STATUS,\n JOURNEY_EVENT,\n JOURNEY_ASYNC_PHASE,\n JOURNEY_WILDCARD\n} from \"@rxova/journey-core\";\nexport type { JourneyDefinition } from \"@rxova/journey-core\";\nexport type {\n JourneyApi,\n JourneyBindings,\n JourneyBindingsProviderProps,\n JourneyEventType,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyReactStep,\n JourneyStoreValue\n} from \"./types\";\n", "import React from \"react\";\n\nimport type {\n JourneyBindings,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\nimport { createProvider } from \"./Provider\";\nimport { createStepRenderer } from \"./StepRenderer\";\nimport { createUseJourneyApi } from \"./useJourneyApi\";\nimport { createUseJourneyMachine } from \"./useJourneyMachine\";\nimport { createUseJourneySnapshot } from \"./useJourneySnapshot\";\n\n/**\n * Creates a typed React integration bundle (Provider, StepRenderer, and hooks)\n * bound to a specific journey definition.\n */\nexport const createJourneyBindings = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n boundJourney: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n): JourneyBindings<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta> => {\n const JourneyContext = React.createContext<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>(null);\n\n const useJourneyStore = (hookName = \"hook\") => {\n const value = React.useContext(JourneyContext);\n if (!value) {\n throw new Error(`${hookName} must be used within bindings.Provider.`);\n }\n return value;\n };\n\n const useJourneySnapshot = createUseJourneySnapshot(useJourneyStore);\n const useJourneyMachine = createUseJourneyMachine(useJourneyStore);\n const useJourneyApi = createUseJourneyApi(useJourneyStore);\n\n const Provider = createProvider({\n JourneyContext,\n boundJourney\n });\n\n const StepRenderer = createStepRenderer({\n useJourneySnapshot,\n useJourneyStore\n });\n\n return {\n Provider,\n StepRenderer,\n useJourneyApi,\n useJourneyMachine,\n useJourneySnapshot\n };\n};\n", "import React from \"react\";\n\nimport { createJourneyMachine } from \"@rxova/journey-core\";\nimport type {\n JourneyBindingsProviderProps,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\n\ntype ProviderFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n JourneyContext: React.Context<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>;\n boundJourney: JourneyReactDefinition<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >;\n};\n\nexport const createProvider = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n JourneyContext,\n boundJourney\n}: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const Provider = ({\n journey,\n machine,\n persistence,\n resetOnJourneyChange = false,\n children\n }: JourneyBindingsProviderProps<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >) => {\n const incomingJourney = journey ?? boundJourney;\n const internalMachineRef = React.useRef<\n | JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>[\"machine\"]\n | null\n >(null);\n const journeyRef = React.useRef(incomingJourney);\n const persistenceRef = React.useRef(persistence);\n\n const shouldResetInternal = resetOnJourneyChange && journeyRef.current !== incomingJourney;\n const shouldResetPersistence = persistenceRef.current !== persistence;\n\n if (\n !machine &&\n (!internalMachineRef.current || shouldResetInternal || shouldResetPersistence)\n ) {\n const options = persistence ? { persistence } : undefined;\n internalMachineRef.current = createJourneyMachine(incomingJourney, options);\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n }\n\n const resolvedMachine = machine ?? internalMachineRef.current!;\n const resolvedJourney = machine ? incomingJourney : journeyRef.current;\n const value = React.useMemo<\n JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n >(\n () => ({\n machine: resolvedMachine,\n journey: resolvedJourney\n }),\n [resolvedMachine, resolvedJourney]\n );\n\n return <JourneyContext.Provider value={value}>{children}</JourneyContext.Provider>;\n };\n\n return Provider;\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype UseJourneySnapshot<\n TContext,\n TStepId extends string,\n TStepMeta = unknown\n> = () => JourneySnapshot<TContext, TStepId, TStepMeta>;\n\ntype StepRendererFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n useJourneySnapshot: UseJourneySnapshot<TContext, TStepId, TStepMeta>;\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n};\n\nexport const createStepRenderer = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n useJourneySnapshot,\n useJourneyStore\n}: StepRendererFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const StepRenderer = ({ fallback = null }: { fallback?: React.ReactNode }) => {\n const snapshot = useJourneySnapshot();\n const { journey } = useJourneyStore(\"StepRenderer\");\n\n const StepComponent = journey.steps[snapshot.currentStepId]?.component;\n\n if (!StepComponent) {\n return <>{fallback}</>;\n }\n\n return <StepComponent />;\n };\n\n return StepRenderer;\n};\n", "import React from \"react\";\n\nimport type { JourneyPayloadFor, JourneySendEvent } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyApi = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n const machine = useJourneyStore(\"useJourneyApi\").machine;\n\n const send = React.useCallback(\n async (\n event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>\n ) => {\n await machine.send(event);\n },\n [machine]\n );\n\n const goToNextStep = React.useCallback(async () => {\n await machine.goToNextStep();\n }, [machine]);\n\n const terminateJourney = React.useCallback(\n async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"terminateJourney\"\n >\n ) => {\n await machine.terminateJourney(payload);\n },\n [machine]\n );\n\n const completeJourney = React.useCallback(\n async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"completeJourney\"\n >\n ) => {\n await machine.completeJourney(payload);\n },\n [machine]\n );\n\n const goToPreviousStep = React.useCallback(\n async (steps?: number) => {\n await machine.goToPreviousStep(steps);\n },\n [machine]\n );\n\n const goToLastVisitedStep = React.useCallback(async () => {\n await machine.goToLastVisitedStep();\n }, [machine]);\n\n const updateContext = React.useCallback(\n (updater: (context: TContext) => TContext) => {\n machine.updateContext(updater);\n },\n [machine]\n );\n\n const updateStepMetadata = React.useCallback(\n (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => {\n machine.updateStepMetadata(stepId, updater);\n },\n [machine]\n );\n\n const clearStepError = React.useCallback(\n (stepId?: TStepId) => {\n machine.clearStepError(stepId);\n },\n [machine]\n );\n\n const resetJourney = React.useCallback(() => {\n machine.resetMachine();\n }, [machine]);\n\n return {\n send,\n goToNextStep,\n terminateJourney,\n completeJourney,\n goToPreviousStep,\n goToLastVisitedStep,\n clearStepError,\n updateContext,\n updateStepMetadata,\n updateComponentMetadata: updateStepMetadata,\n resetJourney\n };\n };\n};\n", "import type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyMachine = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n return useJourneyStore(\"useJourneyMachine\").machine;\n };\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneySnapshot = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (): JourneySnapshot<TContext, TStepId, TStepMeta> => {\n const { machine } = useJourneyStore(\"useJourneySnapshot\");\n return React.useSyncExternalStore(machine.subscribe, machine.getSnapshot, machine.getSnapshot);\n };\n};\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "createJourneyBindings", "__toCommonJS", "import_react", "import_react", "import_journey_core", "import_jsx_runtime", "createProvider", "JourneyContext", "boundJourney", "journey", "machine", "persistence", "resetOnJourneyChange", "children", "incomingJourney", "internalMachineRef", "React", "journeyRef", "persistenceRef", "shouldResetInternal", "shouldResetPersistence", "options", "resolvedMachine", "resolvedJourney", "value", "import_jsx_runtime", "createStepRenderer", "useJourneySnapshot", "useJourneyStore", "fallback", "snapshot", "journey", "StepComponent", "import_react", "createUseJourneyApi", "useJourneyStore", "machine", "send", "React", "event", "goToNextStep", "terminateJourney", "payload", "completeJourney", "goToPreviousStep", "steps", "goToLastVisitedStep", "updateContext", "updater", "updateStepMetadata", "stepId", "clearStepError", "resetJourney", "createUseJourneyMachine", "useJourneyStore", "import_react", "createUseJourneySnapshot", "useJourneyStore", "machine", "React", "createJourneyBindings", "boundJourney", "JourneyContext", "React", "useJourneyStore", "hookName", "value", "useJourneySnapshot", "createUseJourneySnapshot", "useJourneyMachine", "createUseJourneyMachine", "useJourneyApi", "createUseJourneyApi", "Provider", "createProvider", "StepRenderer", "createStepRenderer", "import_journey_core"]
3
+ "sources": ["../src/index.ts", "../src/bindings/index.tsx", "../src/bindings/Provider.tsx", "../src/bindings/StepRenderer.tsx", "../src/bindings/useJourneyApi.ts", "../src/bindings/useJourneyEvent.ts", "../src/bindings/useJourneyMachine.ts", "../src/bindings/useJourneySelector.ts", "../src/bindings/useJourneySnapshot.ts"],
4
+ "sourcesContent": ["// Mark this entry point as a Next.js App Router client module so it can be used in client components.\n\"use client\";\n\nexport { createJourneyBindings } from \"./bindings\";\nexport {\n createTransitions,\n tx,\n JOURNEY_STATUS,\n JOURNEY_EVENT,\n JOURNEY_ASYNC_PHASE,\n JOURNEY_WILDCARD\n} from \"@rxova/journey-core\";\nexport type { JourneyDefinition, JourneySendResult } from \"@rxova/journey-core\";\nexport type {\n JourneyApi,\n JourneyBindings,\n JourneyBindingsProviderProps,\n JourneyEventType,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyReactStep,\n JourneyStoreValue\n} from \"./types\";\n", "import React from \"react\";\n\nimport type {\n JourneyBindings,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\nimport { createProvider } from \"./Provider\";\nimport { createStepRenderer } from \"./StepRenderer\";\nimport { createUseJourneyApi } from \"./useJourneyApi\";\nimport { createUseJourneyEvent } from \"./useJourneyEvent\";\nimport { createUseJourneyMachine } from \"./useJourneyMachine\";\nimport { createUseJourneySelector } from \"./useJourneySelector\";\nimport { createUseJourneySnapshot } from \"./useJourneySnapshot\";\n\n/**\n * Creates a typed React integration bundle (Provider, StepRenderer, and hooks)\n * bound to a specific journey definition.\n */\nexport const createJourneyBindings = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n boundJourney: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n): JourneyBindings<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta> => {\n const JourneyContext = React.createContext<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>(null);\n\n const useJourneyStore = (hookName = \"hook\") => {\n const value = React.useContext(JourneyContext);\n if (!value) {\n throw new Error(`${hookName} must be used within bindings.Provider.`);\n }\n return value;\n };\n\n const useJourneySnapshot = createUseJourneySnapshot(useJourneyStore);\n const useJourneySelector = createUseJourneySelector(useJourneyStore);\n const useJourneyMachine = createUseJourneyMachine(useJourneyStore);\n const useJourneyEvent = createUseJourneyEvent(useJourneyStore);\n const useJourneyApi = createUseJourneyApi(useJourneyStore);\n\n const Provider = createProvider({\n JourneyContext,\n boundJourney\n });\n\n const StepRenderer = createStepRenderer({\n useJourneySnapshot,\n useJourneyStore\n });\n\n return {\n Provider,\n StepRenderer,\n useJourneyApi,\n useJourneyEvent,\n useJourneyMachine,\n useJourneySelector,\n useJourneySnapshot\n };\n};\n", "import React from \"react\";\n\nimport { createJourneyMachine } from \"@rxova/journey-core\";\nimport type {\n JourneyBindingsProviderProps,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\n\nconst useSafeLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\ntype ProviderFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n JourneyContext: React.Context<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>;\n boundJourney: JourneyReactDefinition<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >;\n};\n\nexport const createProvider = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n JourneyContext,\n boundJourney\n}: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const Provider = ({\n journey,\n machine,\n persistence,\n completeOnNoNextStep,\n resetOnJourneyChange = false,\n resetOnPersistenceChange = false,\n onStart,\n onComplete,\n onTerminate,\n children\n }: JourneyBindingsProviderProps<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >) => {\n const incomingJourney = journey ?? boundJourney;\n const internalMachineRef = React.useRef<\n | JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>[\"machine\"]\n | null\n >(null);\n const journeyRef = React.useRef(incomingJourney);\n const persistenceRef = React.useRef(persistence);\n const completeOnNoNextStepRef = React.useRef(completeOnNoNextStep);\n const onStartRef = React.useRef(onStart);\n const onCompleteRef = React.useRef(onComplete);\n const onTerminateRef = React.useRef(onTerminate);\n const [, forceUpdate] = React.useReducer((count: number) => count + 1, 0);\n const hasOnStart = onStart !== undefined;\n const hasOnComplete = onComplete !== undefined;\n const hasOnTerminate = onTerminate !== undefined;\n\n onStartRef.current = onStart;\n onCompleteRef.current = onComplete;\n onTerminateRef.current = onTerminate;\n\n if (!machine && !internalMachineRef.current) {\n const options =\n persistence !== undefined || completeOnNoNextStep !== undefined\n ? {\n ...(persistence !== undefined ? { persistence } : {}),\n ...(completeOnNoNextStep !== undefined ? { completeOnNoNextStep } : {})\n }\n : undefined;\n internalMachineRef.current = createJourneyMachine(incomingJourney, options);\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n completeOnNoNextStepRef.current = completeOnNoNextStep;\n }\n\n const shouldResetJourney =\n !machine && resetOnJourneyChange && journeyRef.current !== incomingJourney;\n const shouldResetPersistence =\n !machine && resetOnPersistenceChange && persistenceRef.current !== persistence;\n const shouldResetNextCompletion =\n !machine && completeOnNoNextStepRef.current !== completeOnNoNextStep;\n\n useSafeLayoutEffect(() => {\n if (\n machine ||\n (!shouldResetJourney && !shouldResetPersistence && !shouldResetNextCompletion)\n ) {\n return;\n }\n\n const previousInternalMachine = internalMachineRef.current;\n const options =\n persistence !== undefined || completeOnNoNextStep !== undefined\n ? {\n ...(persistence !== undefined ? { persistence } : {}),\n ...(completeOnNoNextStep !== undefined ? { completeOnNoNextStep } : {})\n }\n : undefined;\n const nextInternalMachine = createJourneyMachine(incomingJourney, options);\n internalMachineRef.current = nextInternalMachine;\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n completeOnNoNextStepRef.current = completeOnNoNextStep;\n\n if (previousInternalMachine && previousInternalMachine !== nextInternalMachine) {\n previousInternalMachine.dispose();\n }\n\n forceUpdate();\n }, [\n completeOnNoNextStep,\n incomingJourney,\n machine,\n persistence,\n shouldResetJourney,\n shouldResetPersistence,\n shouldResetNextCompletion\n ]);\n\n const resolvedMachine = machine ?? internalMachineRef.current!;\n const resolvedJourney = machine ? incomingJourney : journeyRef.current;\n const value = React.useMemo<\n JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n >(\n () => ({\n machine: resolvedMachine,\n journey: resolvedJourney\n }),\n [resolvedMachine, resolvedJourney]\n );\n\n React.useEffect(() => {\n if (!hasOnStart && !hasOnComplete && !hasOnTerminate) {\n return;\n }\n\n const unsubStart = hasOnStart\n ? resolvedMachine.subscribeStart((event) => {\n onStartRef.current?.(event);\n })\n : undefined;\n\n const unsubComplete = hasOnComplete\n ? resolvedMachine.subscribeComplete((event) => {\n onCompleteRef.current?.(event);\n })\n : undefined;\n\n const unsubTerminate = hasOnTerminate\n ? resolvedMachine.subscribeTerminate((event) => {\n onTerminateRef.current?.(event);\n })\n : undefined;\n\n return () => {\n unsubStart?.();\n unsubComplete?.();\n unsubTerminate?.();\n };\n }, [hasOnStart, hasOnComplete, hasOnTerminate, resolvedMachine]);\n\n React.useEffect(() => {\n return () => {\n if (machine || !internalMachineRef.current) {\n return;\n }\n internalMachineRef.current.dispose();\n internalMachineRef.current = null;\n };\n }, [machine]);\n\n return <JourneyContext.Provider value={value}>{children}</JourneyContext.Provider>;\n };\n\n return Provider;\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype UseJourneySnapshot<\n TContext,\n TStepId extends string,\n TStepMeta = unknown\n> = () => JourneySnapshot<TContext, TStepId, TStepMeta>;\n\ntype StepRendererFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n useJourneySnapshot: UseJourneySnapshot<TContext, TStepId, TStepMeta>;\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n};\n\nexport const createStepRenderer = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n useJourneySnapshot,\n useJourneyStore\n}: StepRendererFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const StepRenderer = ({ fallback = null }: { fallback?: React.ReactNode }) => {\n const snapshot = useJourneySnapshot();\n const { journey } = useJourneyStore(\"StepRenderer\");\n\n const StepComponent = journey.steps[snapshot.currentStepId]?.component;\n\n if (!StepComponent) {\n return <>{fallback}</>;\n }\n\n return <StepComponent key={snapshot.currentStepId} />;\n };\n\n return StepRenderer;\n};\n", "import React from \"react\";\n\nimport type { JourneyPayloadFor, JourneySendEvent, JourneySendResult } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyApi = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n const { machine } = useJourneyStore(\"useJourneyApi\");\n\n return React.useMemo(\n () => ({\n send: async (\n event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.send(event);\n },\n goToNextStep: async (): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToNextStep();\n },\n terminateJourney: async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"terminateJourney\"\n >\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.terminateJourney(payload);\n },\n completeJourney: async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"completeJourney\"\n >\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.completeJourney(payload);\n },\n goToPreviousStep: async (\n steps?: number\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToPreviousStep(steps);\n },\n goToLastVisitedStep: async (): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToLastVisitedStep();\n },\n clearStepError: (stepId?: TStepId) => {\n machine.clearStepError(stepId);\n },\n updateContext: (updater: (context: TContext) => TContext) => {\n machine.updateContext(updater);\n },\n updateStepMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => {\n machine.updateStepMetadata(stepId, updater);\n },\n resetJourney: () => {\n machine.resetMachine();\n }\n }),\n [machine]\n );\n };\n};\n", "import React from \"react\";\n\nimport type { JourneyObservationEvent } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyEvent = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (\n listener: (\n event: JourneyObservationEvent<\n TStepId,\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n TStepMeta\n >\n ) => void\n ) => {\n const { machine } = useJourneyStore(\"useJourneyEvent\");\n const listenerRef = React.useRef(listener);\n listenerRef.current = listener;\n\n React.useEffect(() => {\n return machine.subscribeEvent((event) => {\n listenerRef.current(event);\n });\n }, [machine]);\n };\n};\n", "import type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyMachine = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n return useJourneyStore(\"useJourneyMachine\").machine;\n };\n};\n", "import React from \"react\";\n\nimport type { JourneyEqualityFn, JourneySelector, JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype SelectorCache<TContext, TStepId extends string, TStepMeta, TSelected> = {\n snapshot: JourneySnapshot<TContext, TStepId, TStepMeta>;\n selected: TSelected;\n selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>;\n isEqual: JourneyEqualityFn<TSelected>;\n};\n\nexport const createUseJourneySelector = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return <TSelected>(\n selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>,\n equalityFn?: JourneyEqualityFn<TSelected>\n ): TSelected => {\n const { machine } = useJourneyStore(\"useJourneySelector\");\n const isEqual = equalityFn ?? Object.is;\n const cacheRef = React.useRef<SelectorCache<TContext, TStepId, TStepMeta, TSelected> | null>(\n null\n );\n\n const getSelectedSnapshot = React.useCallback(() => {\n const nextSnapshot = machine.getSnapshot();\n const cached = cacheRef.current;\n\n if (\n cached &&\n cached.selector === selector &&\n cached.isEqual === isEqual &&\n Object.is(cached.snapshot, nextSnapshot)\n ) {\n return cached.selected;\n }\n\n const nextSelected = selector(nextSnapshot);\n\n if (cached && cached.selector === selector && cached.isEqual === isEqual) {\n if (cached.isEqual(cached.selected, nextSelected)) {\n cacheRef.current = {\n snapshot: nextSnapshot,\n selected: cached.selected,\n selector,\n isEqual\n };\n return cached.selected;\n }\n }\n\n cacheRef.current = {\n snapshot: nextSnapshot,\n selected: nextSelected,\n selector,\n isEqual\n };\n return nextSelected;\n }, [machine, selector, isEqual]);\n\n const subscribeToSelectedSnapshot = React.useCallback(\n (onStoreChange: () => void) =>\n machine.subscribeSelector(\n selector,\n () => {\n onStoreChange();\n },\n isEqual\n ),\n [machine, selector, isEqual]\n );\n\n return React.useSyncExternalStore(\n subscribeToSelectedSnapshot,\n getSelectedSnapshot,\n getSelectedSnapshot\n );\n };\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneySnapshot = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (): JourneySnapshot<TContext, TStepId, TStepMeta> => {\n const { machine } = useJourneyStore(\"useJourneySnapshot\");\n const getSnapshot = React.useCallback(() => machine.getSnapshot(), [machine]);\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => machine.subscribe(onStoreChange),\n [machine]\n );\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "createJourneyBindings", "__toCommonJS", "import_react", "import_react", "import_journey_core", "import_jsx_runtime", "useSafeLayoutEffect", "React", "createProvider", "JourneyContext", "boundJourney", "journey", "machine", "persistence", "completeOnNoNextStep", "resetOnJourneyChange", "resetOnPersistenceChange", "onStart", "onComplete", "onTerminate", "children", "incomingJourney", "internalMachineRef", "journeyRef", "persistenceRef", "completeOnNoNextStepRef", "onStartRef", "onCompleteRef", "onTerminateRef", "forceUpdate", "count", "hasOnStart", "hasOnComplete", "hasOnTerminate", "options", "shouldResetJourney", "shouldResetPersistence", "shouldResetNextCompletion", "previousInternalMachine", "nextInternalMachine", "resolvedMachine", "resolvedJourney", "value", "unsubStart", "event", "unsubComplete", "unsubTerminate", "import_jsx_runtime", "createStepRenderer", "useJourneySnapshot", "useJourneyStore", "fallback", "snapshot", "journey", "StepComponent", "import_react", "createUseJourneyApi", "useJourneyStore", "machine", "React", "event", "payload", "steps", "stepId", "updater", "import_react", "createUseJourneyEvent", "useJourneyStore", "listener", "machine", "listenerRef", "React", "event", "createUseJourneyMachine", "useJourneyStore", "import_react", "createUseJourneySelector", "useJourneyStore", "selector", "equalityFn", "machine", "isEqual", "cacheRef", "React", "getSelectedSnapshot", "nextSnapshot", "cached", "nextSelected", "subscribeToSelectedSnapshot", "onStoreChange", "import_react", "createUseJourneySnapshot", "useJourneyStore", "machine", "getSnapshot", "React", "subscribe", "onStoreChange", "createJourneyBindings", "boundJourney", "JourneyContext", "React", "useJourneyStore", "hookName", "value", "useJourneySnapshot", "createUseJourneySnapshot", "useJourneySelector", "createUseJourneySelector", "useJourneyMachine", "createUseJourneyMachine", "useJourneyEvent", "createUseJourneyEvent", "useJourneyApi", "createUseJourneyApi", "Provider", "createProvider", "StepRenderer", "createStepRenderer", "import_journey_core"]
7
7
  }
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createJourneyBindings } from "./bindings";
2
2
  export { createTransitions, tx, JOURNEY_STATUS, JOURNEY_EVENT, JOURNEY_ASYNC_PHASE, JOURNEY_WILDCARD } from "@rxova/journey-core";
3
- export type { JourneyDefinition } from "@rxova/journey-core";
3
+ export type { JourneyDefinition, JourneySendResult } from "@rxova/journey-core";
4
4
  export type { JourneyApi, JourneyBindings, JourneyBindingsProviderProps, JourneyEventType, JourneyReactDefinition, JourneyReactEventPayloadMap, JourneyReactStep, JourneyStoreValue } from "./types";
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createJourneyBindings } from "./bindings";
2
2
  export { createTransitions, tx, JOURNEY_STATUS, JOURNEY_EVENT, JOURNEY_ASYNC_PHASE, JOURNEY_WILDCARD } from "@rxova/journey-core";
3
- export type { JourneyDefinition } from "@rxova/journey-core";
3
+ export type { JourneyDefinition, JourneySendResult } from "@rxova/journey-core";
4
4
  export type { JourneyApi, JourneyBindings, JourneyBindingsProviderProps, JourneyEventType, JourneyReactDefinition, JourneyReactEventPayloadMap, JourneyReactStep, JourneyStoreValue } from "./types";
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use client";import R from"react";import i from"react";import{createJourneyMachine as I}from"@rxova/journey-core";import{jsx as h}from"react/jsx-runtime";var m=({JourneyContext:n,boundJourney:e})=>({journey:y,machine:a,persistence:o,resetOnJourneyChange:T=!1,children:d})=>{let s=y??e,u=i.useRef(null),v=i.useRef(s),c=i.useRef(o),t=T&&v.current!==s,S=c.current!==o;if(!a&&(!u.current||t||S)){let f=o?{persistence:o}:void 0;u.current=I(s,f),v.current=s,c.current=o}let l=a??u.current,E=a?s:v.current,g=i.useMemo(()=>({machine:l,journey:E}),[l,E]);return h(n.Provider,{value:g,children:d})};import{Fragment as k,jsx as J}from"react/jsx-runtime";var C=({useJourneySnapshot:n,useJourneyStore:e})=>({fallback:y=null})=>{let a=n(),{journey:o}=e("StepRenderer"),T=o.steps[a.currentStepId]?.component;return T?J(T,{}):J(k,{children:y})};import r from"react";var M=n=>()=>{let e=n("useJourneyApi").machine,p=r.useCallback(async t=>{await e.send(t)},[e]),y=r.useCallback(async()=>{await e.goToNextStep()},[e]),a=r.useCallback(async t=>{await e.terminateJourney(t)},[e]),o=r.useCallback(async t=>{await e.completeJourney(t)},[e]),T=r.useCallback(async t=>{await e.goToPreviousStep(t)},[e]),d=r.useCallback(async()=>{await e.goToLastVisitedStep()},[e]),s=r.useCallback(t=>{e.updateContext(t)},[e]),u=r.useCallback((t,S)=>{e.updateStepMetadata(t,S)},[e]),v=r.useCallback(t=>{e.clearStepError(t)},[e]),c=r.useCallback(()=>{e.resetMachine()},[e]);return{send:p,goToNextStep:y,terminateJourney:a,completeJourney:o,goToPreviousStep:T,goToLastVisitedStep:d,clearStepError:v,updateContext:s,updateStepMetadata:u,updateComponentMetadata:u,resetJourney:c}};var x=n=>()=>n("useJourneyMachine").machine;import w from"react";var P=n=>()=>{let{machine:e}=n("useJourneySnapshot");return w.useSyncExternalStore(e.subscribe,e.getSnapshot,e.getSnapshot)};var U=n=>{let e=R.createContext(null),p=(s="hook")=>{let u=R.useContext(e);if(!u)throw new Error(`${s} must be used within bindings.Provider.`);return u},y=P(p),a=x(p),o=M(p),T=m({JourneyContext:e,boundJourney:n}),d=C({useJourneySnapshot:y,useJourneyStore:p});return{Provider:T,StepRenderer:d,useJourneyApi:o,useJourneyMachine:a,useJourneySnapshot:y}};import{createTransitions as Z,tx as ee,JOURNEY_STATUS as te,JOURNEY_EVENT as ne,JOURNEY_ASYNC_PHASE as oe,JOURNEY_WILDCARD as re}from"@rxova/journey-core";export{oe as JOURNEY_ASYNC_PHASE,ne as JOURNEY_EVENT,te as JOURNEY_STATUS,re as JOURNEY_WILDCARD,U as createJourneyBindings,Z as createTransitions,ee as tx};
1
+ "use client";import W from"react";import d from"react";import{createJourneyMachine as j}from"@rxova/journey-core";import{jsx as Q}from"react/jsx-runtime";var K=typeof window>"u"?d.useEffect:d.useLayoutEffect,A=({JourneyContext:s,boundJourney:e})=>({journey:a,machine:n,persistence:o,completeOnNoNextStep:r,resetOnJourneyChange:l=!1,resetOnPersistenceChange:p=!1,onStart:u,onComplete:T,onTerminate:S,children:$})=>{let c=a??e,v=d.useRef(null),J=d.useRef(c),C=d.useRef(o),x=d.useRef(r),h=d.useRef(u),b=d.useRef(T),k=d.useRef(S),[,z]=d.useReducer(y=>y+1,0),f=u!==void 0,P=T!==void 0,R=S!==void 0;if(h.current=u,b.current=T,k.current=S,!n&&!v.current){let y=o!==void 0||r!==void 0?{...o!==void 0?{persistence:o}:{},...r!==void 0?{completeOnNoNextStep:r}:{}}:void 0;v.current=j(c,y),J.current=c,C.current=o,x.current=r}let U=!n&&l&&J.current!==c,w=!n&&p&&C.current!==o,V=!n&&x.current!==r;K(()=>{if(n||!U&&!w&&!V)return;let y=v.current,I=o!==void 0||r!==void 0?{...o!==void 0?{persistence:o}:{},...r!==void 0?{completeOnNoNextStep:r}:{}}:void 0,m=j(c,I);v.current=m,J.current=c,C.current=o,x.current=r,y&&y!==m&&y.dispose(),z()},[r,c,n,o,U,w,V]);let i=n??v.current,F=n?c:J.current,G=d.useMemo(()=>({machine:i,journey:F}),[i,F]);return d.useEffect(()=>{if(!f&&!P&&!R)return;let y=f?i.subscribeStart(E=>{h.current?.(E)}):void 0,I=P?i.subscribeComplete(E=>{b.current?.(E)}):void 0,m=R?i.subscribeTerminate(E=>{k.current?.(E)}):void 0;return()=>{y?.(),I?.(),m?.()}},[f,P,R,i]),d.useEffect(()=>()=>{n||!v.current||(v.current.dispose(),v.current=null)},[n]),Q(s.Provider,{value:G,children:$})};import{Fragment as X,jsx as q}from"react/jsx-runtime";var B=({useJourneySnapshot:s,useJourneyStore:e})=>({fallback:a=null})=>{let n=s(),{journey:o}=e("StepRenderer"),r=o.steps[n.currentStepId]?.component;return r?q(r,{},n.currentStepId):q(X,{children:a})};import Z from"react";var D=s=>()=>{let{machine:e}=s("useJourneyApi");return Z.useMemo(()=>({send:async t=>e.send(t),goToNextStep:async()=>e.goToNextStep(),terminateJourney:async t=>e.terminateJourney(t),completeJourney:async t=>e.completeJourney(t),goToPreviousStep:async t=>e.goToPreviousStep(t),goToLastVisitedStep:async()=>e.goToLastVisitedStep(),clearStepError:t=>{e.clearStepError(t)},updateContext:t=>{e.updateContext(t)},updateStepMetadata:(t,a)=>{e.updateStepMetadata(t,a)},resetJourney:()=>{e.resetMachine()}}),[e])};import L from"react";var Y=s=>e=>{let{machine:t}=s("useJourneyEvent"),a=L.useRef(e);a.current=e,L.useEffect(()=>t.subscribeEvent(n=>{a.current(n)}),[t])};var _=s=>()=>s("useJourneyMachine").machine;import M from"react";var O=s=>(e,t)=>{let{machine:a}=s("useJourneySelector"),n=t??Object.is,o=M.useRef(null),r=M.useCallback(()=>{let p=a.getSnapshot(),u=o.current;if(u&&u.selector===e&&u.isEqual===n&&Object.is(u.snapshot,p))return u.selected;let T=e(p);return u&&u.selector===e&&u.isEqual===n&&u.isEqual(u.selected,T)?(o.current={snapshot:p,selected:u.selected,selector:e,isEqual:n},u.selected):(o.current={snapshot:p,selected:T,selector:e,isEqual:n},T)},[a,e,n]),l=M.useCallback(p=>a.subscribeSelector(e,()=>{p()},n),[a,e,n]);return M.useSyncExternalStore(l,r,r)};import g from"react";var H=s=>()=>{let{machine:e}=s("useJourneySnapshot"),t=g.useCallback(()=>e.getSnapshot(),[e]),a=g.useCallback(n=>e.subscribe(n),[e]);return g.useSyncExternalStore(a,t,t)};var N=s=>{let e=W.createContext(null),t=(T="hook")=>{let S=W.useContext(e);if(!S)throw new Error(`${T} must be used within bindings.Provider.`);return S},a=H(t),n=O(t),o=_(t),r=Y(t),l=D(t),p=A({JourneyContext:e,boundJourney:s}),u=B({useJourneySnapshot:a,useJourneyStore:t});return{Provider:p,StepRenderer:u,useJourneyApi:l,useJourneyEvent:r,useJourneyMachine:o,useJourneySelector:n,useJourneySnapshot:a}};import{createTransitions as ge,tx as he,JOURNEY_STATUS as be,JOURNEY_EVENT as ke,JOURNEY_ASYNC_PHASE as Ue,JOURNEY_WILDCARD as we}from"@rxova/journey-core";export{Ue as JOURNEY_ASYNC_PHASE,ke as JOURNEY_EVENT,be as JOURNEY_STATUS,we as JOURNEY_WILDCARD,N as createJourneyBindings,ge as createTransitions,he as tx};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/bindings/index.tsx", "../src/bindings/Provider.tsx", "../src/bindings/StepRenderer.tsx", "../src/bindings/useJourneyApi.ts", "../src/bindings/useJourneyMachine.ts", "../src/bindings/useJourneySnapshot.ts", "../src/index.ts"],
4
- "sourcesContent": ["import React from \"react\";\n\nimport type {\n JourneyBindings,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\nimport { createProvider } from \"./Provider\";\nimport { createStepRenderer } from \"./StepRenderer\";\nimport { createUseJourneyApi } from \"./useJourneyApi\";\nimport { createUseJourneyMachine } from \"./useJourneyMachine\";\nimport { createUseJourneySnapshot } from \"./useJourneySnapshot\";\n\n/**\n * Creates a typed React integration bundle (Provider, StepRenderer, and hooks)\n * bound to a specific journey definition.\n */\nexport const createJourneyBindings = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n boundJourney: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n): JourneyBindings<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta> => {\n const JourneyContext = React.createContext<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>(null);\n\n const useJourneyStore = (hookName = \"hook\") => {\n const value = React.useContext(JourneyContext);\n if (!value) {\n throw new Error(`${hookName} must be used within bindings.Provider.`);\n }\n return value;\n };\n\n const useJourneySnapshot = createUseJourneySnapshot(useJourneyStore);\n const useJourneyMachine = createUseJourneyMachine(useJourneyStore);\n const useJourneyApi = createUseJourneyApi(useJourneyStore);\n\n const Provider = createProvider({\n JourneyContext,\n boundJourney\n });\n\n const StepRenderer = createStepRenderer({\n useJourneySnapshot,\n useJourneyStore\n });\n\n return {\n Provider,\n StepRenderer,\n useJourneyApi,\n useJourneyMachine,\n useJourneySnapshot\n };\n};\n", "import React from \"react\";\n\nimport { createJourneyMachine } from \"@rxova/journey-core\";\nimport type {\n JourneyBindingsProviderProps,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\n\ntype ProviderFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n JourneyContext: React.Context<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>;\n boundJourney: JourneyReactDefinition<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >;\n};\n\nexport const createProvider = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n JourneyContext,\n boundJourney\n}: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const Provider = ({\n journey,\n machine,\n persistence,\n resetOnJourneyChange = false,\n children\n }: JourneyBindingsProviderProps<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >) => {\n const incomingJourney = journey ?? boundJourney;\n const internalMachineRef = React.useRef<\n | JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>[\"machine\"]\n | null\n >(null);\n const journeyRef = React.useRef(incomingJourney);\n const persistenceRef = React.useRef(persistence);\n\n const shouldResetInternal = resetOnJourneyChange && journeyRef.current !== incomingJourney;\n const shouldResetPersistence = persistenceRef.current !== persistence;\n\n if (\n !machine &&\n (!internalMachineRef.current || shouldResetInternal || shouldResetPersistence)\n ) {\n const options = persistence ? { persistence } : undefined;\n internalMachineRef.current = createJourneyMachine(incomingJourney, options);\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n }\n\n const resolvedMachine = machine ?? internalMachineRef.current!;\n const resolvedJourney = machine ? incomingJourney : journeyRef.current;\n const value = React.useMemo<\n JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n >(\n () => ({\n machine: resolvedMachine,\n journey: resolvedJourney\n }),\n [resolvedMachine, resolvedJourney]\n );\n\n return <JourneyContext.Provider value={value}>{children}</JourneyContext.Provider>;\n };\n\n return Provider;\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype UseJourneySnapshot<\n TContext,\n TStepId extends string,\n TStepMeta = unknown\n> = () => JourneySnapshot<TContext, TStepId, TStepMeta>;\n\ntype StepRendererFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n useJourneySnapshot: UseJourneySnapshot<TContext, TStepId, TStepMeta>;\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n};\n\nexport const createStepRenderer = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n useJourneySnapshot,\n useJourneyStore\n}: StepRendererFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const StepRenderer = ({ fallback = null }: { fallback?: React.ReactNode }) => {\n const snapshot = useJourneySnapshot();\n const { journey } = useJourneyStore(\"StepRenderer\");\n\n const StepComponent = journey.steps[snapshot.currentStepId]?.component;\n\n if (!StepComponent) {\n return <>{fallback}</>;\n }\n\n return <StepComponent />;\n };\n\n return StepRenderer;\n};\n", "import React from \"react\";\n\nimport type { JourneyPayloadFor, JourneySendEvent } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyApi = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n const machine = useJourneyStore(\"useJourneyApi\").machine;\n\n const send = React.useCallback(\n async (\n event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>\n ) => {\n await machine.send(event);\n },\n [machine]\n );\n\n const goToNextStep = React.useCallback(async () => {\n await machine.goToNextStep();\n }, [machine]);\n\n const terminateJourney = React.useCallback(\n async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"terminateJourney\"\n >\n ) => {\n await machine.terminateJourney(payload);\n },\n [machine]\n );\n\n const completeJourney = React.useCallback(\n async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"completeJourney\"\n >\n ) => {\n await machine.completeJourney(payload);\n },\n [machine]\n );\n\n const goToPreviousStep = React.useCallback(\n async (steps?: number) => {\n await machine.goToPreviousStep(steps);\n },\n [machine]\n );\n\n const goToLastVisitedStep = React.useCallback(async () => {\n await machine.goToLastVisitedStep();\n }, [machine]);\n\n const updateContext = React.useCallback(\n (updater: (context: TContext) => TContext) => {\n machine.updateContext(updater);\n },\n [machine]\n );\n\n const updateStepMetadata = React.useCallback(\n (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => {\n machine.updateStepMetadata(stepId, updater);\n },\n [machine]\n );\n\n const clearStepError = React.useCallback(\n (stepId?: TStepId) => {\n machine.clearStepError(stepId);\n },\n [machine]\n );\n\n const resetJourney = React.useCallback(() => {\n machine.resetMachine();\n }, [machine]);\n\n return {\n send,\n goToNextStep,\n terminateJourney,\n completeJourney,\n goToPreviousStep,\n goToLastVisitedStep,\n clearStepError,\n updateContext,\n updateStepMetadata,\n updateComponentMetadata: updateStepMetadata,\n resetJourney\n };\n };\n};\n", "import type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyMachine = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n return useJourneyStore(\"useJourneyMachine\").machine;\n };\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneySnapshot = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (): JourneySnapshot<TContext, TStepId, TStepMeta> => {\n const { machine } = useJourneyStore(\"useJourneySnapshot\");\n return React.useSyncExternalStore(machine.subscribe, machine.getSnapshot, machine.getSnapshot);\n };\n};\n", "// Mark this entry point as a Next.js App Router client module so it can be used in client components.\n\"use client\";\n\nexport { createJourneyBindings } from \"./bindings\";\nexport {\n createTransitions,\n tx,\n JOURNEY_STATUS,\n JOURNEY_EVENT,\n JOURNEY_ASYNC_PHASE,\n JOURNEY_WILDCARD\n} from \"@rxova/journey-core\";\nexport type { JourneyDefinition } from \"@rxova/journey-core\";\nexport type {\n JourneyApi,\n JourneyBindings,\n JourneyBindingsProviderProps,\n JourneyEventType,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyReactStep,\n JourneyStoreValue\n} from \"./types\";\n"],
5
- "mappings": "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",
6
- "names": ["React", "React", "createJourneyMachine", "jsx", "createProvider", "JourneyContext", "boundJourney", "journey", "machine", "persistence", "resetOnJourneyChange", "children", "incomingJourney", "internalMachineRef", "journeyRef", "persistenceRef", "shouldResetInternal", "shouldResetPersistence", "options", "resolvedMachine", "resolvedJourney", "value", "Fragment", "jsx", "createStepRenderer", "useJourneySnapshot", "useJourneyStore", "fallback", "snapshot", "journey", "StepComponent", "React", "createUseJourneyApi", "useJourneyStore", "machine", "send", "event", "goToNextStep", "terminateJourney", "payload", "completeJourney", "goToPreviousStep", "steps", "goToLastVisitedStep", "updateContext", "updater", "updateStepMetadata", "stepId", "clearStepError", "resetJourney", "createUseJourneyMachine", "useJourneyStore", "React", "createUseJourneySnapshot", "useJourneyStore", "machine", "createJourneyBindings", "boundJourney", "JourneyContext", "React", "useJourneyStore", "hookName", "value", "useJourneySnapshot", "createUseJourneySnapshot", "useJourneyMachine", "createUseJourneyMachine", "useJourneyApi", "createUseJourneyApi", "Provider", "createProvider", "StepRenderer", "createStepRenderer", "createTransitions", "tx", "JOURNEY_STATUS", "JOURNEY_EVENT", "JOURNEY_ASYNC_PHASE", "JOURNEY_WILDCARD"]
3
+ "sources": ["../src/bindings/index.tsx", "../src/bindings/Provider.tsx", "../src/bindings/StepRenderer.tsx", "../src/bindings/useJourneyApi.ts", "../src/bindings/useJourneyEvent.ts", "../src/bindings/useJourneyMachine.ts", "../src/bindings/useJourneySelector.ts", "../src/bindings/useJourneySnapshot.ts", "../src/index.ts"],
4
+ "sourcesContent": ["import React from \"react\";\n\nimport type {\n JourneyBindings,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\nimport { createProvider } from \"./Provider\";\nimport { createStepRenderer } from \"./StepRenderer\";\nimport { createUseJourneyApi } from \"./useJourneyApi\";\nimport { createUseJourneyEvent } from \"./useJourneyEvent\";\nimport { createUseJourneyMachine } from \"./useJourneyMachine\";\nimport { createUseJourneySelector } from \"./useJourneySelector\";\nimport { createUseJourneySnapshot } from \"./useJourneySnapshot\";\n\n/**\n * Creates a typed React integration bundle (Provider, StepRenderer, and hooks)\n * bound to a specific journey definition.\n */\nexport const createJourneyBindings = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n boundJourney: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n): JourneyBindings<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta> => {\n const JourneyContext = React.createContext<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>(null);\n\n const useJourneyStore = (hookName = \"hook\") => {\n const value = React.useContext(JourneyContext);\n if (!value) {\n throw new Error(`${hookName} must be used within bindings.Provider.`);\n }\n return value;\n };\n\n const useJourneySnapshot = createUseJourneySnapshot(useJourneyStore);\n const useJourneySelector = createUseJourneySelector(useJourneyStore);\n const useJourneyMachine = createUseJourneyMachine(useJourneyStore);\n const useJourneyEvent = createUseJourneyEvent(useJourneyStore);\n const useJourneyApi = createUseJourneyApi(useJourneyStore);\n\n const Provider = createProvider({\n JourneyContext,\n boundJourney\n });\n\n const StepRenderer = createStepRenderer({\n useJourneySnapshot,\n useJourneyStore\n });\n\n return {\n Provider,\n StepRenderer,\n useJourneyApi,\n useJourneyEvent,\n useJourneyMachine,\n useJourneySelector,\n useJourneySnapshot\n };\n};\n", "import React from \"react\";\n\nimport { createJourneyMachine } from \"@rxova/journey-core\";\nimport type {\n JourneyBindingsProviderProps,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyStoreValue\n} from \"../types\";\n\nconst useSafeLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\ntype ProviderFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n JourneyContext: React.Context<JourneyStoreValue<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n > | null>;\n boundJourney: JourneyReactDefinition<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >;\n};\n\nexport const createProvider = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n JourneyContext,\n boundJourney\n}: ProviderFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const Provider = ({\n journey,\n machine,\n persistence,\n completeOnNoNextStep,\n resetOnJourneyChange = false,\n resetOnPersistenceChange = false,\n onStart,\n onComplete,\n onTerminate,\n children\n }: JourneyBindingsProviderProps<\n TContext,\n TStepId,\n TCustomEvent,\n TEventPayloadMap,\n TStepMeta\n >) => {\n const incomingJourney = journey ?? boundJourney;\n const internalMachineRef = React.useRef<\n | JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>[\"machine\"]\n | null\n >(null);\n const journeyRef = React.useRef(incomingJourney);\n const persistenceRef = React.useRef(persistence);\n const completeOnNoNextStepRef = React.useRef(completeOnNoNextStep);\n const onStartRef = React.useRef(onStart);\n const onCompleteRef = React.useRef(onComplete);\n const onTerminateRef = React.useRef(onTerminate);\n const [, forceUpdate] = React.useReducer((count: number) => count + 1, 0);\n const hasOnStart = onStart !== undefined;\n const hasOnComplete = onComplete !== undefined;\n const hasOnTerminate = onTerminate !== undefined;\n\n onStartRef.current = onStart;\n onCompleteRef.current = onComplete;\n onTerminateRef.current = onTerminate;\n\n if (!machine && !internalMachineRef.current) {\n const options =\n persistence !== undefined || completeOnNoNextStep !== undefined\n ? {\n ...(persistence !== undefined ? { persistence } : {}),\n ...(completeOnNoNextStep !== undefined ? { completeOnNoNextStep } : {})\n }\n : undefined;\n internalMachineRef.current = createJourneyMachine(incomingJourney, options);\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n completeOnNoNextStepRef.current = completeOnNoNextStep;\n }\n\n const shouldResetJourney =\n !machine && resetOnJourneyChange && journeyRef.current !== incomingJourney;\n const shouldResetPersistence =\n !machine && resetOnPersistenceChange && persistenceRef.current !== persistence;\n const shouldResetNextCompletion =\n !machine && completeOnNoNextStepRef.current !== completeOnNoNextStep;\n\n useSafeLayoutEffect(() => {\n if (\n machine ||\n (!shouldResetJourney && !shouldResetPersistence && !shouldResetNextCompletion)\n ) {\n return;\n }\n\n const previousInternalMachine = internalMachineRef.current;\n const options =\n persistence !== undefined || completeOnNoNextStep !== undefined\n ? {\n ...(persistence !== undefined ? { persistence } : {}),\n ...(completeOnNoNextStep !== undefined ? { completeOnNoNextStep } : {})\n }\n : undefined;\n const nextInternalMachine = createJourneyMachine(incomingJourney, options);\n internalMachineRef.current = nextInternalMachine;\n journeyRef.current = incomingJourney;\n persistenceRef.current = persistence;\n completeOnNoNextStepRef.current = completeOnNoNextStep;\n\n if (previousInternalMachine && previousInternalMachine !== nextInternalMachine) {\n previousInternalMachine.dispose();\n }\n\n forceUpdate();\n }, [\n completeOnNoNextStep,\n incomingJourney,\n machine,\n persistence,\n shouldResetJourney,\n shouldResetPersistence,\n shouldResetNextCompletion\n ]);\n\n const resolvedMachine = machine ?? internalMachineRef.current!;\n const resolvedJourney = machine ? incomingJourney : journeyRef.current;\n const value = React.useMemo<\n JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n >(\n () => ({\n machine: resolvedMachine,\n journey: resolvedJourney\n }),\n [resolvedMachine, resolvedJourney]\n );\n\n React.useEffect(() => {\n if (!hasOnStart && !hasOnComplete && !hasOnTerminate) {\n return;\n }\n\n const unsubStart = hasOnStart\n ? resolvedMachine.subscribeStart((event) => {\n onStartRef.current?.(event);\n })\n : undefined;\n\n const unsubComplete = hasOnComplete\n ? resolvedMachine.subscribeComplete((event) => {\n onCompleteRef.current?.(event);\n })\n : undefined;\n\n const unsubTerminate = hasOnTerminate\n ? resolvedMachine.subscribeTerminate((event) => {\n onTerminateRef.current?.(event);\n })\n : undefined;\n\n return () => {\n unsubStart?.();\n unsubComplete?.();\n unsubTerminate?.();\n };\n }, [hasOnStart, hasOnComplete, hasOnTerminate, resolvedMachine]);\n\n React.useEffect(() => {\n return () => {\n if (machine || !internalMachineRef.current) {\n return;\n }\n internalMachineRef.current.dispose();\n internalMachineRef.current = null;\n };\n }, [machine]);\n\n return <JourneyContext.Provider value={value}>{children}</JourneyContext.Provider>;\n };\n\n return Provider;\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype UseJourneySnapshot<\n TContext,\n TStepId extends string,\n TStepMeta = unknown\n> = () => JourneySnapshot<TContext, TStepId, TStepMeta>;\n\ntype StepRendererFactoryProps<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = {\n useJourneySnapshot: UseJourneySnapshot<TContext, TStepId, TStepMeta>;\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n};\n\nexport const createStepRenderer = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>({\n useJourneySnapshot,\n useJourneyStore\n}: StepRendererFactoryProps<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>) => {\n const StepRenderer = ({ fallback = null }: { fallback?: React.ReactNode }) => {\n const snapshot = useJourneySnapshot();\n const { journey } = useJourneyStore(\"StepRenderer\");\n\n const StepComponent = journey.steps[snapshot.currentStepId]?.component;\n\n if (!StepComponent) {\n return <>{fallback}</>;\n }\n\n return <StepComponent key={snapshot.currentStepId} />;\n };\n\n return StepRenderer;\n};\n", "import React from \"react\";\n\nimport type { JourneyPayloadFor, JourneySendEvent, JourneySendResult } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyApi = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n const { machine } = useJourneyStore(\"useJourneyApi\");\n\n return React.useMemo(\n () => ({\n send: async (\n event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.send(event);\n },\n goToNextStep: async (): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToNextStep();\n },\n terminateJourney: async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"terminateJourney\"\n >\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.terminateJourney(payload);\n },\n completeJourney: async (\n payload?: JourneyPayloadFor<\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n \"completeJourney\"\n >\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.completeJourney(payload);\n },\n goToPreviousStep: async (\n steps?: number\n ): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToPreviousStep(steps);\n },\n goToLastVisitedStep: async (): Promise<JourneySendResult<TContext, TStepId, TStepMeta>> => {\n return machine.goToLastVisitedStep();\n },\n clearStepError: (stepId?: TStepId) => {\n machine.clearStepError(stepId);\n },\n updateContext: (updater: (context: TContext) => TContext) => {\n machine.updateContext(updater);\n },\n updateStepMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => {\n machine.updateStepMetadata(stepId, updater);\n },\n resetJourney: () => {\n machine.resetMachine();\n }\n }),\n [machine]\n );\n };\n};\n", "import React from \"react\";\n\nimport type { JourneyObservationEvent } from \"@rxova/journey-core\";\nimport type { JourneyEventType, JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyEvent = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (\n listener: (\n event: JourneyObservationEvent<\n TStepId,\n JourneyEventType<TCustomEvent>,\n TEventPayloadMap,\n TStepMeta\n >\n ) => void\n ) => {\n const { machine } = useJourneyStore(\"useJourneyEvent\");\n const listenerRef = React.useRef(listener);\n listenerRef.current = listener;\n\n React.useEffect(() => {\n return machine.subscribeEvent((event) => {\n listenerRef.current(event);\n });\n }, [machine]);\n };\n};\n", "import type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneyMachine = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return () => {\n return useJourneyStore(\"useJourneyMachine\").machine;\n };\n};\n", "import React from \"react\";\n\nimport type { JourneyEqualityFn, JourneySelector, JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\ntype SelectorCache<TContext, TStepId extends string, TStepMeta, TSelected> = {\n snapshot: JourneySnapshot<TContext, TStepId, TStepMeta>;\n selected: TSelected;\n selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>;\n isEqual: JourneyEqualityFn<TSelected>;\n};\n\nexport const createUseJourneySelector = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return <TSelected>(\n selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>,\n equalityFn?: JourneyEqualityFn<TSelected>\n ): TSelected => {\n const { machine } = useJourneyStore(\"useJourneySelector\");\n const isEqual = equalityFn ?? Object.is;\n const cacheRef = React.useRef<SelectorCache<TContext, TStepId, TStepMeta, TSelected> | null>(\n null\n );\n\n const getSelectedSnapshot = React.useCallback(() => {\n const nextSnapshot = machine.getSnapshot();\n const cached = cacheRef.current;\n\n if (\n cached &&\n cached.selector === selector &&\n cached.isEqual === isEqual &&\n Object.is(cached.snapshot, nextSnapshot)\n ) {\n return cached.selected;\n }\n\n const nextSelected = selector(nextSnapshot);\n\n if (cached && cached.selector === selector && cached.isEqual === isEqual) {\n if (cached.isEqual(cached.selected, nextSelected)) {\n cacheRef.current = {\n snapshot: nextSnapshot,\n selected: cached.selected,\n selector,\n isEqual\n };\n return cached.selected;\n }\n }\n\n cacheRef.current = {\n snapshot: nextSnapshot,\n selected: nextSelected,\n selector,\n isEqual\n };\n return nextSelected;\n }, [machine, selector, isEqual]);\n\n const subscribeToSelectedSnapshot = React.useCallback(\n (onStoreChange: () => void) =>\n machine.subscribeSelector(\n selector,\n () => {\n onStoreChange();\n },\n isEqual\n ),\n [machine, selector, isEqual]\n );\n\n return React.useSyncExternalStore(\n subscribeToSelectedSnapshot,\n getSelectedSnapshot,\n getSelectedSnapshot\n );\n };\n};\n", "import React from \"react\";\n\nimport type { JourneySnapshot } from \"@rxova/journey-core\";\nimport type { JourneyReactEventPayloadMap, JourneyStoreValue } from \"../types\";\n\ntype UseJourneyStore<\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n> = (\n hookName?: string\n) => JourneyStoreValue<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;\n\nexport const createUseJourneySnapshot = <\n TContext,\n TStepId extends string,\n TCustomEvent extends string = never,\n TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>,\n TStepMeta = unknown\n>(\n useJourneyStore: UseJourneyStore<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>\n) => {\n return (): JourneySnapshot<TContext, TStepId, TStepMeta> => {\n const { machine } = useJourneyStore(\"useJourneySnapshot\");\n const getSnapshot = React.useCallback(() => machine.getSnapshot(), [machine]);\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => machine.subscribe(onStoreChange),\n [machine]\n );\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n", "// Mark this entry point as a Next.js App Router client module so it can be used in client components.\n\"use client\";\n\nexport { createJourneyBindings } from \"./bindings\";\nexport {\n createTransitions,\n tx,\n JOURNEY_STATUS,\n JOURNEY_EVENT,\n JOURNEY_ASYNC_PHASE,\n JOURNEY_WILDCARD\n} from \"@rxova/journey-core\";\nexport type { JourneyDefinition, JourneySendResult } from \"@rxova/journey-core\";\nexport type {\n JourneyApi,\n JourneyBindings,\n JourneyBindingsProviderProps,\n JourneyEventType,\n JourneyReactDefinition,\n JourneyReactEventPayloadMap,\n JourneyReactStep,\n JourneyStoreValue\n} from \"./types\";\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "React", "createJourneyMachine", "jsx", "useSafeLayoutEffect", "createProvider", "JourneyContext", "boundJourney", "journey", "machine", "persistence", "completeOnNoNextStep", "resetOnJourneyChange", "resetOnPersistenceChange", "onStart", "onComplete", "onTerminate", "children", "incomingJourney", "internalMachineRef", "journeyRef", "persistenceRef", "completeOnNoNextStepRef", "onStartRef", "onCompleteRef", "onTerminateRef", "forceUpdate", "count", "hasOnStart", "hasOnComplete", "hasOnTerminate", "options", "shouldResetJourney", "shouldResetPersistence", "shouldResetNextCompletion", "previousInternalMachine", "nextInternalMachine", "resolvedMachine", "resolvedJourney", "value", "unsubStart", "event", "unsubComplete", "unsubTerminate", "Fragment", "jsx", "createStepRenderer", "useJourneySnapshot", "useJourneyStore", "fallback", "snapshot", "journey", "StepComponent", "React", "createUseJourneyApi", "useJourneyStore", "machine", "event", "payload", "steps", "stepId", "updater", "React", "createUseJourneyEvent", "useJourneyStore", "listener", "machine", "listenerRef", "event", "createUseJourneyMachine", "useJourneyStore", "React", "createUseJourneySelector", "useJourneyStore", "selector", "equalityFn", "machine", "isEqual", "cacheRef", "getSelectedSnapshot", "nextSnapshot", "cached", "nextSelected", "subscribeToSelectedSnapshot", "onStoreChange", "React", "createUseJourneySnapshot", "useJourneyStore", "machine", "getSnapshot", "subscribe", "onStoreChange", "createJourneyBindings", "boundJourney", "JourneyContext", "React", "useJourneyStore", "hookName", "value", "useJourneySnapshot", "createUseJourneySnapshot", "useJourneySelector", "createUseJourneySelector", "useJourneyMachine", "createUseJourneyMachine", "useJourneyEvent", "createUseJourneyEvent", "useJourneyApi", "createUseJourneyApi", "Provider", "createProvider", "StepRenderer", "createStepRenderer", "createTransitions", "tx", "JOURNEY_STATUS", "JOURNEY_EVENT", "JOURNEY_ASYNC_PHASE", "JOURNEY_WILDCARD"]
7
7
  }
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type React from "react";
2
- import type { JourneyDefinition, JourneyEventPayloadMap as JourneyCoreEventPayloadMap, JourneyMachine, JourneyPayloadFor, JourneyPersistenceOptions, JourneySendEvent, JourneySnapshot, JourneyStepDefinition } from "@rxova/journey-core";
2
+ import type { JourneyDefinition, JourneyEqualityFn, JourneyEventPayloadMap as JourneyCoreEventPayloadMap, JourneyMachine, JourneyObservationEvent, JourneyPayloadFor, JourneyPersistenceOptions, JourneySelector, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyStepDefinition } from "@rxova/journey-core";
3
3
  export type JourneyDefaultEvent = "goToNextStep" | "goToPreviousStep" | "terminateJourney" | "completeJourney";
4
4
  export type JourneyEventType<TCustomEvent extends string = never> = JourneyDefaultEvent | TCustomEvent;
5
5
  export type JourneyReactEventPayloadMap<TCustomEvent extends string = never> = JourneyCoreEventPayloadMap<JourneyEventType<TCustomEvent>>;
@@ -10,15 +10,14 @@ export type JourneyReactDefinition<TContext, TStepId extends string, TCustomEven
10
10
  steps: Record<TStepId, JourneyReactStep<TStepMeta>>;
11
11
  };
12
12
  export type JourneyApi<TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown> = {
13
- send: (event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>) => Promise<void>;
14
- goToNextStep: () => Promise<void>;
15
- terminateJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "terminateJourney">) => Promise<void>;
16
- completeJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "completeJourney">) => Promise<void>;
17
- goToPreviousStep: (steps?: number) => Promise<void>;
18
- goToLastVisitedStep: () => Promise<void>;
13
+ send: (event: JourneySendEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap>) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
14
+ goToNextStep: () => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
15
+ terminateJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "terminateJourney">) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
16
+ completeJourney: (payload?: JourneyPayloadFor<JourneyEventType<TCustomEvent>, TEventPayloadMap, "completeJourney">) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
17
+ goToPreviousStep: (steps?: number) => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
18
+ goToLastVisitedStep: () => Promise<JourneySendResult<TContext, TStepId, TStepMeta>>;
19
19
  clearStepError: (stepId?: TStepId) => void;
20
20
  updateContext: (updater: (context: TContext) => TContext) => void;
21
- updateComponentMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => void;
22
21
  updateStepMetadata: (stepId: TStepId, updater: (metadata: TStepMeta) => TStepMeta) => void;
23
22
  resetJourney: () => void;
24
23
  };
@@ -30,7 +29,18 @@ export type JourneyBindingsProviderProps<TContext, TStepId extends string, TCust
30
29
  journey?: JourneyReactDefinition<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
31
30
  machine?: JourneyMachine<TContext, TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>;
32
31
  persistence?: JourneyPersistenceOptions<TContext, TStepId, TStepMeta>;
32
+ completeOnNoNextStep?: boolean;
33
33
  resetOnJourneyChange?: boolean;
34
+ resetOnPersistenceChange?: boolean;
35
+ onStart?: (event: Extract<JourneyObservationEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>, {
36
+ type: "journey.start";
37
+ }>) => void;
38
+ onComplete?: (event: Extract<JourneyObservationEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>, {
39
+ type: "journey.complete";
40
+ }>) => void;
41
+ onTerminate?: (event: Extract<JourneyObservationEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>, {
42
+ type: "journey.close";
43
+ }>) => void;
34
44
  children: React.ReactNode;
35
45
  };
36
46
  export type JourneyBindings<TContext, TStepId extends string, TCustomEvent extends string = never, TEventPayloadMap extends JourneyReactEventPayloadMap<TCustomEvent> = Record<never, never>, TStepMeta = unknown> = {
@@ -40,5 +50,7 @@ export type JourneyBindings<TContext, TStepId extends string, TCustomEvent exten
40
50
  }>;
41
51
  useJourneyApi: () => JourneyApi<TContext, TStepId, TCustomEvent, TEventPayloadMap, TStepMeta>;
42
52
  useJourneyMachine: () => JourneyMachine<TContext, TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>;
53
+ useJourneyEvent: (listener: (event: JourneyObservationEvent<TStepId, JourneyEventType<TCustomEvent>, TEventPayloadMap, TStepMeta>) => void) => void;
54
+ useJourneySelector: <TSelected>(selector: JourneySelector<TContext, TStepId, TStepMeta, TSelected>, equalityFn?: JourneyEqualityFn<TSelected>) => TSelected;
43
55
  useJourneySnapshot: () => JourneySnapshot<TContext, TStepId, TStepMeta>;
44
56
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rxova/journey-react",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "React bindings for journey.",
5
5
  "keywords": [
6
6
  "react",
@@ -47,7 +47,7 @@
47
47
  ],
48
48
  "sideEffects": false,
49
49
  "dependencies": {
50
- "@rxova/journey-core": "^0.6.4"
50
+ "@rxova/journey-core": "^0.7.0"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "react": ">=18.2.0"
@@ -62,7 +62,7 @@
62
62
  "name": "react/createJourneyBindings",
63
63
  "path": "dist/index.js",
64
64
  "import": "{ createJourneyBindings }",
65
- "limit": "5 kB"
65
+ "limit": "6 kB"
66
66
  }
67
67
  ],
68
68
  "devDependencies": {
@@ -73,8 +73,8 @@
73
73
  "react-dom": "^19.2.4"
74
74
  },
75
75
  "scripts": {
76
- "build": "pnpm run clean && node ./scripts/build.mjs && tsc -p tsconfig.build.json && node ../../scripts/copy-types.mjs dist",
77
- "clean": "node ../../scripts/clean-paths.mjs dist tsconfig.build.tsbuildinfo",
76
+ "build": "pnpm run clean && node --import tsx ./scripts/build.ts && tsc -p tsconfig.build.json && node --import tsx ../../scripts/copy-types.ts dist",
77
+ "clean": "node --import tsx ../../scripts/clean-paths.ts dist tsconfig.build.tsbuildinfo",
78
78
  "coverage": "pnpm --workspace-root vitest run --coverage --coverage.include=packages/react/src/** --coverage.reporter=text-summary",
79
79
  "typecheck": "tsc --noEmit -p tsconfig.json",
80
80
  "publint": "publint",