@daltonr/pathwrite-react-native 0.9.0 → 0.10.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/dist/index.d.ts CHANGED
@@ -38,22 +38,34 @@ export interface UsePathReturn<TData extends PathData = PathData> {
38
38
  resetStep: () => void;
39
39
  /** Tear down any active path and immediately start the given path fresh. */
40
40
  restart: () => void;
41
+ /** Re-runs the operation that set `snapshot.error`. Increments `retryCount` on repeated failure. No-op when there is no pending error. */
42
+ retry: () => void;
43
+ /** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
44
+ suspend: () => void;
41
45
  }
42
46
  export type PathProviderProps = PropsWithChildren<{
43
47
  onEvent?: (event: PathEvent) => void;
48
+ /**
49
+ * Services object passed through context to all step components.
50
+ * Step components access it via `usePathContext<TData, TServices>()`.
51
+ */
52
+ services?: unknown;
44
53
  }>;
45
54
  export declare function usePath<TData extends PathData = PathData>(options?: UsePathOptions): UsePathReturn<TData>;
46
55
  /**
47
56
  * Provides a single `usePath` instance to all descendants.
48
57
  * Consume with `usePathContext()`.
49
58
  */
50
- export declare function PathProvider({ children, onEvent }: PathProviderProps): ReactElement;
59
+ export declare function PathProvider({ children, onEvent, services }: PathProviderProps): ReactElement;
51
60
  /**
52
- * Access the nearest `PathProvider`'s path instance.
53
- * Throws if used outside of a `<PathProvider>`.
61
+ * Access the nearest `PathProvider`'s path instance and optional services object.
62
+ * Throws if used outside of a `<PathProvider>` or `<PathShell>`.
63
+ *
64
+ * `TData` narrows `snapshot.data`; `TServices` types the `services` value.
54
65
  */
55
- export declare function usePathContext<TData extends PathData = PathData>(): Omit<UsePathReturn<TData>, "snapshot"> & {
66
+ export declare function usePathContext<TData extends PathData = PathData, TServices = unknown>(): Omit<UsePathReturn<TData>, "snapshot"> & {
56
67
  snapshot: PathSnapshot<TData>;
68
+ services: TServices;
57
69
  };
58
70
  export interface PathShellHandle {
59
71
  /** Restart the shell's current path with its original `initialData`, without unmounting. */
@@ -67,6 +79,8 @@ export interface PathShellActions {
67
79
  goToStepChecked: (stepId: string) => void;
68
80
  setData: (key: string, value: unknown) => void;
69
81
  restart: () => void;
82
+ retry: () => void;
83
+ suspend: () => void;
70
84
  }
71
85
  export interface PathShellProps {
72
86
  /** The path definition to drive. */
@@ -91,6 +105,8 @@ export interface PathShellProps {
91
105
  nextLabel?: string;
92
106
  /** Label for the Complete button (last step). Defaults to "Complete". */
93
107
  completeLabel?: string;
108
+ /** Label shown on the Next/Complete button while an async operation is in progress. When undefined, an ActivityIndicator spinner is shown instead. */
109
+ loadingLabel?: string;
94
110
  /** Label for the Cancel button. Defaults to "Cancel". */
95
111
  cancelLabel?: string;
96
112
  /** If true, hide the Cancel button. */
@@ -130,6 +146,11 @@ export interface PathShellProps {
130
146
  * warning. The step is then responsible for managing its own scroll.
131
147
  */
132
148
  disableBodyScroll?: boolean;
149
+ /**
150
+ * Services object passed through context to all step components.
151
+ * Step components access it via `usePathContext<TData, TServices>()`.
152
+ */
153
+ services?: unknown;
133
154
  }
134
155
  /**
135
156
  * Default UI shell for React Native. Renders a progress dot indicator,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { createContext, createElement, forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useRef, useSyncExternalStore, } from "react";
3
3
  import { View, Text, Pressable, ScrollView, StyleSheet, ActivityIndicator, KeyboardAvoidingView, Platform, } from "react-native";
4
- import { PathEngine, } from "@daltonr/pathwrite-core";
4
+ import { PathEngine, formatFieldKey, errorPhaseMessage, } from "@daltonr/pathwrite-core";
5
5
  // ---------------------------------------------------------------------------
6
6
  // usePath hook
7
7
  // ---------------------------------------------------------------------------
@@ -46,30 +46,34 @@ export function usePath(options) {
46
46
  const setData = useCallback((key, value) => engine.setData(key, value), [engine]);
47
47
  const resetStep = useCallback(() => engine.resetStep(), [engine]);
48
48
  const restart = useCallback(() => engine.restart(), [engine]);
49
- return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart };
49
+ const retry = useCallback(() => engine.retry(), [engine]);
50
+ const suspend = useCallback(() => engine.suspend(), [engine]);
51
+ return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend };
50
52
  }
51
- // ---------------------------------------------------------------------------
52
- // Context + Provider
53
- // ---------------------------------------------------------------------------
54
53
  const PathContext = createContext(null);
55
54
  /**
56
55
  * Provides a single `usePath` instance to all descendants.
57
56
  * Consume with `usePathContext()`.
58
57
  */
59
- export function PathProvider({ children, onEvent }) {
58
+ export function PathProvider({ children, onEvent, services }) {
60
59
  const path = usePath({ onEvent });
61
- return createElement(PathContext.Provider, { value: path }, children);
60
+ return createElement(PathContext.Provider, { value: { path, services: services ?? null } }, children);
62
61
  }
63
62
  /**
64
- * Access the nearest `PathProvider`'s path instance.
65
- * Throws if used outside of a `<PathProvider>`.
63
+ * Access the nearest `PathProvider`'s path instance and optional services object.
64
+ * Throws if used outside of a `<PathProvider>` or `<PathShell>`.
65
+ *
66
+ * `TData` narrows `snapshot.data`; `TServices` types the `services` value.
66
67
  */
67
68
  export function usePathContext() {
68
69
  const ctx = useContext(PathContext);
69
70
  if (ctx === null) {
70
71
  throw new Error("usePathContext must be used within a <PathProvider>.");
71
72
  }
72
- return ctx;
73
+ return {
74
+ ...ctx.path,
75
+ services: ctx.services
76
+ };
73
77
  }
74
78
  /**
75
79
  * Default UI shell for React Native. Renders a progress dot indicator,
@@ -87,7 +91,7 @@ export function usePathContext() {
87
91
  * />
88
92
  * ```
89
93
  */
90
- export const PathShell = forwardRef(function PathShell({ path: pathDef, engine: externalEngine, steps, initialData = {}, autoStart = true, onComplete, onCancel, onEvent, backLabel = "Previous", nextLabel = "Next", completeLabel = "Complete", cancelLabel = "Cancel", hideCancel = false, hideProgress = false, footerLayout = "auto", validationDisplay = "summary", renderHeader, renderFooter, style, keyboardVerticalOffset = 0, disableBodyScroll = false, }, ref) {
94
+ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine: externalEngine, steps, initialData = {}, autoStart = true, onComplete, onCancel, onEvent, backLabel = "Previous", nextLabel = "Next", completeLabel = "Complete", loadingLabel, cancelLabel = "Cancel", hideCancel = false, hideProgress = false, footerLayout = "auto", validationDisplay = "summary", renderHeader, renderFooter, style, keyboardVerticalOffset = 0, disableBodyScroll = false, services, }, ref) {
91
95
  const pathReturn = usePath({
92
96
  engine: externalEngine,
93
97
  onEvent(event) {
@@ -98,7 +102,7 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
98
102
  onCancel?.(event.data);
99
103
  },
100
104
  });
101
- const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart } = pathReturn;
105
+ const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
102
106
  useImperativeHandle(ref, () => ({
103
107
  restart: () => restart(),
104
108
  }));
@@ -114,12 +118,15 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
114
118
  const stepContent = snapshot
115
119
  ? ((snapshot.formId ? steps[snapshot.formId] : undefined) ?? steps[snapshot.stepId] ?? null)
116
120
  : null;
121
+ const contextValue = { path: pathReturn, services: services ?? null };
117
122
  const actions = {
118
123
  next, previous, cancel, goToStep, goToStepChecked, setData,
119
124
  restart: () => restart(),
125
+ retry: () => retry(),
126
+ suspend: () => suspend(),
120
127
  };
121
128
  if (!snapshot) {
122
- return (_jsx(PathContext.Provider, { value: pathReturn, children: _jsx(View, { style: [styles.shell, style], children: _jsxs(View, { style: styles.emptyState, children: [_jsx(Text, { style: styles.emptyText, children: "No active path." }), !autoStart && (_jsx(Pressable, { style: styles.btnPrimary, onPress: () => start(pathDef, initialData), children: _jsx(Text, { style: styles.btnPrimaryText, children: "Start" }) }))] }) }) }));
129
+ return (_jsx(PathContext.Provider, { value: contextValue, children: _jsx(View, { style: [styles.shell, style], children: _jsxs(View, { style: styles.emptyState, children: [_jsx(Text, { style: styles.emptyText, children: "No active path." }), !autoStart && (_jsx(Pressable, { style: styles.btnPrimary, onPress: () => start(pathDef, initialData), children: _jsx(Text, { style: styles.btnPrimaryText, children: "Start" }) }))] }) }) }));
123
130
  }
124
131
  const resolvedLayout = footerLayout === "auto"
125
132
  ? snapshot.stepCount === 1 && snapshot.nestingLevel === 0
@@ -128,7 +135,7 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
128
135
  : footerLayout;
129
136
  const isFormMode = resolvedLayout === "form";
130
137
  const showProgress = !hideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
131
- return (_jsx(PathContext.Provider, { value: pathReturn, children: _jsxs(KeyboardAvoidingView, { style: [styles.shell, style], behavior: Platform.OS === "ios" ? "padding" : undefined, keyboardVerticalOffset: keyboardVerticalOffset, children: [showProgress && (renderHeader
138
+ return (_jsx(PathContext.Provider, { value: contextValue, children: _jsxs(KeyboardAvoidingView, { style: [styles.shell, style], behavior: Platform.OS === "ios" ? "padding" : undefined, keyboardVerticalOffset: keyboardVerticalOffset, children: [showProgress && (renderHeader
132
139
  ? renderHeader(snapshot)
133
140
  : (_jsxs(View, { style: styles.header, children: [_jsx(View, { style: styles.stepper, children: snapshot.steps.map((step, i) => (_jsx(View, { style: [
134
141
  styles.dot,
@@ -140,19 +147,21 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
140
147
  return title ? _jsx(Text, { style: styles.stepTitle, children: title }) : null;
141
148
  })(), _jsx(View, { style: styles.track, children: _jsx(View, { style: [styles.trackFill, { width: `${snapshot.progress * 100}%` }] }) })] }))), disableBodyScroll
142
149
  ? _jsx(View, { style: [styles.body, styles.bodyContent], children: stepContent })
143
- : _jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.bodyContent, children: stepContent }), validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && (_jsx(View, { style: styles.validation, children: Object.entries(snapshot.fieldErrors).map(([key, msg]) => (_jsxs(Text, { style: styles.validationItem, children: [key !== "_" && _jsxs(Text, { style: styles.validationLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), Object.keys(snapshot.fieldWarnings).length > 0 && (_jsx(View, { style: styles.warnings, children: Object.entries(snapshot.fieldWarnings).map(([key, msg]) => (_jsxs(Text, { style: styles.warningItem, children: [key !== "_" && _jsxs(Text, { style: styles.warningLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), renderFooter
144
- ? renderFooter(snapshot, actions)
145
- : (_jsxs(View, { style: styles.footer, children: [_jsxs(View, { style: styles.footerLeft, children: [isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.isNavigating && styles.btnDisabled], onPress: cancel, disabled: snapshot.isNavigating, children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), !isFormMode && !snapshot.isFirstStep && (_jsx(Pressable, { style: [styles.btn, styles.btnBack, (snapshot.isNavigating || !snapshot.canMovePrevious) && styles.btnDisabled], onPress: previous, disabled: snapshot.isNavigating || !snapshot.canMovePrevious, children: _jsxs(Text, { style: styles.btnBackText, children: ["\u2190 ", backLabel] }) }))] }), _jsxs(View, { style: styles.footerRight, children: [!isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.isNavigating && styles.btnDisabled], onPress: cancel, disabled: snapshot.isNavigating, children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), _jsx(Pressable, { style: [styles.btn, styles.btnPrimary, snapshot.isNavigating && styles.btnDisabled], onPress: next, disabled: snapshot.isNavigating || !snapshot.canMoveNext, children: snapshot.isNavigating
146
- ? _jsx(ActivityIndicator, { size: "small", color: "#ffffff" })
147
- : _jsx(Text, { style: styles.btnPrimaryText, children: snapshot.isLastStep ? completeLabel : `${nextLabel} →` }) })] })] }))] }) }));
150
+ : _jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.bodyContent, children: stepContent }), validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && (_jsx(View, { style: styles.validation, children: Object.entries(snapshot.fieldErrors).map(([key, msg]) => (_jsxs(Text, { style: styles.validationItem, children: [key !== "_" && _jsxs(Text, { style: styles.validationLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), Object.keys(snapshot.fieldWarnings).length > 0 && (_jsx(View, { style: styles.warnings, children: Object.entries(snapshot.fieldWarnings).map(([key, msg]) => (_jsxs(Text, { style: styles.warningItem, children: [key !== "_" && _jsxs(Text, { style: styles.warningLabel, children: [formatFieldKey(key), ": "] }), msg] }, key))) })), validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError && (_jsx(Text, { style: styles.blockingError, children: snapshot.blockingError })), snapshot.status === "error" && snapshot.error
151
+ ? (() => {
152
+ const err = snapshot.error;
153
+ const escalated = err.retryCount >= 2;
154
+ return (_jsxs(View, { style: styles.errorPanel, children: [_jsx(Text, { style: styles.errorTitle, children: escalated ? "Still having trouble." : "Something went wrong." }), _jsxs(Text, { style: styles.errorMessage, children: [errorPhaseMessage(err.phase), err.message ? ` ${err.message}` : ""] }), _jsxs(View, { style: styles.errorActions, children: [!escalated && (_jsx(Pressable, { style: [styles.btn, styles.btnRetry], onPress: retry, children: _jsx(Text, { style: styles.btnPrimaryText, children: "Try again" }) })), snapshot.hasPersistence && (_jsx(Pressable, { style: [styles.btn, escalated ? styles.btnRetry : styles.btnSuspend], onPress: suspend, children: _jsx(Text, { style: escalated ? styles.btnPrimaryText : styles.btnCancelText, children: "Save and come back later" }) })), escalated && !snapshot.hasPersistence && (_jsx(Pressable, { style: [styles.btn, styles.btnRetry], onPress: retry, children: _jsx(Text, { style: styles.btnPrimaryText, children: "Try again" }) }))] })] }));
155
+ })()
156
+ : renderFooter
157
+ ? renderFooter(snapshot, actions)
158
+ : (_jsxs(View, { style: styles.footer, children: [_jsxs(View, { style: styles.footerLeft, children: [isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), !isFormMode && !snapshot.isFirstStep && (_jsx(Pressable, { style: [styles.btn, styles.btnBack, (snapshot.status !== "idle" || !snapshot.canMovePrevious) && styles.btnDisabled], onPress: previous, disabled: snapshot.status !== "idle" || !snapshot.canMovePrevious, children: _jsxs(Text, { style: styles.btnBackText, children: ["\u2190 ", backLabel] }) }))] }), _jsxs(View, { style: styles.footerRight, children: [!isFormMode && !hideCancel && (_jsx(Pressable, { style: [styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled], onPress: cancel, disabled: snapshot.status !== "idle", children: _jsx(Text, { style: styles.btnCancelText, children: cancelLabel }) })), _jsx(Pressable, { style: [styles.btn, styles.btnPrimary, snapshot.status !== "idle" && styles.btnDisabled], onPress: next, disabled: snapshot.status !== "idle" || !snapshot.canMoveNext, children: snapshot.status !== "idle" && loadingLabel
159
+ ? _jsx(Text, { style: styles.btnPrimaryText, children: loadingLabel })
160
+ : snapshot.status !== "idle"
161
+ ? _jsx(ActivityIndicator, { size: "small", color: "#ffffff" })
162
+ : _jsx(Text, { style: styles.btnPrimaryText, children: snapshot.isLastStep ? completeLabel : `${nextLabel} →` }) })] })] }))] }) }));
148
163
  });
149
164
  // ---------------------------------------------------------------------------
150
- // Helpers
151
- // ---------------------------------------------------------------------------
152
- function formatFieldKey(key) {
153
- return key.replace(/([A-Z])/g, " $1").replace(/^./, (c) => c.toUpperCase()).trim();
154
- }
155
- // ---------------------------------------------------------------------------
156
165
  // Styles
157
166
  // ---------------------------------------------------------------------------
158
167
  const styles = StyleSheet.create({
@@ -317,5 +326,38 @@ const styles = StyleSheet.create({
317
326
  fontWeight: "500",
318
327
  fontSize: 15,
319
328
  },
329
+ blockingError: {
330
+ fontSize: 13,
331
+ color: "#dc2626",
332
+ marginTop: 4,
333
+ },
334
+ btnRetry: {
335
+ backgroundColor: "#dc2626",
336
+ },
337
+ btnSuspend: {
338
+ backgroundColor: "transparent",
339
+ },
340
+ errorPanel: {
341
+ backgroundColor: "#fef2f2",
342
+ borderRadius: 10,
343
+ borderWidth: 1,
344
+ borderColor: "#fecaca",
345
+ padding: 16,
346
+ gap: 8,
347
+ },
348
+ errorTitle: {
349
+ fontSize: 14,
350
+ fontWeight: "600",
351
+ color: "#dc2626",
352
+ },
353
+ errorMessage: {
354
+ fontSize: 13,
355
+ color: "#6b7280",
356
+ },
357
+ errorActions: {
358
+ flexDirection: "row",
359
+ gap: 8,
360
+ marginTop: 4,
361
+ },
320
362
  });
321
363
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daltonr/pathwrite-react-native",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "React Native adapter for @daltonr/pathwrite-core — hooks, context provider, and optional PathShell default UI.",
@@ -44,7 +44,7 @@
44
44
  "react-native": ">=0.72.0"
45
45
  },
46
46
  "dependencies": {
47
- "@daltonr/pathwrite-core": "^0.9.0"
47
+ "@daltonr/pathwrite-core": "^0.10.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "react": "^18.3.1",
package/src/index.tsx CHANGED
@@ -28,6 +28,8 @@ import {
28
28
  PathEvent,
29
29
  PathSnapshot,
30
30
  ProgressLayout,
31
+ formatFieldKey,
32
+ errorPhaseMessage,
31
33
  } from "@daltonr/pathwrite-core";
32
34
 
33
35
  // ---------------------------------------------------------------------------
@@ -72,10 +74,19 @@ export interface UsePathReturn<TData extends PathData = PathData> {
72
74
  resetStep: () => void;
73
75
  /** Tear down any active path and immediately start the given path fresh. */
74
76
  restart: () => void;
77
+ /** Re-runs the operation that set `snapshot.error`. Increments `retryCount` on repeated failure. No-op when there is no pending error. */
78
+ retry: () => void;
79
+ /** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
80
+ suspend: () => void;
75
81
  }
76
82
 
77
83
  export type PathProviderProps = PropsWithChildren<{
78
84
  onEvent?: (event: PathEvent) => void;
85
+ /**
86
+ * Services object passed through context to all step components.
87
+ * Step components access it via `usePathContext<TData, TServices>()`.
88
+ */
89
+ services?: unknown;
79
90
  }>;
80
91
 
81
92
  // ---------------------------------------------------------------------------
@@ -141,35 +152,47 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
141
152
  ) as UsePathReturn<TData>["setData"];
142
153
  const resetStep = useCallback(() => engine.resetStep(), [engine]);
143
154
  const restart = useCallback(() => engine.restart(), [engine]);
155
+ const retry = useCallback(() => engine.retry(), [engine]);
156
+ const suspend = useCallback(() => engine.suspend(), [engine]);
144
157
 
145
- return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart };
158
+ return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend };
146
159
  }
147
160
 
148
161
  // ---------------------------------------------------------------------------
149
162
  // Context + Provider
150
163
  // ---------------------------------------------------------------------------
151
164
 
152
- const PathContext = createContext<UsePathReturn | null>(null);
165
+ interface PathContextValue {
166
+ path: UsePathReturn;
167
+ services: unknown;
168
+ }
169
+
170
+ const PathContext = createContext<PathContextValue | null>(null);
153
171
 
154
172
  /**
155
173
  * Provides a single `usePath` instance to all descendants.
156
174
  * Consume with `usePathContext()`.
157
175
  */
158
- export function PathProvider({ children, onEvent }: PathProviderProps): ReactElement {
176
+ export function PathProvider({ children, onEvent, services }: PathProviderProps): ReactElement {
159
177
  const path = usePath({ onEvent });
160
- return createElement(PathContext.Provider, { value: path }, children);
178
+ return createElement(PathContext.Provider, { value: { path, services: services ?? null } }, children);
161
179
  }
162
180
 
163
181
  /**
164
- * Access the nearest `PathProvider`'s path instance.
165
- * Throws if used outside of a `<PathProvider>`.
182
+ * Access the nearest `PathProvider`'s path instance and optional services object.
183
+ * Throws if used outside of a `<PathProvider>` or `<PathShell>`.
184
+ *
185
+ * `TData` narrows `snapshot.data`; `TServices` types the `services` value.
166
186
  */
167
- export function usePathContext<TData extends PathData = PathData>(): Omit<UsePathReturn<TData>, "snapshot"> & { snapshot: PathSnapshot<TData> } {
187
+ export function usePathContext<TData extends PathData = PathData, TServices = unknown>(): Omit<UsePathReturn<TData>, "snapshot"> & { snapshot: PathSnapshot<TData>; services: TServices } {
168
188
  const ctx = useContext(PathContext);
169
189
  if (ctx === null) {
170
190
  throw new Error("usePathContext must be used within a <PathProvider>.");
171
191
  }
172
- return ctx as Omit<UsePathReturn<TData>, "snapshot"> & { snapshot: PathSnapshot<TData> };
192
+ return {
193
+ ...(ctx.path as unknown as Omit<UsePathReturn<TData>, "snapshot"> & { snapshot: PathSnapshot<TData> }),
194
+ services: ctx.services as TServices
195
+ };
173
196
  }
174
197
 
175
198
  // ---------------------------------------------------------------------------
@@ -189,6 +212,8 @@ export interface PathShellActions {
189
212
  goToStepChecked: (stepId: string) => void;
190
213
  setData: (key: string, value: unknown) => void;
191
214
  restart: () => void;
215
+ retry: () => void;
216
+ suspend: () => void;
192
217
  }
193
218
 
194
219
  export interface PathShellProps {
@@ -214,6 +239,8 @@ export interface PathShellProps {
214
239
  nextLabel?: string;
215
240
  /** Label for the Complete button (last step). Defaults to "Complete". */
216
241
  completeLabel?: string;
242
+ /** Label shown on the Next/Complete button while an async operation is in progress. When undefined, an ActivityIndicator spinner is shown instead. */
243
+ loadingLabel?: string;
217
244
  /** Label for the Cancel button. Defaults to "Cancel". */
218
245
  cancelLabel?: string;
219
246
  /** If true, hide the Cancel button. */
@@ -253,6 +280,11 @@ export interface PathShellProps {
253
280
  * warning. The step is then responsible for managing its own scroll.
254
281
  */
255
282
  disableBodyScroll?: boolean;
283
+ /**
284
+ * Services object passed through context to all step components.
285
+ * Step components access it via `usePathContext<TData, TServices>()`.
286
+ */
287
+ services?: unknown;
256
288
  }
257
289
 
258
290
  /**
@@ -283,6 +315,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
283
315
  backLabel = "Previous",
284
316
  nextLabel = "Next",
285
317
  completeLabel = "Complete",
318
+ loadingLabel,
286
319
  cancelLabel = "Cancel",
287
320
  hideCancel = false,
288
321
  hideProgress = false,
@@ -293,6 +326,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
293
326
  style,
294
327
  keyboardVerticalOffset = 0,
295
328
  disableBodyScroll = false,
329
+ services,
296
330
  }: PathShellProps, ref): ReactElement {
297
331
  const pathReturn = usePath({
298
332
  engine: externalEngine,
@@ -303,7 +337,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
303
337
  },
304
338
  });
305
339
 
306
- const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart } = pathReturn;
340
+ const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
307
341
 
308
342
  useImperativeHandle(ref, () => ({
309
343
  restart: () => restart(),
@@ -323,14 +357,18 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
323
357
  ? ((snapshot.formId ? steps[snapshot.formId] : undefined) ?? steps[snapshot.stepId] ?? null)
324
358
  : null;
325
359
 
360
+ const contextValue: PathContextValue = { path: pathReturn, services: services ?? null };
361
+
326
362
  const actions: PathShellActions = {
327
363
  next, previous, cancel, goToStep, goToStepChecked, setData,
328
364
  restart: () => restart(),
365
+ retry: () => retry(),
366
+ suspend: () => suspend(),
329
367
  };
330
368
 
331
369
  if (!snapshot) {
332
370
  return (
333
- <PathContext.Provider value={pathReturn}>
371
+ <PathContext.Provider value={contextValue}>
334
372
  <View style={[styles.shell, style]}>
335
373
  <View style={styles.emptyState}>
336
374
  <Text style={styles.emptyText}>No active path.</Text>
@@ -356,7 +394,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
356
394
  !hideProgress && (snapshot.stepCount > 1 || snapshot.nestingLevel > 0);
357
395
 
358
396
  return (
359
- <PathContext.Provider value={pathReturn}>
397
+ <PathContext.Provider value={contextValue}>
360
398
  <KeyboardAvoidingView
361
399
  style={[styles.shell, style]}
362
400
  behavior={Platform.OS === "ios" ? "padding" : undefined}
@@ -426,26 +464,68 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
426
464
  </View>
427
465
  )}
428
466
 
429
- {/* Footernavigation or custom */}
430
- {renderFooter
467
+ {/* Blocking error guard returned { allowed: false, reason } */}
468
+ {validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError && (
469
+ <Text style={styles.blockingError}>{snapshot.blockingError}</Text>
470
+ )}
471
+
472
+ {/* Error panel — replaces footer when an async operation has failed */}
473
+ {snapshot.status === "error" && snapshot.error
474
+ ? (() => {
475
+ const err = snapshot.error!;
476
+ const escalated = err.retryCount >= 2;
477
+ return (
478
+ <View style={styles.errorPanel}>
479
+ <Text style={styles.errorTitle}>
480
+ {escalated ? "Still having trouble." : "Something went wrong."}
481
+ </Text>
482
+ <Text style={styles.errorMessage}>
483
+ {errorPhaseMessage(err.phase)}{err.message ? ` ${err.message}` : ""}
484
+ </Text>
485
+ <View style={styles.errorActions}>
486
+ {!escalated && (
487
+ <Pressable style={[styles.btn, styles.btnRetry]} onPress={retry}>
488
+ <Text style={styles.btnPrimaryText}>Try again</Text>
489
+ </Pressable>
490
+ )}
491
+ {snapshot.hasPersistence && (
492
+ <Pressable
493
+ style={[styles.btn, escalated ? styles.btnRetry : styles.btnSuspend]}
494
+ onPress={suspend}
495
+ >
496
+ <Text style={escalated ? styles.btnPrimaryText : styles.btnCancelText}>
497
+ Save and come back later
498
+ </Text>
499
+ </Pressable>
500
+ )}
501
+ {escalated && !snapshot.hasPersistence && (
502
+ <Pressable style={[styles.btn, styles.btnRetry]} onPress={retry}>
503
+ <Text style={styles.btnPrimaryText}>Try again</Text>
504
+ </Pressable>
505
+ )}
506
+ </View>
507
+ </View>
508
+ );
509
+ })()
510
+ : renderFooter
431
511
  ? renderFooter(snapshot, actions)
432
512
  : (
433
513
  <View style={styles.footer}>
434
514
  <View style={styles.footerLeft}>
435
515
  {isFormMode && !hideCancel && (
436
516
  <Pressable
437
- style={[styles.btn, styles.btnCancel, snapshot.isNavigating && styles.btnDisabled]}
517
+ style={[styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled]}
438
518
  onPress={cancel}
439
- disabled={snapshot.isNavigating}
519
+ disabled={snapshot.status !== "idle"}
440
520
  >
441
521
  <Text style={styles.btnCancelText}>{cancelLabel}</Text>
442
522
  </Pressable>
443
523
  )}
444
524
  {!isFormMode && !snapshot.isFirstStep && (
445
525
  <Pressable
446
- style={[styles.btn, styles.btnBack, (snapshot.isNavigating || !snapshot.canMovePrevious) && styles.btnDisabled]}
526
+ style={[styles.btn, styles.btnBack, (snapshot.status !== "idle" || !snapshot.canMovePrevious) && styles.btnDisabled]}
447
527
  onPress={previous}
448
- disabled={snapshot.isNavigating || !snapshot.canMovePrevious}
528
+ disabled={snapshot.status !== "idle" || !snapshot.canMovePrevious}
449
529
  >
450
530
  <Text style={styles.btnBackText}>← {backLabel}</Text>
451
531
  </Pressable>
@@ -454,21 +534,23 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
454
534
  <View style={styles.footerRight}>
455
535
  {!isFormMode && !hideCancel && (
456
536
  <Pressable
457
- style={[styles.btn, styles.btnCancel, snapshot.isNavigating && styles.btnDisabled]}
537
+ style={[styles.btn, styles.btnCancel, snapshot.status !== "idle" && styles.btnDisabled]}
458
538
  onPress={cancel}
459
- disabled={snapshot.isNavigating}
539
+ disabled={snapshot.status !== "idle"}
460
540
  >
461
541
  <Text style={styles.btnCancelText}>{cancelLabel}</Text>
462
542
  </Pressable>
463
543
  )}
464
544
  <Pressable
465
- style={[styles.btn, styles.btnPrimary, snapshot.isNavigating && styles.btnDisabled]}
545
+ style={[styles.btn, styles.btnPrimary, snapshot.status !== "idle" && styles.btnDisabled]}
466
546
  onPress={next}
467
- disabled={snapshot.isNavigating || !snapshot.canMoveNext}
547
+ disabled={snapshot.status !== "idle" || !snapshot.canMoveNext}
468
548
  >
469
- {snapshot.isNavigating
470
- ? <ActivityIndicator size="small" color="#ffffff" />
471
- : <Text style={styles.btnPrimaryText}>{snapshot.isLastStep ? completeLabel : `${nextLabel} →`}</Text>
549
+ {snapshot.status !== "idle" && loadingLabel
550
+ ? <Text style={styles.btnPrimaryText}>{loadingLabel}</Text>
551
+ : snapshot.status !== "idle"
552
+ ? <ActivityIndicator size="small" color="#ffffff" />
553
+ : <Text style={styles.btnPrimaryText}>{snapshot.isLastStep ? completeLabel : `${nextLabel} →`}</Text>
472
554
  }
473
555
  </Pressable>
474
556
  </View>
@@ -480,13 +562,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
480
562
  );
481
563
  });
482
564
 
483
- // ---------------------------------------------------------------------------
484
- // Helpers
485
- // ---------------------------------------------------------------------------
486
565
 
487
- function formatFieldKey(key: string): string {
488
- return key.replace(/([A-Z])/g, " $1").replace(/^./, (c) => c.toUpperCase()).trim();
489
- }
490
566
 
491
567
  // ---------------------------------------------------------------------------
492
568
  // Styles
@@ -654,6 +730,39 @@ const styles = StyleSheet.create({
654
730
  fontWeight: "500",
655
731
  fontSize: 15,
656
732
  },
733
+ blockingError: {
734
+ fontSize: 13,
735
+ color: "#dc2626",
736
+ marginTop: 4,
737
+ },
738
+ btnRetry: {
739
+ backgroundColor: "#dc2626",
740
+ },
741
+ btnSuspend: {
742
+ backgroundColor: "transparent",
743
+ },
744
+ errorPanel: {
745
+ backgroundColor: "#fef2f2",
746
+ borderRadius: 10,
747
+ borderWidth: 1,
748
+ borderColor: "#fecaca",
749
+ padding: 16,
750
+ gap: 8,
751
+ },
752
+ errorTitle: {
753
+ fontSize: 14,
754
+ fontWeight: "600",
755
+ color: "#dc2626",
756
+ },
757
+ errorMessage: {
758
+ fontSize: 13,
759
+ color: "#6b7280",
760
+ },
761
+ errorActions: {
762
+ flexDirection: "row",
763
+ gap: 8,
764
+ marginTop: 4,
765
+ },
657
766
  });
658
767
 
659
768
  // ---------------------------------------------------------------------------