@daltonr/pathwrite-angular 0.11.0 → 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 +92 -6
- package/dist/index.css +25 -0
- package/dist/index.d.ts +27 -7
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/shell.d.ts +56 -10
- package/dist/shell.js +232 -134
- package/dist/shell.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +28 -13
- package/src/shell.ts +155 -77
package/dist/shell.js
CHANGED
|
@@ -91,6 +91,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
91
91
|
args: [{ selector: "[pwShellFooter]", standalone: true }]
|
|
92
92
|
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
93
93
|
// ---------------------------------------------------------------------------
|
|
94
|
+
// PathShellCompletionDirective
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Replaces the default completion panel inside `<pw-shell>` when
|
|
98
|
+
* `snapshot.status === "completed"` (`completionBehaviour: "stayOnFinal"`).
|
|
99
|
+
* The template receives the current `PathSnapshot` as the implicit context.
|
|
100
|
+
*
|
|
101
|
+
* ```html
|
|
102
|
+
* <pw-shell [path]="myPath">
|
|
103
|
+
* <ng-template pwShellCompletion let-s>
|
|
104
|
+
* <my-completion-screen [data]="s.data" />
|
|
105
|
+
* </ng-template>
|
|
106
|
+
* <ng-template pwStep="details"><app-details-form /></ng-template>
|
|
107
|
+
* </pw-shell>
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export class PathShellCompletionDirective {
|
|
111
|
+
constructor(templateRef) {
|
|
112
|
+
this.templateRef = templateRef;
|
|
113
|
+
}
|
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PathShellCompletionDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
115
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PathShellCompletionDirective, isStandalone: true, selector: "[pwShellCompletion]", ngImport: i0 }); }
|
|
116
|
+
}
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PathShellCompletionDirective, decorators: [{
|
|
118
|
+
type: Directive,
|
|
119
|
+
args: [{ selector: "[pwShellCompletion]", standalone: true }]
|
|
120
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
94
122
|
// PathShellComponent
|
|
95
123
|
// ---------------------------------------------------------------------------
|
|
96
124
|
/**
|
|
@@ -106,7 +134,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
106
134
|
*/
|
|
107
135
|
export class PathShellComponent {
|
|
108
136
|
constructor() {
|
|
109
|
-
/** Initial data merged into the path engine on start. */
|
|
137
|
+
/** Initial data merged into the path engine on start. Used on first visit; overridden by stored snapshot when `restoreKey` is set. */
|
|
110
138
|
this.initialData = {};
|
|
111
139
|
/** Start the path automatically on ngOnInit. Set to false to call doStart() manually. */
|
|
112
140
|
this.autoStart = true;
|
|
@@ -127,12 +155,19 @@ export class PathShellComponent {
|
|
|
127
155
|
/** When true, calls `validate()` on the facade 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`. */
|
|
128
156
|
this.validateWhen = false;
|
|
129
157
|
/**
|
|
130
|
-
*
|
|
158
|
+
* Arbitrary services object made available to all step components via
|
|
159
|
+
* `usePathContext<TData, TServices>().services`. Pass API clients, feature
|
|
160
|
+
* flags, or any shared dependency without prop-drilling through each step.
|
|
161
|
+
*/
|
|
162
|
+
this.services = null;
|
|
163
|
+
/**
|
|
164
|
+
* Shell layout mode:
|
|
131
165
|
* - "auto" (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
132
|
-
* - "wizard": Back button on left, Cancel and Submit together on right.
|
|
133
|
-
* - "form": Cancel on left, Submit alone on right. Back button never shown.
|
|
166
|
+
* - "wizard": Progress header + Back button on left, Cancel and Submit together on right.
|
|
167
|
+
* - "form": Progress header + Cancel on left, Submit alone on right. Back button never shown.
|
|
168
|
+
* - "tabs": No progress header, no footer. Use for tabbed interfaces with a custom tab bar inside the step body.
|
|
134
169
|
*/
|
|
135
|
-
this.
|
|
170
|
+
this.layout = "auto";
|
|
136
171
|
/**
|
|
137
172
|
* Controls whether the shell renders its auto-generated field-error summary box.
|
|
138
173
|
* - `"summary"` (default): Shell renders the labeled error list below the step body.
|
|
@@ -155,14 +190,16 @@ export class PathShellComponent {
|
|
|
155
190
|
/** The shell's own component-level injector. Passed to ngTemplateOutlet so that
|
|
156
191
|
* step components can resolve PathFacade (provided by this shell) via inject(). */
|
|
157
192
|
this.shellInjector = inject(Injector);
|
|
193
|
+
/** Outer shell's PathFacade — present when this shell is nested inside another pw-shell. */
|
|
194
|
+
this.outerFacade = inject(PathFacade, { skipSelf: true, optional: true });
|
|
158
195
|
this.started = false;
|
|
159
196
|
/** Navigation actions passed to custom `pwShellFooter` templates. */
|
|
160
197
|
this.shellActions = {
|
|
161
198
|
next: () => this.facade.next(),
|
|
162
199
|
previous: () => this.facade.previous(),
|
|
163
200
|
cancel: () => this.facade.cancel(),
|
|
164
|
-
goToStep: (id) => this.facade.goToStep(id),
|
|
165
|
-
goToStepChecked: (id) => this.facade.goToStepChecked(id),
|
|
201
|
+
goToStep: (id, options) => this.facade.goToStep(id, options),
|
|
202
|
+
goToStepChecked: (id, options) => this.facade.goToStepChecked(id, options),
|
|
166
203
|
setData: (key, value) => this.facade.setData(key, value),
|
|
167
204
|
restart: () => this.facade.restart(),
|
|
168
205
|
retry: () => this.facade.retry(),
|
|
@@ -179,14 +216,21 @@ export class PathShellComponent {
|
|
|
179
216
|
if (changes['validateWhen'] && this.validateWhen) {
|
|
180
217
|
this.facade.validate();
|
|
181
218
|
}
|
|
219
|
+
if (changes['services']) {
|
|
220
|
+
this.facade.services = this.services;
|
|
221
|
+
}
|
|
182
222
|
}
|
|
183
223
|
ngOnInit() {
|
|
224
|
+
this.facade.services = this.services;
|
|
184
225
|
this.facade.events$.pipe(takeUntil(this.destroy$)).subscribe((event) => {
|
|
185
226
|
this.event.emit(event);
|
|
186
227
|
if (event.type === "completed")
|
|
187
228
|
this.complete.emit(event.data);
|
|
188
229
|
if (event.type === "cancelled")
|
|
189
230
|
this.cancel.emit(event.data);
|
|
231
|
+
if (this.restoreKey && this.outerFacade && event.type === "stateChanged") {
|
|
232
|
+
this.outerFacade.setData(this.restoreKey, event.snapshot);
|
|
233
|
+
}
|
|
190
234
|
});
|
|
191
235
|
if (this.autoStart && !this.engine) {
|
|
192
236
|
this.doStart();
|
|
@@ -200,7 +244,20 @@ export class PathShellComponent {
|
|
|
200
244
|
if (!this.path)
|
|
201
245
|
throw new Error('[pw-shell] [path] is required when no [engine] is provided');
|
|
202
246
|
this.started = true;
|
|
203
|
-
|
|
247
|
+
let startData = this.initialData;
|
|
248
|
+
let restoreStepId;
|
|
249
|
+
if (this.restoreKey && this.outerFacade) {
|
|
250
|
+
const stored = this.outerFacade.snapshot()?.data[this.restoreKey];
|
|
251
|
+
if (stored != null && typeof stored === "object" && "stepId" in stored) {
|
|
252
|
+
startData = stored.data;
|
|
253
|
+
if (stored.stepIndex > 0)
|
|
254
|
+
restoreStepId = stored.stepId;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
this.facade.start(this.path, startData).then(() => {
|
|
258
|
+
if (restoreStepId)
|
|
259
|
+
this.facade.goToStep(restoreStepId);
|
|
260
|
+
});
|
|
204
261
|
}
|
|
205
262
|
/**
|
|
206
263
|
* Restart the active path from step 1 with the original `initialData`,
|
|
@@ -222,14 +279,16 @@ export class PathShellComponent {
|
|
|
222
279
|
warningEntries(s) {
|
|
223
280
|
return Object.entries(s.fieldWarnings);
|
|
224
281
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
282
|
+
get effectiveHideProgress() { return this.hideProgress || this.layout === "tabs"; }
|
|
283
|
+
get effectiveHideFooter() { return this.hideFooter || this.layout === "tabs"; }
|
|
284
|
+
/** Resolves "auto"/"tabs" layout to "wizard" or "form" for footer button arrangement. */
|
|
285
|
+
getResolvedLayout(s) {
|
|
286
|
+
return this.layout === "auto" || this.layout === "tabs"
|
|
228
287
|
? (s.stepCount === 1 && s.nestingLevel === 0 ? "form" : "wizard")
|
|
229
|
-
: this.
|
|
288
|
+
: this.layout;
|
|
230
289
|
}
|
|
231
290
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PathShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
232
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PathShellComponent, isStandalone: true, selector: "pw-shell", inputs: { path: "path", engine: "engine", initialData: "initialData", autoStart: "autoStart", backLabel: "backLabel", nextLabel: "nextLabel", completeLabel: "completeLabel", loadingLabel: "loadingLabel", cancelLabel: "cancelLabel", hideCancel: "hideCancel", hideProgress: "hideProgress", hideFooter: "hideFooter", validateWhen: "validateWhen",
|
|
291
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PathShellComponent, isStandalone: true, selector: "pw-shell", inputs: { path: "path", engine: "engine", initialData: "initialData", restoreKey: "restoreKey", autoStart: "autoStart", backLabel: "backLabel", nextLabel: "nextLabel", completeLabel: "completeLabel", loadingLabel: "loadingLabel", cancelLabel: "cancelLabel", hideCancel: "hideCancel", hideProgress: "hideProgress", hideFooter: "hideFooter", validateWhen: "validateWhen", services: "services", layout: "layout", validationDisplay: "validationDisplay", progressLayout: "progressLayout" }, outputs: { complete: "complete", cancel: "cancel", event: "event" }, providers: [PathFacade], queries: [{ propertyName: "customHeader", first: true, predicate: PathShellHeaderDirective, descendants: true }, { propertyName: "customFooter", first: true, predicate: PathShellFooterDirective, descendants: true }, { propertyName: "customCompletion", first: true, predicate: PathShellCompletionDirective, descendants: true }, { propertyName: "stepDirectives", predicate: PathStepDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
233
292
|
<!-- Empty state -->
|
|
234
293
|
<div class="pw-shell" *ngIf="!(facade.state$ | async)">
|
|
235
294
|
<div class="pw-shell__empty" *ngIf="!started">
|
|
@@ -241,7 +300,7 @@ export class PathShellComponent {
|
|
|
241
300
|
<!-- Active path -->
|
|
242
301
|
<div class="pw-shell" [ngClass]="progressLayout !== 'merged' ? 'pw-shell--progress-' + progressLayout : ''" *ngIf="facade.state$ | async as s">
|
|
243
302
|
<!-- Root progress — persistent top-level bar visible during sub-paths -->
|
|
244
|
-
<div class="pw-shell__root-progress" *ngIf="!
|
|
303
|
+
<div class="pw-shell__root-progress" *ngIf="!effectiveHideProgress && s.rootProgress && progressLayout !== 'activeOnly'">
|
|
245
304
|
<div class="pw-shell__steps">
|
|
246
305
|
<div
|
|
247
306
|
*ngFor="let step of s.rootProgress!.steps; let i = index"
|
|
@@ -262,7 +321,7 @@ export class PathShellComponent {
|
|
|
262
321
|
<ng-container *ngTemplateOutlet="customHeader.templateRef; context: { $implicit: s }"></ng-container>
|
|
263
322
|
</ng-container>
|
|
264
323
|
<ng-template #defaultHeader>
|
|
265
|
-
<div class="pw-shell__header" *ngIf="!
|
|
324
|
+
<div class="pw-shell__header" *ngIf="!effectiveHideProgress && (s.stepCount > 1 || s.nestingLevel > 0) && progressLayout !== 'rootOnly'">
|
|
266
325
|
<div class="pw-shell__steps">
|
|
267
326
|
<div
|
|
268
327
|
*ngFor="let step of s.steps; let i = index"
|
|
@@ -279,75 +338,91 @@ export class PathShellComponent {
|
|
|
279
338
|
</div>
|
|
280
339
|
</ng-template>
|
|
281
340
|
|
|
282
|
-
<!--
|
|
283
|
-
<
|
|
284
|
-
<ng-container *
|
|
285
|
-
|
|
286
|
-
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
287
|
-
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
288
|
-
</ng-container>
|
|
341
|
+
<!-- Completion panel — shown when path finishes with stayOnFinal -->
|
|
342
|
+
<ng-container *ngIf="s.status === 'completed'; else activeContent">
|
|
343
|
+
<ng-container *ngIf="customCompletion; else defaultCompletion">
|
|
344
|
+
<ng-container *ngTemplateOutlet="customCompletion.templateRef; context: { $implicit: s }"></ng-container>
|
|
289
345
|
</ng-container>
|
|
290
|
-
|
|
346
|
+
<ng-template #defaultCompletion>
|
|
347
|
+
<div class="pw-shell__completion">
|
|
348
|
+
<p class="pw-shell__completion-message">All done.</p>
|
|
349
|
+
<button type="button" class="pw-shell__completion-restart" (click)="facade.restart()">Start over</button>
|
|
350
|
+
</div>
|
|
351
|
+
</ng-template>
|
|
352
|
+
</ng-container>
|
|
353
|
+
|
|
354
|
+
<!-- Active step content -->
|
|
355
|
+
<ng-template #activeContent>
|
|
356
|
+
<!-- Body — step content -->
|
|
357
|
+
<div class="pw-shell__body">
|
|
358
|
+
<ng-container *ngFor="let stepDir of stepDirectives">
|
|
359
|
+
<!-- Match by formId first (inner step of a StepChoice), then stepId -->
|
|
360
|
+
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
361
|
+
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
362
|
+
</ng-container>
|
|
363
|
+
</ng-container>
|
|
364
|
+
</div>
|
|
291
365
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
366
|
+
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
367
|
+
<ul class="pw-shell__validation" *ngIf="validationDisplay !== 'inline' && (s.hasAttemptedNext || s.hasValidated) && fieldEntries(s).length > 0">
|
|
368
|
+
<li *ngFor="let entry of fieldEntries(s)" class="pw-shell__validation-item">
|
|
369
|
+
<span *ngIf="entry[0] !== '_'" class="pw-shell__validation-label">{{ formatFieldKey(entry[0]) }}</span>{{ entry[1] }}
|
|
370
|
+
</li>
|
|
371
|
+
</ul>
|
|
298
372
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
373
|
+
<!-- Warning messages — non-blocking, shown immediately (no hasAttemptedNext gate) -->
|
|
374
|
+
<ul class="pw-shell__warnings" *ngIf="validationDisplay !== 'inline' && warningEntries(s).length > 0">
|
|
375
|
+
<li *ngFor="let entry of warningEntries(s)" class="pw-shell__warnings-item">
|
|
376
|
+
<span *ngIf="entry[0] !== '_'" class="pw-shell__warnings-label">{{ formatFieldKey(entry[0]) }}</span>{{ entry[1] }}
|
|
377
|
+
</li>
|
|
378
|
+
</ul>
|
|
305
379
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
380
|
+
<!-- Blocking error — guard returned { allowed: false, reason } -->
|
|
381
|
+
<p class="pw-shell__blocking-error"
|
|
382
|
+
*ngIf="validationDisplay !== 'inline' && (s.hasAttemptedNext || s.hasValidated) && s.blockingError">
|
|
383
|
+
{{ s.blockingError }}
|
|
384
|
+
</p>
|
|
311
385
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
386
|
+
<!-- Error panel — replaces footer when an async operation has failed -->
|
|
387
|
+
<div class="pw-shell__error" *ngIf="s.status === 'error' && s.error; else footerOrCustom">
|
|
388
|
+
<div class="pw-shell__error-title">{{ s.error!.retryCount >= 2 ? 'Still having trouble.' : 'Something went wrong.' }}</div>
|
|
389
|
+
<div class="pw-shell__error-message">{{ errorPhaseMessage(s.error!.phase) }}{{ s.error!.message ? ' ' + s.error!.message : '' }}</div>
|
|
390
|
+
<div class="pw-shell__error-actions">
|
|
391
|
+
<button
|
|
392
|
+
*ngIf="s.error!.retryCount < 2"
|
|
393
|
+
type="button"
|
|
394
|
+
class="pw-shell__btn pw-shell__btn--retry"
|
|
395
|
+
(click)="facade.retry()"
|
|
396
|
+
>Try again</button>
|
|
397
|
+
<button
|
|
398
|
+
*ngIf="s.hasPersistence"
|
|
399
|
+
type="button"
|
|
400
|
+
[class]="'pw-shell__btn ' + (s.error!.retryCount >= 2 ? 'pw-shell__btn--retry' : 'pw-shell__btn--suspend')"
|
|
401
|
+
(click)="facade.suspend()"
|
|
402
|
+
>Save and come back later</button>
|
|
403
|
+
<button
|
|
404
|
+
*ngIf="s.error!.retryCount >= 2 && !s.hasPersistence"
|
|
405
|
+
type="button"
|
|
406
|
+
class="pw-shell__btn pw-shell__btn--retry"
|
|
407
|
+
(click)="facade.retry()"
|
|
408
|
+
>Try again</button>
|
|
409
|
+
</div>
|
|
335
410
|
</div>
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
411
|
+
<!-- Footer — custom or default navigation buttons -->
|
|
412
|
+
<ng-template #footerOrCustom>
|
|
413
|
+
<ng-container *ngIf="!effectiveHideFooter">
|
|
414
|
+
<ng-container *ngIf="customFooter; else defaultFooter">
|
|
415
|
+
<ng-container *ngTemplateOutlet="customFooter.templateRef; context: { $implicit: s, actions: shellActions }"></ng-container>
|
|
416
|
+
</ng-container>
|
|
342
417
|
</ng-container>
|
|
343
|
-
</ng-
|
|
418
|
+
</ng-template>
|
|
344
419
|
</ng-template>
|
|
345
420
|
<ng-template #defaultFooter>
|
|
346
421
|
<div class="pw-shell__footer">
|
|
347
422
|
<div class="pw-shell__footer-left">
|
|
348
423
|
<!-- Form mode: Cancel on the left -->
|
|
349
424
|
<button
|
|
350
|
-
*ngIf="
|
|
425
|
+
*ngIf="getResolvedLayout(s) === 'form' && !hideCancel"
|
|
351
426
|
type="button"
|
|
352
427
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
353
428
|
[disabled]="s.status !== 'idle'"
|
|
@@ -355,7 +430,7 @@ export class PathShellComponent {
|
|
|
355
430
|
>{{ cancelLabel }}</button>
|
|
356
431
|
<!-- Wizard mode: Back on the left -->
|
|
357
432
|
<button
|
|
358
|
-
*ngIf="
|
|
433
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !s.isFirstStep"
|
|
359
434
|
type="button"
|
|
360
435
|
class="pw-shell__btn pw-shell__btn--back"
|
|
361
436
|
[disabled]="s.status !== 'idle' || !s.canMovePrevious"
|
|
@@ -365,7 +440,7 @@ export class PathShellComponent {
|
|
|
365
440
|
<div class="pw-shell__footer-right">
|
|
366
441
|
<!-- Wizard mode: Cancel on the right -->
|
|
367
442
|
<button
|
|
368
|
-
*ngIf="
|
|
443
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !hideCancel"
|
|
369
444
|
type="button"
|
|
370
445
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
371
446
|
[disabled]="s.status !== 'idle'"
|
|
@@ -405,7 +480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
405
480
|
<!-- Active path -->
|
|
406
481
|
<div class="pw-shell" [ngClass]="progressLayout !== 'merged' ? 'pw-shell--progress-' + progressLayout : ''" *ngIf="facade.state$ | async as s">
|
|
407
482
|
<!-- Root progress — persistent top-level bar visible during sub-paths -->
|
|
408
|
-
<div class="pw-shell__root-progress" *ngIf="!
|
|
483
|
+
<div class="pw-shell__root-progress" *ngIf="!effectiveHideProgress && s.rootProgress && progressLayout !== 'activeOnly'">
|
|
409
484
|
<div class="pw-shell__steps">
|
|
410
485
|
<div
|
|
411
486
|
*ngFor="let step of s.rootProgress!.steps; let i = index"
|
|
@@ -426,7 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
426
501
|
<ng-container *ngTemplateOutlet="customHeader.templateRef; context: { $implicit: s }"></ng-container>
|
|
427
502
|
</ng-container>
|
|
428
503
|
<ng-template #defaultHeader>
|
|
429
|
-
<div class="pw-shell__header" *ngIf="!
|
|
504
|
+
<div class="pw-shell__header" *ngIf="!effectiveHideProgress && (s.stepCount > 1 || s.nestingLevel > 0) && progressLayout !== 'rootOnly'">
|
|
430
505
|
<div class="pw-shell__steps">
|
|
431
506
|
<div
|
|
432
507
|
*ngFor="let step of s.steps; let i = index"
|
|
@@ -443,75 +518,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
443
518
|
</div>
|
|
444
519
|
</ng-template>
|
|
445
520
|
|
|
446
|
-
<!--
|
|
447
|
-
<
|
|
448
|
-
<ng-container *
|
|
449
|
-
|
|
450
|
-
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
451
|
-
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
452
|
-
</ng-container>
|
|
521
|
+
<!-- Completion panel — shown when path finishes with stayOnFinal -->
|
|
522
|
+
<ng-container *ngIf="s.status === 'completed'; else activeContent">
|
|
523
|
+
<ng-container *ngIf="customCompletion; else defaultCompletion">
|
|
524
|
+
<ng-container *ngTemplateOutlet="customCompletion.templateRef; context: { $implicit: s }"></ng-container>
|
|
453
525
|
</ng-container>
|
|
454
|
-
|
|
526
|
+
<ng-template #defaultCompletion>
|
|
527
|
+
<div class="pw-shell__completion">
|
|
528
|
+
<p class="pw-shell__completion-message">All done.</p>
|
|
529
|
+
<button type="button" class="pw-shell__completion-restart" (click)="facade.restart()">Start over</button>
|
|
530
|
+
</div>
|
|
531
|
+
</ng-template>
|
|
532
|
+
</ng-container>
|
|
455
533
|
|
|
456
|
-
<!--
|
|
457
|
-
<
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
534
|
+
<!-- Active step content -->
|
|
535
|
+
<ng-template #activeContent>
|
|
536
|
+
<!-- Body — step content -->
|
|
537
|
+
<div class="pw-shell__body">
|
|
538
|
+
<ng-container *ngFor="let stepDir of stepDirectives">
|
|
539
|
+
<!-- Match by formId first (inner step of a StepChoice), then stepId -->
|
|
540
|
+
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
541
|
+
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
542
|
+
</ng-container>
|
|
543
|
+
</ng-container>
|
|
544
|
+
</div>
|
|
545
|
+
|
|
546
|
+
<!-- Validation messages — suppressed when validationDisplay="inline" -->
|
|
547
|
+
<ul class="pw-shell__validation" *ngIf="validationDisplay !== 'inline' && (s.hasAttemptedNext || s.hasValidated) && fieldEntries(s).length > 0">
|
|
548
|
+
<li *ngFor="let entry of fieldEntries(s)" class="pw-shell__validation-item">
|
|
549
|
+
<span *ngIf="entry[0] !== '_'" class="pw-shell__validation-label">{{ formatFieldKey(entry[0]) }}</span>{{ entry[1] }}
|
|
550
|
+
</li>
|
|
551
|
+
</ul>
|
|
462
552
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
553
|
+
<!-- Warning messages — non-blocking, shown immediately (no hasAttemptedNext gate) -->
|
|
554
|
+
<ul class="pw-shell__warnings" *ngIf="validationDisplay !== 'inline' && warningEntries(s).length > 0">
|
|
555
|
+
<li *ngFor="let entry of warningEntries(s)" class="pw-shell__warnings-item">
|
|
556
|
+
<span *ngIf="entry[0] !== '_'" class="pw-shell__warnings-label">{{ formatFieldKey(entry[0]) }}</span>{{ entry[1] }}
|
|
557
|
+
</li>
|
|
558
|
+
</ul>
|
|
469
559
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
560
|
+
<!-- Blocking error — guard returned { allowed: false, reason } -->
|
|
561
|
+
<p class="pw-shell__blocking-error"
|
|
562
|
+
*ngIf="validationDisplay !== 'inline' && (s.hasAttemptedNext || s.hasValidated) && s.blockingError">
|
|
563
|
+
{{ s.blockingError }}
|
|
564
|
+
</p>
|
|
475
565
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
566
|
+
<!-- Error panel — replaces footer when an async operation has failed -->
|
|
567
|
+
<div class="pw-shell__error" *ngIf="s.status === 'error' && s.error; else footerOrCustom">
|
|
568
|
+
<div class="pw-shell__error-title">{{ s.error!.retryCount >= 2 ? 'Still having trouble.' : 'Something went wrong.' }}</div>
|
|
569
|
+
<div class="pw-shell__error-message">{{ errorPhaseMessage(s.error!.phase) }}{{ s.error!.message ? ' ' + s.error!.message : '' }}</div>
|
|
570
|
+
<div class="pw-shell__error-actions">
|
|
571
|
+
<button
|
|
572
|
+
*ngIf="s.error!.retryCount < 2"
|
|
573
|
+
type="button"
|
|
574
|
+
class="pw-shell__btn pw-shell__btn--retry"
|
|
575
|
+
(click)="facade.retry()"
|
|
576
|
+
>Try again</button>
|
|
577
|
+
<button
|
|
578
|
+
*ngIf="s.hasPersistence"
|
|
579
|
+
type="button"
|
|
580
|
+
[class]="'pw-shell__btn ' + (s.error!.retryCount >= 2 ? 'pw-shell__btn--retry' : 'pw-shell__btn--suspend')"
|
|
581
|
+
(click)="facade.suspend()"
|
|
582
|
+
>Save and come back later</button>
|
|
583
|
+
<button
|
|
584
|
+
*ngIf="s.error!.retryCount >= 2 && !s.hasPersistence"
|
|
585
|
+
type="button"
|
|
586
|
+
class="pw-shell__btn pw-shell__btn--retry"
|
|
587
|
+
(click)="facade.retry()"
|
|
588
|
+
>Try again</button>
|
|
589
|
+
</div>
|
|
499
590
|
</div>
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
591
|
+
<!-- Footer — custom or default navigation buttons -->
|
|
592
|
+
<ng-template #footerOrCustom>
|
|
593
|
+
<ng-container *ngIf="!effectiveHideFooter">
|
|
594
|
+
<ng-container *ngIf="customFooter; else defaultFooter">
|
|
595
|
+
<ng-container *ngTemplateOutlet="customFooter.templateRef; context: { $implicit: s, actions: shellActions }"></ng-container>
|
|
596
|
+
</ng-container>
|
|
506
597
|
</ng-container>
|
|
507
|
-
</ng-
|
|
598
|
+
</ng-template>
|
|
508
599
|
</ng-template>
|
|
509
600
|
<ng-template #defaultFooter>
|
|
510
601
|
<div class="pw-shell__footer">
|
|
511
602
|
<div class="pw-shell__footer-left">
|
|
512
603
|
<!-- Form mode: Cancel on the left -->
|
|
513
604
|
<button
|
|
514
|
-
*ngIf="
|
|
605
|
+
*ngIf="getResolvedLayout(s) === 'form' && !hideCancel"
|
|
515
606
|
type="button"
|
|
516
607
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
517
608
|
[disabled]="s.status !== 'idle'"
|
|
@@ -519,7 +610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
519
610
|
>{{ cancelLabel }}</button>
|
|
520
611
|
<!-- Wizard mode: Back on the left -->
|
|
521
612
|
<button
|
|
522
|
-
*ngIf="
|
|
613
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !s.isFirstStep"
|
|
523
614
|
type="button"
|
|
524
615
|
class="pw-shell__btn pw-shell__btn--back"
|
|
525
616
|
[disabled]="s.status !== 'idle' || !s.canMovePrevious"
|
|
@@ -529,7 +620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
529
620
|
<div class="pw-shell__footer-right">
|
|
530
621
|
<!-- Wizard mode: Cancel on the right -->
|
|
531
622
|
<button
|
|
532
|
-
*ngIf="
|
|
623
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !hideCancel"
|
|
533
624
|
type="button"
|
|
534
625
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
535
626
|
[disabled]="s.status !== 'idle'"
|
|
@@ -555,6 +646,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
555
646
|
type: Input
|
|
556
647
|
}], initialData: [{
|
|
557
648
|
type: Input
|
|
649
|
+
}], restoreKey: [{
|
|
650
|
+
type: Input
|
|
558
651
|
}], autoStart: [{
|
|
559
652
|
type: Input
|
|
560
653
|
}], backLabel: [{
|
|
@@ -575,7 +668,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
575
668
|
type: Input
|
|
576
669
|
}], validateWhen: [{
|
|
577
670
|
type: Input
|
|
578
|
-
}],
|
|
671
|
+
}], services: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}], layout: [{
|
|
579
674
|
type: Input
|
|
580
675
|
}], validationDisplay: [{
|
|
581
676
|
type: Input
|
|
@@ -596,5 +691,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
596
691
|
}], customFooter: [{
|
|
597
692
|
type: ContentChild,
|
|
598
693
|
args: [PathShellFooterDirective]
|
|
694
|
+
}], customCompletion: [{
|
|
695
|
+
type: ContentChild,
|
|
696
|
+
args: [PathShellCompletionDirective]
|
|
599
697
|
}] } });
|
|
600
698
|
//# sourceMappingURL=shell.js.map
|
package/dist/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EAET,KAAK,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EAMf,MAAM,EACN,QAAQ,EACR,uBAAuB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAQL,cAAc,EACd,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;;;AA0BrC,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,iBAAiB;IAE5B,YAAmC,WAAiC;QAAjC,gBAAW,GAAX,WAAW,CAAsB;IAAG,CAAC;+GAF7D,iBAAiB;mGAAjB,iBAAiB;;4FAAjB,iBAAiB;kBAD7B,SAAS;mBAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE;gFAEP,MAAM;sBAAjD,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;;AAI5C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AAEH,MAAM,OAAO,wBAAwB;IACnC,YACkB,WAAqD;QAArD,gBAAW,GAAX,WAAW,CAA0C;IACpE,CAAC;+GAHO,wBAAwB;mGAAxB,wBAAwB;;4FAAxB,wBAAwB;kBADpC,SAAS;mBAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAO5D,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AAEH,MAAM,OAAO,wBAAwB;IACnC,YACkB,WAAgF;QAAhF,gBAAW,GAAX,WAAW,CAAqE;IAC/F,CAAC;+GAHO,wBAAwB;mGAAxB,wBAAwB;;4FAAxB,wBAAwB;kBADpC,SAAS;mBAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE;;AAO5D,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daltonr/pathwrite-angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Angular adapter for @daltonr/pathwrite-core — RxJS observables, signal-friendly, with optional <pw-shell> default UI.",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@angular/compiler-cli": "^17.3.12"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@daltonr/pathwrite-core": "^0.
|
|
64
|
+
"@daltonr/pathwrite-core": "^0.12.0"
|
|
65
65
|
},
|
|
66
66
|
"publishConfig": {
|
|
67
67
|
"access": "public"
|