@daltonr/pathwrite-angular 0.10.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -6
- package/dist/index.css +25 -0
- package/dist/index.d.ts +28 -7
- package/dist/index.js +19 -8
- package/dist/index.js.map +1 -1
- package/dist/shell.d.ts +60 -10
- package/dist/shell.js +245 -132
- package/dist/shell.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +32 -13
- package/src/shell.ts +163 -76
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;
|
|
@@ -122,13 +150,24 @@ export class PathShellComponent {
|
|
|
122
150
|
this.hideCancel = false;
|
|
123
151
|
/** Hide the step progress indicator in the header. Also hidden automatically when the path has only one step. */
|
|
124
152
|
this.hideProgress = false;
|
|
153
|
+
/** Hide the footer (navigation buttons). The error panel is still shown on async failure regardless of this input. */
|
|
154
|
+
this.hideFooter = false;
|
|
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`. */
|
|
156
|
+
this.validateWhen = false;
|
|
157
|
+
/**
|
|
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;
|
|
125
163
|
/**
|
|
126
|
-
*
|
|
164
|
+
* Shell layout mode:
|
|
127
165
|
* - "auto" (default): Uses "form" for single-step top-level paths, "wizard" otherwise.
|
|
128
|
-
* - "wizard": Back button on left, Cancel and Submit together on right.
|
|
129
|
-
* - "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.
|
|
130
169
|
*/
|
|
131
|
-
this.
|
|
170
|
+
this.layout = "auto";
|
|
132
171
|
/**
|
|
133
172
|
* Controls whether the shell renders its auto-generated field-error summary box.
|
|
134
173
|
* - `"summary"` (default): Shell renders the labeled error list below the step body.
|
|
@@ -151,14 +190,16 @@ export class PathShellComponent {
|
|
|
151
190
|
/** The shell's own component-level injector. Passed to ngTemplateOutlet so that
|
|
152
191
|
* step components can resolve PathFacade (provided by this shell) via inject(). */
|
|
153
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 });
|
|
154
195
|
this.started = false;
|
|
155
196
|
/** Navigation actions passed to custom `pwShellFooter` templates. */
|
|
156
197
|
this.shellActions = {
|
|
157
198
|
next: () => this.facade.next(),
|
|
158
199
|
previous: () => this.facade.previous(),
|
|
159
200
|
cancel: () => this.facade.cancel(),
|
|
160
|
-
goToStep: (id) => this.facade.goToStep(id),
|
|
161
|
-
goToStepChecked: (id) => this.facade.goToStepChecked(id),
|
|
201
|
+
goToStep: (id, options) => this.facade.goToStep(id, options),
|
|
202
|
+
goToStepChecked: (id, options) => this.facade.goToStepChecked(id, options),
|
|
162
203
|
setData: (key, value) => this.facade.setData(key, value),
|
|
163
204
|
restart: () => this.facade.restart(),
|
|
164
205
|
retry: () => this.facade.retry(),
|
|
@@ -172,14 +213,24 @@ export class PathShellComponent {
|
|
|
172
213
|
if (changes['engine'] && this.engine) {
|
|
173
214
|
this.facade.adoptEngine(this.engine);
|
|
174
215
|
}
|
|
216
|
+
if (changes['validateWhen'] && this.validateWhen) {
|
|
217
|
+
this.facade.validate();
|
|
218
|
+
}
|
|
219
|
+
if (changes['services']) {
|
|
220
|
+
this.facade.services = this.services;
|
|
221
|
+
}
|
|
175
222
|
}
|
|
176
223
|
ngOnInit() {
|
|
224
|
+
this.facade.services = this.services;
|
|
177
225
|
this.facade.events$.pipe(takeUntil(this.destroy$)).subscribe((event) => {
|
|
178
226
|
this.event.emit(event);
|
|
179
227
|
if (event.type === "completed")
|
|
180
228
|
this.complete.emit(event.data);
|
|
181
229
|
if (event.type === "cancelled")
|
|
182
230
|
this.cancel.emit(event.data);
|
|
231
|
+
if (this.restoreKey && this.outerFacade && event.type === "stateChanged") {
|
|
232
|
+
this.outerFacade.setData(this.restoreKey, event.snapshot);
|
|
233
|
+
}
|
|
183
234
|
});
|
|
184
235
|
if (this.autoStart && !this.engine) {
|
|
185
236
|
this.doStart();
|
|
@@ -193,7 +244,20 @@ export class PathShellComponent {
|
|
|
193
244
|
if (!this.path)
|
|
194
245
|
throw new Error('[pw-shell] [path] is required when no [engine] is provided');
|
|
195
246
|
this.started = true;
|
|
196
|
-
|
|
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
|
+
});
|
|
197
261
|
}
|
|
198
262
|
/**
|
|
199
263
|
* Restart the active path from step 1 with the original `initialData`,
|
|
@@ -215,14 +279,16 @@ export class PathShellComponent {
|
|
|
215
279
|
warningEntries(s) {
|
|
216
280
|
return Object.entries(s.fieldWarnings);
|
|
217
281
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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"
|
|
221
287
|
? (s.stepCount === 1 && s.nestingLevel === 0 ? "form" : "wizard")
|
|
222
|
-
: this.
|
|
288
|
+
: this.layout;
|
|
223
289
|
}
|
|
224
290
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PathShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
-
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",
|
|
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: `
|
|
226
292
|
<!-- Empty state -->
|
|
227
293
|
<div class="pw-shell" *ngIf="!(facade.state$ | async)">
|
|
228
294
|
<div class="pw-shell__empty" *ngIf="!started">
|
|
@@ -234,7 +300,7 @@ export class PathShellComponent {
|
|
|
234
300
|
<!-- Active path -->
|
|
235
301
|
<div class="pw-shell" [ngClass]="progressLayout !== 'merged' ? 'pw-shell--progress-' + progressLayout : ''" *ngIf="facade.state$ | async as s">
|
|
236
302
|
<!-- Root progress — persistent top-level bar visible during sub-paths -->
|
|
237
|
-
<div class="pw-shell__root-progress" *ngIf="!
|
|
303
|
+
<div class="pw-shell__root-progress" *ngIf="!effectiveHideProgress && s.rootProgress && progressLayout !== 'activeOnly'">
|
|
238
304
|
<div class="pw-shell__steps">
|
|
239
305
|
<div
|
|
240
306
|
*ngFor="let step of s.rootProgress!.steps; let i = index"
|
|
@@ -255,7 +321,7 @@ export class PathShellComponent {
|
|
|
255
321
|
<ng-container *ngTemplateOutlet="customHeader.templateRef; context: { $implicit: s }"></ng-container>
|
|
256
322
|
</ng-container>
|
|
257
323
|
<ng-template #defaultHeader>
|
|
258
|
-
<div class="pw-shell__header" *ngIf="!
|
|
324
|
+
<div class="pw-shell__header" *ngIf="!effectiveHideProgress && (s.stepCount > 1 || s.nestingLevel > 0) && progressLayout !== 'rootOnly'">
|
|
259
325
|
<div class="pw-shell__steps">
|
|
260
326
|
<div
|
|
261
327
|
*ngFor="let step of s.steps; let i = index"
|
|
@@ -272,73 +338,91 @@ export class PathShellComponent {
|
|
|
272
338
|
</div>
|
|
273
339
|
</ng-template>
|
|
274
340
|
|
|
275
|
-
<!--
|
|
276
|
-
<
|
|
277
|
-
<ng-container *
|
|
278
|
-
|
|
279
|
-
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
280
|
-
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
281
|
-
</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>
|
|
282
345
|
</ng-container>
|
|
283
|
-
|
|
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>
|
|
284
353
|
|
|
285
|
-
<!--
|
|
286
|
-
<
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
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>
|
|
304
379
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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>
|
|
385
|
+
|
|
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>
|
|
328
410
|
</div>
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
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>
|
|
417
|
+
</ng-container>
|
|
418
|
+
</ng-template>
|
|
335
419
|
</ng-template>
|
|
336
420
|
<ng-template #defaultFooter>
|
|
337
421
|
<div class="pw-shell__footer">
|
|
338
422
|
<div class="pw-shell__footer-left">
|
|
339
423
|
<!-- Form mode: Cancel on the left -->
|
|
340
424
|
<button
|
|
341
|
-
*ngIf="
|
|
425
|
+
*ngIf="getResolvedLayout(s) === 'form' && !hideCancel"
|
|
342
426
|
type="button"
|
|
343
427
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
344
428
|
[disabled]="s.status !== 'idle'"
|
|
@@ -346,7 +430,7 @@ export class PathShellComponent {
|
|
|
346
430
|
>{{ cancelLabel }}</button>
|
|
347
431
|
<!-- Wizard mode: Back on the left -->
|
|
348
432
|
<button
|
|
349
|
-
*ngIf="
|
|
433
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !s.isFirstStep"
|
|
350
434
|
type="button"
|
|
351
435
|
class="pw-shell__btn pw-shell__btn--back"
|
|
352
436
|
[disabled]="s.status !== 'idle' || !s.canMovePrevious"
|
|
@@ -356,7 +440,7 @@ export class PathShellComponent {
|
|
|
356
440
|
<div class="pw-shell__footer-right">
|
|
357
441
|
<!-- Wizard mode: Cancel on the right -->
|
|
358
442
|
<button
|
|
359
|
-
*ngIf="
|
|
443
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !hideCancel"
|
|
360
444
|
type="button"
|
|
361
445
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
362
446
|
[disabled]="s.status !== 'idle'"
|
|
@@ -396,7 +480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
396
480
|
<!-- Active path -->
|
|
397
481
|
<div class="pw-shell" [ngClass]="progressLayout !== 'merged' ? 'pw-shell--progress-' + progressLayout : ''" *ngIf="facade.state$ | async as s">
|
|
398
482
|
<!-- Root progress — persistent top-level bar visible during sub-paths -->
|
|
399
|
-
<div class="pw-shell__root-progress" *ngIf="!
|
|
483
|
+
<div class="pw-shell__root-progress" *ngIf="!effectiveHideProgress && s.rootProgress && progressLayout !== 'activeOnly'">
|
|
400
484
|
<div class="pw-shell__steps">
|
|
401
485
|
<div
|
|
402
486
|
*ngFor="let step of s.rootProgress!.steps; let i = index"
|
|
@@ -417,7 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
417
501
|
<ng-container *ngTemplateOutlet="customHeader.templateRef; context: { $implicit: s }"></ng-container>
|
|
418
502
|
</ng-container>
|
|
419
503
|
<ng-template #defaultHeader>
|
|
420
|
-
<div class="pw-shell__header" *ngIf="!
|
|
504
|
+
<div class="pw-shell__header" *ngIf="!effectiveHideProgress && (s.stepCount > 1 || s.nestingLevel > 0) && progressLayout !== 'rootOnly'">
|
|
421
505
|
<div class="pw-shell__steps">
|
|
422
506
|
<div
|
|
423
507
|
*ngFor="let step of s.steps; let i = index"
|
|
@@ -434,73 +518,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
434
518
|
</div>
|
|
435
519
|
</ng-template>
|
|
436
520
|
|
|
437
|
-
<!--
|
|
438
|
-
<
|
|
439
|
-
<ng-container *
|
|
440
|
-
|
|
441
|
-
<ng-container *ngIf="stepDir.stepId === (s.formId ?? s.stepId)">
|
|
442
|
-
<ng-container *ngTemplateOutlet="stepDir.templateRef; injector: shellInjector"></ng-container>
|
|
443
|
-
</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>
|
|
444
525
|
</ng-container>
|
|
445
|
-
|
|
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>
|
|
533
|
+
|
|
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>
|
|
446
545
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
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>
|
|
453
552
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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>
|
|
460
559
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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>
|
|
466
565
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
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>
|
|
490
590
|
</div>
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
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>
|
|
597
|
+
</ng-container>
|
|
598
|
+
</ng-template>
|
|
497
599
|
</ng-template>
|
|
498
600
|
<ng-template #defaultFooter>
|
|
499
601
|
<div class="pw-shell__footer">
|
|
500
602
|
<div class="pw-shell__footer-left">
|
|
501
603
|
<!-- Form mode: Cancel on the left -->
|
|
502
604
|
<button
|
|
503
|
-
*ngIf="
|
|
605
|
+
*ngIf="getResolvedLayout(s) === 'form' && !hideCancel"
|
|
504
606
|
type="button"
|
|
505
607
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
506
608
|
[disabled]="s.status !== 'idle'"
|
|
@@ -508,7 +610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
508
610
|
>{{ cancelLabel }}</button>
|
|
509
611
|
<!-- Wizard mode: Back on the left -->
|
|
510
612
|
<button
|
|
511
|
-
*ngIf="
|
|
613
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !s.isFirstStep"
|
|
512
614
|
type="button"
|
|
513
615
|
class="pw-shell__btn pw-shell__btn--back"
|
|
514
616
|
[disabled]="s.status !== 'idle' || !s.canMovePrevious"
|
|
@@ -518,7 +620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
518
620
|
<div class="pw-shell__footer-right">
|
|
519
621
|
<!-- Wizard mode: Cancel on the right -->
|
|
520
622
|
<button
|
|
521
|
-
*ngIf="
|
|
623
|
+
*ngIf="getResolvedLayout(s) === 'wizard' && !hideCancel"
|
|
522
624
|
type="button"
|
|
523
625
|
class="pw-shell__btn pw-shell__btn--cancel"
|
|
524
626
|
[disabled]="s.status !== 'idle'"
|
|
@@ -544,6 +646,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
544
646
|
type: Input
|
|
545
647
|
}], initialData: [{
|
|
546
648
|
type: Input
|
|
649
|
+
}], restoreKey: [{
|
|
650
|
+
type: Input
|
|
547
651
|
}], autoStart: [{
|
|
548
652
|
type: Input
|
|
549
653
|
}], backLabel: [{
|
|
@@ -560,7 +664,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
560
664
|
type: Input
|
|
561
665
|
}], hideProgress: [{
|
|
562
666
|
type: Input
|
|
563
|
-
}],
|
|
667
|
+
}], hideFooter: [{
|
|
668
|
+
type: Input
|
|
669
|
+
}], validateWhen: [{
|
|
670
|
+
type: Input
|
|
671
|
+
}], services: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}], layout: [{
|
|
564
674
|
type: Input
|
|
565
675
|
}], validationDisplay: [{
|
|
566
676
|
type: Input
|
|
@@ -581,5 +691,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
581
691
|
}], customFooter: [{
|
|
582
692
|
type: ContentChild,
|
|
583
693
|
args: [PathShellFooterDirective]
|
|
694
|
+
}], customCompletion: [{
|
|
695
|
+
type: ContentChild,
|
|
696
|
+
args: [PathShellCompletionDirective]
|
|
584
697
|
}] } });
|
|
585
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"
|