@daltonr/pathwrite-react 0.10.1 → 0.12.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 +6 -2
- package/dist/index.css +25 -0
- package/dist/index.d.ts +53 -10
- package/dist/index.js +55 -18
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +120 -29
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ Step components call `usePathContext()` to access engine state — no prop drill
|
|
|
73
73
|
|
|
74
74
|
| Return value | Type | Description |
|
|
75
75
|
|---|---|---|
|
|
76
|
-
| `snapshot` | `PathSnapshot \| null` | Current snapshot. `null` when no path is active. Triggers re-render on change. |
|
|
76
|
+
| `snapshot` | `PathSnapshot \| null` | Current snapshot. `null` when no path is active or when `completionBehaviour: "dismiss"` is used. With the default `"stayOnFinal"`, a non-null snapshot with `status === "completed"` is returned after the path finishes. Triggers re-render on change. |
|
|
77
77
|
| `start(definition, data?)` | function | Start or re-start a path. |
|
|
78
78
|
| `next()` | function | Advance one step. Completes the path on the last step. |
|
|
79
79
|
| `previous()` | function | Go back one step. No-op on the first step of a top-level path. |
|
|
@@ -86,6 +86,7 @@ Step components call `usePathContext()` to access engine state — no prop drill
|
|
|
86
86
|
| `suspend()` | function | Suspend an async step while work completes. |
|
|
87
87
|
| `retry()` | function | Retry the current step after a suspension or error. |
|
|
88
88
|
| `restart(definition, data?)` | function | Tear down the active path without firing hooks and start fresh. |
|
|
89
|
+
| `validate()` | function | Set `snapshot.hasValidated` without navigating. Triggers all inline field errors simultaneously. Used to validate all tabs in a nested shell at once. |
|
|
89
90
|
|
|
90
91
|
All returned callbacks are referentially stable — safe to pass as props or include in `useEffect` dependency arrays.
|
|
91
92
|
|
|
@@ -103,11 +104,14 @@ All returned callbacks are referentially stable — safe to pass as props or inc
|
|
|
103
104
|
| `onComplete` | `(data: PathData) => void` | — | Called when the path completes. |
|
|
104
105
|
| `onCancel` | `(data: PathData) => void` | — | Called when the path is cancelled. |
|
|
105
106
|
| `engine` | `PathEngine` | — | An externally-managed engine. When provided, `PathShell` skips its own `start()`. |
|
|
107
|
+
| `restoreKey` | `string` | — | When set, the shell automatically saves its full state (data + active step) into the nearest outer `PathShell`'s data under this key on every change, and restores from it on remount. No-op on a top-level shell. |
|
|
108
|
+
| `validateWhen` | `boolean` | `false` | When it becomes `true`, calls `validate()` on the engine. Bind to the outer snapshot's `hasAttemptedNext` when this shell is nested inside a step of an outer shell. |
|
|
106
109
|
| `validationDisplay` | `"summary" \| "inline" \| "both"` | `"summary"` | Where `fieldErrors` are rendered. Use `"inline"` so step components render their own errors. |
|
|
107
110
|
| `loadingLabel` | `string` | `"Loading…"` | Label shown during async step suspension. |
|
|
108
|
-
| `
|
|
111
|
+
| `layout` | `"wizard" \| "form" \| "auto" \| "tabs"` | `"auto"` | `"wizard"`: Back on left, Cancel+Submit on right. `"form"`: Cancel on left, Submit on right, no Back. `"tabs"`: No progress header or footer — for tabbed interfaces. `"auto"` picks `"form"` for single-step paths. |
|
|
109
112
|
| `hideProgress` | `boolean` | `false` | Hide the progress indicator. Also hidden automatically for single-step top-level paths. |
|
|
110
113
|
| `services` | `TServices` | — | Services object injected into step lifecycle hooks via `PathStepContext`. |
|
|
114
|
+
| `completionContent` | `ReactNode` | — | Custom content rendered when `snapshot.status === "completed"` (requires `completionBehaviour: "stayOnFinal"`, the default). If omitted, a default "All done." panel with a "Start over" button is shown. Components inside `completionContent` can call `usePathContext()` to access `restart` and `snapshot.data`. |
|
|
111
115
|
|
|
112
116
|
Step components rendered inside `<PathShell>` call `usePathContext()` to read `snapshot` and invoke actions — no prop drilling required.
|
|
113
117
|
|
package/dist/index.css
CHANGED
|
@@ -77,6 +77,31 @@
|
|
|
77
77
|
font-size: 14px;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/* ------------------------------------------------------------------ */
|
|
81
|
+
/* Completion panel */
|
|
82
|
+
/* ------------------------------------------------------------------ */
|
|
83
|
+
.pw-shell__completion {
|
|
84
|
+
text-align: center;
|
|
85
|
+
padding: 40px 16px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.pw-shell__completion-message {
|
|
89
|
+
font-size: 18px;
|
|
90
|
+
font-weight: 600;
|
|
91
|
+
color: var(--pw-color-text);
|
|
92
|
+
margin: 0 0 20px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.pw-shell__completion-restart {
|
|
96
|
+
border: 1px solid var(--pw-color-btn-border);
|
|
97
|
+
background: var(--pw-color-btn-bg);
|
|
98
|
+
color: var(--pw-color-text);
|
|
99
|
+
padding: var(--pw-btn-padding);
|
|
100
|
+
border-radius: var(--pw-btn-radius);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
font-size: 14px;
|
|
103
|
+
}
|
|
104
|
+
|
|
80
105
|
/* ------------------------------------------------------------------ */
|
|
81
106
|
/* Root progress — persistent top-level bar visible during sub-paths */
|
|
82
107
|
/* ------------------------------------------------------------------ */
|
package/dist/index.d.ts
CHANGED
|
@@ -28,10 +28,14 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
28
28
|
previous: () => void;
|
|
29
29
|
/** Cancel the active path (or sub-path). */
|
|
30
30
|
cancel: () => void;
|
|
31
|
-
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. */
|
|
32
|
-
goToStep: (stepId: string
|
|
31
|
+
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating, so inline errors are visible if the user returns to it. */
|
|
32
|
+
goToStep: (stepId: string, options?: {
|
|
33
|
+
validateOnLeave?: boolean;
|
|
34
|
+
}) => void;
|
|
33
35
|
/** Jump directly to a step by ID, checking the current step's canMoveNext (forward) or canMovePrevious (backward) guard first. Navigation is blocked if the guard returns false. */
|
|
34
|
-
goToStepChecked: (stepId: string
|
|
36
|
+
goToStepChecked: (stepId: string, options?: {
|
|
37
|
+
validateOnLeave?: boolean;
|
|
38
|
+
}) => void;
|
|
35
39
|
/** Update a single data value; triggers a re-render via stateChanged. When `TData` is specified, `key` and `value` are type-checked against your data shape. */
|
|
36
40
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => void;
|
|
37
41
|
/** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
|
|
@@ -53,6 +57,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
53
57
|
* listens for to dismiss the wizard UI. All state and data are preserved.
|
|
54
58
|
*/
|
|
55
59
|
suspend: () => void;
|
|
60
|
+
/** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
|
|
61
|
+
validate: () => void;
|
|
56
62
|
}
|
|
57
63
|
export type PathProviderProps = PropsWithChildren<{
|
|
58
64
|
/** Forwarded to the internal usePath hook. */
|
|
@@ -128,8 +134,25 @@ export interface PathShellProps {
|
|
|
128
134
|
engine?: PathEngine;
|
|
129
135
|
/** Map of step ID → content. The shell renders `steps[snapshot.stepId]` for the current step. */
|
|
130
136
|
steps: Record<string, ReactNode>;
|
|
131
|
-
/** Initial data passed to `engine.start()`. */
|
|
137
|
+
/** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
|
|
132
138
|
initialData?: PathData;
|
|
139
|
+
/**
|
|
140
|
+
* When set, this shell automatically saves its state into the nearest outer `PathShell`'s
|
|
141
|
+
* data under this key on every change, and restores from that stored state on remount.
|
|
142
|
+
*
|
|
143
|
+
* Use this for nested shells (e.g. a tabbed inner shell inside a wizard step) so that
|
|
144
|
+
* navigating away and back preserves both the inner data and the active tab:
|
|
145
|
+
*
|
|
146
|
+
* ```tsx
|
|
147
|
+
* <PathShell path={detailsPath} restoreKey="details" initialData={DETAILS_INITIAL} ... />
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* The outer path stores a full `PathSnapshot` under `data[restoreKey]`. Later steps in
|
|
151
|
+
* the outer path can read inner field values via `data.details?.data.fieldName`.
|
|
152
|
+
*
|
|
153
|
+
* No-op when used on a top-level shell with no outer `PathShell` ancestor.
|
|
154
|
+
*/
|
|
155
|
+
restoreKey?: string;
|
|
133
156
|
/** If true, the path is started automatically on mount. Defaults to `true`. */
|
|
134
157
|
autoStart?: boolean;
|
|
135
158
|
/** Called when the path completes. Receives the final data. */
|
|
@@ -152,13 +175,18 @@ export interface PathShellProps {
|
|
|
152
175
|
hideCancel?: boolean;
|
|
153
176
|
/** If true, hide the progress indicator. Also hidden automatically when the path has only one step. Defaults to `false`. */
|
|
154
177
|
hideProgress?: boolean;
|
|
178
|
+
/** If true, hide the footer (navigation buttons). Defaults to `false`. The error panel is still shown on async failure regardless of this prop. */
|
|
179
|
+
hideFooter?: boolean;
|
|
180
|
+
/** When true, calls `validate()` on the engine so all steps show inline errors simultaneously. Useful when this shell is nested inside a step of an outer shell: bind to the outer snapshot's `hasAttemptedNext`. */
|
|
181
|
+
validateWhen?: boolean;
|
|
155
182
|
/**
|
|
156
|
-
*
|
|
183
|
+
* Shell layout mode:
|
|
157
184
|
* - `"auto"` (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
158
|
-
* - `"wizard"`: Back button on left, Cancel and Submit together on right.
|
|
159
|
-
* - `"form"`: Cancel on left, Submit alone on right. Back button never shown.
|
|
185
|
+
* - `"wizard"`: Progress header + Back button on left, Cancel and Submit together on right.
|
|
186
|
+
* - `"form"`: Progress header + Cancel on left, Submit alone on right. Back button never shown.
|
|
187
|
+
* - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
|
|
160
188
|
*/
|
|
161
|
-
|
|
189
|
+
layout?: "wizard" | "form" | "auto" | "tabs";
|
|
162
190
|
/** Optional extra CSS class on the root element. */
|
|
163
191
|
className?: string;
|
|
164
192
|
/** Render prop to replace the entire header (progress area). Receives the snapshot. */
|
|
@@ -196,6 +224,17 @@ export interface PathShellProps {
|
|
|
196
224
|
* ```
|
|
197
225
|
*/
|
|
198
226
|
services?: unknown;
|
|
227
|
+
/**
|
|
228
|
+
* Content to render when `snapshot.status === "completed"` (i.e. after the
|
|
229
|
+
* path finishes with `completionBehaviour: "stayOnFinal"`).
|
|
230
|
+
*
|
|
231
|
+
* When provided, the shell replaces the step body with this content. If
|
|
232
|
+
* omitted, a default "All done." panel is shown with a Restart button.
|
|
233
|
+
*
|
|
234
|
+
* Has no effect when `completionBehaviour` is `"dismiss"` or `"reset"`,
|
|
235
|
+
* since those modes never produce a `"completed"` snapshot.
|
|
236
|
+
*/
|
|
237
|
+
completionContent?: ReactNode;
|
|
199
238
|
}
|
|
200
239
|
export interface PathShellHandle {
|
|
201
240
|
/** Restart the shell's current path with its original `initialData`, without unmounting. */
|
|
@@ -205,8 +244,12 @@ export interface PathShellActions {
|
|
|
205
244
|
next: () => void;
|
|
206
245
|
previous: () => void;
|
|
207
246
|
cancel: () => void;
|
|
208
|
-
goToStep: (stepId: string
|
|
209
|
-
|
|
247
|
+
goToStep: (stepId: string, options?: {
|
|
248
|
+
validateOnLeave?: boolean;
|
|
249
|
+
}) => void;
|
|
250
|
+
goToStepChecked: (stepId: string, options?: {
|
|
251
|
+
validateOnLeave?: boolean;
|
|
252
|
+
}) => void;
|
|
210
253
|
setData: (key: string, value: unknown) => void;
|
|
211
254
|
/** Restart the shell's current path with its current `initialData`. */
|
|
212
255
|
restart: () => void;
|
package/dist/index.js
CHANGED
|
@@ -34,7 +34,7 @@ export function usePath(options) {
|
|
|
34
34
|
snapshotRef.current = event.snapshot;
|
|
35
35
|
}
|
|
36
36
|
else if (event.type === "completed" || event.type === "cancelled") {
|
|
37
|
-
snapshotRef.current =
|
|
37
|
+
snapshotRef.current = engine.snapshot();
|
|
38
38
|
}
|
|
39
39
|
onEventRef.current?.(event);
|
|
40
40
|
callback();
|
|
@@ -47,14 +47,15 @@ export function usePath(options) {
|
|
|
47
47
|
const next = useCallback(() => engine.next(), [engine]);
|
|
48
48
|
const previous = useCallback(() => engine.previous(), [engine]);
|
|
49
49
|
const cancel = useCallback(() => engine.cancel(), [engine]);
|
|
50
|
-
const goToStep = useCallback((stepId) => engine.goToStep(stepId), [engine]);
|
|
51
|
-
const goToStepChecked = useCallback((stepId) => engine.goToStepChecked(stepId), [engine]);
|
|
50
|
+
const goToStep = useCallback((stepId, options) => engine.goToStep(stepId, options), [engine]);
|
|
51
|
+
const goToStepChecked = useCallback((stepId, options) => engine.goToStepChecked(stepId, options), [engine]);
|
|
52
52
|
const setData = useCallback((key, value) => engine.setData(key, value), [engine]);
|
|
53
53
|
const resetStep = useCallback(() => engine.resetStep(), [engine]);
|
|
54
54
|
const restart = useCallback(() => engine.restart(), [engine]);
|
|
55
55
|
const retry = useCallback(() => engine.retry(), [engine]);
|
|
56
56
|
const suspend = useCallback(() => engine.suspend(), [engine]);
|
|
57
|
-
|
|
57
|
+
const validate = useCallback(() => engine.validate(), [engine]);
|
|
58
|
+
return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend, validate };
|
|
58
59
|
}
|
|
59
60
|
const PathContext = createContext(null);
|
|
60
61
|
/**
|
|
@@ -142,7 +143,10 @@ export function useField(field) {
|
|
|
142
143
|
* />
|
|
143
144
|
* ```
|
|
144
145
|
*/
|
|
145
|
-
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,
|
|
146
|
+
export const PathShell = forwardRef(function PathShell({ path: pathDef, engine: externalEngine, steps, initialData = {}, restoreKey, autoStart = true, onComplete, onCancel, onEvent, backLabel = "Previous", nextLabel = "Next", completeLabel = "Complete", loadingLabel, cancelLabel = "Cancel", hideCancel = false, hideProgress = false, hideFooter = false, layout = "auto", className, renderHeader, renderFooter, validationDisplay = "summary", progressLayout = "merged", services, validateWhen = false, completionContent, }, ref) {
|
|
147
|
+
// Read the outer PathShell's context BEFORE providing our own. Used for
|
|
148
|
+
// restoreKey: the outer context is null when this is a top-level shell.
|
|
149
|
+
const outerCtx = useContext(PathContext);
|
|
146
150
|
const pathReturn = usePath({
|
|
147
151
|
engine: externalEngine,
|
|
148
152
|
onEvent(event) {
|
|
@@ -151,9 +155,17 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
151
155
|
onComplete?.(event.data);
|
|
152
156
|
if (event.type === "cancelled")
|
|
153
157
|
onCancel?.(event.data);
|
|
158
|
+
// Auto-sync inner snapshot to the parent shell's data under restoreKey.
|
|
159
|
+
if (restoreKey && outerCtx && event.type === "stateChanged") {
|
|
160
|
+
outerCtx.path.setData(restoreKey, event.snapshot);
|
|
161
|
+
}
|
|
154
162
|
}
|
|
155
163
|
});
|
|
156
|
-
const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
|
|
164
|
+
const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
if (validateWhen)
|
|
167
|
+
validate();
|
|
168
|
+
}, [validateWhen, validate]);
|
|
157
169
|
useImperativeHandle(ref, () => ({
|
|
158
170
|
restart: () => restart(),
|
|
159
171
|
}));
|
|
@@ -163,7 +175,20 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
163
175
|
useEffect(() => {
|
|
164
176
|
if (autoStart && !startedRef.current && !externalEngine) {
|
|
165
177
|
startedRef.current = true;
|
|
166
|
-
|
|
178
|
+
let startData = initialData;
|
|
179
|
+
let restoreStepId;
|
|
180
|
+
if (restoreKey && outerCtx) {
|
|
181
|
+
const stored = outerCtx.path.snapshot?.data[restoreKey];
|
|
182
|
+
if (stored != null && typeof stored === "object" && "stepId" in stored) {
|
|
183
|
+
startData = stored.data;
|
|
184
|
+
if (stored.stepIndex > 0)
|
|
185
|
+
restoreStepId = stored.stepId;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const p = start(pathDef, startData);
|
|
189
|
+
if (restoreStepId) {
|
|
190
|
+
Promise.resolve(p).then(() => goToStep(restoreStepId));
|
|
191
|
+
}
|
|
167
192
|
}
|
|
168
193
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
169
194
|
}, []);
|
|
@@ -175,6 +200,8 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
175
200
|
? ((snapshot.formId ? steps[snapshot.formId] : undefined) ?? steps[snapshot.stepId] ?? null)
|
|
176
201
|
: null;
|
|
177
202
|
const contextValue = { path: pathReturn, services: services ?? null };
|
|
203
|
+
const effectiveHideProgress = hideProgress || layout === "tabs";
|
|
204
|
+
const effectiveHideFooter = hideFooter || layout === "tabs";
|
|
178
205
|
if (!snapshot) {
|
|
179
206
|
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", className) }, createElement("div", { className: "pw-shell__empty" }, createElement("p", null, "No active path."), !autoStart && createElement("button", {
|
|
180
207
|
type: "button",
|
|
@@ -182,14 +209,22 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
182
209
|
onClick: () => start(pathDef, initialData)
|
|
183
210
|
}, "Start"))));
|
|
184
211
|
}
|
|
212
|
+
if (snapshot.status === "completed") {
|
|
213
|
+
const showCompletionProgress = !effectiveHideProgress && snapshot.stepCount > 1;
|
|
214
|
+
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", className) }, showCompletionProgress && defaultHeader(snapshot), createElement("div", { className: "pw-shell__body" }, completionContent ?? createElement("div", { className: "pw-shell__completion" }, createElement("p", { className: "pw-shell__completion-message" }, "All done."), createElement("button", {
|
|
215
|
+
type: "button",
|
|
216
|
+
className: "pw-shell__completion-restart",
|
|
217
|
+
onClick: () => restart(),
|
|
218
|
+
}, "Start over")))));
|
|
219
|
+
}
|
|
185
220
|
const actions = {
|
|
186
221
|
next, previous, cancel, goToStep, goToStepChecked, setData,
|
|
187
222
|
restart: () => restart(),
|
|
188
223
|
retry: () => retry(),
|
|
189
224
|
suspend: () => suspend(),
|
|
190
225
|
};
|
|
191
|
-
const showRoot = !
|
|
192
|
-
const showActive = !
|
|
226
|
+
const showRoot = !effectiveHideProgress && !!snapshot.rootProgress && progressLayout !== "activeOnly";
|
|
227
|
+
const showActive = !effectiveHideProgress && (renderHeader
|
|
193
228
|
? true
|
|
194
229
|
: (snapshot.stepCount > 1 || snapshot.nestingLevel > 0) && progressLayout !== "rootOnly");
|
|
195
230
|
return createElement(PathContext.Provider, { value: contextValue }, createElement("div", { className: cls("pw-shell", progressLayout !== "merged" && `pw-shell--progress-${progressLayout}`, className) },
|
|
@@ -202,21 +237,23 @@ export const PathShell = forwardRef(function PathShell({ path: pathDef, engine:
|
|
|
202
237
|
// Body — step content
|
|
203
238
|
createElement("div", { className: "pw-shell__body" }, stepContent),
|
|
204
239
|
// Validation messages — suppressed when validationDisplay="inline"
|
|
205
|
-
validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && createElement("ul", { className: "pw-shell__validation" }, ...Object.entries(snapshot.fieldErrors).map(([key, msg]) => createElement("li", { key, className: "pw-shell__validation-item" }, key !== "_" && createElement("span", { className: "pw-shell__validation-label" }, formatFieldKey(key)), msg))),
|
|
240
|
+
validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && Object.keys(snapshot.fieldErrors).length > 0 && createElement("ul", { className: "pw-shell__validation" }, ...Object.entries(snapshot.fieldErrors).map(([key, msg]) => createElement("li", { key, className: "pw-shell__validation-item" }, key !== "_" && createElement("span", { className: "pw-shell__validation-label" }, formatFieldKey(key)), msg))),
|
|
206
241
|
// Warning messages — non-blocking, shown immediately (no hasAttemptedNext gate)
|
|
207
242
|
validationDisplay !== "inline" && Object.keys(snapshot.fieldWarnings).length > 0 && createElement("ul", { className: "pw-shell__warnings" }, ...Object.entries(snapshot.fieldWarnings).map(([key, msg]) => createElement("li", { key, className: "pw-shell__warnings-item" }, key !== "_" && createElement("span", { className: "pw-shell__warnings-label" }, formatFieldKey(key)), msg))),
|
|
208
243
|
// Blocking error — guard returned { allowed: false, reason }
|
|
209
|
-
validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError &&
|
|
244
|
+
validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && snapshot.blockingError &&
|
|
210
245
|
createElement("p", { className: "pw-shell__blocking-error" }, snapshot.blockingError),
|
|
211
246
|
// Error panel — replaces footer when an async operation has failed
|
|
212
247
|
snapshot.status === "error" && snapshot.error
|
|
213
248
|
? defaultErrorPanel(snapshot, actions)
|
|
214
249
|
// Footer — navigation buttons
|
|
215
|
-
:
|
|
216
|
-
? renderFooter
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
250
|
+
: !effectiveHideFooter
|
|
251
|
+
? renderFooter
|
|
252
|
+
? renderFooter(snapshot, actions)
|
|
253
|
+
: defaultFooter(snapshot, actions, {
|
|
254
|
+
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel, layout
|
|
255
|
+
})
|
|
256
|
+
: null));
|
|
220
257
|
});
|
|
221
258
|
// ---------------------------------------------------------------------------
|
|
222
259
|
// Root progress (compact top-level bar visible during sub-paths)
|
|
@@ -268,9 +305,9 @@ function defaultErrorPanel(snapshot, actions) {
|
|
|
268
305
|
}
|
|
269
306
|
function defaultFooter(snapshot, actions, labels) {
|
|
270
307
|
// Auto-detect layout: single-step top-level paths use "form", everything else uses "wizard"
|
|
271
|
-
const resolvedLayout = labels.
|
|
308
|
+
const resolvedLayout = labels.layout === "auto" || labels.layout === "tabs"
|
|
272
309
|
? (snapshot.stepCount === 1 && snapshot.nestingLevel === 0 ? "form" : "wizard")
|
|
273
|
-
: labels.
|
|
310
|
+
: labels.layout;
|
|
274
311
|
const isFormMode = resolvedLayout === "form";
|
|
275
312
|
return createElement("div", { className: "pw-shell__footer" }, createElement("div", { className: "pw-shell__footer-left" },
|
|
276
313
|
// Form mode: Cancel on the left
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daltonr/pathwrite-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "React adapter for @daltonr/pathwrite-core — hooks, context provider, and optional <PathShell> default UI.",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react": ">=18.0.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@daltonr/pathwrite-core": "^0.
|
|
49
|
+
"@daltonr/pathwrite-core": "^0.12.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"react": "^18.3.1",
|
package/src/index.ts
CHANGED
|
@@ -55,10 +55,10 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
55
55
|
previous: () => void;
|
|
56
56
|
/** Cancel the active path (or sub-path). */
|
|
57
57
|
cancel: () => void;
|
|
58
|
-
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. */
|
|
59
|
-
goToStep: (stepId: string) => void;
|
|
58
|
+
/** Jump directly to a step by ID. Calls onLeave / onEnter but bypasses guards and shouldSkip. Pass `{ validateOnLeave: true }` to mark the departing step as attempted before navigating, so inline errors are visible if the user returns to it. */
|
|
59
|
+
goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
60
60
|
/** Jump directly to a step by ID, checking the current step's canMoveNext (forward) or canMovePrevious (backward) guard first. Navigation is blocked if the guard returns false. */
|
|
61
|
-
goToStepChecked: (stepId: string) => void;
|
|
61
|
+
goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
62
62
|
/** Update a single data value; triggers a re-render via stateChanged. When `TData` is specified, `key` and `value` are type-checked against your data shape. */
|
|
63
63
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => void;
|
|
64
64
|
/** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
|
|
@@ -80,6 +80,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
80
80
|
* listens for to dismiss the wizard UI. All state and data are preserved.
|
|
81
81
|
*/
|
|
82
82
|
suspend: () => void;
|
|
83
|
+
/** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
|
|
84
|
+
validate: () => void;
|
|
83
85
|
}
|
|
84
86
|
|
|
85
87
|
export type PathProviderProps = PropsWithChildren<{
|
|
@@ -132,7 +134,7 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
|
|
|
132
134
|
if (event.type === "stateChanged" || event.type === "resumed") {
|
|
133
135
|
snapshotRef.current = event.snapshot as PathSnapshot<TData>;
|
|
134
136
|
} else if (event.type === "completed" || event.type === "cancelled") {
|
|
135
|
-
snapshotRef.current = null;
|
|
137
|
+
snapshotRef.current = engine.snapshot() as PathSnapshot<TData> | null;
|
|
136
138
|
}
|
|
137
139
|
onEventRef.current?.(event);
|
|
138
140
|
callback();
|
|
@@ -162,12 +164,12 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
|
|
|
162
164
|
const cancel = useCallback(() => engine.cancel(), [engine]);
|
|
163
165
|
|
|
164
166
|
const goToStep = useCallback(
|
|
165
|
-
(stepId: string) => engine.goToStep(stepId),
|
|
167
|
+
(stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStep(stepId, options),
|
|
166
168
|
[engine]
|
|
167
169
|
);
|
|
168
170
|
|
|
169
171
|
const goToStepChecked = useCallback(
|
|
170
|
-
(stepId: string) => engine.goToStepChecked(stepId),
|
|
172
|
+
(stepId: string, options?: { validateOnLeave?: boolean }) => engine.goToStepChecked(stepId, options),
|
|
171
173
|
[engine]
|
|
172
174
|
);
|
|
173
175
|
|
|
@@ -184,7 +186,9 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
|
|
|
184
186
|
|
|
185
187
|
const suspend = useCallback(() => engine.suspend(), [engine]);
|
|
186
188
|
|
|
187
|
-
|
|
189
|
+
const validate = useCallback(() => engine.validate(), [engine]);
|
|
190
|
+
|
|
191
|
+
return { snapshot, start, startSubPath, next, previous, cancel, goToStep, goToStepChecked, setData, resetStep, restart, retry, suspend, validate };
|
|
188
192
|
}
|
|
189
193
|
|
|
190
194
|
// ---------------------------------------------------------------------------
|
|
@@ -295,8 +299,25 @@ export interface PathShellProps {
|
|
|
295
299
|
engine?: PathEngine;
|
|
296
300
|
/** Map of step ID → content. The shell renders `steps[snapshot.stepId]` for the current step. */
|
|
297
301
|
steps: Record<string, ReactNode>;
|
|
298
|
-
/** Initial data passed to `engine.start()`. */
|
|
302
|
+
/** Initial data passed to `engine.start()`. Used on first visit. Overridden by a stored snapshot when `restoreKey` is set. */
|
|
299
303
|
initialData?: PathData;
|
|
304
|
+
/**
|
|
305
|
+
* When set, this shell automatically saves its state into the nearest outer `PathShell`'s
|
|
306
|
+
* data under this key on every change, and restores from that stored state on remount.
|
|
307
|
+
*
|
|
308
|
+
* Use this for nested shells (e.g. a tabbed inner shell inside a wizard step) so that
|
|
309
|
+
* navigating away and back preserves both the inner data and the active tab:
|
|
310
|
+
*
|
|
311
|
+
* ```tsx
|
|
312
|
+
* <PathShell path={detailsPath} restoreKey="details" initialData={DETAILS_INITIAL} ... />
|
|
313
|
+
* ```
|
|
314
|
+
*
|
|
315
|
+
* The outer path stores a full `PathSnapshot` under `data[restoreKey]`. Later steps in
|
|
316
|
+
* the outer path can read inner field values via `data.details?.data.fieldName`.
|
|
317
|
+
*
|
|
318
|
+
* No-op when used on a top-level shell with no outer `PathShell` ancestor.
|
|
319
|
+
*/
|
|
320
|
+
restoreKey?: string;
|
|
300
321
|
/** If true, the path is started automatically on mount. Defaults to `true`. */
|
|
301
322
|
autoStart?: boolean;
|
|
302
323
|
/** Called when the path completes. Receives the final data. */
|
|
@@ -319,13 +340,18 @@ export interface PathShellProps {
|
|
|
319
340
|
hideCancel?: boolean;
|
|
320
341
|
/** If true, hide the progress indicator. Also hidden automatically when the path has only one step. Defaults to `false`. */
|
|
321
342
|
hideProgress?: boolean;
|
|
343
|
+
/** If true, hide the footer (navigation buttons). Defaults to `false`. The error panel is still shown on async failure regardless of this prop. */
|
|
344
|
+
hideFooter?: boolean;
|
|
345
|
+
/** When true, calls `validate()` on the engine so all steps show inline errors simultaneously. Useful when this shell is nested inside a step of an outer shell: bind to the outer snapshot's `hasAttemptedNext`. */
|
|
346
|
+
validateWhen?: boolean;
|
|
322
347
|
/**
|
|
323
|
-
*
|
|
348
|
+
* Shell layout mode:
|
|
324
349
|
* - `"auto"` (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
325
|
-
* - `"wizard"`: Back button on left, Cancel and Submit together on right.
|
|
326
|
-
* - `"form"`: Cancel on left, Submit alone on right. Back button never shown.
|
|
350
|
+
* - `"wizard"`: Progress header + Back button on left, Cancel and Submit together on right.
|
|
351
|
+
* - `"form"`: Progress header + Cancel on left, Submit alone on right. Back button never shown.
|
|
352
|
+
* - `"tabs"`: No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
|
|
327
353
|
*/
|
|
328
|
-
|
|
354
|
+
layout?: "wizard" | "form" | "auto" | "tabs";
|
|
329
355
|
/** Optional extra CSS class on the root element. */
|
|
330
356
|
className?: string;
|
|
331
357
|
/** Render prop to replace the entire header (progress area). Receives the snapshot. */
|
|
@@ -363,6 +389,17 @@ export interface PathShellProps {
|
|
|
363
389
|
* ```
|
|
364
390
|
*/
|
|
365
391
|
services?: unknown;
|
|
392
|
+
/**
|
|
393
|
+
* Content to render when `snapshot.status === "completed"` (i.e. after the
|
|
394
|
+
* path finishes with `completionBehaviour: "stayOnFinal"`).
|
|
395
|
+
*
|
|
396
|
+
* When provided, the shell replaces the step body with this content. If
|
|
397
|
+
* omitted, a default "All done." panel is shown with a Restart button.
|
|
398
|
+
*
|
|
399
|
+
* Has no effect when `completionBehaviour` is `"dismiss"` or `"reset"`,
|
|
400
|
+
* since those modes never produce a `"completed"` snapshot.
|
|
401
|
+
*/
|
|
402
|
+
completionContent?: ReactNode;
|
|
366
403
|
}
|
|
367
404
|
|
|
368
405
|
export interface PathShellHandle {
|
|
@@ -374,8 +411,8 @@ export interface PathShellActions {
|
|
|
374
411
|
next: () => void;
|
|
375
412
|
previous: () => void;
|
|
376
413
|
cancel: () => void;
|
|
377
|
-
goToStep: (stepId: string) => void;
|
|
378
|
-
goToStepChecked: (stepId: string) => void;
|
|
414
|
+
goToStep: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
415
|
+
goToStepChecked: (stepId: string, options?: { validateOnLeave?: boolean }) => void;
|
|
379
416
|
setData: (key: string, value: unknown) => void;
|
|
380
417
|
/** Restart the shell's current path with its current `initialData`. */
|
|
381
418
|
restart: () => void;
|
|
@@ -406,6 +443,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
406
443
|
engine: externalEngine,
|
|
407
444
|
steps,
|
|
408
445
|
initialData = {},
|
|
446
|
+
restoreKey,
|
|
409
447
|
autoStart = true,
|
|
410
448
|
onComplete,
|
|
411
449
|
onCancel,
|
|
@@ -417,24 +455,41 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
417
455
|
cancelLabel = "Cancel",
|
|
418
456
|
hideCancel = false,
|
|
419
457
|
hideProgress = false,
|
|
420
|
-
|
|
458
|
+
hideFooter = false,
|
|
459
|
+
layout = "auto",
|
|
421
460
|
className,
|
|
422
461
|
renderHeader,
|
|
423
462
|
renderFooter,
|
|
424
463
|
validationDisplay = "summary",
|
|
425
464
|
progressLayout = "merged",
|
|
426
465
|
services,
|
|
466
|
+
validateWhen = false,
|
|
467
|
+
completionContent,
|
|
427
468
|
}: PathShellProps, ref): ReactElement {
|
|
469
|
+
// Read the outer PathShell's context BEFORE providing our own. Used for
|
|
470
|
+
// restoreKey: the outer context is null when this is a top-level shell.
|
|
471
|
+
const outerCtx = useContext(PathContext);
|
|
472
|
+
|
|
428
473
|
const pathReturn = usePath({
|
|
429
474
|
engine: externalEngine,
|
|
430
475
|
onEvent(event) {
|
|
431
476
|
onEvent?.(event);
|
|
432
477
|
if (event.type === "completed") onComplete?.(event.data);
|
|
433
478
|
if (event.type === "cancelled") onCancel?.(event.data);
|
|
479
|
+
// Auto-sync inner snapshot to the parent shell's data under restoreKey.
|
|
480
|
+
if (restoreKey && outerCtx && event.type === "stateChanged") {
|
|
481
|
+
(outerCtx.path.setData as unknown as (key: string, value: unknown) => void)(
|
|
482
|
+
restoreKey, event.snapshot
|
|
483
|
+
);
|
|
484
|
+
}
|
|
434
485
|
}
|
|
435
486
|
});
|
|
436
487
|
|
|
437
|
-
const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend } = pathReturn;
|
|
488
|
+
const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
|
|
489
|
+
|
|
490
|
+
useEffect(() => {
|
|
491
|
+
if (validateWhen) validate();
|
|
492
|
+
}, [validateWhen, validate]);
|
|
438
493
|
|
|
439
494
|
useImperativeHandle(ref, () => ({
|
|
440
495
|
restart: () => restart(),
|
|
@@ -446,7 +501,19 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
446
501
|
useEffect(() => {
|
|
447
502
|
if (autoStart && !startedRef.current && !externalEngine) {
|
|
448
503
|
startedRef.current = true;
|
|
449
|
-
|
|
504
|
+
let startData: PathData = initialData;
|
|
505
|
+
let restoreStepId: string | undefined;
|
|
506
|
+
if (restoreKey && outerCtx) {
|
|
507
|
+
const stored = outerCtx.path.snapshot?.data[restoreKey] as PathSnapshot | undefined;
|
|
508
|
+
if (stored != null && typeof stored === "object" && "stepId" in stored) {
|
|
509
|
+
startData = stored.data as PathData;
|
|
510
|
+
if (stored.stepIndex > 0) restoreStepId = stored.stepId as string;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const p = start(pathDef, startData);
|
|
514
|
+
if (restoreStepId) {
|
|
515
|
+
Promise.resolve(p).then(() => goToStep(restoreStepId!));
|
|
516
|
+
}
|
|
450
517
|
}
|
|
451
518
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
452
519
|
}, []);
|
|
@@ -461,6 +528,9 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
461
528
|
|
|
462
529
|
const contextValue: PathContextValue = { path: pathReturn, services: services ?? null };
|
|
463
530
|
|
|
531
|
+
const effectiveHideProgress = hideProgress || layout === "tabs";
|
|
532
|
+
const effectiveHideFooter = hideFooter || layout === "tabs";
|
|
533
|
+
|
|
464
534
|
if (!snapshot) {
|
|
465
535
|
return createElement(PathContext.Provider, { value: contextValue },
|
|
466
536
|
createElement("div", { className: cls("pw-shell", className) },
|
|
@@ -476,6 +546,25 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
476
546
|
);
|
|
477
547
|
}
|
|
478
548
|
|
|
549
|
+
if (snapshot.status === "completed") {
|
|
550
|
+
const showCompletionProgress = !effectiveHideProgress && snapshot.stepCount > 1;
|
|
551
|
+
return createElement(PathContext.Provider, { value: contextValue },
|
|
552
|
+
createElement("div", { className: cls("pw-shell", className) },
|
|
553
|
+
showCompletionProgress && defaultHeader(snapshot),
|
|
554
|
+
createElement("div", { className: "pw-shell__body" },
|
|
555
|
+
completionContent ?? createElement("div", { className: "pw-shell__completion" },
|
|
556
|
+
createElement("p", { className: "pw-shell__completion-message" }, "All done."),
|
|
557
|
+
createElement("button", {
|
|
558
|
+
type: "button",
|
|
559
|
+
className: "pw-shell__completion-restart",
|
|
560
|
+
onClick: () => restart(),
|
|
561
|
+
}, "Start over")
|
|
562
|
+
)
|
|
563
|
+
)
|
|
564
|
+
)
|
|
565
|
+
);
|
|
566
|
+
}
|
|
567
|
+
|
|
479
568
|
const actions: PathShellActions = {
|
|
480
569
|
next, previous, cancel, goToStep, goToStepChecked, setData,
|
|
481
570
|
restart: () => restart(),
|
|
@@ -483,8 +572,8 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
483
572
|
suspend: () => suspend(),
|
|
484
573
|
};
|
|
485
574
|
|
|
486
|
-
const showRoot = !
|
|
487
|
-
const showActive = !
|
|
575
|
+
const showRoot = !effectiveHideProgress && !!snapshot.rootProgress && progressLayout !== "activeOnly";
|
|
576
|
+
const showActive = !effectiveHideProgress && (renderHeader
|
|
488
577
|
? true
|
|
489
578
|
: (snapshot.stepCount > 1 || snapshot.nestingLevel > 0) && progressLayout !== "rootOnly");
|
|
490
579
|
|
|
@@ -499,7 +588,7 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
499
588
|
// Body — step content
|
|
500
589
|
createElement("div", { className: "pw-shell__body" }, stepContent),
|
|
501
590
|
// Validation messages — suppressed when validationDisplay="inline"
|
|
502
|
-
validationDisplay !== "inline" && snapshot.hasAttemptedNext && Object.keys(snapshot.fieldErrors).length > 0 && createElement("ul", { className: "pw-shell__validation" },
|
|
591
|
+
validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && Object.keys(snapshot.fieldErrors).length > 0 && createElement("ul", { className: "pw-shell__validation" },
|
|
503
592
|
...Object.entries(snapshot.fieldErrors).map(([key, msg]) =>
|
|
504
593
|
createElement("li", { key, className: "pw-shell__validation-item" },
|
|
505
594
|
key !== "_" && createElement("span", { className: "pw-shell__validation-label" }, formatFieldKey(key)),
|
|
@@ -517,17 +606,19 @@ export const PathShell = forwardRef<PathShellHandle, PathShellProps>(function Pa
|
|
|
517
606
|
)
|
|
518
607
|
),
|
|
519
608
|
// Blocking error — guard returned { allowed: false, reason }
|
|
520
|
-
validationDisplay !== "inline" && snapshot.hasAttemptedNext && snapshot.blockingError &&
|
|
609
|
+
validationDisplay !== "inline" && (snapshot.hasAttemptedNext || snapshot.hasValidated) && snapshot.blockingError &&
|
|
521
610
|
createElement("p", { className: "pw-shell__blocking-error" }, snapshot.blockingError),
|
|
522
611
|
// Error panel — replaces footer when an async operation has failed
|
|
523
612
|
snapshot.status === "error" && snapshot.error
|
|
524
613
|
? defaultErrorPanel(snapshot, actions)
|
|
525
614
|
// Footer — navigation buttons
|
|
526
|
-
:
|
|
527
|
-
? renderFooter
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
615
|
+
: !effectiveHideFooter
|
|
616
|
+
? renderFooter
|
|
617
|
+
? renderFooter(snapshot, actions)
|
|
618
|
+
: defaultFooter(snapshot, actions, {
|
|
619
|
+
backLabel, nextLabel, completeLabel, loadingLabel, cancelLabel, hideCancel, layout
|
|
620
|
+
})
|
|
621
|
+
: null
|
|
531
622
|
)
|
|
532
623
|
);
|
|
533
624
|
});
|
|
@@ -644,7 +735,7 @@ interface FooterLabels {
|
|
|
644
735
|
loadingLabel?: string;
|
|
645
736
|
cancelLabel: string;
|
|
646
737
|
hideCancel: boolean;
|
|
647
|
-
|
|
738
|
+
layout: "wizard" | "form" | "auto" | "tabs";
|
|
648
739
|
}
|
|
649
740
|
|
|
650
741
|
function defaultFooter(
|
|
@@ -653,9 +744,9 @@ function defaultFooter(
|
|
|
653
744
|
labels: FooterLabels
|
|
654
745
|
): ReactElement {
|
|
655
746
|
// Auto-detect layout: single-step top-level paths use "form", everything else uses "wizard"
|
|
656
|
-
const resolvedLayout = labels.
|
|
747
|
+
const resolvedLayout = labels.layout === "auto" || labels.layout === "tabs"
|
|
657
748
|
? (snapshot.stepCount === 1 && snapshot.nestingLevel === 0 ? "form" : "wizard")
|
|
658
|
-
: labels.
|
|
749
|
+
: labels.layout;
|
|
659
750
|
|
|
660
751
|
const isFormMode = resolvedLayout === "form";
|
|
661
752
|
|