@daltonr/pathwrite-svelte 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PathShell.svelte +14 -4
- package/dist/PathShell.svelte.d.ts +4 -0
- package/dist/PathShell.svelte.d.ts.map +1 -1
- package/dist/index.svelte.d.ts +2 -0
- package/dist/index.svelte.d.ts.map +1 -1
- package/dist/index.svelte.js +3 -1
- package/package.json +2 -2
- package/src/PathShell.svelte +14 -4
- package/src/index.svelte.ts +6 -1
package/dist/PathShell.svelte
CHANGED
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
cancelLabel?: string;
|
|
18
18
|
hideCancel?: boolean;
|
|
19
19
|
hideProgress?: boolean;
|
|
20
|
+
/** If true, hide the footer (navigation buttons). The error panel is still shown on async failure regardless of this prop. */
|
|
21
|
+
hideFooter?: boolean;
|
|
22
|
+
/** 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`. */
|
|
23
|
+
validateWhen?: boolean;
|
|
20
24
|
/**
|
|
21
25
|
* Footer layout mode:
|
|
22
26
|
* - "auto" (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
@@ -67,6 +71,8 @@
|
|
|
67
71
|
cancelLabel = 'Cancel',
|
|
68
72
|
hideCancel = false,
|
|
69
73
|
hideProgress = false,
|
|
74
|
+
hideFooter = false,
|
|
75
|
+
validateWhen = false,
|
|
70
76
|
footerLayout = 'auto',
|
|
71
77
|
validationDisplay = 'summary',
|
|
72
78
|
progressLayout = 'merged',
|
|
@@ -115,6 +121,10 @@
|
|
|
115
121
|
}
|
|
116
122
|
});
|
|
117
123
|
|
|
124
|
+
$effect(() => {
|
|
125
|
+
if (validateWhen) pathReturn.validate();
|
|
126
|
+
});
|
|
127
|
+
|
|
118
128
|
function warnMissingStep(stepId: string): void {
|
|
119
129
|
const camel = stepIdToCamelCase(stepId);
|
|
120
130
|
const hint = camel !== stepId
|
|
@@ -223,7 +233,7 @@
|
|
|
223
233
|
</div>
|
|
224
234
|
|
|
225
235
|
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
226
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.fieldErrors).length > 0}
|
|
236
|
+
{#if validationDisplay !== 'inline' && (snap.hasAttemptedNext || snap.hasValidated) && Object.keys(snap.fieldErrors).length > 0}
|
|
227
237
|
<ul class="pw-shell__validation">
|
|
228
238
|
{#each Object.entries(snap.fieldErrors) as [key, msg]}
|
|
229
239
|
<li class="pw-shell__validation-item">
|
|
@@ -245,7 +255,7 @@
|
|
|
245
255
|
{/if}
|
|
246
256
|
|
|
247
257
|
<!-- Blocking error — guard returned { allowed: false, reason } -->
|
|
248
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && snap.blockingError}
|
|
258
|
+
{#if validationDisplay !== 'inline' && (snap.hasAttemptedNext || snap.hasValidated) && snap.blockingError}
|
|
249
259
|
<p class="pw-shell__blocking-error">{snap.blockingError}</p>
|
|
250
260
|
{/if}
|
|
251
261
|
|
|
@@ -273,9 +283,9 @@
|
|
|
273
283
|
</div>
|
|
274
284
|
</div>
|
|
275
285
|
<!-- Footer: navigation buttons (overridable via footer snippet) -->
|
|
276
|
-
{:else if footer}
|
|
286
|
+
{:else if !hideFooter && footer}
|
|
277
287
|
{@render footer(snap, actions)}
|
|
278
|
-
{:else}
|
|
288
|
+
{:else if !hideFooter}
|
|
279
289
|
<div class="pw-shell__footer">
|
|
280
290
|
<div class="pw-shell__footer-left">
|
|
281
291
|
{#if resolvedFooterLayout === 'form' && !hideCancel}
|
|
@@ -12,6 +12,10 @@ interface Props {
|
|
|
12
12
|
cancelLabel?: string;
|
|
13
13
|
hideCancel?: boolean;
|
|
14
14
|
hideProgress?: boolean;
|
|
15
|
+
/** If true, hide the footer (navigation buttons). The error panel is still shown on async failure regardless of this prop. */
|
|
16
|
+
hideFooter?: boolean;
|
|
17
|
+
/** 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`. */
|
|
18
|
+
validateWhen?: boolean;
|
|
15
19
|
/**
|
|
16
20
|
* Footer layout mode:
|
|
17
21
|
* - "auto" (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PathShell.svelte.d.ts","sourceRoot":"","sources":["../src/PathShell.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5G,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAI/C,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAE/B,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9C,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"PathShell.svelte.d.ts","sourceRoot":"","sources":["../src/PathShell.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5G,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAI/C,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8HAA8H;IAC9H,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qNAAqN;IACrN,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAE/B,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9C,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;CACrC;AAqQH,QAAA,MAAM,SAAS;mBAhKQ,QAAQ,IAAI,CAAC;MAgKmB,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
package/dist/index.svelte.d.ts
CHANGED
|
@@ -52,6 +52,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
52
52
|
retry: () => Promise<void>;
|
|
53
53
|
/** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
|
|
54
54
|
suspend: () => Promise<void>;
|
|
55
|
+
/** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
|
|
56
|
+
validate: () => void;
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
59
|
* Create a Pathwrite engine with Svelte 5 runes-based reactivity.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.svelte.d.ts","sourceRoot":"","sources":["../src/index.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACb,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ;IAC9D;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC9C,iCAAiC;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,6MAA6M;IAC7M,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnH,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qJAAqJ;IACrJ,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,iGAAiG;IACjG,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,oLAAoL;IACpL,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,gKAAgK;IAChK,OAAO,EAAE,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,qHAAqH;IACrH,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,0IAA0I;IAC1I,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,wFAAwF;IACxF,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.svelte.d.ts","sourceRoot":"","sources":["../src/index.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/index.svelte.js
CHANGED
|
@@ -87,6 +87,7 @@ export function usePath(options) {
|
|
|
87
87
|
const restart = () => engine.restart();
|
|
88
88
|
const retry = () => engine.retry();
|
|
89
89
|
const suspend = () => engine.suspend();
|
|
90
|
+
const validate = () => engine.validate();
|
|
90
91
|
return {
|
|
91
92
|
get snapshot() { return _snapshot; },
|
|
92
93
|
start,
|
|
@@ -100,7 +101,8 @@ export function usePath(options) {
|
|
|
100
101
|
resetStep,
|
|
101
102
|
restart,
|
|
102
103
|
retry,
|
|
103
|
-
suspend
|
|
104
|
+
suspend,
|
|
105
|
+
validate
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
// ---------------------------------------------------------------------------
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daltonr/pathwrite-svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Svelte 5 adapter for @daltonr/pathwrite-core — runes-based reactive bindings and optional PathShell component.",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"svelte": ">=5.0.0"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@daltonr/pathwrite-core": "^0.
|
|
55
|
+
"@daltonr/pathwrite-core": "^0.11.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@sveltejs/package": "^2.5.7",
|
package/src/PathShell.svelte
CHANGED
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
cancelLabel?: string;
|
|
18
18
|
hideCancel?: boolean;
|
|
19
19
|
hideProgress?: boolean;
|
|
20
|
+
/** If true, hide the footer (navigation buttons). The error panel is still shown on async failure regardless of this prop. */
|
|
21
|
+
hideFooter?: boolean;
|
|
22
|
+
/** 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`. */
|
|
23
|
+
validateWhen?: boolean;
|
|
20
24
|
/**
|
|
21
25
|
* Footer layout mode:
|
|
22
26
|
* - "auto" (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
@@ -67,6 +71,8 @@
|
|
|
67
71
|
cancelLabel = 'Cancel',
|
|
68
72
|
hideCancel = false,
|
|
69
73
|
hideProgress = false,
|
|
74
|
+
hideFooter = false,
|
|
75
|
+
validateWhen = false,
|
|
70
76
|
footerLayout = 'auto',
|
|
71
77
|
validationDisplay = 'summary',
|
|
72
78
|
progressLayout = 'merged',
|
|
@@ -115,6 +121,10 @@
|
|
|
115
121
|
}
|
|
116
122
|
});
|
|
117
123
|
|
|
124
|
+
$effect(() => {
|
|
125
|
+
if (validateWhen) pathReturn.validate();
|
|
126
|
+
});
|
|
127
|
+
|
|
118
128
|
function warnMissingStep(stepId: string): void {
|
|
119
129
|
const camel = stepIdToCamelCase(stepId);
|
|
120
130
|
const hint = camel !== stepId
|
|
@@ -223,7 +233,7 @@
|
|
|
223
233
|
</div>
|
|
224
234
|
|
|
225
235
|
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
226
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.fieldErrors).length > 0}
|
|
236
|
+
{#if validationDisplay !== 'inline' && (snap.hasAttemptedNext || snap.hasValidated) && Object.keys(snap.fieldErrors).length > 0}
|
|
227
237
|
<ul class="pw-shell__validation">
|
|
228
238
|
{#each Object.entries(snap.fieldErrors) as [key, msg]}
|
|
229
239
|
<li class="pw-shell__validation-item">
|
|
@@ -245,7 +255,7 @@
|
|
|
245
255
|
{/if}
|
|
246
256
|
|
|
247
257
|
<!-- Blocking error — guard returned { allowed: false, reason } -->
|
|
248
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && snap.blockingError}
|
|
258
|
+
{#if validationDisplay !== 'inline' && (snap.hasAttemptedNext || snap.hasValidated) && snap.blockingError}
|
|
249
259
|
<p class="pw-shell__blocking-error">{snap.blockingError}</p>
|
|
250
260
|
{/if}
|
|
251
261
|
|
|
@@ -273,9 +283,9 @@
|
|
|
273
283
|
</div>
|
|
274
284
|
</div>
|
|
275
285
|
<!-- Footer: navigation buttons (overridable via footer snippet) -->
|
|
276
|
-
{:else if footer}
|
|
286
|
+
{:else if !hideFooter && footer}
|
|
277
287
|
{@render footer(snap, actions)}
|
|
278
|
-
{:else}
|
|
288
|
+
{:else if !hideFooter}
|
|
279
289
|
<div class="pw-shell__footer">
|
|
280
290
|
<div class="pw-shell__footer-left">
|
|
281
291
|
{#if resolvedFooterLayout === 'form' && !hideCancel}
|
package/src/index.svelte.ts
CHANGED
|
@@ -80,6 +80,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
80
80
|
retry: () => Promise<void>;
|
|
81
81
|
/** Pauses the path with intent to return. Emits `suspended`. All state is preserved. */
|
|
82
82
|
suspend: () => Promise<void>;
|
|
83
|
+
/** Trigger inline validation on all steps without navigating. Sets `snapshot.hasValidated`. */
|
|
84
|
+
validate: () => void;
|
|
83
85
|
}
|
|
84
86
|
|
|
85
87
|
// ---------------------------------------------------------------------------
|
|
@@ -188,6 +190,8 @@ export function usePath<TData extends PathData = PathData>(
|
|
|
188
190
|
const retry = (): Promise<void> => engine.retry();
|
|
189
191
|
const suspend = (): Promise<void> => engine.suspend();
|
|
190
192
|
|
|
193
|
+
const validate = (): void => engine.validate();
|
|
194
|
+
|
|
191
195
|
return {
|
|
192
196
|
get snapshot() { return _snapshot; },
|
|
193
197
|
start,
|
|
@@ -201,7 +205,8 @@ export function usePath<TData extends PathData = PathData>(
|
|
|
201
205
|
resetStep,
|
|
202
206
|
restart,
|
|
203
207
|
retry,
|
|
204
|
-
suspend
|
|
208
|
+
suspend,
|
|
209
|
+
validate
|
|
205
210
|
};
|
|
206
211
|
}
|
|
207
212
|
|