@daltonr/pathwrite-solid 0.12.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,7 +35,7 @@ import { PathShell } from "@daltonr/pathwrite-solid";
35
35
  import "@daltonr/pathwrite-solid/styles.css";
36
36
  import type { PathDefinition, PathData } from "@daltonr/pathwrite-core";
37
37
 
38
- interface SignupData extends PathData {
38
+ export interface SignupData extends PathData {
39
39
  name: string;
40
40
  email: string;
41
41
  }
@@ -66,6 +66,7 @@ export function SignupFlow() {
66
66
  ```tsx
67
67
  // DetailsStep.tsx
68
68
  import { usePathContext } from "@daltonr/pathwrite-solid";
69
+ import type { SignupData } from "./SignupFlow";
69
70
 
70
71
  export function DetailsStep() {
71
72
  const { snapshot, setData } = usePathContext<SignupData>();
@@ -89,6 +90,8 @@ export function DetailsStep() {
89
90
 
90
91
  Step components call `usePathContext()` to access engine state. `<PathShell>` provides the context automatically via `createContext` / `useContext`.
91
92
 
93
+ Each step render function runs once, when its step becomes current, and the component it returns lives until the path moves to a different step. Engine events that leave the step unchanged (`setData` on every keystroke, `validate()`, guard and hook status changes) do not re-create it, so inputs keep their DOM node, focus and local state. Live state reaches the step reactively either through `usePathContext().snapshot()` or through the `snapshot` argument of the render function, whose properties read the current snapshot: `(snap) => <DetailsStep snapshot={snap} />` with `createMemo(() => props.snapshot.data)` inside stays up to date.
94
+
92
95
  ---
93
96
 
94
97
  ## usePath
@@ -105,11 +108,11 @@ Step components call `usePathContext()` to access engine state. `<PathShell>` pr
105
108
  | `goToStep(stepId)` | function | Jump to a step by ID, bypassing guards and `shouldSkip`. |
106
109
  | `goToStepChecked(stepId)` | function | Jump to a step by ID, checking the relevant navigation guard first. |
107
110
  | `setData(key, value)` | function | Update a single data field. Type-checked when `TData` is provided. |
108
- | `resetStep()` | function | Re-run `onEnter` for the current step without changing step index. |
111
+ | `resetStep()` | function | Restore the current step's data to what it was when the step was entered. Emits `stateChanged` with cause `"resetStep"`; no hooks run. |
109
112
  | `startSubPath(definition, data?, meta?)` | function | Push a sub-path. `meta` is echoed back to `onSubPathComplete` / `onSubPathCancel`. |
110
- | `suspend()` | function | Suspend an async step while work completes. |
111
- | `retry()` | function | Retry the current step after a suspension or error. |
112
- | `restart()` | function | Tear down the active path without firing hooks and start fresh. |
113
+ | `suspend()` | function | Pause the path with intent to return. Emits `suspended`; all state and data are preserved. |
114
+ | `retry()` | function | Re-run the operation that set `snapshot().error`. Increments `retryCount` on repeated failure. No-op when there is no pending error. |
115
+ | `restart()` | function | Tear down the active path without firing hooks and restart the root path with the `initialData` from the original `start()`. Takes no arguments; rejects if nothing has been started. |
113
116
  | `validate()` | function | Set `snapshot().hasValidated` without navigating. Used to trigger inline errors across all tabs in a nested shell. |
114
117
 
115
118
  ---
@@ -133,18 +136,25 @@ Step components call `usePathContext()` to access engine state. `<PathShell>` pr
133
136
  | `path` | `PathDefinition` | required | The path to run. |
134
137
  | `steps` | `Record<string, (snapshot: PathSnapshot) => JSX.Element>` | — | Step render functions keyed by step ID (or `formId` for `StepChoice` steps). |
135
138
  | `initialData` | `PathData` | `{}` | Initial data passed to `engine.start()`. |
136
- | `engine` | `PathEngine` | — | An externally-managed engine. When provided, `PathShell` skips its own `start()`. |
139
+ | `engine` | `PathEngine` | — | An externally-managed engine. When provided, `PathShell` skips its own `start()`. May be provided after mount (e.g. once an async `restoreOrStart()` resolves): the shell adopts it, re-subscribing and re-seeding from the new engine. Set `autoStart` to `false` if the shell should not start its own path in the meantime. |
137
140
  | `autoStart` | `boolean` | `true` | Start the path automatically on mount. Ignored when `engine` is provided. |
138
141
  | `validationDisplay` | `"summary" \| "inline" \| "both"` | `"summary"` | Where `fieldErrors` are rendered. Use `"inline"` to suppress the summary and handle errors inside step components. |
139
142
  | `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. |
143
+ | `progressLayout` | `"merged" \| "split" \| "rootOnly" \| "activeOnly"` | `"merged"` | How the root and sub-path progress bars are arranged while a sub-path is active. |
140
144
  | `hideProgress` | `boolean` | `false` | Hide the progress indicator. Also hidden automatically for single-step top-level paths. |
141
145
  | `hideFooter` | `boolean` | `false` | Hide the footer entirely. The error panel is still shown on async failure. |
142
146
  | `hideCancel` | `boolean` | `false` | Hide the Cancel button. |
147
+ | `backLabel` | `string` | `"Previous"` | Previous button label. |
148
+ | `nextLabel` | `string` | `"Next"` | Next button label. |
149
+ | `completeLabel` | `string` | `"Complete"` | Complete button label (last step). |
150
+ | `loadingLabel` | `string` | `undefined` | Label for the Next/Complete button while an async operation is in progress. When unset, the button keeps its label and shows a CSS spinner. |
151
+ | `cancelLabel` | `string` | `"Cancel"` | Cancel button label. |
152
+ | `class` | `string` | — | Extra CSS class on the root element. |
143
153
  | `validateWhen` | `boolean` | `false` | When it becomes `true`, calls `validate()` on the engine. Bind to the outer shell's `hasAttemptedNext` for nested shells. |
144
154
  | `services` | `object \| null` | `null` | Services object passed through context to all step components. |
145
- | `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. |
146
- | `renderHeader` | `(snapshot) => JSX.Element` | — | Replace the default progress header. |
147
- | `renderFooter` | `(snapshot, actions) => JSX.Element` | — | Replace the default navigation buttons. |
155
+ | `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. The stored value also carries the inner engine's serialized state, so a remount restores in place: no `onEnter` / `onLeave` re-run, attempted / visited state kept. |
156
+ | `renderHeader` | `(snapshot) => JSX.Element` | — | Replace the default progress header. A custom header is shown even for single-step paths, and hidden under `hideProgress` or `layout="tabs"`. |
157
+ | `renderFooter` | `(snapshot, actions) => JSX.Element` | — | Replace the default navigation buttons. `actions` contains `next`, `previous`, `cancel`, `goToStep`, `goToStepChecked`, `setData`, `restart`, `retry`, `suspend`. |
148
158
  | `completionContent` | `(snapshot: PathSnapshot) => JSX.Element` | — | Custom content rendered when `snapshot().status === "completed"` (`completionBehaviour: "stayOnFinal"`). Receives the completed snapshot. If omitted, a default "All done." panel is shown. |
149
159
  | `onComplete` | `(data: PathData) => void` | — | Called when the path completes. |
150
160
  | `onCancel` | `(data: PathData) => void` | — | Called when the path is cancelled. |
@@ -400,7 +410,7 @@ function App() {
400
410
  ## Further reading
401
411
 
402
412
  - [SolidJS getting started guide](../../docs/getting-started/frameworks/solidjs.md)
403
- - [Navigation guide](../../docs/guides/navigation.md)
413
+ - [Navigation guide](../../docs/developer-guide/04-navigation.md)
404
414
  - [Full docs](../../docs/README.md)
405
415
 
406
416
  ---
package/dist/index.css CHANGED
@@ -357,6 +357,23 @@
357
357
  content: ":";
358
358
  }
359
359
 
360
+ /* ------------------------------------------------------------------ */
361
+ /* Inline field-level errors and warnings (<FieldError /> component) */
362
+ /* ------------------------------------------------------------------ */
363
+ .pw-field-error {
364
+ display: block;
365
+ font-size: 12px;
366
+ color: var(--pw-color-error);
367
+ margin-top: 4px;
368
+ }
369
+
370
+ .pw-field-warning {
371
+ display: block;
372
+ font-size: 12px;
373
+ color: var(--pw-color-warning);
374
+ margin-top: 4px;
375
+ }
376
+
360
377
  /* ------------------------------------------------------------------ */
361
378
  /* Footer — navigation buttons */
362
379
  /* ------------------------------------------------------------------ */
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { PathData, PathDefinition, PathEngine, PathEvent, PathSnapshot, Progress
3
3
  export interface UsePathOptions {
4
4
  /**
5
5
  * An externally-managed `PathEngine` to subscribe to — for example, the engine
6
- * returned by `createPersistedEngine()` from `@daltonr/pathwrite-store`.
6
+ * returned by `restoreOrStart()` from `@daltonr/pathwrite-store`.
7
7
  *
8
8
  * When provided:
9
9
  * - `usePath` will **not** create its own engine.
@@ -11,7 +11,13 @@ export interface UsePathOptions {
11
11
  * - The engine lifecycle (start / cleanup) is the **caller's responsibility**.
12
12
  * - `PathShell` will skip its own `autoStart` call.
13
13
  */
14
- engine?: PathEngine;
14
+ /**
15
+ * An externally managed engine — a plain engine or an accessor. With an
16
+ * accessor the hook tracks it, so an engine that arrives later (e.g. from an
17
+ * async `restoreOrStart()`) or is swapped is adopted — the hook
18
+ * re-subscribes and re-seeds its snapshot from the new engine.
19
+ */
20
+ engine?: PathEngine | Accessor<PathEngine | undefined>;
15
21
  /** Called for every engine event (stateChanged, completed, cancelled, resumed). */
16
22
  onEvent?: (event: PathEvent) => void;
17
23
  }
@@ -44,8 +50,9 @@ export interface UsePathReturn<TData extends PathData = PathData> {
44
50
  /** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
45
51
  resetStep: () => Promise<void>;
46
52
  /**
47
- * Tear down any active path (without firing hooks) and immediately start the
48
- * given path fresh. Safe to call whether or not a path is currently active.
53
+ * Tear down any active path (without firing hooks) and immediately restart
54
+ * the root path with the `initialData` from the original `start()` call.
55
+ * Takes no arguments; rejects if the engine has never been started.
49
56
  * Use for "Start over" / retry flows without remounting the component.
50
57
  */
51
58
  restart: () => Promise<void>;
@@ -88,7 +95,7 @@ export interface PathShellProps {
88
95
  path: PathDefinition<any>;
89
96
  /**
90
97
  * An externally-managed engine — for example, the engine returned by
91
- * `createPersistedEngine()`. When supplied, `PathShell` will skip its own
98
+ * `restoreOrStart()` from `@daltonr/pathwrite-store`. When supplied, `PathShell` will skip its own
92
99
  * `start()` call and drive the UI from the provided engine instead.
93
100
  */
94
101
  engine?: PathEngine;
@@ -105,6 +112,14 @@ export interface PathShellProps {
105
112
  * ```tsx
106
113
  * <PathShell steps={{ details: (snap) => <DetailsStep snapshot={snap} />, review: (snap) => <ReviewStep snapshot={snap} /> }} />
107
114
  * ```
115
+ * Each function is called once when its step becomes current, and the
116
+ * component it returns lives until the path moves to a different step —
117
+ * engine events that leave the step unchanged (`setData`, `validate`,
118
+ * guard / hook status changes) do not re-create it, so inputs keep their
119
+ * DOM node, focus and local state. The `snapshot` argument is live: its
120
+ * properties read the current snapshot reactively, so
121
+ * `createMemo(() => props.snapshot.data)` stays up to date. Reading
122
+ * `usePathContext().snapshot()` inside the step works the same way.
108
123
  */
109
124
  steps?: Record<string, (snapshot: PathSnapshot) => ReturnType<Component>>;
110
125
  onComplete?: (data: PathData) => void;
package/dist/index.js CHANGED
@@ -1,15 +1,20 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "solid-js/jsx-runtime";
2
- import { createSignal, onCleanup, onMount, createContext, useContext, createEffect, For, Show, } from "solid-js";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "solid-js/jsx-runtime";
2
+ import { createSignal, createMemo, untrack, onCleanup, onMount, createContext, useContext, createEffect, on, For, Show, } from "solid-js";
3
3
  import { PathEngine, formatFieldKey, errorPhaseMessage, } from "@daltonr/pathwrite-core";
4
4
  // ---------------------------------------------------------------------------
5
5
  // usePath composable
6
6
  // ---------------------------------------------------------------------------
7
7
  export function usePath(options) {
8
- const engine = options?.engine ?? new PathEngine();
8
+ let ownEngine = null;
9
+ const resolveEngine = () => {
10
+ const external = typeof options?.engine === "function" ? options.engine() : options?.engine;
11
+ return external ?? (ownEngine ??= new PathEngine());
12
+ };
13
+ let engine = resolveEngine();
9
14
  const [snapshot, setSnapshot] = createSignal(engine.snapshot(),
10
15
  // always notify — PathEngine produces new snapshot objects on every event
11
16
  { equals: false });
12
- const unsubscribe = engine.subscribe((event) => {
17
+ const onEngineEvent = (event) => {
13
18
  if (event.type === "stateChanged" || event.type === "resumed") {
14
19
  setSnapshot(event.snapshot);
15
20
  }
@@ -17,8 +22,18 @@ export function usePath(options) {
17
22
  setSnapshot(engine.snapshot());
18
23
  }
19
24
  options?.onEvent?.(event);
20
- });
21
- onCleanup(unsubscribe);
25
+ };
26
+ let unsubscribe = engine.subscribe(onEngineEvent);
27
+ // Adopt a late or swapped engine: re-subscribe and re-seed the snapshot.
28
+ createEffect(on(resolveEngine, (next) => {
29
+ if (next === engine)
30
+ return;
31
+ unsubscribe();
32
+ engine = next;
33
+ setSnapshot(engine.snapshot());
34
+ unsubscribe = engine.subscribe(onEngineEvent);
35
+ }, { defer: true }));
36
+ onCleanup(() => unsubscribe());
22
37
  const start = (path, initialData = {}) => engine.start(path, initialData);
23
38
  const startSubPath = (path, initialData = {}, meta) => engine.startSubPath(path, initialData, meta);
24
39
  const next = () => engine.next();
@@ -56,8 +71,28 @@ export function usePathContext() {
56
71
  export const PathShell = (props) => {
57
72
  // Read outer PathShell context BEFORE providing our own.
58
73
  const outerCtx = useContext(PathContext);
74
+ // When remounting under restoreKey, rebuild the inner engine from the state the
75
+ // previous instance exported, instead of starting the path and jumping to the
76
+ // step (which re-ran onEnter/onLeave and lost attempted / visited state).
77
+ const restoredEngine = (() => {
78
+ if (props.engine || !props.restoreKey || !outerCtx)
79
+ return null;
80
+ const stored = outerCtx.path.snapshot()?.data[props.restoreKey];
81
+ if (!stored || typeof stored !== "object" || !stored.serializedState)
82
+ return null;
83
+ try {
84
+ return PathEngine.fromState(stored.serializedState, { [props.path.id]: props.path });
85
+ }
86
+ catch {
87
+ return null; // unusable state (e.g. the path definition changed): start fresh below
88
+ }
89
+ })();
90
+ // The shell's own engine is created once; an `engine` prop — present at
91
+ // mount or arriving later — always takes precedence and is adopted by usePath.
92
+ const ownEngine = restoredEngine ?? new PathEngine();
93
+ const currentEngine = () => props.engine ?? ownEngine;
59
94
  const pathReturn = usePath({
60
- engine: props.engine,
95
+ engine: currentEngine,
61
96
  onEvent(event) {
62
97
  props.onEvent?.(event);
63
98
  if (event.type === "completed")
@@ -65,13 +100,13 @@ export const PathShell = (props) => {
65
100
  if (event.type === "cancelled")
66
101
  props.onCancel?.(event.data);
67
102
  if (props.restoreKey && outerCtx && event.type === "stateChanged") {
68
- outerCtx.path.setData(props.restoreKey, event.snapshot);
103
+ outerCtx.path.setData(props.restoreKey, { ...event.snapshot, serializedState: currentEngine().exportState() });
69
104
  }
70
105
  },
71
106
  });
72
107
  const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
73
108
  onMount(() => {
74
- if (props.autoStart !== false && !props.engine) {
109
+ if (props.autoStart !== false && !props.engine && !restoredEngine) {
75
110
  let startData = props.initialData ?? {};
76
111
  let restoreStepId;
77
112
  if (props.restoreKey && outerCtx) {
@@ -111,12 +146,57 @@ export const PathShell = (props) => {
111
146
  const effectiveHideProgress = () => props.hideProgress || props.layout === "tabs";
112
147
  const effectiveHideFooter = () => props.hideFooter || props.layout === "tabs";
113
148
  const showRoot = () => !effectiveHideProgress() && !!snap().rootProgress && props.progressLayout !== "activeOnly";
114
- const showActive = () => !effectiveHideProgress() && (snap().stepCount > 1 || snap().nestingLevel > 0) && props.progressLayout !== "rootOnly";
115
- const stepContent = () => {
116
- const s = snap();
117
- const key = s.formId ?? s.stepId;
118
- const render = props.steps?.[key];
119
- return render ? render(s) : null;
149
+ // A custom header is the consumer's decision: show it whenever progress is
150
+ // not hidden, even for a single-step path. Only the *default* header hides
151
+ // for one step (same rule as the React / Vue shells).
152
+ const showActive = () => !effectiveHideProgress() && (props.renderHeader
153
+ ? true
154
+ : (snap().stepCount > 1 || snap().nestingLevel > 0) && props.progressLayout !== "rootOnly");
155
+ // The step render function must only run when the *step* changes. The
156
+ // snapshot signal is `{ equals: false }` (a new object on every engine
157
+ // event), so reading it in a tracked render position would tear the step
158
+ // component down and re-create it on every setData — losing the input's
159
+ // DOM node and focus on each keystroke. Key the rendered content on the
160
+ // step's identity and create it untracked; live state reaches the step
161
+ // through the reactive snapshot proxy below or `usePathContext()`.
162
+ // Which key of `props.steps` renders the current step: the StepChoice's
163
+ // inner step id (`formId`) when content is registered under it, otherwise
164
+ // the slot's own id — the same fallback the React / Vue / Svelte shells use.
165
+ const stepLookupKey = createMemo(() => {
166
+ const s = snapshot();
167
+ if (!s)
168
+ return null;
169
+ if (s.formId && props.steps?.[s.formId])
170
+ return s.formId;
171
+ return s.stepId;
172
+ });
173
+ const stepIdentity = createMemo(() => {
174
+ const s = snapshot();
175
+ return s ? `${s.nestingLevel}:${s.pathId}:${s.formId ?? s.stepId}` : null;
176
+ });
177
+ // A snapshot whose property reads go through the signal, so a step that
178
+ // received it as a prop (`(snap) => <Step snapshot={snap} />`) sees the
179
+ // current values reactively even though the step itself is created once.
180
+ const liveSnapshot = new Proxy({}, {
181
+ get: (_target, key) => snapshot()?.[key],
182
+ has: (_target, key) => { const s = snapshot(); return s ? key in s : false; },
183
+ ownKeys: () => { const s = snapshot(); return s ? Reflect.ownKeys(s) : []; },
184
+ getOwnPropertyDescriptor: (_target, key) => {
185
+ const s = snapshot();
186
+ const d = s ? Object.getOwnPropertyDescriptor(s, key) : undefined;
187
+ return d ? { ...d, configurable: true } : undefined;
188
+ },
189
+ });
190
+ // Rendered inside <PathContext.Provider>, so the memo (and the step it
191
+ // creates) is owned by the provider and `usePathContext()` resolves.
192
+ const StepContent = () => {
193
+ const content = createMemo(() => {
194
+ if (stepIdentity() === null)
195
+ return null;
196
+ const render = props.steps?.[untrack(stepLookupKey)];
197
+ return render ? untrack(() => render(liveSnapshot)) : null;
198
+ });
199
+ return _jsx(_Fragment, { children: content() });
120
200
  };
121
201
  const showValidation = () => props.validationDisplay !== "inline" &&
122
202
  (snap().hasAttemptedNext || snap().hasValidated) &&
@@ -136,7 +216,7 @@ export const PathShell = (props) => {
136
216
  ? props.renderHeader(snap())
137
217
  : _jsx(SolidHeader, { snapshot: snap() }) }), _jsx(Show, { when: snap().status === "completed", children: _jsx("div", { class: "pw-shell__body", children: props.completionContent
138
218
  ? props.completionContent(snap())
139
- : (_jsxs("div", { class: "pw-shell__completion", children: [_jsx("p", { class: "pw-shell__completion-message", children: "All done." }), _jsx("button", { type: "button", class: "pw-shell__completion-restart", onClick: () => restart(), children: "Start over" })] })) }) }), _jsxs(Show, { when: snap().status !== "completed", children: [_jsx("div", { class: "pw-shell__body", children: stepContent() }), _jsx(Show, { when: showValidation(), children: _jsx("ul", { class: "pw-shell__validation", children: _jsx(For, { each: Object.entries(snap().fieldErrors), children: ([key, msg]) => (_jsxs("li", { class: "pw-shell__validation-item", children: [_jsx(Show, { when: key !== "_", children: _jsx("span", { class: "pw-shell__validation-label", children: formatFieldKey(key) }) }), msg] })) }) }) }), _jsx(Show, { when: showWarnings(), children: _jsx("ul", { class: "pw-shell__warnings", children: _jsx(For, { each: Object.entries(snap().fieldWarnings), children: ([key, msg]) => (_jsxs("li", { class: "pw-shell__warnings-item", children: [_jsx(Show, { when: key !== "_", children: _jsx("span", { class: "pw-shell__warnings-label", children: formatFieldKey(key) }) }), msg] })) }) }) }), _jsx(Show, { when: showBlockingError(), children: _jsx("p", { class: "pw-shell__blocking-error", children: snap().blockingError }) }), _jsx(Show, { when: snap().status === "error" && snap().error, fallback: _jsx(Show, { when: !effectiveHideFooter(), children: props.renderFooter
219
+ : (_jsxs("div", { class: "pw-shell__completion", children: [_jsx("p", { class: "pw-shell__completion-message", children: "All done." }), _jsx("button", { type: "button", class: "pw-shell__completion-restart", onClick: () => restart(), children: "Start over" })] })) }) }), _jsxs(Show, { when: snap().status !== "completed", children: [_jsx("div", { class: "pw-shell__body", children: _jsx(StepContent, {}) }), _jsx(Show, { when: showValidation(), children: _jsx("ul", { class: "pw-shell__validation", children: _jsx(For, { each: Object.entries(snap().fieldErrors), children: ([key, msg]) => (_jsxs("li", { class: "pw-shell__validation-item", children: [_jsx(Show, { when: key !== "_", children: _jsx("span", { class: "pw-shell__validation-label", children: formatFieldKey(key) }) }), msg] })) }) }) }), _jsx(Show, { when: showWarnings(), children: _jsx("ul", { class: "pw-shell__warnings", children: _jsx(For, { each: Object.entries(snap().fieldWarnings), children: ([key, msg]) => (_jsxs("li", { class: "pw-shell__warnings-item", children: [_jsx(Show, { when: key !== "_", children: _jsx("span", { class: "pw-shell__warnings-label", children: formatFieldKey(key) }) }), msg] })) }) }) }), _jsx(Show, { when: showBlockingError(), children: _jsx("p", { class: "pw-shell__blocking-error", children: snap().blockingError }) }), _jsx(Show, { when: snap().status === "error" && snap().error, fallback: _jsx(Show, { when: !effectiveHideFooter(), children: props.renderFooter
140
220
  ? props.renderFooter(snap(), actions)
141
221
  : _jsx(SolidFooter, { snapshot: snap(), actions: actions, backLabel: props.backLabel ?? "Previous", nextLabel: props.nextLabel ?? "Next", completeLabel: props.completeLabel ?? "Complete", loadingLabel: props.loadingLabel, cancelLabel: props.cancelLabel ?? "Cancel", hideCancel: props.hideCancel ?? false, layout: resolvedFooterLayout() }) }), children: _jsx(SolidErrorPanel, { snapshot: snap(), actions: actions }) })] })] }) }) }));
142
222
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,YAAY,EACZ,SAAS,EACT,OAAO,EACP,aAAa,EACb,UAAU,EACV,YAAY,EACZ,GAAG,EACH,IAAI,GAIL,MAAM,UAAU,CAAC;AAClB,OAAO,EAGL,UAAU,EAKV,cAAc,EACd,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AA4DjC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,OAAO,CAAoC,OAAwB;IACjF,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;IAEnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAC1C,MAAM,CAAC,QAAQ,EAAgC;IAC/C,0EAA0E;IAC1E,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAgB,EAAE,EAAE;QACxD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9D,WAAW,CAAC,KAAK,CAAC,QAA+B,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAgC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,WAAW,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,CAAC,IAAyB,EAAE,cAAwB,EAAE,EAAiB,EAAE,CACrF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAElC,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAE,cAAwB,EAAE,EAAE,IAA8B,EAAiB,EAAE,CAC5H,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,OAAuC,EAAiB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9H,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,OAAuC,EAAiB,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5I,MAAM,OAAO,GAAG,CAAC,CAAiC,GAAM,EAAE,KAAe,EAAiB,EAAE,CAC1F,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAgB,CAAC,CAAoC,CAAC;IAE5E,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,GAAkB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE/C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACrJ,CAAC;AAWD,MAAM,WAAW,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO;QACL,GAAI,GAAG,CAAC,IAAwG;QAChH,QAAQ,EAAE,GAAG,CAAC,QAAqB;KACpC,CAAC;AACJ,CAAC;AA8FD,MAAM,CAAC,MAAM,SAAS,GAA8B,CAAC,KAAK,EAAE,EAAE;IAC5D,yDAAyD;IACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,OAAO,CAAC;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,CAAC,KAAK;YACX,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAgB,CAAC,CAAC;YAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAgB,CAAC,CAAC;YACzE,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjE,QAAQ,CAAC,IAAI,CAAC,OAA4D,CACzE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CACjC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAEtI,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,SAAS,GAAa,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;YAClD,IAAI,aAAiC,CAAC;YACtC,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAA6B,CAAC;gBAC5F,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;oBACvE,SAAS,GAAG,MAAM,CAAC,IAAgB,CAAC;oBACpC,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;wBAAE,aAAa,GAAG,MAAM,CAAC,MAAgB,CAAC;gBACpE,CAAC;YACH,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,aAAa,EAAE,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAc,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,KAAK,CAAC,YAAY;YAAE,QAAQ,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAqB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;IAE9F,MAAM,OAAO,GAAqB;QAChC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe;QACjD,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAU,EAAE,KAAY,CAAC;QAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;KACzB,CAAC;IAEF,8EAA8E;IAC9E,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAG,CAAC;IAE/B,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IAClF,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IAC9E,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,IAAI,KAAK,CAAC,cAAc,KAAK,YAAY,CAAC;IAClH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,UAAU,CAAC;IAE9I,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,KAAK,CAAC,iBAAiB,KAAK,QAAQ;QACpC,CAAC,IAAI,EAAE,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAG,GAAG,EAAE,CACxB,KAAK,CAAC,iBAAiB,KAAK,QAAQ;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/C,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC7B,KAAK,CAAC,iBAAiB,KAAK,QAAQ;QACpC,CAAC,IAAI,EAAE,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC;QAChD,CAAC,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC;IAEzB,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;QAClC,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,EAAE,CAAC;QAC9C,OAAO,IAAI,EAAE,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjF,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACvC,KAAC,IAAI,IACH,IAAI,EAAE,QAAQ,EAAE,EAChB,QAAQ,EACN,cAAK,KAAK,EAAC,UAAU,YACnB,eAAK,KAAK,EAAC,iBAAiB,aAC1B,0CAAsB,EACtB,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,YACnC,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,qBAAqB,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,sBAGlD,GACJ,IACH,GACF,YAGR,eAAK,KAAK,EAAE,UAAU,EAAE,aAEtB,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,YACpB,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,CAAC,YAAa,GAAI,GAC5C,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,UAAU,EAAE,YACrB,KAAK,CAAC,YAAY;4BACjB,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;4BAC5B,CAAC,CAAC,KAAC,WAAW,IAAC,QAAQ,EAAE,IAAI,EAAE,GAAI,GAChC,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,YACvC,cAAK,KAAK,EAAC,gBAAgB,YACxB,KAAK,CAAC,iBAAiB;gCACtB,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;gCACjC,CAAC,CAAC,CACA,eAAK,KAAK,EAAC,sBAAsB,aAC/B,YAAG,KAAK,EAAC,8BAA8B,0BAAc,EACrD,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,8BAA8B,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,2BAGjB,IACL,CACP,GAEC,GACD,EAEP,MAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,aACzC,cAAK,KAAK,EAAC,gBAAgB,YAAE,WAAW,EAAE,GAAO,EAEjD,KAAC,IAAI,IAAC,IAAI,EAAE,cAAc,EAAE,YAC1B,aAAI,KAAK,EAAC,sBAAsB,YAC9B,KAAC,GAAG,IAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,YAC1C,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CACf,cAAI,KAAK,EAAC,2BAA2B,aACnC,KAAC,IAAI,IAAC,IAAI,EAAE,GAAG,KAAK,GAAG,YACrB,eAAM,KAAK,EAAC,4BAA4B,YAAE,cAAc,CAAC,GAAG,CAAC,GAAQ,GAChE,EACN,GAAG,IACD,CACN,GACG,GACH,GACA,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,YAAY,EAAE,YACxB,aAAI,KAAK,EAAC,oBAAoB,YAC5B,KAAC,GAAG,IAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,YAC5C,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CACf,cAAI,KAAK,EAAC,yBAAyB,aACjC,KAAC,IAAI,IAAC,IAAI,EAAE,GAAG,KAAK,GAAG,YACrB,eAAM,KAAK,EAAC,0BAA0B,YAAE,cAAc,CAAC,GAAG,CAAC,GAAQ,GAC9D,EACN,GAAG,IACD,CACN,GACG,GACH,GACA,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,iBAAiB,EAAE,YAC7B,YAAG,KAAK,EAAC,0BAA0B,YAAE,IAAI,EAAE,CAAC,aAAa,GAAK,GACzD,EAEP,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC,KAAK,EAC/C,QAAQ,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,mBAAmB,EAAE,YAC/B,KAAK,CAAC,YAAY;wCACjB,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC;wCACrC,CAAC,CAAC,KAAC,WAAW,IACV,QAAQ,EAAE,IAAI,EAAE,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,UAAU,EACxC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM,EACpC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,UAAU,EAChD,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,QAAQ,EAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,EACrC,MAAM,EAAE,oBAAoB,EAAE,GAC9B,GAED,YAGT,KAAC,eAAe,IAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,GAAI,GAClD,IACA,IACH,GACD,GACc,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,KAA6B;IACtD,OAAO,CACL,eAAK,KAAK,EAAC,yBAAyB,aAClC,cAAK,KAAK,EAAC,iBAAiB,YAC1B,KAAC,GAAG,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,YACxB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACZ,eAAK,KAAK,EAAE,kCAAkC,IAAI,CAAC,MAAM,EAAE,aACzD,eAAM,KAAK,EAAC,oBAAoB,YAC7B,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAC/C,EACP,eAAM,KAAK,EAAC,sBAAsB,YAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAQ,IAC7D,CACP,GACG,GACF,EACN,cAAK,KAAK,EAAC,iBAAiB,YAC1B,cAAK,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,EAAE,GAAI,GACnF,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,WAAW,CAAC,KAAiC;IACpD,OAAO,CACL,eAAK,KAAK,EAAC,kBAAkB,aAC3B,cAAK,KAAK,EAAC,iBAAiB,YAC1B,KAAC,GAAG,IAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,YAC5B,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACZ,eAAK,KAAK,EAAE,kCAAkC,IAAI,CAAC,MAAM,EAAE,aACzD,eAAM,KAAK,EAAC,oBAAoB,YAC7B,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAC/C,EACP,eAAM,KAAK,EAAC,sBAAsB,YAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAQ,IAC7D,CACP,GACG,GACF,EACN,cAAK,KAAK,EAAC,iBAAiB,YAC1B,cAAK,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,GAAG,EAAE,GAAI,GACvF,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,eAAe,CAAC,KAA4D;IACnF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAM,CAAC;IAC1C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACpF,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,CACL,eAAK,KAAK,EAAC,iBAAiB,aAC1B,cAAK,KAAK,EAAC,uBAAuB,YAAE,KAAK,EAAE,GAAO,EAClD,eAAK,KAAK,EAAC,yBAAyB,aACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IACrD,EACN,eAAK,KAAK,EAAC,yBAAyB,aAClC,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,SAAS,EAAE,YACtB,iBAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,oCAAoC,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,0BAEpF,GACJ,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,YACvC,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB,EAAE,EACzF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,yCAGvB,GACJ,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,YACvD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,oCAAoC,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,0BAEpF,GACJ,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,WAAW,CAAC,KAUpB;IACC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IACjD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC;IACzD,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,SAAS,EAAE,IAAI,KAAK,CAAC,YAAY;QAC/B,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU;YACzB,CAAC,CAAC,KAAK,CAAC,aAAa;YACrB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAExB,OAAO,CACL,eAAK,KAAK,EAAC,kBAAkB,aAC3B,eAAK,KAAK,EAAC,uBAAuB,aAEhC,KAAC,IAAI,IAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,YAC3C,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,qCAAqC,EAC3C,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,YAE5B,KAAK,CAAC,WAAW,GACX,GACJ,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,YACtD,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,mCAAmC,EACzC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,EACxD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,YAE9B,KAAK,CAAC,SAAS,GACT,GACJ,IACH,EACN,eAAK,KAAK,EAAC,wBAAwB,aAEjC,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,YAC5C,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,qCAAqC,EAC3C,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,YAE5B,KAAK,CAAC,WAAW,GACX,GACJ,EAEP,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,oCAAoC,SAAS,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,EACzF,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,YAE1B,WAAW,EAAE,GACP,IACL,IACF,CACP,CAAC;AACJ,CAAC;AAmBD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
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-solid",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "SolidJS adapter for @daltonr/pathwrite-core — reactive usePath() composable and optional PathShell component.",
@@ -47,7 +47,7 @@
47
47
  "solid-js": ">=1.8.0"
48
48
  },
49
49
  "dependencies": {
50
- "@daltonr/pathwrite-core": "^0.12.0"
50
+ "@daltonr/pathwrite-core": "^0.13.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "solid-js": "^1.9.0"
package/src/index.tsx CHANGED
@@ -1,10 +1,13 @@
1
1
  import {
2
2
  createSignal,
3
+ createMemo,
4
+ untrack,
3
5
  onCleanup,
4
6
  onMount,
5
7
  createContext,
6
8
  useContext,
7
9
  createEffect,
10
+ on,
8
11
  For,
9
12
  Show,
10
13
  type Component,
@@ -17,6 +20,7 @@ import {
17
20
  PathEngine,
18
21
  PathEvent,
19
22
  PathSnapshot,
23
+ SerializedPathState,
20
24
  ProgressLayout,
21
25
  RootProgress,
22
26
  formatFieldKey,
@@ -30,7 +34,7 @@ import {
30
34
  export interface UsePathOptions {
31
35
  /**
32
36
  * An externally-managed `PathEngine` to subscribe to — for example, the engine
33
- * returned by `createPersistedEngine()` from `@daltonr/pathwrite-store`.
37
+ * returned by `restoreOrStart()` from `@daltonr/pathwrite-store`.
34
38
  *
35
39
  * When provided:
36
40
  * - `usePath` will **not** create its own engine.
@@ -38,7 +42,13 @@ export interface UsePathOptions {
38
42
  * - The engine lifecycle (start / cleanup) is the **caller's responsibility**.
39
43
  * - `PathShell` will skip its own `autoStart` call.
40
44
  */
41
- engine?: PathEngine;
45
+ /**
46
+ * An externally managed engine — a plain engine or an accessor. With an
47
+ * accessor the hook tracks it, so an engine that arrives later (e.g. from an
48
+ * async `restoreOrStart()`) or is swapped is adopted — the hook
49
+ * re-subscribes and re-seeds its snapshot from the new engine.
50
+ */
51
+ engine?: PathEngine | Accessor<PathEngine | undefined>;
42
52
  /** Called for every engine event (stateChanged, completed, cancelled, resumed). */
43
53
  onEvent?: (event: PathEvent) => void;
44
54
  }
@@ -68,8 +78,9 @@ export interface UsePathReturn<TData extends PathData = PathData> {
68
78
  /** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
69
79
  resetStep: () => Promise<void>;
70
80
  /**
71
- * Tear down any active path (without firing hooks) and immediately start the
72
- * given path fresh. Safe to call whether or not a path is currently active.
81
+ * Tear down any active path (without firing hooks) and immediately restart
82
+ * the root path with the `initialData` from the original `start()` call.
83
+ * Takes no arguments; rejects if the engine has never been started.
73
84
  * Use for "Start over" / retry flows without remounting the component.
74
85
  */
75
86
  restart: () => Promise<void>;
@@ -86,7 +97,12 @@ export interface UsePathReturn<TData extends PathData = PathData> {
86
97
  // ---------------------------------------------------------------------------
87
98
 
88
99
  export function usePath<TData extends PathData = PathData>(options?: UsePathOptions): UsePathReturn<TData> {
89
- const engine = options?.engine ?? new PathEngine();
100
+ let ownEngine: PathEngine | null = null;
101
+ const resolveEngine = (): PathEngine => {
102
+ const external = typeof options?.engine === "function" ? options.engine() : options?.engine;
103
+ return external ?? (ownEngine ??= new PathEngine());
104
+ };
105
+ let engine = resolveEngine();
90
106
 
91
107
  const [snapshot, setSnapshot] = createSignal<PathSnapshot<TData> | null>(
92
108
  engine.snapshot() as PathSnapshot<TData> | null,
@@ -94,16 +110,26 @@ export function usePath<TData extends PathData = PathData>(options?: UsePathOpti
94
110
  { equals: false }
95
111
  );
96
112
 
97
- const unsubscribe = engine.subscribe((event: PathEvent) => {
113
+ const onEngineEvent = (event: PathEvent): void => {
98
114
  if (event.type === "stateChanged" || event.type === "resumed") {
99
115
  setSnapshot(event.snapshot as PathSnapshot<TData>);
100
116
  } else if (event.type === "completed" || event.type === "cancelled") {
101
117
  setSnapshot(engine.snapshot() as PathSnapshot<TData> | null);
102
118
  }
103
119
  options?.onEvent?.(event);
104
- });
120
+ };
121
+ let unsubscribe = engine.subscribe(onEngineEvent);
122
+
123
+ // Adopt a late or swapped engine: re-subscribe and re-seed the snapshot.
124
+ createEffect(on(resolveEngine, (next) => {
125
+ if (next === engine) return;
126
+ unsubscribe();
127
+ engine = next;
128
+ setSnapshot(engine.snapshot() as PathSnapshot<TData> | null);
129
+ unsubscribe = engine.subscribe(onEngineEvent);
130
+ }, { defer: true }));
105
131
 
106
- onCleanup(unsubscribe);
132
+ onCleanup(() => unsubscribe());
107
133
 
108
134
  const start = (path: PathDefinition<any>, initialData: PathData = {}): Promise<void> =>
109
135
  engine.start(path, initialData);
@@ -179,7 +205,7 @@ export interface PathShellProps {
179
205
  path: PathDefinition<any>;
180
206
  /**
181
207
  * An externally-managed engine — for example, the engine returned by
182
- * `createPersistedEngine()`. When supplied, `PathShell` will skip its own
208
+ * `restoreOrStart()` from `@daltonr/pathwrite-store`. When supplied, `PathShell` will skip its own
183
209
  * `start()` call and drive the UI from the provided engine instead.
184
210
  */
185
211
  engine?: PathEngine;
@@ -196,6 +222,14 @@ export interface PathShellProps {
196
222
  * ```tsx
197
223
  * <PathShell steps={{ details: (snap) => <DetailsStep snapshot={snap} />, review: (snap) => <ReviewStep snapshot={snap} /> }} />
198
224
  * ```
225
+ * Each function is called once when its step becomes current, and the
226
+ * component it returns lives until the path moves to a different step —
227
+ * engine events that leave the step unchanged (`setData`, `validate`,
228
+ * guard / hook status changes) do not re-create it, so inputs keep their
229
+ * DOM node, focus and local state. The `snapshot` argument is live: its
230
+ * properties read the current snapshot reactively, so
231
+ * `createMemo(() => props.snapshot.data)` stays up to date. Reading
232
+ * `usePathContext().snapshot()` inside the step works the same way.
199
233
  */
200
234
  steps?: Record<string, (snapshot: PathSnapshot) => ReturnType<Component>>;
201
235
  onComplete?: (data: PathData) => void;
@@ -255,15 +289,33 @@ export const PathShell: Component<PathShellProps> = (props) => {
255
289
  // Read outer PathShell context BEFORE providing our own.
256
290
  const outerCtx = useContext(PathContext);
257
291
 
292
+ // When remounting under restoreKey, rebuild the inner engine from the state the
293
+ // previous instance exported, instead of starting the path and jumping to the
294
+ // step (which re-ran onEnter/onLeave and lost attempted / visited state).
295
+ const restoredEngine: PathEngine | null = (() => {
296
+ if (props.engine || !props.restoreKey || !outerCtx) return null;
297
+ const stored = outerCtx.path.snapshot()?.data[props.restoreKey] as { serializedState?: SerializedPathState } | undefined;
298
+ if (!stored || typeof stored !== "object" || !stored.serializedState) return null;
299
+ try {
300
+ return PathEngine.fromState(stored.serializedState, { [props.path.id]: props.path });
301
+ } catch {
302
+ return null; // unusable state (e.g. the path definition changed): start fresh below
303
+ }
304
+ })();
305
+ // The shell's own engine is created once; an `engine` prop — present at
306
+ // mount or arriving later — always takes precedence and is adopted by usePath.
307
+ const ownEngine = restoredEngine ?? new PathEngine();
308
+ const currentEngine = (): PathEngine => props.engine ?? ownEngine;
309
+
258
310
  const pathReturn = usePath({
259
- engine: props.engine,
311
+ engine: currentEngine,
260
312
  onEvent(event) {
261
313
  props.onEvent?.(event);
262
314
  if (event.type === "completed") props.onComplete?.(event.data as PathData);
263
315
  if (event.type === "cancelled") props.onCancel?.(event.data as PathData);
264
316
  if (props.restoreKey && outerCtx && event.type === "stateChanged") {
265
317
  (outerCtx.path.setData as unknown as (key: string, value: unknown) => void)(
266
- props.restoreKey, event.snapshot
318
+ props.restoreKey, { ...event.snapshot, serializedState: currentEngine().exportState() }
267
319
  );
268
320
  }
269
321
  },
@@ -272,7 +324,7 @@ export const PathShell: Component<PathShellProps> = (props) => {
272
324
  const { snapshot, start, next, previous, cancel, goToStep, goToStepChecked, setData, restart, retry, suspend, validate } = pathReturn;
273
325
 
274
326
  onMount(() => {
275
- if (props.autoStart !== false && !props.engine) {
327
+ if (props.autoStart !== false && !props.engine && !restoredEngine) {
276
328
  let startData: PathData = props.initialData ?? {};
277
329
  let restoreStepId: string | undefined;
278
330
  if (props.restoreKey && outerCtx) {
@@ -316,13 +368,57 @@ export const PathShell: Component<PathShellProps> = (props) => {
316
368
  const effectiveHideProgress = () => props.hideProgress || props.layout === "tabs";
317
369
  const effectiveHideFooter = () => props.hideFooter || props.layout === "tabs";
318
370
  const showRoot = () => !effectiveHideProgress() && !!snap().rootProgress && props.progressLayout !== "activeOnly";
319
- const showActive = () => !effectiveHideProgress() && (snap().stepCount > 1 || snap().nestingLevel > 0) && props.progressLayout !== "rootOnly";
371
+ // A custom header is the consumer's decision: show it whenever progress is
372
+ // not hidden, even for a single-step path. Only the *default* header hides
373
+ // for one step (same rule as the React / Vue shells).
374
+ const showActive = () => !effectiveHideProgress() && (props.renderHeader
375
+ ? true
376
+ : (snap().stepCount > 1 || snap().nestingLevel > 0) && props.progressLayout !== "rootOnly");
377
+
378
+ // The step render function must only run when the *step* changes. The
379
+ // snapshot signal is `{ equals: false }` (a new object on every engine
380
+ // event), so reading it in a tracked render position would tear the step
381
+ // component down and re-create it on every setData — losing the input's
382
+ // DOM node and focus on each keystroke. Key the rendered content on the
383
+ // step's identity and create it untracked; live state reaches the step
384
+ // through the reactive snapshot proxy below or `usePathContext()`.
385
+ // Which key of `props.steps` renders the current step: the StepChoice's
386
+ // inner step id (`formId`) when content is registered under it, otherwise
387
+ // the slot's own id — the same fallback the React / Vue / Svelte shells use.
388
+ const stepLookupKey = createMemo<string | null>(() => {
389
+ const s = snapshot();
390
+ if (!s) return null;
391
+ if (s.formId && props.steps?.[s.formId]) return s.formId;
392
+ return s.stepId;
393
+ });
394
+ const stepIdentity = createMemo<string | null>(() => {
395
+ const s = snapshot();
396
+ return s ? `${s.nestingLevel}:${s.pathId}:${s.formId ?? s.stepId}` : null;
397
+ });
398
+
399
+ // A snapshot whose property reads go through the signal, so a step that
400
+ // received it as a prop (`(snap) => <Step snapshot={snap} />`) sees the
401
+ // current values reactively even though the step itself is created once.
402
+ const liveSnapshot = new Proxy({} as PathSnapshot, {
403
+ get: (_target, key) => (snapshot() as unknown as Record<PropertyKey, unknown> | null)?.[key],
404
+ has: (_target, key) => { const s = snapshot(); return s ? key in s : false; },
405
+ ownKeys: () => { const s = snapshot(); return s ? Reflect.ownKeys(s) : []; },
406
+ getOwnPropertyDescriptor: (_target, key) => {
407
+ const s = snapshot();
408
+ const d = s ? Object.getOwnPropertyDescriptor(s, key) : undefined;
409
+ return d ? { ...d, configurable: true } : undefined;
410
+ },
411
+ });
320
412
 
321
- const stepContent = () => {
322
- const s = snap();
323
- const key = s.formId ?? s.stepId;
324
- const render = props.steps?.[key];
325
- return render ? render(s) : null;
413
+ // Rendered inside <PathContext.Provider>, so the memo (and the step it
414
+ // creates) is owned by the provider and `usePathContext()` resolves.
415
+ const StepContent: Component = () => {
416
+ const content = createMemo(() => {
417
+ if (stepIdentity() === null) return null;
418
+ const render = props.steps?.[untrack(stepLookupKey)!];
419
+ return render ? untrack(() => render(liveSnapshot)) : null;
420
+ });
421
+ return <>{content()}</>;
326
422
  };
327
423
 
328
424
  const showValidation = () =>
@@ -399,7 +495,7 @@ export const PathShell: Component<PathShellProps> = (props) => {
399
495
  </Show>
400
496
  {/* Body — step content (hidden when completed) */}
401
497
  <Show when={snap().status !== "completed"}>
402
- <div class="pw-shell__body">{stepContent()}</div>
498
+ <div class="pw-shell__body"><StepContent /></div>
403
499
  {/* Validation messages */}
404
500
  <Show when={showValidation()}>
405
501
  <ul class="pw-shell__validation">