@daltonr/pathwrite-svelte 0.7.0 → 0.8.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 +19 -4
- package/dist/PathShell.svelte.d.ts.map +1 -1
- package/dist/index.css +40 -0
- package/dist/index.svelte.d.ts +3 -0
- package/dist/index.svelte.d.ts.map +1 -1
- package/dist/index.svelte.js +2 -0
- package/package.json +2 -2
- package/src/PathShell.svelte +19 -4
- package/src/index.svelte.ts +6 -0
package/dist/PathShell.svelte
CHANGED
|
@@ -185,9 +185,13 @@
|
|
|
185
185
|
{/if}
|
|
186
186
|
{/if}
|
|
187
187
|
|
|
188
|
-
<!-- Body: current step rendered via named snippet
|
|
188
|
+
<!-- Body: current step rendered via named snippet.
|
|
189
|
+
Prefer formId (inner step id of a StepChoice) so consumers can
|
|
190
|
+
register snippets by inner step ids directly. -->
|
|
189
191
|
<div class="pw-shell__body">
|
|
190
|
-
{#if stepSnippets[snap.
|
|
192
|
+
{#if snap.formId && stepSnippets[snap.formId]}
|
|
193
|
+
{@render stepSnippets[snap.formId]()}
|
|
194
|
+
{:else if stepSnippets[snap.stepId]}
|
|
191
195
|
{@render stepSnippets[snap.stepId]()}
|
|
192
196
|
{:else}
|
|
193
197
|
<p>No content for step "{snap.stepId}"</p>
|
|
@@ -195,9 +199,9 @@
|
|
|
195
199
|
</div>
|
|
196
200
|
|
|
197
201
|
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
198
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.
|
|
202
|
+
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.fieldErrors).length > 0}
|
|
199
203
|
<ul class="pw-shell__validation">
|
|
200
|
-
{#each Object.entries(snap.
|
|
204
|
+
{#each Object.entries(snap.fieldErrors) as [key, msg]}
|
|
201
205
|
<li class="pw-shell__validation-item">
|
|
202
206
|
{#if key !== '_'}<span class="pw-shell__validation-label">{formatFieldKey(key)}</span>{/if}{msg}
|
|
203
207
|
</li>
|
|
@@ -205,6 +209,17 @@
|
|
|
205
209
|
</ul>
|
|
206
210
|
{/if}
|
|
207
211
|
|
|
212
|
+
<!-- Warning messages — non-blocking, shown immediately (no hasAttemptedNext gate) -->
|
|
213
|
+
{#if validationDisplay !== 'inline' && Object.keys(snap.fieldWarnings).length > 0}
|
|
214
|
+
<ul class="pw-shell__warnings">
|
|
215
|
+
{#each Object.entries(snap.fieldWarnings) as [key, msg]}
|
|
216
|
+
<li class="pw-shell__warnings-item">
|
|
217
|
+
{#if key !== '_'}<span class="pw-shell__warnings-label">{formatFieldKey(key)}</span>{/if}{msg}
|
|
218
|
+
</li>
|
|
219
|
+
{/each}
|
|
220
|
+
</ul>
|
|
221
|
+
{/if}
|
|
222
|
+
|
|
208
223
|
<!-- Footer: navigation buttons (overridable via footer snippet) -->
|
|
209
224
|
{#if footer}
|
|
210
225
|
{@render footer(snap, actions)}
|
|
@@ -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,MAAM,QAAQ,CAAC;AAGpC,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,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;IAEhC,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,OAAO,GAAG,GAAG,CAAC;CAC9B;
|
|
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,MAAM,QAAQ,CAAC;AAGpC,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,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;IAEhC,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,OAAO,GAAG,GAAG,CAAC;CAC9B;AAyNH,QAAA,MAAM,SAAS;mBAlIQ,QAAQ,IAAI,CAAC;MAkImB,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
package/dist/index.css
CHANGED
|
@@ -246,6 +246,9 @@
|
|
|
246
246
|
--pw-color-error: #dc2626;
|
|
247
247
|
--pw-color-error-bg: #fef2f2;
|
|
248
248
|
--pw-color-error-border: #fecaca;
|
|
249
|
+
--pw-color-warning: #d97706;
|
|
250
|
+
--pw-color-warning-bg: #fffbeb;
|
|
251
|
+
--pw-color-warning-border: #fde68a;
|
|
249
252
|
}
|
|
250
253
|
|
|
251
254
|
.pw-shell__validation {
|
|
@@ -282,6 +285,43 @@
|
|
|
282
285
|
content: ":";
|
|
283
286
|
}
|
|
284
287
|
|
|
288
|
+
/* ------------------------------------------------------------------ */
|
|
289
|
+
/* Warning messages */
|
|
290
|
+
/* ------------------------------------------------------------------ */
|
|
291
|
+
.pw-shell__warnings {
|
|
292
|
+
list-style: none;
|
|
293
|
+
margin: 0;
|
|
294
|
+
padding: 12px 16px;
|
|
295
|
+
background: var(--pw-color-warning-bg);
|
|
296
|
+
border: 1px solid var(--pw-color-warning-border);
|
|
297
|
+
border-radius: var(--pw-shell-radius);
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-direction: column;
|
|
300
|
+
gap: 4px;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.pw-shell__warnings-item {
|
|
304
|
+
font-size: 13px;
|
|
305
|
+
color: var(--pw-color-warning);
|
|
306
|
+
padding-left: 16px;
|
|
307
|
+
position: relative;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.pw-shell__warnings-item::before {
|
|
311
|
+
content: "•";
|
|
312
|
+
position: absolute;
|
|
313
|
+
left: 4px;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.pw-shell__warnings-label {
|
|
317
|
+
font-weight: 600;
|
|
318
|
+
margin-right: 3px;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.pw-shell__warnings-label::after {
|
|
322
|
+
content: ":";
|
|
323
|
+
}
|
|
324
|
+
|
|
285
325
|
/* ------------------------------------------------------------------ */
|
|
286
326
|
/* Footer — navigation buttons */
|
|
287
327
|
/* ------------------------------------------------------------------ */
|
package/dist/index.svelte.d.ts
CHANGED
|
@@ -34,6 +34,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
34
34
|
goToStepChecked: (stepId: string) => Promise<void>;
|
|
35
35
|
/** 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
36
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => Promise<void>;
|
|
37
|
+
/** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
|
|
38
|
+
resetStep: () => Promise<void>;
|
|
37
39
|
/**
|
|
38
40
|
* Tear down any active path (without firing hooks) and immediately start the
|
|
39
41
|
* given path fresh. Safe to call whether or not a path is currently active.
|
|
@@ -77,6 +79,7 @@ export interface PathContext<TData extends PathData = PathData> {
|
|
|
77
79
|
goToStep: (stepId: string) => Promise<void>;
|
|
78
80
|
goToStepChecked: (stepId: string) => Promise<void>;
|
|
79
81
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => Promise<void>;
|
|
82
|
+
resetStep: () => Promise<void>;
|
|
80
83
|
restart: () => Promise<void>;
|
|
81
84
|
}
|
|
82
85
|
/**
|
|
@@ -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,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,sFAAsF;IACtF,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;;;;OAIG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,OAAO,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACvD,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CAAC,KAAK,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
|
@@ -54,6 +54,7 @@ export function usePath(options) {
|
|
|
54
54
|
const goToStep = (stepId) => engine.goToStep(stepId);
|
|
55
55
|
const goToStepChecked = (stepId) => engine.goToStepChecked(stepId);
|
|
56
56
|
const setData = ((key, value) => engine.setData(key, value));
|
|
57
|
+
const resetStep = () => engine.resetStep();
|
|
57
58
|
const restart = (path, initialData = {}) => engine.restart(path, initialData);
|
|
58
59
|
return {
|
|
59
60
|
get snapshot() { return _snapshot; },
|
|
@@ -65,6 +66,7 @@ export function usePath(options) {
|
|
|
65
66
|
goToStep,
|
|
66
67
|
goToStepChecked,
|
|
67
68
|
setData,
|
|
69
|
+
resetStep,
|
|
68
70
|
restart
|
|
69
71
|
};
|
|
70
72
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daltonr/pathwrite-svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.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.8.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@sveltejs/package": "^2.5.7",
|
package/src/PathShell.svelte
CHANGED
|
@@ -185,9 +185,13 @@
|
|
|
185
185
|
{/if}
|
|
186
186
|
{/if}
|
|
187
187
|
|
|
188
|
-
<!-- Body: current step rendered via named snippet
|
|
188
|
+
<!-- Body: current step rendered via named snippet.
|
|
189
|
+
Prefer formId (inner step id of a StepChoice) so consumers can
|
|
190
|
+
register snippets by inner step ids directly. -->
|
|
189
191
|
<div class="pw-shell__body">
|
|
190
|
-
{#if stepSnippets[snap.
|
|
192
|
+
{#if snap.formId && stepSnippets[snap.formId]}
|
|
193
|
+
{@render stepSnippets[snap.formId]()}
|
|
194
|
+
{:else if stepSnippets[snap.stepId]}
|
|
191
195
|
{@render stepSnippets[snap.stepId]()}
|
|
192
196
|
{:else}
|
|
193
197
|
<p>No content for step "{snap.stepId}"</p>
|
|
@@ -195,9 +199,9 @@
|
|
|
195
199
|
</div>
|
|
196
200
|
|
|
197
201
|
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
198
|
-
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.
|
|
202
|
+
{#if validationDisplay !== 'inline' && snap.hasAttemptedNext && Object.keys(snap.fieldErrors).length > 0}
|
|
199
203
|
<ul class="pw-shell__validation">
|
|
200
|
-
{#each Object.entries(snap.
|
|
204
|
+
{#each Object.entries(snap.fieldErrors) as [key, msg]}
|
|
201
205
|
<li class="pw-shell__validation-item">
|
|
202
206
|
{#if key !== '_'}<span class="pw-shell__validation-label">{formatFieldKey(key)}</span>{/if}{msg}
|
|
203
207
|
</li>
|
|
@@ -205,6 +209,17 @@
|
|
|
205
209
|
</ul>
|
|
206
210
|
{/if}
|
|
207
211
|
|
|
212
|
+
<!-- Warning messages — non-blocking, shown immediately (no hasAttemptedNext gate) -->
|
|
213
|
+
{#if validationDisplay !== 'inline' && Object.keys(snap.fieldWarnings).length > 0}
|
|
214
|
+
<ul class="pw-shell__warnings">
|
|
215
|
+
{#each Object.entries(snap.fieldWarnings) as [key, msg]}
|
|
216
|
+
<li class="pw-shell__warnings-item">
|
|
217
|
+
{#if key !== '_'}<span class="pw-shell__warnings-label">{formatFieldKey(key)}</span>{/if}{msg}
|
|
218
|
+
</li>
|
|
219
|
+
{/each}
|
|
220
|
+
</ul>
|
|
221
|
+
{/if}
|
|
222
|
+
|
|
208
223
|
<!-- Footer: navigation buttons (overridable via footer snippet) -->
|
|
209
224
|
{#if footer}
|
|
210
225
|
{@render footer(snap, actions)}
|
package/src/index.svelte.ts
CHANGED
|
@@ -62,6 +62,8 @@ export interface UsePathReturn<TData extends PathData = PathData> {
|
|
|
62
62
|
goToStepChecked: (stepId: string) => Promise<void>;
|
|
63
63
|
/** 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. */
|
|
64
64
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => Promise<void>;
|
|
65
|
+
/** Reset the current step's data to what it was when the step was entered. Useful for "Clear" or "Reset" buttons. */
|
|
66
|
+
resetStep: () => Promise<void>;
|
|
65
67
|
/**
|
|
66
68
|
* Tear down any active path (without firing hooks) and immediately start the
|
|
67
69
|
* given path fresh. Safe to call whether or not a path is currently active.
|
|
@@ -143,6 +145,8 @@ export function usePath<TData extends PathData = PathData>(
|
|
|
143
145
|
const setData = (<K extends string & keyof TData>(key: K, value: TData[K]): Promise<void> =>
|
|
144
146
|
engine.setData(key, value as unknown)) as UsePathReturn<TData>["setData"];
|
|
145
147
|
|
|
148
|
+
const resetStep = (): Promise<void> => engine.resetStep();
|
|
149
|
+
|
|
146
150
|
const restart = (path: PathDefinition<any>, initialData: PathData = {}): Promise<void> =>
|
|
147
151
|
engine.restart(path, initialData);
|
|
148
152
|
|
|
@@ -156,6 +160,7 @@ export function usePath<TData extends PathData = PathData>(
|
|
|
156
160
|
goToStep,
|
|
157
161
|
goToStepChecked,
|
|
158
162
|
setData,
|
|
163
|
+
resetStep,
|
|
159
164
|
restart
|
|
160
165
|
};
|
|
161
166
|
}
|
|
@@ -174,6 +179,7 @@ export interface PathContext<TData extends PathData = PathData> {
|
|
|
174
179
|
goToStep: (stepId: string) => Promise<void>;
|
|
175
180
|
goToStepChecked: (stepId: string) => Promise<void>;
|
|
176
181
|
setData: <K extends string & keyof TData>(key: K, value: TData[K]) => Promise<void>;
|
|
182
|
+
resetStep: () => Promise<void>;
|
|
177
183
|
restart: () => Promise<void>;
|
|
178
184
|
}
|
|
179
185
|
|